Changeset cefff4d955ce997b4aab97a3d87a867091ca7521

Show
Ignore:
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:
5 modified

Legend:

Unmodified
Added
Removed
  • Makefile.am

    r4a79f8f rcefff4d  
    1010        gitcl2gnucl 
    1111 
    12 .PHONY: test 
     12.PHONY: test check-syntax 
    1313 
    1414test: test-crules 
     
    1818        $(MAKE) $(AM_MAKEFLAGS) test 
    1919 
     20check-syntax: all 
     21 
    2022doxygen: 
    2123        doxygen Doxyfile 
  • src/Makefile.am

    r0483e51 rcefff4d  
    5050crldot_CFLAGS = -DSYM_DOT 
    5151crldot_SOURCES = mm_crldot.c 
     52 
     53.PHONY: check-syntax 
     54 
     55check-syntax: all 
  • src/gg_garbage.c

    ra3cbddc rcefff4d  
    263263              crl_symbol_obj *sym= array[i].symbol; 
    264264              if( sym ) 
    265                 crl_garbage_mark_obj( &sym ); 
     265                crl_garbage_free_obj( &sym ); 
    266266            } 
    267267          crl_free( (*table)->array ); 
  • src/rr_runtime.c

    r04f48fc rcefff4d  
    11791179        } 
    11801180    } 
     1181  else if( sym->type == OP_BIN_ACCESSOR ) 
     1182    { 
     1183      crl_debug("object accessor dispatch!\n"); 
     1184       
     1185    } 
    11811186  else 
    11821187    { 
     
    15311536          switch( sym->type ) 
    15321537            { 
    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  
    15501538            case OP_CALL_GOTO: 
    15511539              ex= crl_runtime_call_dispatch( sym, context ); 
     
    16351623          switch( sym->type ) 
    16361624            { 
    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  
    16561625            case OP_CALL_GOTO: 
    16571626              ex= crl_runtime_call_dispatch( sym, context ); 
     
    17031672              break; 
    17041673 
     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 
    17051692            default: 
    17061693              crl_error("unhandled symbol type '0x%X'\n", sym->type ); 
  • src/ss_parser.y

    ra6c888b rcefff4d  
    905905        { 
    906906          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; 
    916932        } 
    917933        ;