Ignore:
Timestamp:
Apr 17, 2011, 10:28:12 AM (7 years ago)
Author:
Sam Hocevar
Message:

lisp: make all lisp object inherit a common type.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • abuse/trunk/src/lisp/lisp_gc.cpp

    r481 r482  
    8686static void *collect_array(void *x)
    8787{
    88   long s = ((lisp_1d_array *)x)->size;
    89   lisp_1d_array *a = new_lisp_1d_array(s, NULL);
     88  long s = ((LispArray *)x)->size;
     89  LispArray *a = new_lisp_1d_array(s, NULL);
    9090  void **src, **dst;
    91   src = (void **)(((lisp_1d_array *)x)+1);
     91  src = (void **)(((LispArray *)x)+1);
    9292  dst = (void **)(a+1);
    9393  for (int i = 0; i<s; i++)
     
    9999inline void *collect_cons_cell(void *x)
    100100{
    101   cons_cell *last = NULL, *first = NULL;
     101  LispList *last = NULL, *first = NULL;
    102102  if (!x) return x;
    103103  for (; x && item_type(x) == L_CONS_CELL; )
    104104  {
    105     cons_cell *p = new_cons_cell();
    106     void *old_car = ((cons_cell *)x)->car;
    107     void *old_cdr = ((cons_cell *)x)->cdr;
     105    LispList *p = new_cons_cell();
     106    void *old_car = ((LispList *)x)->car;
     107    void *old_cdr = ((LispList *)x)->cdr;
    108108    void *old_x = x;
    109109    x = CDR(x);
    110     ((lisp_collected_object *)old_x)->type = L_COLLECTED_OBJECT;
    111     ((lisp_collected_object *)old_x)->new_reference = p;
     110    ((LispRedirect *)old_x)->type = L_COLLECTED_OBJECT;
     111    ((LispRedirect *)old_x)->new_reference = p;
    112112
    113113    p->car = collect_object(old_car);
     
    136136        break;
    137137      case L_NUMBER:
    138         ret = new_lisp_number(((lisp_number *)x)->num);
     138        ret = new_lisp_number(((LispNumber *)x)->num);
    139139        break;
    140140      case L_SYS_FUNCTION:
    141         ret = new_lisp_sys_function(((lisp_sys_function *)x)->min_args,
    142                                     ((lisp_sys_function *)x)->max_args,
    143                                     ((lisp_sys_function *)x)->fun_number);
     141        ret = new_lisp_sys_function(((LispSysFunction *)x)->min_args,
     142                                    ((LispSysFunction *)x)->max_args,
     143                                    ((LispSysFunction *)x)->fun_number);
    144144        break;
    145145      case L_USER_FUNCTION:
    146146#ifndef NO_LIBS
    147         ret = new_lisp_user_function(((lisp_user_function *)x)->alist,
    148                                      ((lisp_user_function *)x)->blist);
     147        ret = new_lisp_user_function(((LispUserFunction *)x)->alist,
     148                                     ((LispUserFunction *)x)->blist);
    149149
    150150#else
    151151        {
    152           void *arg = collect_object(((lisp_user_function *)x)->arg_list);
    153           void *block = collect_object(((lisp_user_function *)x)->block_list);
     152          void *arg = collect_object(((LispUserFunction *)x)->arg_list);
     153          void *block = collect_object(((LispUserFunction *)x)->block_list);
    154154          ret = new_lisp_user_function(arg, block);
    155155        }
     
    163163        break;
    164164      case L_C_FUNCTION:
    165         ret = new_lisp_c_function(((lisp_sys_function *)x)->min_args,
    166                                   ((lisp_sys_function *)x)->max_args,
    167                                   ((lisp_sys_function *)x)->fun_number);
     165        ret = new_lisp_c_function(((LispSysFunction *)x)->min_args,
     166                                  ((LispSysFunction *)x)->max_args,
     167                                  ((LispSysFunction *)x)->fun_number);
    168168        break;
    169169      case L_C_BOOL:
    170         ret = new_lisp_c_bool(((lisp_sys_function *)x)->min_args,
    171                               ((lisp_sys_function *)x)->max_args,
    172                               ((lisp_sys_function *)x)->fun_number);
     170        ret = new_lisp_c_bool(((LispSysFunction *)x)->min_args,
     171                              ((LispSysFunction *)x)->max_args,
     172                              ((LispSysFunction *)x)->fun_number);
    173173        break;
    174174      case L_L_FUNCTION:
    175         ret = new_user_lisp_function(((lisp_sys_function *)x)->min_args,
    176                                      ((lisp_sys_function *)x)->max_args,
    177                                      ((lisp_sys_function *)x)->fun_number);
     175        ret = new_user_lisp_function(((LispSysFunction *)x)->min_args,
     176                                     ((LispSysFunction *)x)->max_args,
     177                                     ((LispSysFunction *)x)->fun_number);
    178178        break;
    179179      case L_POINTER:
     
    187187        break;
    188188      case L_CONS_CELL:
    189         ret = collect_cons_cell((cons_cell *)x);
     189        ret = collect_cons_cell((LispList *)x);
    190190        break;
    191191      case L_OBJECT_VAR:
    192         ret = new_lisp_object_var(((lisp_object_var *)x)->number);
     192        ret = new_lisp_object_var(((LispObjectVar *)x)->number);
    193193        break;
    194194      case L_COLLECTED_OBJECT:
    195         ret = ((lisp_collected_object *)x)->new_reference;
     195        ret = ((LispRedirect *)x)->new_reference;
    196196        break;
    197197      default:
     
    202202        break;
    203203    }
    204     ((lisp_collected_object *)x)->type = L_COLLECTED_OBJECT;
    205     ((lisp_collected_object *)x)->new_reference = ret;
     204    ((LispRedirect *)x)->type = L_COLLECTED_OBJECT;
     205    ((LispRedirect *)x)->new_reference = ret;
    206206  }
    207207  else if ((uint8_t *)x < collected_start || (uint8_t *)x >= collected_end)
     
    210210    {
    211211      for (; x && item_type(x) == L_CONS_CELL; x = CDR(x))
    212         ((cons_cell *)x)->car = collect_object(((cons_cell *)x)->car);
     212        ((LispList *)x)->car = collect_object(((LispList *)x)->car);
    213213      if (x)
    214         ((cons_cell *)x)->cdr = collect_object(((cons_cell *)x)->cdr);
     214        ((LispList *)x)->cdr = collect_object(((LispList *)x)->cdr);
    215215    }
    216216  }
     
    219219}
    220220
    221 static void collect_symbols(lisp_symbol *root)
     221static void collect_symbols(LispSymbol *root)
    222222{
    223223  if (root)
Note: See TracChangeset for help on using the changeset viewer.