Changeset 636 for abuse/trunk/src/lisp/lisp_gc.cpp
- Timestamp:
- May 11, 2011, 1:26:15 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/lisp/lisp_gc.cpp
r635 r636 41 41 static uint8_t *cstart, *cend, *collected_start, *collected_end; 42 42 43 LArray *Lisp GC::CollectArray(LArray *x)44 { 45 size_t s = x-> len;43 LArray *Lisp::CollectArray(LArray *x) 44 { 45 size_t s = x->m_len; 46 46 LArray *a = LArray::Create(s, NULL); 47 47 LObject **src = x->GetData(); … … 53 53 } 54 54 55 LList *Lisp GC::CollectList(LList *x)55 LList *Lisp::CollectList(LList *x) 56 56 { 57 57 LList *prev = NULL, *first = NULL; … … 60 60 { 61 61 LList *p = LList::Create(); 62 LObject *old_car = x-> car;62 LObject *old_car = x->m_car; 63 63 LObject *old_x = x; 64 64 x = (LList *)CDR(x); 65 ((LRedirect *)old_x)-> type = L_COLLECTED_OBJECT;66 ((LRedirect *)old_x)-> ref = p;67 68 p-> car = CollectObject(old_car);65 ((LRedirect *)old_x)->m_type = L_COLLECTED_OBJECT; 66 ((LRedirect *)old_x)->m_ref = p; 67 68 p->m_car = CollectObject(old_car); 69 69 70 70 if (prev) 71 prev-> cdr = p;71 prev->m_cdr = p; 72 72 else 73 73 first = p; … … 75 75 } 76 76 if (x) 77 prev-> cdr = CollectObject(x);77 prev->m_cdr = CollectObject(x); 78 78 79 79 return first; // we already set the collection pointers 80 80 } 81 81 82 LObject *Lisp GC::CollectObject(LObject *x)82 LObject *Lisp::CollectObject(LObject *x) 83 83 { 84 84 LObject *ret = x; … … 92 92 break; 93 93 case L_NUMBER: 94 ret = LNumber::Create(((LNumber *)x)-> num);94 ret = LNumber::Create(((LNumber *)x)->m_num); 95 95 break; 96 96 case L_SYS_FUNCTION: … … 111 111 break; 112 112 case L_CHARACTER: 113 ret = LChar::Create( lcharacter_value(x));113 ret = LChar::Create(((LChar *)x)->m_ch); 114 114 break; 115 115 case L_C_FUNCTION: … … 141 141 break; 142 142 case L_OBJECT_VAR: 143 ret = LObjectVar::Create(((LObjectVar *)x)-> index);143 ret = LObjectVar::Create(((LObjectVar *)x)->m_index); 144 144 break; 145 145 case L_COLLECTED_OBJECT: 146 ret = ((LRedirect *)x)-> ref;146 ret = ((LRedirect *)x)->m_ref; 147 147 break; 148 148 default: … … 150 150 break; 151 151 } 152 ((LRedirect *)x)-> type = L_COLLECTED_OBJECT;153 ((LRedirect *)x)-> ref = ret;152 ((LRedirect *)x)->m_type = L_COLLECTED_OBJECT; 153 ((LRedirect *)x)->m_ref = ret; 154 154 } 155 155 else if ((uint8_t *)x < collected_start || (uint8_t *)x >= collected_end) … … 172 172 } 173 173 174 void Lisp GC::CollectSymbols(LSymbol *root)174 void Lisp::CollectSymbols(LSymbol *root) 175 175 { 176 176 if (!root) 177 177 return; 178 178 179 root-> value = CollectObject(root->value);180 root-> function = CollectObject(root->function);181 root-> name = (LString *)CollectObject(root->name);182 CollectSymbols(root-> left);183 CollectSymbols(root-> right);184 } 185 186 void Lisp GC::CollectStacks()179 root->m_value = CollectObject(root->m_value); 180 root->m_function = CollectObject(root->m_function); 181 root->m_name = (LString *)CollectObject(root->m_name); 182 CollectSymbols(root->m_left); 183 CollectSymbols(root->m_right); 184 } 185 186 void Lisp::CollectStacks() 187 187 { 188 188 void **d = l_user_stack.sdata; … … 205 205 } 206 206 207 void Lisp GC::CollectSpace(LSpace *which_space, int grow)207 void Lisp::CollectSpace(LSpace *which_space, int grow) 208 208 { 209 209 LSpace *old_space = LSpace::Current;
Note: See TracChangeset
for help on using the changeset viewer.