Changeset 491 for abuse/trunk/src/lisp/lisp.cpp
- Timestamp:
- Apr 17, 2011, 10:28:48 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/lisp/lisp.cpp
r490 r491 82 82 { 83 83 dprintf("Main program\n"); 84 if (max_lev==-1) max_lev= l_ptr_stack.son;85 else if (max_lev>= l_ptr_stack.son) max_lev=l_ptr_stack.son-1;84 if (max_lev==-1) max_lev=PtrRef::stack.son; 85 else if (max_lev>=PtrRef::stack.son) max_lev=PtrRef::stack.son-1; 86 86 87 87 for (int i=0;i<max_lev;i++) 88 88 { 89 89 dprintf("%d> ", i); 90 lprint(* l_ptr_stack.sdata[i]);90 lprint(*PtrRef::stack.sdata[i]); 91 91 } 92 92 } … … 140 140 { 141 141 void *prog=compile(s); 142 p_ref r1(prog);142 PtrRef r1(prog); 143 143 while (*s==' ' || *s=='\t' || *s=='\r' || *s=='\n') s++; 144 144 lprint(eval(prog)); … … 210 210 void *eval_block(void *list) 211 211 { 212 p_ref r1(list);212 PtrRef r1(list); 213 213 void *ret=NULL; 214 214 while (list) … … 222 222 LispArray *LispArray::Create(int size, void *rest) 223 223 { 224 p_ref r11(rest);224 PtrRef r11(rest); 225 225 size_t s = sizeof(LispArray) 226 226 + ((size < 1 ? 1 : size) - 1) * sizeof(LispObject *); … … 230 230 LispObject **data = p->GetData(); 231 231 memset(data, 0, size * sizeof(LispObject *)); 232 p_ref r1(p);232 PtrRef r1(p); 233 233 234 234 if (rest) … … 349 349 LispUserFunction *new_lisp_user_function(void *arg_list, void *block_list) 350 350 { 351 p_ref r1(arg_list), r2(block_list);351 PtrRef r1(arg_list), r2(block_list); 352 352 LispUserFunction *lu=(LispUserFunction *)lmalloc(sizeof(LispUserFunction), current_space); 353 353 lu->type=L_USER_FUNCTION; … … 452 452 } 453 453 454 455 LispList *new_cons_cell() 456 { 457 LispList *c=(LispList *)lmalloc(sizeof(LispList), current_space); 458 c->type=L_CONS_CELL; 459 c->car=NULL; 460 c->cdr=NULL; 461 return c; 462 } 463 454 LispList *LispList::Create() 455 { 456 LispList *c = (LispList *)lmalloc(sizeof(LispList), current_space); 457 c->type = L_CONS_CELL; 458 c->car = NULL; 459 c->cdr = NULL; 460 return c; 461 } 464 462 465 463 char *lerror(char const *loc, char const *cause) … … 808 806 current_space=PERM_SPACE; // make sure all symbols get defined in permanant space 809 807 LispList *cs; 810 cs= new_cons_cell();808 cs=LispList::Create(); 811 809 s=new_lisp_symbol(name); 812 810 cs->car=s; … … 931 929 if (l1!=0) 932 930 { 933 void *first=NULL, *last=NULL, *cur=NULL, *tmp; 934 p_ref r1(first), r2(last), r3(cur); 931 LispList *first = NULL, *last = NULL, *cur = NULL; 932 LispObject *tmp; 933 PtrRef r1(first), r2(last), r3(cur); 935 934 while (list1) 936 935 { 937 cur=new_cons_cell(); 938 if (!first) first=cur; 936 cur = LispList::Create(); 937 if (!first) 938 first = cur; 939 939 if (last) 940 ((LispList *)last)->cdr=(LispObject *)cur;941 last =cur;942 943 LispList *cell =new_cons_cell();944 tmp =lcar(list1);945 ((LispList *)cell)->car = (LispObject *)tmp;946 tmp =lcar(list2);947 ((LispList *)cell)->cdr = (LispObject *)tmp;948 ((LispList *)cur)->car = (LispObject *)cell;949 950 list1 =((LispList *)list1)->cdr;951 list2 =((LispList *)list2)->cdr;952 } 953 ((LispList *)cur)->cdr = (LispObject *)list3;940 last->cdr = cur; 941 last = cur; 942 943 LispList *cell = LispList::Create(); 944 tmp = (LispObject *)lcar(list1); 945 cell->car = tmp; 946 tmp = (LispObject *)lcar(list2); 947 cell->cdr = tmp; 948 cur->car = cell; 949 950 list1 = ((LispList *)list1)->cdr; 951 list2 = ((LispList *)list2)->cdr; 952 } 953 cur->cdr = (LispObject *)list3; 954 954 ret=first; 955 955 } else ret=NULL; … … 1105 1105 void push_onto_list(void *object, void *&list) 1106 1106 { 1107 p_ref r1(object), r2(list);1108 LispList *c =new_cons_cell();1107 PtrRef r1(object), r2(list); 1108 LispList *c = LispList::Create(); 1109 1109 c->car = (LispObject *)object; 1110 1110 c->cdr = (LispObject *)list; … … 1125 1125 else if (n[0]=='\'') // short hand for quote function 1126 1126 { 1127 void *cs =new_cons_cell(), *c2=NULL, *tmp;1128 p_ref r1(cs), r2(c2);1127 void *cs = LispList::Create(), *c2=NULL, *tmp; 1128 PtrRef r1(cs), r2(c2); 1129 1129 1130 1130 ((LispList *)cs)->car=quote_symbol; 1131 c2 =new_cons_cell();1131 c2 = LispList::Create(); 1132 1132 tmp=compile(s); 1133 1133 ((LispList *)c2)->car = (LispObject *)tmp; … … 1138 1138 else if (n[0]=='`') // short hand for backquote function 1139 1139 { 1140 void *cs =new_cons_cell(), *c2=NULL, *tmp;1141 p_ref r1(cs), r2(c2);1140 void *cs = LispList::Create(), *c2=NULL, *tmp; 1141 PtrRef r1(cs), r2(c2); 1142 1142 1143 1143 ((LispList *)cs)->car=backquote_symbol; 1144 c2 =new_cons_cell();1144 c2 = LispList::Create(); 1145 1145 tmp=compile(s); 1146 1146 ((LispList *)c2)->car = (LispObject *)tmp; … … 1150 1150 } else if (n[0]==',') // short hand for comma function 1151 1151 { 1152 void *cs =new_cons_cell(), *c2=NULL, *tmp;1153 p_ref r1(cs), r2(c2);1152 void *cs = LispList::Create(), *c2=NULL, *tmp; 1153 PtrRef r1(cs), r2(c2); 1154 1154 1155 1155 ((LispList *)cs)->car=comma_symbol; 1156 c2 =new_cons_cell();1156 c2 = LispList::Create(); 1157 1157 tmp=compile(s); 1158 1158 ((LispList *)c2)->car = (LispObject *)tmp; … … 1164 1164 { 1165 1165 void *first=NULL, *cur=NULL, *last=NULL; 1166 p_ref r1(first), r2(cur), r3(last);1166 PtrRef r1(first), r2(cur), r3(last); 1167 1167 int done=0; 1168 1168 do … … 1195 1195 { 1196 1196 void *tmp; 1197 cur =new_cons_cell();1198 p_ref r1(cur);1197 cur = LispList::Create(); 1198 PtrRef r1(cur); 1199 1199 if (!first) first=cur; 1200 1200 tmp=compile(s); … … 1247 1247 else if (n[1]==0) // short hand for function 1248 1248 { 1249 void *cs =new_cons_cell(), *c2=NULL, *tmp;1250 p_ref r4(cs), r5(c2);1249 void *cs = LispList::Create(), *c2=NULL, *tmp; 1250 PtrRef r4(cs), r5(c2); 1251 1251 tmp = LispSymbol::FindOrCreate("function"); 1252 1252 ((LispList *)cs)->car = (LispObject *)tmp; 1253 c2 =new_cons_cell();1253 c2 = LispList::Create(); 1254 1254 tmp=compile(s); 1255 1255 ((LispList *)c2)->car = (LispObject *)tmp; … … 1439 1439 1440 1440 void *fun=(LispSysFunction *)(((LispSymbol *)sym)->function); 1441 p_ref ref2( fun );1441 PtrRef ref2( fun ); 1442 1442 1443 1443 // make sure the arguments given to the function are the correct number … … 1493 1493 1494 1494 1495 p_ref ref1(arg_list);1495 PtrRef ref1(arg_list); 1496 1496 void *ret=NULL; 1497 1497 … … 1510 1510 { 1511 1511 void *first=NULL, *cur=NULL, *tmp; 1512 p_ref r1(first), r2(cur);1512 PtrRef r1(first), r2(cur); 1513 1513 while (arg_list) 1514 1514 { 1515 1515 if (first) { 1516 tmp =new_cons_cell();1516 tmp = LispList::Create(); 1517 1517 ((LispList *)cur)->cdr = (LispObject *)tmp; 1518 1518 cur=tmp; 1519 1519 } else 1520 cur=first =new_cons_cell();1520 cur=first = LispList::Create(); 1521 1521 1522 1522 void *val=eval(CAR(arg_list)); … … 1567 1567 void *mapcar(void *arg_list) 1568 1568 { 1569 p_ref ref1(arg_list);1569 PtrRef ref1(arg_list); 1570 1570 void *sym=eval(CAR(arg_list)); 1571 1571 switch ((short)item_type(sym)) … … 1587 1587 void **arg_on=(void **)malloc(sizeof(void *)*num_args); 1588 1588 LispList *list_on=(LispList *)CDR(arg_list); 1589 long old_ptr_son= l_ptr_stack.son;1589 long old_ptr_son=PtrRef::stack.son; 1590 1590 1591 1591 for (i=0;i<num_args;i++) 1592 1592 { 1593 1593 arg_on[i]=(LispList *)eval(CAR(list_on)); 1594 l_ptr_stack.push(&arg_on[i]);1594 PtrRef::stack.push(&arg_on[i]); 1595 1595 1596 1596 list_on=(LispList *)CDR(list_on); … … 1614 1614 { 1615 1615 if (!na_list) 1616 first=na_list =new_cons_cell();1616 first=na_list = LispList::Create(); 1617 1617 else 1618 1618 { 1619 na_list->cdr = (LispObject *) new_cons_cell();1619 na_list->cdr = (LispObject *)LispList::Create(); 1620 1620 na_list=(LispList *)CDR(na_list); 1621 1621 } … … 1631 1631 if (!stop) 1632 1632 { 1633 LispList *c =new_cons_cell();1633 LispList *c = LispList::Create(); 1634 1634 c->car = (LispObject *)eval_function((LispSymbol *)sym, first); 1635 1635 if (return_list) … … 1641 1641 } 1642 1642 while (!stop); 1643 l_ptr_stack.son=old_ptr_son;1643 PtrRef::stack.son=old_ptr_son; 1644 1644 1645 1645 free(arg_on); … … 1650 1650 { 1651 1651 void *el_list=CDR(prog_list); 1652 p_ref ref1(prog_list), ref2(el_list);1652 PtrRef ref1(prog_list), ref2(el_list); 1653 1653 void *ret=NULL; 1654 1654 void *rtype=eval(CAR(prog_list)); … … 1662 1662 { 1663 1663 void **str_eval=(void **)malloc(elements*sizeof(void *)); 1664 int i, old_ptr_stack_start= l_ptr_stack.son;1664 int i, old_ptr_stack_start=PtrRef::stack.son; 1665 1665 1666 1666 // evalaute all the strings and count their lengths … … 1668 1668 { 1669 1669 str_eval[i]=eval(CAR(el_list)); 1670 l_ptr_stack.push(&str_eval[i]);1670 PtrRef::stack.push(&str_eval[i]); 1671 1671 1672 1672 switch ((short)item_type(str_eval[i])) … … 1724 1724 } 1725 1725 free(str_eval); 1726 l_ptr_stack.son=old_ptr_stack_start; // restore pointer GC stack1726 PtrRef::stack.son=old_ptr_stack_start; // restore pointer GC stack 1727 1727 *s=0; 1728 1728 ret=st; … … 1750 1750 { 1751 1751 void *first=NULL, *last=NULL, *cur=NULL, *tmp; 1752 p_ref ref1(first), ref2(last), ref3(cur), ref4(args);1752 PtrRef ref1(first), ref2(last), ref3(cur), ref4(args); 1753 1753 while (args) 1754 1754 { … … 1763 1763 else 1764 1764 { 1765 cur =new_cons_cell();1765 cur = LispList::Create(); 1766 1766 if (first) 1767 1767 ((LispList *)last)->cdr = (LispObject *)cur; … … 1789 1789 void *eval_sys_function(LispSysFunction *fun, void *arg_list) 1790 1790 { 1791 p_ref ref1(arg_list);1791 PtrRef ref1(arg_list); 1792 1792 void *ret=NULL; 1793 1793 switch (fun->fun_number) … … 1823 1823 { 1824 1824 void *cur=NULL, *last=NULL, *first=NULL; 1825 p_ref r1(cur), r2(first), r3(last);1825 PtrRef r1(cur), r2(first), r3(last); 1826 1826 while (arg_list) 1827 1827 { 1828 cur =new_cons_cell();1828 cur = LispList::Create(); 1829 1829 void *val=eval(CAR(arg_list)); 1830 1830 ((LispList *) cur)->car = (LispObject *)val; … … 1838 1838 } break; 1839 1839 case SYS_FUNC_CONS: 1840 { void *c =new_cons_cell();1841 p_ref r1(c);1840 { void *c = LispList::Create(); 1841 PtrRef r1(c); 1842 1842 void *val=eval(CAR(arg_list)); 1843 1843 ((LispList *)c)->car = (LispObject *)val; … … 1876 1876 long sum; 1877 1877 void *first=eval(CAR(arg_list)); 1878 p_ref r1(first);1878 PtrRef r1(first); 1879 1879 if (arg_list && item_type(first)==L_FIXED_POINT) 1880 1880 { … … 1906 1906 { 1907 1907 void *i=eval(CAR(arg_list)); 1908 p_ref r1(i);1908 PtrRef r1(i); 1909 1909 if (item_type(i)!=L_NUMBER) 1910 1910 { … … 1949 1949 { 1950 1950 void *set_to=eval(CAR(CDR(arg_list))), *i=NULL; 1951 p_ref r1(set_to), r2(i);1951 PtrRef r1(set_to), r2(i); 1952 1952 i=CAR(arg_list); 1953 1953 … … 1995 1995 #endif 1996 1996 LispArray *a = (LispArray *)eval(CAR(CDR(i))); 1997 p_ref r1(a);1997 PtrRef r1(a); 1998 1998 #ifdef TYPE_CHECKING 1999 1999 if (item_type(a) != L_1D_ARRAY) … … 2037 2037 { 2038 2038 void *item=eval(CAR(arg_list)); 2039 p_ref r1(item);2039 PtrRef r1(item); 2040 2040 void *list=(LispList *)eval(CAR(CDR(arg_list))); 2041 p_ref r2(list);2041 PtrRef r2(list); 2042 2042 ret=assoc(item, (LispList *)list); 2043 2043 } break; … … 2049 2049 { 2050 2050 void *i1=eval(CAR(arg_list)), *i2=eval(CAR(CDR(arg_list))); 2051 p_ref r1(i1);2052 LispList *cs =new_cons_cell();2051 PtrRef r1(i1); 2052 LispList *cs = LispList::Create(); 2053 2053 cs->car = (LispObject *)i1; 2054 2054 cs->cdr = (LispObject *)i2; … … 2057 2057 2058 2058 case SYS_FUNC_PAIRLIS: 2059 { 2059 { 2060 2060 l_user_stack.push(eval(CAR(arg_list))); arg_list=CDR(arg_list); 2061 2061 l_user_stack.push(eval(CAR(arg_list))); arg_list=CDR(arg_list); … … 2070 2070 void *var_list=CAR(arg_list), 2071 2071 *block_list=CDR(arg_list); 2072 p_ref r1(block_list), r2(var_list);2072 PtrRef r1(block_list), r2(var_list); 2073 2073 long stack_start=l_user_stack.son; 2074 2074 … … 2145 2145 { 2146 2146 void *l=arg_list; 2147 p_ref r1(l);2147 PtrRef r1(l); 2148 2148 ret=true_symbol; 2149 2149 while (l) … … 2159 2159 { 2160 2160 void *l=arg_list; 2161 p_ref r1(l);2161 PtrRef r1(l); 2162 2162 ret=NULL; 2163 2163 while (l) … … 2178 2178 { 2179 2179 void *i=eval(CAR(arg_list)); 2180 p_ref r1(i);2180 PtrRef r1(i); 2181 2181 ret=NULL; 2182 2182 switch (item_type(i)) … … 2197 2197 { 2198 2198 void *i=eval(CAR(arg_list)); 2199 p_ref r1(i);2199 PtrRef r1(i); 2200 2200 if (item_type(i)!=L_NUMBER) 2201 2201 { … … 2209 2209 { 2210 2210 void *block_list=CAR(arg_list); 2211 p_ref r1(block_list);2211 PtrRef r1(block_list); 2212 2212 if (!block_list) ret=NULL; 2213 2213 else … … 2226 2226 void *selector=eval(CAR(arg_list)); 2227 2227 void *sel=CDR(arg_list); 2228 p_ref r1(selector), r2(sel);2228 PtrRef r1(selector), r2(sel); 2229 2229 while (sel) 2230 2230 { … … 2339 2339 void *fn = eval( CAR( arg_list ) ); 2340 2340 char *st = lstring_value( fn ); 2341 p_ref r1( fn );2341 PtrRef r1( fn ); 2342 2342 bFILE *fp; 2343 2343 if( fun->fun_number == SYS_FUNC_LOCAL_LOAD ) … … 2391 2391 #endif 2392 2392 void *compiled_form=NULL; 2393 p_ref r11(compiled_form);2393 PtrRef r11(compiled_form); 2394 2394 while (!end_of_program(cs)) // see if there is anything left to compile and run 2395 2395 { … … 2461 2461 { 2462 2462 void *sym=eval(CAR(arg_list)); 2463 p_ref r1(sym);2463 PtrRef r1(sym); 2464 2464 switch (item_type(sym)) 2465 2465 { … … 2469 2469 { 2470 2470 void *s=eval(CAR(sym)); 2471 p_ref r1(s);2471 PtrRef r1(s); 2472 2472 #ifdef TYPE_CHECKING 2473 2473 if (item_type(s)!=L_SYMBOL) … … 2526 2526 LispSymbol *bind_var = (LispSymbol *)CAR(arg_list); 2527 2527 arg_list = CDR(arg_list); 2528 p_ref r1(bind_var);2528 PtrRef r1(bind_var); 2529 2529 if (item_type(bind_var)!=L_SYMBOL) 2530 2530 { lbreak("expecting for iterator to be a symbol\n"); exit(1); } … … 2535 2535 2536 2536 void *ilist=eval(CAR(arg_list)); arg_list=CDR(arg_list); 2537 p_ref r2(ilist);2537 PtrRef r2(ilist); 2538 2538 2539 2539 if (CAR(arg_list)!=do_symbol) … … 2542 2542 2543 2543 void *block=NULL, *ret=NULL; 2544 p_ref r3(block);2544 PtrRef r3(block); 2545 2545 l_user_stack.push(bind_var->GetValue()); // save old symbol value 2546 2546 while (ilist) … … 2558 2558 bFILE *old_file=current_print_file; 2559 2559 void *str1=eval(CAR(arg_list)); 2560 p_ref r1(str1);2560 PtrRef r1(str1); 2561 2561 void *str2=eval(CAR(CDR(arg_list))); 2562 2562 … … 2660 2660 { 2661 2661 void *arg1=eval(CAR(arg_list)); arg_list=CDR(arg_list); 2662 p_ref r1(arg1); // protect this refrence2662 PtrRef r1(arg1); // protect this refrence 2663 2663 char *haystack=lstring_value(eval(CAR(arg_list))); 2664 2664 char *needle=lstring_value(arg1); … … 2672 2672 { 2673 2673 void *arg1=eval(CAR(arg_list)); arg_list=CDR(arg_list); 2674 p_ref r1(arg1); // protect this refrence2674 PtrRef r1(arg1); // protect this refrence 2675 2675 long x=lnumber_value(eval(CAR(arg_list))); 2676 2676 char *st=lstring_value(arg1); … … 2692 2692 { 2693 2693 void *init_var=CAR(arg_list); 2694 p_ref r1(init_var);2694 PtrRef r1(init_var); 2695 2695 int i, ustack_start=l_user_stack.son; // restore stack at end 2696 2696 LispSymbol *sym = NULL; 2697 p_ref r2(sym);2697 PtrRef r2(sym); 2698 2698 2699 2699 // check to make sure iter vars are symbol and push old values … … 2770 2770 { 2771 2771 void *l1=eval(CAR(arg_list)); arg_list=CDR(arg_list); 2772 p_ref r1(l1);2772 PtrRef r1(l1); 2773 2773 void *first=l1, *next; 2774 p_ref r2(first);2774 PtrRef r2(first); 2775 2775 2776 2776 if (!l1) … … 2816 2816 long x2=lnumber_value(eval(CAR(arg_list))); arg_list=CDR(arg_list); 2817 2817 void *st=eval(CAR(arg_list)); 2818 p_ref r1(st);2818 PtrRef r1(st); 2819 2819 2820 2820 if (x1 < 0 || x1 > x2 || (unsigned)x2 >= strlen(lstring_value(st))) … … 2831 2831 { 2832 2832 void *r=NULL, *rstart=NULL; 2833 p_ref r1(r), r2(rstart);2833 PtrRef r1(r), r2(rstart); 2834 2834 while (arg_list) 2835 2835 { … … 2870 2870 { 2871 2871 void *ret=NULL; 2872 p_ref ref1(ret);2872 PtrRef ref1(ret); 2873 2873 2874 2874 #ifdef TYPE_CHECKING … … 2898 2898 void *fun_arg_list=cache.lblock(fun->alist); 2899 2899 void *block_list=cache.lblock(fun->blist); 2900 p_ref r9(block_list), r10(fun_arg_list);2900 PtrRef r9(block_list), r10(fun_arg_list); 2901 2901 #else 2902 2902 void *fun_arg_list=fun->arg_list; 2903 2903 void *block_list=fun->block_list; 2904 p_ref r9(block_list), r10(fun_arg_list);2904 PtrRef r9(block_list), r10(fun_arg_list); 2905 2905 #endif 2906 2906 … … 2912 2912 // first push all of the old symbol values 2913 2913 void *f_arg=fun_arg_list; 2914 p_ref r18(f_arg);2915 p_ref r19(arg_list);2914 PtrRef r18(f_arg); 2915 PtrRef r19(arg_list); 2916 2916 for (;f_arg;f_arg=CDR(f_arg)) 2917 2917 { … … 2979 2979 2980 2980 void *ret=NULL; 2981 p_ref ref1(prog);2981 PtrRef ref1(prog); 2982 2982 2983 2983 … … 2991 2991 space_size[PERM_SPACE]-((char *)free_space[PERM_SPACE]-(char *)space[PERM_SPACE]), 2992 2992 space_size[TMP_SPACE]-((char *)free_space[TMP_SPACE]-(char *)space[TMP_SPACE]), 2993 l_ptr_stack.son);2993 PtrRef::stack.son); 2994 2994 lprint(prog); 2995 2995 … … 3036 3036 space_size[PERM_SPACE]-((char *)free_space[PERM_SPACE]-(char *)space[PERM_SPACE]), 3037 3037 space_size[TMP_SPACE]-((char *)free_space[TMP_SPACE]-(char *)space[TMP_SPACE]), 3038 l_ptr_stack.son);3038 PtrRef::stack.son); 3039 3039 lprint(ret); 3040 3040 dprintf("\n");
Note: See TracChangeset
for help on using the changeset viewer.