*/
static int
-read_num (const char *p, reader_stack *st)
+read_num (const char *p, reader_stack * st)
{
int i = 0;
// Use an unsigned intermediate to simplify overflow checks.
if (p[0] != '-')
{
if (x <= INT32_MAX)
- (--(st->pos))->fix32 = new_fix32 ((int32_t)x);
+ (--(st->pos))->fix32 = new_fix32 ((int32_t) x);
else if (x <= INT64_MAX)
(--(st->pos))->fix64 = new_fix64 (x);
else
}
else
{
- if (-x >= (uint64_t)INT32_MIN)
- (--(st->pos))->fix32 = new_fix32 (0 - (int32_t)x);
- else if (-x >= (uint64_t)INT64_MIN)
- (--(st->pos))->fix64 = new_fix64 (0 - (int64_t)x);
+ if (-x >= (uint64_t) INT32_MIN)
+ (--(st->pos))->fix32 = new_fix32 (0 - (int32_t) x);
+ else if (-x >= (uint64_t) INT64_MIN)
+ (--(st->pos))->fix64 = new_fix64 (0 - (int64_t) x);
else
goto read_float;
}
st->framelen++;
return i;
- read_float:
- assert(0 && "unimplemented: promote num to float");
+read_float:
+ assert (0 && "unimplemented: promote num to float");
return i;
}
// stack[0..len]: objs in current list
// stack[len]: parent len
const char *
-read_token (const char *p, reader_stack *st)
+read_token (const char *p, reader_stack * st)
{
p += count_whitespace (p);
switch (p[0])
}
*--(st->pos) = (object)
{
- .fix32.type = type,.fix32.rest = 0,.fix32.val = st->framelen,};
+ .fix32.type = type,.fix32.rest = 0,.fix32.val = (fix32_val)
+ {
+ .n = st->framelen}
+ ,};
st->framelen = 0;
break;
}
// pop frame, push new LIST
st->pos += st->framelen;
assert (st->pos->type == type);
- st->framelen = st->pos->fix32.val + 1;
+ st->framelen = st->pos->fix32.val.n + 1;
// overwrite the frame marker with the collection it became
- st->pos->list = (list_object)
- {
- .type = type,.rest = 0,.head = o};
+ st->pos->list = new_list (o);
+ st->pos->list.type = type;
break;
}
case ']':
uint32_t len = st->framelen;
st->pos += st->framelen;
assert (st->pos->type == EVALTYPE_VECTOR);
- st->framelen = st->pos->fix32.val + 1;
+ st->framelen = st->pos->fix32.val.n + 1;
st->pos->vector = new_vector (h, len);
break;
}
if (n)
return p + n;
- // TODO: try read pname
+ n = count_pname (p);
+ if (n > 0)
+ {
+ (--(st->pos))->atom = new_atom (0);
+ st->framelen++;
+ return p + n;
+ }
fprintf (stderr, "read unimplemented for char: '%c'\n", *p);
assert (0 && "read unimplemented for char");