Changeset 636 for abuse/trunk/src/lisp/lisp.cpp
- Timestamp:
- May 11, 2011, 1:26:15 AM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/lisp/lisp.cpp
r635 r636 191 191 { 192 192 if (this == &LSpace::Perm || this == &LSpace::Tmp) 193 Lisp GC::CollectSpace(this, 0);193 Lisp::CollectSpace(this, 0); 194 194 195 195 if (size > GetFree()) 196 Lisp GC::CollectSpace(this, 1);196 Lisp::CollectSpace(this, 1); 197 197 198 198 if (size > GetFree()) … … 228 228 229 229 LArray *p = (LArray *)LSpace::Current->Alloc(size); 230 p-> type = L_1D_ARRAY;231 p-> len = len;230 p->m_type = L_1D_ARRAY; 231 p->m_len = len; 232 232 LObject **data = p->GetData(); 233 233 memset(data, 0, len * sizeof(LObject *)); … … 281 281 282 282 LFixedPoint *p = (LFixedPoint *)LSpace::Current->Alloc(size); 283 p-> type = L_FIXED_POINT;284 p-> x= x;283 p->m_type = L_FIXED_POINT; 284 p->m_fixed = x; 285 285 return p; 286 286 } … … 291 291 292 292 LObjectVar *p = (LObjectVar *)LSpace::Current->Alloc(size); 293 p-> type = L_OBJECT_VAR;294 p-> index = index;293 p->m_type = L_OBJECT_VAR; 294 p->m_index = index; 295 295 return p; 296 296 } … … 303 303 304 304 LPointer *p = (LPointer *)LSpace::Current->Alloc(size); 305 p-> type = L_POINTER;306 p-> addr = addr;305 p->m_type = L_POINTER; 306 p->m_addr = addr; 307 307 return p; 308 308 } … … 313 313 314 314 LChar *c = (LChar *)LSpace::Current->Alloc(size); 315 c-> type = L_CHARACTER;316 c-> ch = ch;315 c->m_type = L_CHARACTER; 316 c->m_ch = ch; 317 317 return c; 318 318 } … … 321 321 { 322 322 LString *s = Create(strlen(string) + 1); 323 strcpy(s-> str, string);323 strcpy(s->m_str, string); 324 324 return s; 325 325 } … … 328 328 { 329 329 LString *s = Create(length + 1); 330 memcpy(s-> str, string, length);331 s-> str[length] = 0;330 memcpy(s->m_str, string, length); 331 s->m_str[length] = 0; 332 332 return s; 333 333 } … … 338 338 339 339 LString *s = (LString *)LSpace::Current->Alloc(size); 340 s-> type = L_STRING;341 s-> str[0] = '\0';340 s->m_type = L_STRING; 341 s->m_str[0] = '\0'; 342 342 return s; 343 343 } … … 350 350 351 351 LUserFunction *lu = (LUserFunction *)LSpace::Current->Alloc(size); 352 lu-> type = L_USER_FUNCTION;352 lu->m_type = L_USER_FUNCTION; 353 353 lu->arg_list = arg_list; 354 354 lu->block_list = block_list; … … 364 364 ? (LSysFunction *)LSpace::Gc.Alloc(size) 365 365 : (LSysFunction *)LSpace::Perm.Alloc(size); 366 ls-> type = L_SYS_FUNCTION;366 ls->m_type = L_SYS_FUNCTION; 367 367 ls->min_args = min_args; 368 368 ls->max_args = max_args; … … 374 374 { 375 375 LSysFunction *ls = new_lisp_sys_function(min_args, max_args, fun_number); 376 ls-> type = L_C_FUNCTION;376 ls->m_type = L_C_FUNCTION; 377 377 return ls; 378 378 } … … 381 381 { 382 382 LSysFunction *ls = new_lisp_sys_function(min_args, max_args, fun_number); 383 ls-> type = L_C_BOOL;383 ls->m_type = L_C_BOOL; 384 384 return ls; 385 385 } … … 388 388 { 389 389 LSysFunction *ls = new_lisp_sys_function(min_args, max_args, fun_number); 390 ls-> type = L_L_FUNCTION;390 ls->m_type = L_L_FUNCTION; 391 391 return ls; 392 392 } … … 399 399 PtrRef ref(s); 400 400 401 s-> type = L_SYMBOL;402 s-> name = LString::Create(name);403 s-> value = l_undefined;404 s-> function = l_undefined;401 s->m_type = L_SYMBOL; 402 s->m_name = LString::Create(name); 403 s->m_value = l_undefined; 404 s->m_function = l_undefined; 405 405 #ifdef L_PROFILE 406 406 s->time_taken = 0; … … 414 414 415 415 LNumber *n = (LNumber *)LSpace::Current->Alloc(size); 416 n-> type = L_NUMBER;417 n-> num = num;416 n->m_type = L_NUMBER; 417 n->m_num = num; 418 418 return n; 419 419 } … … 424 424 425 425 LList *c = (LList *)LSpace::Current->Alloc(size); 426 c-> type = L_CONS_CELL;427 c-> car = NULL;428 c-> cdr = NULL;426 c->m_type = L_CONS_CELL; 427 c->m_car = NULL; 428 c->m_cdr = NULL; 429 429 return c; 430 430 } … … 477 477 } 478 478 #endif 479 return ((LPointer *)lpointer)-> addr;479 return ((LPointer *)lpointer)->m_addr; 480 480 } 481 481 482 482 int32_t lnumber_value(void *lnumber) 483 483 { 484 switch (item_type(lnumber)) 485 { 486 case L_NUMBER : 487 return ((LNumber *)lnumber)->num; 488 case L_FIXED_POINT : 489 return (((LFixedPoint *)lnumber)->x)>>16; 490 case L_STRING : 491 return (uint8_t)*lstring_value(lnumber); 492 case L_CHARACTER : 493 return lcharacter_value(lnumber); 494 default : 495 { 496 ((LObject *)lnumber)->Print(); 497 lbreak(" is not a number\n"); 498 exit(0); 499 } 500 } 501 return 0; 484 switch (item_type(lnumber)) 485 { 486 case L_NUMBER: 487 return ((LNumber *)lnumber)->m_num; 488 case L_FIXED_POINT: 489 return ((LFixedPoint *)lnumber)->m_fixed >> 16; 490 case L_STRING: 491 return (uint8_t)*lstring_value(lnumber); 492 case L_CHARACTER: 493 return ((LChar *)lnumber)->m_ch; 494 default: 495 ((LObject *)lnumber)->Print(); 496 lbreak(" is not a number\n"); 497 exit(0); 498 } 499 return 0; 502 500 } 503 501 … … 512 510 } 513 511 #endif 514 return str;512 return m_str; 515 513 } 516 514 … … 526 524 if (!c) return NULL; 527 525 else if (item_type(c)==(ltype)L_CONS_CELL) 528 return ((LList *)c)-> cdr;526 return ((LList *)c)->m_cdr; 529 527 else 530 528 return NULL; … … 535 533 if (!c) return NULL; 536 534 else if (item_type(c)==(ltype)L_CONS_CELL) 537 return ((LList *)c)-> car;535 return ((LList *)c)->m_car; 538 536 else return NULL; 539 537 } 540 538 541 uint16_t lcharacter_value(void *c)539 uint16_t LChar::GetValue() 542 540 { 543 541 #ifdef TYPE_CHECKING 544 if (item_type(c)!=L_CHARACTER)545 {546 ((LObject *)c)->Print();547 lbreak("is not a character\n");548 exit(0);549 }550 #endif 551 return ((LChar *)c)->ch;542 if (item_type(this) != L_CHARACTER) 543 { 544 Print(); 545 lbreak("is not a character\n"); 546 exit(0); 547 } 548 #endif 549 return m_ch; 552 550 } 553 551 … … 557 555 { 558 556 case L_NUMBER : 559 return ((LNumber *)c)-> num<<16; break;557 return ((LNumber *)c)->m_num<<16; break; 560 558 case L_FIXED_POINT : 561 return (((LFixedPoint *)c)-> x); break;559 return (((LFixedPoint *)c)->m_fixed); break; 562 560 default : 563 561 { … … 578 576 if (t1!=t2) return NULL; 579 577 else if (t1==L_NUMBER) 580 { if (((LNumber *)n1)-> num==((LNumber *)n2)->num)578 { if (((LNumber *)n1)->m_num==((LNumber *)n2)->m_num) 581 579 return true_symbol; 582 580 else return NULL; 583 581 } else if (t1==L_CHARACTER) 584 582 { 585 if (((LChar *)n1)-> ch==((LChar *)n2)->ch)583 if (((LChar *)n1)->m_ch==((LChar *)n2)->m_ch) 586 584 return true_symbol; 587 585 else return NULL; … … 598 596 { 599 597 #ifdef TYPE_CHECKING 600 if ( type != L_1D_ARRAY)598 if (m_type != L_1D_ARRAY) 601 599 { 602 600 Print(); … … 605 603 } 606 604 #endif 607 if (x >= (int) len || x < 0)605 if (x >= (int)m_len || x < 0) 608 606 { 609 607 lbreak("array reference out of bounds (%d)\n", x); 610 608 exit(0); 611 609 } 612 return data[x];610 return m_data[x]; 613 611 } 614 612 … … 758 756 for (cs=(LList *)symbol_list; cs; cs=(LList *)CDR(cs)) 759 757 { 760 if (!strcmp( ((char *)((LSymbol *)cs-> car)->name)+sizeof(LString), name))761 return (LSymbol *)(cs-> car);758 if (!strcmp( ((char *)((LSymbol *)cs->m_car)->m_name)+sizeof(LString), name)) 759 return (LSymbol *)(cs->m_car); 762 760 } 763 761 return NULL; … … 777 775 cs=LList::Create(); 778 776 s=new_lisp_symbol(name); 779 cs-> car=s;780 cs-> cdr=symbol_list;777 cs->m_car=s; 778 cs->m_cdr=symbol_list; 781 779 symbol_list=cs; 782 780 LSpace::Current = sp; … … 792 790 while (p) 793 791 { 794 int cmp = strcmp(name, p-> name->GetString());792 int cmp = strcmp(name, p->m_name->GetString()); 795 793 if (cmp == 0) 796 794 return p; 797 p = (cmp < 0) ? p-> left : p->right;795 p = (cmp < 0) ? p->m_left : p->m_right; 798 796 } 799 797 return NULL; … … 806 804 while (p) 807 805 { 808 int cmp = strcmp(name, p-> name->GetString());806 int cmp = strcmp(name, p->m_name->GetString()); 809 807 if (cmp == 0) 810 808 return p; 811 parent = (cmp < 0) ? &p-> left : &p->right;809 parent = (cmp < 0) ? &p->m_left : &p->m_right; 812 810 p = *parent; 813 811 } … … 818 816 LSpace::Current = &LSpace::Perm; 819 817 818 // These permanent objects cannot be GCed, so malloc() them 820 819 p = (LSymbol *)malloc(sizeof(LSymbol)); 821 p-> type = L_SYMBOL;822 p-> name = LString::Create(name);820 p->m_type = L_SYMBOL; 821 p->m_name = LString::Create(name); 823 822 824 823 // If constant, set the value to ourself 825 p-> value = (name[0] == ':') ? p : l_undefined;826 p-> function = l_undefined;824 p->m_value = (name[0] == ':') ? p : l_undefined; 825 p->m_function = l_undefined; 827 826 #ifdef L_PROFILE 828 827 p->time_taken = 0; 829 828 #endif 830 p-> left = p->right = NULL;829 p->m_left = p->m_right = NULL; 831 830 *parent = p; 832 831 count++; … … 840 839 if (root) 841 840 { 842 DeleteAllSymbols(root-> left);843 DeleteAllSymbols(root-> right);841 DeleteAllSymbols(root->m_left); 842 DeleteAllSymbols(root->m_right); 844 843 free(root); 845 844 } 846 845 } 847 846 848 void *assoc(void *item, void *list) 849 { 850 if (item_type(list)!=(ltype)L_CONS_CELL) 847 LObject *LObject::Assoc(LObject *item) 848 { 849 if (item_type(this) != L_CONS_CELL) 850 return NULL; 851 852 LObject *list = this; 853 while (list) 854 { 855 if (lisp_eq(CAR(CAR(list)), item)) 856 return lcar(list); 857 list = CDR(list); 858 } 859 851 860 return NULL; 852 else853 {854 while (list)855 {856 if (lisp_eq(CAR(CAR(list)), item))857 return lcar(list);858 list=(LList *)(CDR(list));859 }860 }861 return NULL;862 861 } 863 862 … … 907 906 first = cur; 908 907 if (last) 909 last-> cdr = cur;908 last->m_cdr = cur; 910 909 last = cur; 911 910 912 911 LList *cell = LList::Create(); 913 912 tmp = (LObject *)lcar(list1); 914 cell-> car = tmp;913 cell->m_car = tmp; 915 914 tmp = (LObject *)lcar(list2); 916 cell-> cdr = tmp;917 cur-> car = cell;918 919 list1 = ((LList *)list1)-> cdr;920 list2 = ((LList *)list2)-> cdr;921 } 922 cur-> cdr = (LObject *)list3;915 cell->m_cdr = tmp; 916 cur->m_car = cell; 917 918 list1 = ((LList *)list1)->m_cdr; 919 list2 = ((LList *)list2)->m_cdr; 920 } 921 cur->m_cdr = (LObject *)list3; 923 922 ret=first; 924 923 } else ret=NULL; … … 926 925 } 927 926 928 void LSymbol::SetFunction(LObject *fun )929 { 930 function = fun;927 void LSymbol::SetFunction(LObject *function) 928 { 929 m_function = function; 931 930 } 932 931 … … 935 934 need_perm_space("add_sys_function"); 936 935 LSymbol *s = LSymbol::FindOrCreate(name); 937 if (s-> function!=l_undefined)936 if (s->m_function!=l_undefined) 938 937 { 939 938 lbreak("add_sys_fucntion -> symbol %s already has a function\n", name); 940 939 exit(0); 941 940 } 942 else s-> function=new_lisp_sys_function(min_args, max_args, number);941 else s->m_function=new_lisp_sys_function(min_args, max_args, number); 943 942 return s; 944 943 } … … 948 947 need_perm_space("add_c_object"); 949 948 LSymbol *s=(LSymbol *)symbol; 950 if (s-> value!=l_undefined)949 if (s->m_value!=l_undefined) 951 950 { 952 951 lbreak("add_c_object -> symbol %s already has a value\n", lstring_value(s->GetName())); 953 952 exit(0); 954 953 } 955 else s-> value=LObjectVar::Create(index);954 else s->m_value=LObjectVar::Create(index); 956 955 return NULL; 957 956 } … … 962 961 need_perm_space("add_c_function"); 963 962 LSymbol *s = LSymbol::FindOrCreate(name); 964 if (s-> function!=l_undefined)963 if (s->m_function!=l_undefined) 965 964 { 966 965 lbreak("add_sys_fucntion -> symbol %s already has a function\n", name); 967 966 exit(0); 968 967 } 969 else s-> function=new_lisp_c_function(min_args, max_args, number);968 else s->m_function=new_lisp_c_function(min_args, max_args, number); 970 969 return s; 971 970 } … … 976 975 need_perm_space("add_c_bool_fun"); 977 976 LSymbol *s = LSymbol::FindOrCreate(name); 978 if (s-> function!=l_undefined)977 if (s->m_function!=l_undefined) 979 978 { 980 979 lbreak("add_sys_fucntion -> symbol %s already has a function\n", name); 981 980 exit(0); 982 981 } 983 else s-> function=new_lisp_c_bool(min_args, max_args, number);982 else s->m_function=new_lisp_c_bool(min_args, max_args, number); 984 983 return s; 985 984 } … … 991 990 need_perm_space("add_c_bool_fun"); 992 991 LSymbol *s = LSymbol::FindOrCreate(name); 993 if (s-> function!=l_undefined)992 if (s->m_function!=l_undefined) 994 993 { 995 994 lbreak("add_sys_fucntion -> symbol %s already has a function\n", name); 996 995 exit(0); 997 996 } 998 else s-> function=new_user_lisp_function(min_args, max_args, number);997 else s->m_function=new_user_lisp_function(min_args, max_args, number); 999 998 return s; 1000 999 } … … 1076 1075 PtrRef r1(object), r2(list); 1077 1076 LList *c = LList::Create(); 1078 c-> car = (LObject *)object;1079 c-> cdr = (LObject *)list;1077 c->m_car = (LObject *)object; 1078 c->m_cdr = (LObject *)list; 1080 1079 list=c; 1081 1080 } … … 1099 1098 PtrRef r1(cs), r2(c2); 1100 1099 1101 ((LList *)cs)-> car=quote_symbol;1100 ((LList *)cs)->m_car=quote_symbol; 1102 1101 c2 = LList::Create(); 1103 1102 tmp=Compile(code); 1104 ((LList *)c2)-> car = (LObject *)tmp;1105 ((LList *)c2)-> cdr=NULL;1106 ((LList *)cs)-> cdr = (LObject *)c2;1103 ((LList *)c2)->m_car = (LObject *)tmp; 1104 ((LList *)c2)->m_cdr=NULL; 1105 ((LList *)cs)->m_cdr = (LObject *)c2; 1107 1106 ret=cs; 1108 1107 } … … 1112 1111 PtrRef r1(cs), r2(c2); 1113 1112 1114 ((LList *)cs)-> car=backquote_symbol;1113 ((LList *)cs)->m_car=backquote_symbol; 1115 1114 c2 = LList::Create(); 1116 1115 tmp=Compile(code); 1117 ((LList *)c2)-> car = (LObject *)tmp;1118 ((LList *)c2)-> cdr=NULL;1119 ((LList *)cs)-> cdr = (LObject *)c2;1116 ((LList *)c2)->m_car = (LObject *)tmp; 1117 ((LList *)c2)->m_cdr=NULL; 1118 ((LList *)cs)->m_cdr = (LObject *)c2; 1120 1119 ret=cs; 1121 1120 } else if (n[0]==',') // short hand for comma function … … 1124 1123 PtrRef r1(cs), r2(c2); 1125 1124 1126 ((LList *)cs)-> car=comma_symbol;1125 ((LList *)cs)->m_car=comma_symbol; 1127 1126 c2 = LList::Create(); 1128 1127 tmp=Compile(code); 1129 ((LList *)c2)-> car = (LObject *)tmp;1130 ((LList *)c2)-> cdr=NULL;1131 ((LList *)cs)-> cdr = (LObject *)c2;1128 ((LList *)c2)->m_car = (LObject *)tmp; 1129 ((LList *)c2)->m_cdr=NULL; 1130 ((LList *)cs)->m_cdr = (LObject *)c2; 1132 1131 ret=cs; 1133 1132 } … … 1158 1157 read_ltoken(code, n); // skip the '.' 1159 1158 tmp=Compile(code); 1160 ((LList *)last)-> cdr = (LObject *)tmp; // link the last cdr to1159 ((LList *)last)->m_cdr = (LObject *)tmp; // link the last cdr to 1161 1160 last=NULL; 1162 1161 } … … 1170 1169 if (!first) first=cur; 1171 1170 tmp=Compile(code); 1172 ((LList *)cur)-> car = (LObject *)tmp;1171 ((LList *)cur)->m_car = (LObject *)tmp; 1173 1172 if (last) 1174 ((LList *)last)-> cdr = (LObject *)cur;1173 ((LList *)last)->m_cdr = (LObject *)cur; 1175 1174 last=cur; 1176 1175 } … … 1184 1183 { 1185 1184 LNumber *num = LNumber::Create(0); 1186 sscanf(n, "%ld", &num-> num);1185 sscanf(n, "%ld", &num->m_num); 1187 1186 ret=num; 1188 1187 } else if (n[0]=='"') … … 1221 1220 PtrRef r4(cs), r5(c2); 1222 1221 tmp = LSymbol::FindOrCreate("function"); 1223 ((LList *)cs)-> car = (LObject *)tmp;1222 ((LList *)cs)->m_car = (LObject *)tmp; 1224 1223 c2 = LList::Create(); 1225 1224 tmp=Compile(code); 1226 ((LList *)c2)-> car = (LObject *)tmp;1227 ((LList *)cs)-> cdr = (LObject *)c2;1225 ((LList *)c2)->m_car = (LObject *)tmp; 1226 ((LList *)cs)->m_cdr = (LObject *)c2; 1228 1227 ret=cs; 1229 1228 } … … 1287 1286 if (item_type(cs) == (ltype)L_CONS_CELL) 1288 1287 { 1289 cs-> car->Print();1290 if (cs-> cdr)1288 cs->m_car->Print(); 1289 if (cs->m_cdr) 1291 1290 lprint_string(" "); 1292 1291 } … … 1302 1301 break; 1303 1302 case L_NUMBER: 1304 sprintf(buf, "%ld", ((LNumber *)this)-> num);1303 sprintf(buf, "%ld", ((LNumber *)this)->m_num); 1305 1304 lprint_string(buf); 1306 1305 break; 1307 1306 case L_SYMBOL: 1308 lprint_string(((LSymbol *)this)-> name->GetString());1307 lprint_string(((LSymbol *)this)->m_name->GetString()); 1309 1308 break; 1310 1309 case L_USER_FUNCTION: … … 1339 1338 if (current_print_file) 1340 1339 { 1341 uint8_t ch = ((LChar *)this)-> ch;1340 uint8_t ch = ((LChar *)this)->m_ch; 1342 1341 current_print_file->write(&ch, 1); 1343 1342 } 1344 1343 else 1345 1344 { 1346 uint16_t ch = ((LChar *)this)-> ch;1345 uint16_t ch = ((LChar *)this)->m_ch; 1347 1346 dprintf("#\\"); 1348 1347 switch (ch) … … 1358 1357 break; 1359 1358 case L_OBJECT_VAR: 1360 l_obj_print(((LObjectVar *)this)-> index);1359 l_obj_print(((LObjectVar *)this)->m_index); 1361 1360 break; 1362 1361 case L_1D_ARRAY: … … 1365 1364 LObject **data = a->GetData(); 1366 1365 dprintf("#("); 1367 for (size_t j = 0; j < a-> len; j++)1366 for (size_t j = 0; j < a->m_len; j++) 1368 1367 { 1369 1368 data[j]->Print(); 1370 if (j != a-> len - 1)1369 if (j != a->m_len - 1) 1371 1370 dprintf(" "); 1372 1371 } … … 1376 1375 case L_COLLECTED_OBJECT: 1377 1376 lprint_string("GC_reference->"); 1378 ((LRedirect *)this)-> ref->Print();1377 ((LRedirect *)this)->m_ref->Print(); 1379 1378 break; 1380 1379 default: … … 1400 1399 #endif 1401 1400 1402 LObject *fun = function;1401 LObject *fun = m_function; 1403 1402 PtrRef ref2(fun); 1404 1403 PtrRef ref3(arg_list); … … 1435 1434 { 1436 1435 ((LObject *)arg_list)->Print(); 1437 name->Print();1436 m_name->Print(); 1438 1437 lbreak("\nToo few parameters to function\n"); 1439 1438 exit(0); … … 1442 1441 { 1443 1442 ((LObject *)arg_list)->Print(); 1444 name->Print();1443 m_name->Print(); 1445 1444 lbreak("\nToo many parameters to function\n"); 1446 1445 exit(0); … … 1474 1473 LList *tmp = LList::Create(); 1475 1474 if (first) 1476 cur-> cdr = tmp;1475 cur->m_cdr = tmp; 1477 1476 else 1478 1477 first = tmp; … … 1480 1479 1481 1480 LObject *val = CAR(arg_list)->Eval(); 1482 ((LList *)cur)-> car = val;1481 ((LList *)cur)->m_car = val; 1483 1482 arg_list = lcdr(arg_list); 1484 1483 } … … 1508 1507 if (p) 1509 1508 { 1510 pro_print(out, p-> right);1509 pro_print(out, p->m_right); 1511 1510 { 1512 1511 char st[100]; … … 1514 1513 out->write(st, strlen(st)); 1515 1514 } 1516 pro_print(out, p-> left);1515 pro_print(out, p->m_left); 1517 1516 } 1518 1517 } … … 1578 1577 else 1579 1578 { 1580 na_list-> cdr = (LObject *)LList::Create();1579 na_list->m_cdr = (LObject *)LList::Create(); 1581 1580 na_list=(LList *)CDR(na_list); 1582 1581 } … … 1585 1584 if (arg_on[i]) 1586 1585 { 1587 na_list-> car = (LObject *)CAR(arg_on[i]);1586 na_list->m_car = (LObject *)CAR(arg_on[i]); 1588 1587 arg_on[i]=(LList *)CDR(arg_on[i]); 1589 1588 } … … 1593 1592 { 1594 1593 LList *c = LList::Create(); 1595 c-> car = ((LSymbol *)sym)->EvalFunction(first);1594 c->m_car = ((LSymbol *)sym)->EvalFunction(first); 1596 1595 if (return_list) 1597 last_return-> cdr=c;1596 last_return->m_cdr=c; 1598 1597 else 1599 1598 return_list=c; … … 1672 1671 { 1673 1672 if (item_type(CAR(char_list))==L_CHARACTER) 1674 *(s++)=((LChar *)CAR(char_list))-> ch;1673 *(s++)=((LChar *)CAR(char_list))->m_ch; 1675 1674 char_list=(LList *)CDR(char_list); 1676 1675 } … … 1706 1705 else if (args==NULL) 1707 1706 return NULL; 1708 else if ((LSymbol *) (((LList *)args)-> car)==comma_symbol)1707 else if ((LSymbol *) (((LList *)args)->m_car)==comma_symbol) 1709 1708 return CAR(CDR(args))->Eval(); 1710 1709 else … … 1719 1718 { 1720 1719 tmp = CAR(CDR(args))->Eval(); 1721 ((LList *)last)-> cdr = (LObject *)tmp;1720 ((LList *)last)->m_cdr = (LObject *)tmp; 1722 1721 args=NULL; 1723 1722 } … … 1726 1725 cur = LList::Create(); 1727 1726 if (first) 1728 ((LList *)last)-> cdr = (LObject *)cur;1727 ((LList *)last)->m_cdr = (LObject *)cur; 1729 1728 else 1730 1729 first=cur; 1731 1730 last=cur; 1732 1731 tmp=backquote_eval(CAR(args)); 1733 ((LList *)cur)-> car = (LObject *)tmp;1732 ((LList *)cur)->m_car = (LObject *)tmp; 1734 1733 args=CDR(args); 1735 1734 } … … 1737 1736 { 1738 1737 tmp=backquote_eval(args); 1739 ((LList *)last)-> cdr = (LObject *)tmp;1738 ((LList *)last)->m_cdr = (LObject *)tmp; 1740 1739 args=NULL; 1741 1740 } … … 1796 1795 cur = LList::Create(); 1797 1796 LObject *val = CAR(arg_list)->Eval(); 1798 cur-> car = val;1797 cur->m_car = val; 1799 1798 if (last) 1800 last-> cdr = cur;1799 last->m_cdr = cur; 1801 1800 else 1802 1801 first = cur; … … 1812 1811 PtrRef r1(c); 1813 1812 LObject *val = CAR(arg_list)->Eval(); 1814 c-> car = val;1813 c->m_car = val; 1815 1814 val = CAR(CDR(arg_list))->Eval(); 1816 c-> cdr = val;1815 c->m_cdr = val; 1817 1816 ret = c; 1818 1817 break; … … 1887 1886 else if (first) 1888 1887 { 1889 quot = ((LNumber *)i)-> num;1888 quot = ((LNumber *)i)->m_num; 1890 1889 first = 0; 1891 1890 } 1892 1891 else 1893 quot /= ((LNumber *)i)-> num;1892 quot /= ((LNumber *)i)->m_num; 1894 1893 arg_list = (LList *)CDR(arg_list); 1895 1894 } … … 1932 1931 { 1933 1932 case L_SYMBOL: 1934 switch (item_type(((LSymbol *)i)-> value))1933 switch (item_type(((LSymbol *)i)->m_value)) 1935 1934 { 1936 1935 case L_NUMBER: 1937 if (x == L_NUMBER && ((LSymbol *)i)-> value != l_undefined)1936 if (x == L_NUMBER && ((LSymbol *)i)->m_value != l_undefined) 1938 1937 ((LSymbol *)i)->SetNumber(lnumber_value(set_to)); 1939 1938 else … … 1941 1940 break; 1942 1941 case L_OBJECT_VAR: 1943 l_obj_set(((LObjectVar *)(((LSymbol *)i)-> value))->index, set_to);1942 l_obj_set(((LObjectVar *)(((LSymbol *)i)->m_value))->m_index, set_to); 1944 1943 break; 1945 1944 default: 1946 1945 ((LSymbol *)i)->SetValue((LObject *)set_to); 1947 1946 } 1948 ret = ((LSymbol *)i)-> value;1947 ret = ((LSymbol *)i)->m_value; 1949 1948 break; 1950 1949 case L_CONS_CELL: // this better be an 'aref' 1951 1950 { 1952 1951 #ifdef TYPE_CHECKING 1953 LObject *car = ((LList *)i)-> car;1952 LObject *car = ((LList *)i)->m_car; 1954 1953 if (car == car_symbol) 1955 1954 { … … 1961 1960 exit(0); 1962 1961 } 1963 ((LList *)car)-> car = set_to;1962 ((LList *)car)->m_car = set_to; 1964 1963 } 1965 1964 else if (car == cdr_symbol) … … 1972 1971 exit(0); 1973 1972 } 1974 ((LList *)car)-> cdr = set_to;1973 ((LList *)car)->m_cdr = set_to; 1975 1974 } 1976 1975 else if (car != aref_symbol) … … 1994 1993 int num = lnumber_value(CAR(CDR(CDR(i)))->Eval()); 1995 1994 #ifdef TYPE_CHECKING 1996 if (num >= (int)a-> len || num < 0)1995 if (num >= (int)a->m_len || num < 0) 1997 1996 { 1998 1997 lbreak("aref : value of bounds (%d)\n", num); … … 2024 2023 LList *list = (LList *)CAR(CDR(arg_list))->Eval(); 2025 2024 PtrRef r2(list); 2026 ret = (LObject *)assoc(item, list);2025 ret = list->Assoc(item); 2027 2026 break; 2028 2027 } … … 2041 2040 PtrRef r2(i2); 2042 2041 LList *cs = LList::Create(); 2043 cs-> car = i1;2044 cs-> cdr = i2;2042 cs->m_car = i1; 2043 cs->m_cdr = i2; 2045 2044 ret = cs; 2046 2045 break; … … 2078 2077 #endif 2079 2078 2080 l_user_stack.push(((LSymbol *)var_name)-> value);2079 l_user_stack.push(((LSymbol *)var_name)->m_value); 2081 2080 tmp = CAR(CDR(CAR(var_list)))->Eval(); 2082 2081 ((LSymbol *)var_name)->SetValue(tmp); … … 2180 2179 { 2181 2180 case L_CHARACTER: 2182 ret = LNumber::Create(((LChar *)i)-> ch);2181 ret = LNumber::Create(((LChar *)i)->m_ch); 2183 2182 break; 2184 2183 case L_STRING: … … 2203 2202 exit(0); 2204 2203 } 2205 ret = LChar::Create(((LNumber *)i)-> num);2204 ret = LChar::Create(((LNumber *)i)->m_num); 2206 2205 break; 2207 2206 } … … 2302 2301 } 2303 2302 #endif 2304 ret = symb-> name;2303 ret = symb->m_name; 2305 2304 break; 2306 2305 } … … 2482 2481 { 2483 2482 LObject *tmp = LNumber::Create(x); 2484 ((LSymbol *)sym)-> value = tmp;2483 ((LSymbol *)sym)->m_value = tmp; 2485 2484 break; 2486 2485 } … … 2499 2498 x = lnumber_value(CAR(CDR(sym))->Eval()); 2500 2499 LObject *tmp = LNumber::Create(x); 2501 ((LSymbol *)sym)-> value = tmp;2500 ((LSymbol *)sym)->m_value = tmp; 2502 2501 break; 2503 2502 } … … 2545 2544 for (void *s = symbol_list; s; s = CDR(s)) 2546 2545 fprintf(fp, "%8d %s\n", ((LSymbol *)(CAR(s)))->call_counter, 2547 lstring_value(((LSymbol *)(CAR(s)))-> name));2546 lstring_value(((LSymbol *)(CAR(s)))->m_name)); 2548 2547 fclose(fp); 2549 2548 } … … 2691 2690 { 2692 2691 LObject *v = CAR(arg_list)->Eval(); 2693 if (item_type(v) != L_NUMBER || (((LNumber *)v)-> num != 0))2692 if (item_type(v) != L_NUMBER || (((LNumber *)v)->m_num != 0)) 2694 2693 ret = NULL; 2695 2694 else … … 2806 2805 } 2807 2806 case SYS_FUNC_GC: 2808 Lisp GC::CollectSpace(LSpace::Current, 0);2807 Lisp::CollectSpace(LSpace::Current, 0); 2809 2808 break; 2810 2809 case SYS_FUNC_SCHAR: … … 2864 2863 } 2865 2864 LObject *tmp = CAR(arg_list)->Eval(); 2866 ((LList *)l1)-> cdr = tmp;2865 ((LList *)l1)->m_cdr = tmp; 2867 2866 arg_list = (LList *)CDR(arg_list); 2868 2867 } while (arg_list); … … 2971 2970 #endif 2972 2971 2973 LUserFunction *fun = (LUserFunction *) function;2972 LUserFunction *fun = (LUserFunction *)m_function; 2974 2973 2975 2974 #ifdef TYPE_CHECKING … … 2996 2995 { 2997 2996 LSymbol *s = (LSymbol *)CAR(f_arg); 2998 l_user_stack.push(s-> value);2997 l_user_stack.push(s->m_value); 2999 2998 } 3000 2999 … … 3095 3094 ret = ((LSymbol *)this)->GetValue(); 3096 3095 if (item_type(ret) == L_OBJECT_VAR) 3097 ret = (LObject *)l_obj_get(((LObjectVar *)ret)-> index);3096 ret = (LObject *)l_obj_get(((LObjectVar *)ret)->m_index); 3098 3097 } 3099 3098 break; … … 3119 3118 3120 3119 /* l_user_stack.push(ret); 3121 Lisp GC::CollectSpace(&LSpace::Perm);3120 Lisp::CollectSpace(&LSpace::Perm); 3122 3121 ret=l_user_stack.pop(1); */ 3123 3122 3124 3123 return ret; 3125 3124 } 3126 3127 void l_comp_init();3128 3125 3129 3126 void Lisp::Init() … … 3144 3141 LSpace::Current = &LSpace::Perm; 3145 3142 3146 l_comp_init(); 3143 InitConstants(); 3144 3147 3145 for(size_t i = 0; i < sizeof(sys_funcs) / sizeof(*sys_funcs); i++) 3148 3146 add_sys_function(sys_funcs[i].name, … … 3179 3177 } 3180 3178 #endif 3181 return name;3179 return m_name; 3182 3180 } 3183 3181 … … 3192 3190 } 3193 3191 #endif 3194 if ( value != l_undefined && item_type(value) == L_NUMBER)3195 ((LNumber *) value)->num = num;3192 if (m_value != l_undefined && item_type(m_value) == L_NUMBER) 3193 ((LNumber *)m_value)->m_num = num; 3196 3194 else 3197 value = LNumber::Create(num);3195 m_value = LNumber::Create(num); 3198 3196 } 3199 3197 … … 3208 3206 } 3209 3207 #endif 3210 value = val;3208 m_value = val; 3211 3209 } 3212 3210 … … 3221 3219 } 3222 3220 #endif 3223 return function;3221 return m_function; 3224 3222 } 3225 3223 … … 3234 3232 } 3235 3233 #endif 3236 return value;3237 } 3238 3234 return m_value; 3235 } 3236
Note: See TracChangeset
for help on using the changeset viewer.