Changeset cefff4d955ce997b4aab97a3d87a867091ca7521
- Timestamp:
- 04/09/10 17:29:01 (2 years ago)
- Author:
- Philip Herron <redbrain@…>
- Parents:
- a6c888b20a503ddf30bb1cfdf422c579066a4d14
- Children:
- 90547e447318d72714752d57b6569764d87beb86
- git-committer:
- Philip Herron <redbrain@omicron.(none)> / 2010-04-09T17:29:01Z+0100
- Message:
-
free hash tables bug fix causing garbage stack corruption on cleanup
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r4a79f8f
|
rcefff4d
|
|
| 10 | 10 | gitcl2gnucl |
| 11 | 11 | |
| 12 | | .PHONY: test |
| | 12 | .PHONY: test check-syntax |
| 13 | 13 | |
| 14 | 14 | test: test-crules |
| … |
… |
|
| 18 | 18 | $(MAKE) $(AM_MAKEFLAGS) test |
| 19 | 19 | |
| | 20 | check-syntax: all |
| | 21 | |
| 20 | 22 | doxygen: |
| 21 | 23 | doxygen Doxyfile |
-
|
r0483e51
|
rcefff4d
|
|
| 50 | 50 | crldot_CFLAGS = -DSYM_DOT |
| 51 | 51 | crldot_SOURCES = mm_crldot.c |
| | 52 | |
| | 53 | .PHONY: check-syntax |
| | 54 | |
| | 55 | check-syntax: all |
-
|
ra3cbddc
|
rcefff4d
|
|
| 263 | 263 | crl_symbol_obj *sym= array[i].symbol; |
| 264 | 264 | if( sym ) |
| 265 | | crl_garbage_mark_obj( &sym ); |
| | 265 | crl_garbage_free_obj( &sym ); |
| 266 | 266 | } |
| 267 | 267 | crl_free( (*table)->array ); |
-
|
r04f48fc
|
rcefff4d
|
|
| 1179 | 1179 | } |
| 1180 | 1180 | } |
| | 1181 | else if( sym->type == OP_BIN_ACCESSOR ) |
| | 1182 | { |
| | 1183 | crl_debug("object accessor dispatch!\n"); |
| | 1184 | |
| | 1185 | } |
| 1181 | 1186 | else |
| 1182 | 1187 | { |
| … |
… |
|
| 1531 | 1536 | switch( sym->type ) |
| 1532 | 1537 | { |
| 1533 | | case BUILTIN_CALL: |
| 1534 | | ex= crl_builtin_dispatch( sym, context ); |
| 1535 | | if( ex ) |
| 1536 | | { |
| 1537 | | if( ex->op_a_t == TYPE_SYMBOL_NIL ) |
| 1538 | | { |
| 1539 | | crl_free(ex); |
| 1540 | | } |
| 1541 | | else |
| 1542 | | { |
| 1543 | | // garbage symbol now! |
| 1544 | | crl_garbage_mark_obj( &ex ); |
| 1545 | | } |
| 1546 | | } |
| 1547 | | else { retval= false; } |
| 1548 | | break; |
| 1549 | | |
| 1550 | 1538 | case OP_CALL_GOTO: |
| 1551 | 1539 | ex= crl_runtime_call_dispatch( sym, context ); |
| … |
… |
|
| 1635 | 1623 | switch( sym->type ) |
| 1636 | 1624 | { |
| 1637 | | case BUILTIN_CALL: |
| 1638 | | ex= crl_builtin_dispatch( sym, context ); |
| 1639 | | if( ex ) |
| 1640 | | { |
| 1641 | | if( ex->op_a_t == TYPE_SYMBOL_NIL ) |
| 1642 | | { |
| 1643 | | crl_free(ex); |
| 1644 | | } |
| 1645 | | else |
| 1646 | | { |
| 1647 | | if( crl_interactive ) |
| 1648 | | crl_runtime_object_print( ex, context, crlout, true ); |
| 1649 | | // garbage symbol now! |
| 1650 | | crl_garbage_mark_obj( &ex ); |
| 1651 | | } |
| 1652 | | } |
| 1653 | | else { retval= false; } |
| 1654 | | break; |
| 1655 | | |
| 1656 | 1625 | case OP_CALL_GOTO: |
| 1657 | 1626 | ex= crl_runtime_call_dispatch( sym, context ); |
| … |
… |
|
| 1703 | 1672 | break; |
| 1704 | 1673 | |
| | 1674 | case OP_BIN_ACCESSOR: |
| | 1675 | ex = crl_runtime_evaluate_expression( sym, context ); |
| | 1676 | if( ex ) |
| | 1677 | { |
| | 1678 | if( ex->op_a_t == TYPE_SYMBOL_NIL ) |
| | 1679 | { |
| | 1680 | crl_free( ex ); |
| | 1681 | } |
| | 1682 | else |
| | 1683 | { |
| | 1684 | if( crl_interactive ) |
| | 1685 | crl_runtime_object_print( ex, context, crlout, true ); |
| | 1686 | // garbage symbol now! |
| | 1687 | crl_garbage_mark_obj( &ex ); |
| | 1688 | } |
| | 1689 | } |
| | 1690 | break; |
| | 1691 | |
| 1705 | 1692 | default: |
| 1706 | 1693 | crl_error("unhandled symbol type '0x%X'\n", sym->type ); |
-
|
ra6c888b
|
rcefff4d
|
|
| 905 | 905 | { |
| 906 | 906 | crl_symbol_obj *sym; |
| 907 | | crl_symbol_init( sym ); |
| 908 | | |
| 909 | | sym->type= BUILTIN_CALL; |
| 910 | | sym->op_a_t= TYPE_STRING; |
| 911 | | sym->op_a.string= crl_strdup("print"); |
| 912 | | |
| 913 | | sym->op_b_t= TYPE_ARGUMENTS; |
| 914 | | sym->op_b.stack_table= $2; |
| 915 | | $$= sym; |
| | 907 | crl_symbol_init( sym ); |
| | 908 | |
| | 909 | sym->type= OP_CALL_GOTO; |
| | 910 | sym->op_a_t= TYPE_STRING; |
| | 911 | sym->op_b_t= TYPE_ARGUMENTS; |
| | 912 | |
| | 913 | sym->op_a.string= crl_strdup( "print" ); |
| | 914 | sym->op_b.stack_table= $2; |
| | 915 | |
| | 916 | crl_symbol_obj *acc; |
| | 917 | crl_symbol_init( acc ); |
| | 918 | acc->type = SYMBOL_REFERENCE; |
| | 919 | acc->op_a_t = TYPE_STRING; |
| | 920 | acc->op_a.string = crl_strdup( "__builtin__" ); |
| | 921 | |
| | 922 | crl_symbol_obj *print_call; |
| | 923 | crl_symbol_init( print_call ); |
| | 924 | |
| | 925 | print_call->type = OP_BIN_ACCESSOR; |
| | 926 | print_call->op_a_t = TYPE_SYMBOL; |
| | 927 | print_call->op_b_t = TYPE_SYMBOL; |
| | 928 | print_call->op_a.symbol_table = acc; |
| | 929 | print_call->op_b.symbol_table = sym; |
| | 930 | |
| | 931 | $$ = print_call; |
| 916 | 932 | } |
| 917 | 933 | ; |