… | |
… | |
329 | string_value (pointer p) |
329 | string_value (pointer p) |
330 | { |
330 | { |
331 | return strvalue (p); |
331 | return strvalue (p); |
332 | } |
332 | } |
333 | |
333 | |
334 | #define ivalue_unchecked(p) CELL(p)->object.ivalue |
334 | #define ivalue_unchecked(p) (CELL(p)->object.ivalue + 0) |
335 | #define set_ivalue(p,v) CELL(p)->object.ivalue = (v) |
335 | #define set_ivalue(p,v) CELL(p)->object.ivalue = (v) |
336 | |
336 | |
337 | #if USE_REAL |
337 | #if USE_REAL |
338 | #define rvalue_unchecked(p) CELL(p)->object.rvalue |
338 | #define rvalue_unchecked(p) CELL(p)->object.rvalue |
339 | #define set_rvalue(p,v) CELL(p)->object.rvalue = (v) |
339 | #define set_rvalue(p,v) CELL(p)->object.rvalue = (v) |
… | |
… | |
1259 | if (!*pp) |
1259 | if (!*pp) |
1260 | { |
1260 | { |
1261 | pointer x = get_cell (SCHEME_A_ NIL, NIL); |
1261 | pointer x = get_cell (SCHEME_A_ NIL, NIL); |
1262 | |
1262 | |
1263 | set_typeflag (x, T_INTEGER | T_ATOM); |
1263 | set_typeflag (x, T_INTEGER | T_ATOM); |
1264 | setimmutable (x); /* shouldn't do anythi9ng, doesn't cost anything */ |
1264 | setimmutable (x); /* shouldn't do anything, doesn't cost anything */ |
1265 | set_ivalue (x, n); |
1265 | set_ivalue (x, n); |
1266 | |
1266 | |
1267 | *pp = x; |
1267 | *pp = x; |
1268 | } |
1268 | } |
1269 | |
1269 | |
… | |
… | |
1546 | return mk_character (SCHEME_A_ c); |
1546 | return mk_character (SCHEME_A_ c); |
1547 | } |
1547 | } |
1548 | else |
1548 | else |
1549 | { |
1549 | { |
1550 | /* identify base by string index */ |
1550 | /* identify base by string index */ |
1551 | const char baseidx[17] = "ffbf" "ffff" "ofdf" "ffff" "x"; |
1551 | const char baseidx[18] = "ffbf" "ffff" "ofdf" "ffff" "x"; |
1552 | char *base = strchr (baseidx, *name); |
1552 | char *base = strchr (baseidx, *name); |
1553 | |
1553 | |
1554 | if (base) |
1554 | if (base && *base) |
1555 | return mk_integer (SCHEME_A_ strtol (name + 1, 0, base - baseidx)); |
1555 | return mk_integer (SCHEME_A_ strtol (name + 1, 0, base - baseidx)); |
1556 | |
1556 | |
1557 | return NIL; |
1557 | return NIL; |
1558 | } |
1558 | } |
1559 | } |
1559 | } |
… | |
… | |
2613 | } |
2613 | } |
2614 | else if (is_symbol (l)) |
2614 | else if (is_symbol (l)) |
2615 | p = symname (l); |
2615 | p = symname (l); |
2616 | else if (is_proc (l)) |
2616 | else if (is_proc (l)) |
2617 | { |
2617 | { |
|
|
2618 | p = (char *)procname (l); // ok with r7rs display, but not r7rs write |
|
|
2619 | #if 0 |
2618 | #if USE_PRINTF |
2620 | #if USE_PRINTF |
2619 | p = SCHEME_V->strbuff; |
2621 | p = SCHEME_V->strbuff; |
2620 | snprintf (p, STRBUFFSIZE, "#<%s PROCEDURE %ld>", procname (l), procnum (l)); |
2622 | snprintf (p, STRBUFFSIZE, " PROCEDURE %ld>", procname (l), procnum (l)); |
2621 | #else |
2623 | #else |
2622 | p = "#<PROCEDURE>"; |
2624 | p = "#<PROCEDURE>"; |
|
|
2625 | #endif |
2623 | #endif |
2626 | #endif |
2624 | } |
2627 | } |
2625 | else if (is_macro (l)) |
2628 | else if (is_macro (l)) |
2626 | p = "#<MACRO>"; |
2629 | p = "#<MACRO>"; |
2627 | else if (is_closure (l)) |
2630 | else if (is_closure (l)) |
… | |
… | |
5597 | s_return (S_T); |
5600 | s_return (S_T); |
5598 | } |
5601 | } |
5599 | |
5602 | |
5600 | case OP_PVECFROM: |
5603 | case OP_PVECFROM: |
5601 | { |
5604 | { |
5602 | int i = ivalue_unchecked (cdr (args)); |
5605 | IVALUE i = ivalue_unchecked (cdr (args)); |
5603 | pointer vec = car (args); |
5606 | pointer vec = car (args); |
5604 | int len = veclength (vec); |
5607 | uint32_t len = veclength (vec); |
5605 | |
5608 | |
5606 | if (i == len) |
5609 | if (i == len) |
5607 | { |
5610 | { |
5608 | putcharacter (SCHEME_A_ ')'); |
5611 | putcharacter (SCHEME_A_ ')'); |
5609 | s_return (S_T); |
5612 | s_return (S_T); |
5610 | } |
5613 | } |
5611 | else |
5614 | else |
5612 | { |
5615 | { |
5613 | pointer elem = vector_get (vec, i); |
5616 | pointer elem = vector_get (vec, i); |
5614 | |
5617 | |
5615 | ivalue_unchecked (cdr (args)) = i + 1; |
5618 | set_cdr (args, mk_integer (SCHEME_A_ i + 1)); |
5616 | s_save (SCHEME_A_ OP_PVECFROM, args, NIL); |
5619 | s_save (SCHEME_A_ OP_PVECFROM, args, NIL); |
5617 | SCHEME_V->args = elem; |
5620 | SCHEME_V->args = elem; |
5618 | |
5621 | |
5619 | if (i > 0) |
5622 | if (i > 0) |
5620 | putcharacter (SCHEME_A_ ' '); |
5623 | putcharacter (SCHEME_A_ ' '); |
… | |
… | |
5920 | static pointer |
5923 | static pointer |
5921 | mk_proc (SCHEME_P_ enum scheme_opcodes op) |
5924 | mk_proc (SCHEME_P_ enum scheme_opcodes op) |
5922 | { |
5925 | { |
5923 | pointer y = get_cell (SCHEME_A_ NIL, NIL); |
5926 | pointer y = get_cell (SCHEME_A_ NIL, NIL); |
5924 | set_typeflag (y, (T_PROC | T_ATOM)); |
5927 | set_typeflag (y, (T_PROC | T_ATOM)); |
5925 | ivalue_unchecked (y) = op; |
5928 | set_ivalue (y, op); |
5926 | return y; |
5929 | return y; |
5927 | } |
5930 | } |
5928 | |
5931 | |
5929 | /* Hard-coded for the given keywords. Remember to rewrite if more are added! */ |
5932 | /* Hard-coded for the given keywords. Remember to rewrite if more are added! */ |
5930 | ecb_hot static int |
5933 | ecb_hot static int |