Changeset 490 for abuse/trunk/src/lisp/lisp.cpp
- Timestamp:
- Apr 17, 2011, 10:28:44 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
abuse/trunk/src/lisp/lisp.cpp
r489 r490 895 895 } 896 896 897 long list_length(void *i)898 { 899 long x;897 size_t LispList::GetLength() 898 { 899 size_t ret = 0; 900 900 901 901 #ifdef TYPE_CHECKING 902 if (i && item_type(i)!=(ltype)L_CONS_CELL) 903 { 904 lprint(i); 905 lbreak(" is not a sequence\n"); 906 exit(0); 907 } 908 #endif 909 910 for(x = 0; i; i = CDR(i)) 911 x++; 912 return x; 913 } 914 915 902 if (this && item_type(this) != (ltype)L_CONS_CELL) 903 { 904 lprint(this); 905 lbreak(" is not a sequence\n"); 906 exit(0); 907 } 908 #endif 909 910 for (LispObject *p = this; p; p = CDR(p)) 911 ret++; 912 return ret; 913 } 916 914 917 915 void *pairlis(void *list1, void *list2, void *list3) 918 { 916 { 919 917 if (item_type(list1)!=(ltype)L_CONS_CELL || item_type(list1)!=item_type(list2)) 920 918 return NULL; 921 919 922 920 void *ret=NULL; 923 long l1=list_length(list1), l2=list_length(list2); 921 size_t l1 = ((LispList *)list1)->GetLength(); 922 size_t l2 = ((LispList *)list2)->GetLength(); 923 924 924 if (l1!=l2) 925 { 925 { 926 926 lprint(list1); 927 927 lprint(list2); … … 938 938 if (!first) first=cur; 939 939 if (last) 940 ((LispList *)last)->cdr= cur;940 ((LispList *)last)->cdr=(LispObject *)cur; 941 941 last=cur; 942 943 LispList *cell=new_cons_cell(); 942 943 LispList *cell=new_cons_cell(); 944 944 tmp=lcar(list1); 945 ((LispList *)cell)->car =tmp;945 ((LispList *)cell)->car = (LispObject *)tmp; 946 946 tmp=lcar(list2); 947 ((LispList *)cell)->cdr =tmp;948 ((LispList *)cur)->car =cell;947 ((LispList *)cell)->cdr = (LispObject *)tmp; 948 ((LispList *)cur)->car = (LispObject *)cell; 949 949 950 950 list1=((LispList *)list1)->cdr; 951 951 list2=((LispList *)list2)->cdr; 952 952 } 953 ((LispList *)cur)->cdr =list3;953 ((LispList *)cur)->cdr = (LispObject *)list3; 954 954 ret=first; 955 955 } else ret=NULL; … … 1107 1107 p_ref r1(object), r2(list); 1108 1108 LispList *c=new_cons_cell(); 1109 c->car =object;1110 c->cdr =list;1109 c->car = (LispObject *)object; 1110 c->cdr = (LispObject *)list; 1111 1111 list=c; 1112 1112 } … … 1131 1131 c2=new_cons_cell(); 1132 1132 tmp=compile(s); 1133 ((LispList *)c2)->car =tmp;1133 ((LispList *)c2)->car = (LispObject *)tmp; 1134 1134 ((LispList *)c2)->cdr=NULL; 1135 ((LispList *)cs)->cdr =c2;1135 ((LispList *)cs)->cdr = (LispObject *)c2; 1136 1136 ret=cs; 1137 1137 } … … 1144 1144 c2=new_cons_cell(); 1145 1145 tmp=compile(s); 1146 ((LispList *)c2)->car =tmp;1146 ((LispList *)c2)->car = (LispObject *)tmp; 1147 1147 ((LispList *)c2)->cdr=NULL; 1148 ((LispList *)cs)->cdr =c2;1148 ((LispList *)cs)->cdr = (LispObject *)c2; 1149 1149 ret=cs; 1150 1150 } else if (n[0]==',') // short hand for comma function … … 1156 1156 c2=new_cons_cell(); 1157 1157 tmp=compile(s); 1158 ((LispList *)c2)->car =tmp;1158 ((LispList *)c2)->car = (LispObject *)tmp; 1159 1159 ((LispList *)c2)->cdr=NULL; 1160 ((LispList *)cs)->cdr =c2;1160 ((LispList *)cs)->cdr = (LispObject *)c2; 1161 1161 ret=cs; 1162 1162 } … … 1187 1187 read_ltoken(s, n); // skip the '.' 1188 1188 tmp=compile(s); 1189 ((LispList *)last)->cdr =tmp; // link the last cdr to1189 ((LispList *)last)->cdr = (LispObject *)tmp; // link the last cdr to 1190 1190 last=NULL; 1191 1191 } … … 1199 1199 if (!first) first=cur; 1200 1200 tmp=compile(s); 1201 ((LispList *)cur)->car =tmp;1201 ((LispList *)cur)->car = (LispObject *)tmp; 1202 1202 if (last) 1203 ((LispList *)last)->cdr =cur;1203 ((LispList *)last)->cdr = (LispObject *)cur; 1204 1204 last=cur; 1205 1205 } … … 1250 1250 p_ref r4(cs), r5(c2); 1251 1251 tmp = LispSymbol::FindOrCreate("function"); 1252 ((LispList *)cs)->car =tmp;1252 ((LispList *)cs)->car = (LispObject *)tmp; 1253 1253 c2=new_cons_cell(); 1254 1254 tmp=compile(s); 1255 ((LispList *)c2)->car =tmp;1256 ((LispList *)cs)->cdr =c2;1255 ((LispList *)c2)->car = (LispObject *)tmp; 1256 ((LispList *)cs)->cdr = (LispObject *)c2; 1257 1257 ret=cs; 1258 1258 } … … 1515 1515 if (first) { 1516 1516 tmp=new_cons_cell(); 1517 ((LispList *)cur)->cdr =tmp;1517 ((LispList *)cur)->cdr = (LispObject *)tmp; 1518 1518 cur=tmp; 1519 1519 } else … … 1521 1521 1522 1522 void *val=eval(CAR(arg_list)); 1523 ((LispList *)cur)->car =val;1523 ((LispList *)cur)->car = (LispObject *)val; 1524 1524 arg_list=lcdr(arg_list); 1525 1525 } … … 1582 1582 } 1583 1583 } 1584 int num_args=list_length(CDR(arg_list)), i, stop=0;1584 int i, stop = 0, num_args = ((LispList *)CDR(arg_list))->GetLength(); 1585 1585 if (!num_args) return 0; 1586 1586 … … 1617 1617 else 1618 1618 { 1619 na_list->cdr =new_cons_cell();1619 na_list->cdr = (LispObject *)new_cons_cell(); 1620 1620 na_list=(LispList *)CDR(na_list); 1621 1621 } … … 1624 1624 if (arg_on[i]) 1625 1625 { 1626 na_list->car =CAR(arg_on[i]);1626 na_list->car = (LispObject *)CAR(arg_on[i]); 1627 1627 arg_on[i]=(LispList *)CDR(arg_on[i]); 1628 1628 } … … 1632 1632 { 1633 1633 LispList *c=new_cons_cell(); 1634 c->car =eval_function((LispSymbol *)sym, first);1634 c->car = (LispObject *)eval_function((LispSymbol *)sym, first); 1635 1635 if (return_list) 1636 1636 last_return->cdr=c; … … 1657 1657 if (rtype==string_symbol) 1658 1658 { 1659 int elements =list_length(el_list);// see how many things we need to concat1659 int elements = ((LispList *)el_list)->GetLength(); // see how many things we need to concat 1660 1660 if (!elements) ret = LispString::Create(""); 1661 1661 else … … 1758 1758 { 1759 1759 tmp=eval(CAR(CDR(args))); 1760 ((LispList *)last)->cdr =tmp;1760 ((LispList *)last)->cdr = (LispObject *)tmp; 1761 1761 args=NULL; 1762 1762 } … … 1765 1765 cur=new_cons_cell(); 1766 1766 if (first) 1767 ((LispList *)last)->cdr =cur;1767 ((LispList *)last)->cdr = (LispObject *)cur; 1768 1768 else 1769 1769 first=cur; 1770 1770 last=cur; 1771 1771 tmp=backquote_eval(CAR(args)); 1772 ((LispList *)cur)->car =tmp;1772 ((LispList *)cur)->car = (LispObject *)tmp; 1773 1773 args=CDR(args); 1774 1774 } … … 1776 1776 { 1777 1777 tmp=backquote_eval(args); 1778 ((LispList *)last)->cdr =tmp;1778 ((LispList *)last)->cdr = (LispObject *)tmp; 1779 1779 args=NULL; 1780 1780 } … … 1813 1813 { 1814 1814 case L_STRING : ret = LispNumber::Create(strlen(lstring_value(v))); break; 1815 case L_CONS_CELL : ret = LispNumber::Create( list_length(v)); break;1815 case L_CONS_CELL : ret = LispNumber::Create(((LispList *)v)->GetLength()); break; 1816 1816 default : 1817 1817 { lprint(v); … … 1828 1828 cur=new_cons_cell(); 1829 1829 void *val=eval(CAR(arg_list)); 1830 ((LispList *) cur)->car =val;1830 ((LispList *) cur)->car = (LispObject *)val; 1831 1831 if (last) 1832 ((LispList *)last)->cdr =cur;1832 ((LispList *)last)->cdr = (LispObject *)cur; 1833 1833 else first=cur; 1834 1834 last=cur; … … 1841 1841 p_ref r1(c); 1842 1842 void *val=eval(CAR(arg_list)); 1843 ((LispList *)c)->car =val;1843 ((LispList *)c)->car = (LispObject *)val; 1844 1844 val=eval(CAR(CDR(arg_list))); 1845 ((LispList *)c)->cdr =val;1845 ((LispList *)c)->cdr = (LispObject *)val; 1846 1846 ret=c; 1847 1847 } break; … … 1984 1984 if (!car || item_type(car)!=L_CONS_CELL) 1985 1985 { lprint(car); lbreak("setq car : evaled object is not a cons cell\n"); exit(0); } 1986 ((LispList *)car)->car =set_to;1986 ((LispList *)car)->car = (LispObject *)set_to; 1987 1987 } else if (car==cdr_symbol) 1988 1988 { … … 1990 1990 if (!car || item_type(car)!=L_CONS_CELL) 1991 1991 { lprint(car); lbreak("setq cdr : evaled object is not a cons cell\n"); exit(0); } 1992 ((LispList *)car)->cdr =set_to;1992 ((LispList *)car)->cdr = (LispObject *)set_to; 1993 1993 } else if (car==aref_symbol) 1994 1994 { … … 2051 2051 p_ref r1(i1); 2052 2052 LispList *cs=new_cons_cell(); 2053 cs->car =i1;2054 cs->cdr =i2;2053 cs->car = (LispObject *)i1; 2054 cs->cdr = (LispObject *)i2; 2055 2055 ret=cs; 2056 2056 } break; … … 2786 2786 next=l1; 2787 2787 while (next) { l1=next; next=lcdr(next); } 2788 ((LispList *)l1)->cdr =eval(CAR(arg_list));2788 ((LispList *)l1)->cdr = (LispObject *)eval(CAR(arg_list)); 2789 2789 arg_list=CDR(arg_list); 2790 2790 } while (arg_list); … … 2837 2837 if (!rstart) rstart=q; 2838 2838 while (r && CDR(r)) r=CDR(r); 2839 CDR(r) =q;2839 CDR(r) = (LispObject *)q; 2840 2840 arg_list=CDR(arg_list); 2841 2841 }
Note: See TracChangeset
for help on using the changeset viewer.