mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-06-30 09:46:39 +02:00
adding set-syn type
This commit is contained in:
parent
05362f3d21
commit
1956e38ba0
2 changed files with 10 additions and 0 deletions
|
@ -156,6 +156,7 @@ enum sexp_types {
|
||||||
SEXP_CND,
|
SEXP_CND,
|
||||||
SEXP_REF,
|
SEXP_REF,
|
||||||
SEXP_SET,
|
SEXP_SET,
|
||||||
|
SEXP_SET_SYN,
|
||||||
SEXP_SEQ,
|
SEXP_SEQ,
|
||||||
SEXP_LIT,
|
SEXP_LIT,
|
||||||
SEXP_STACK,
|
SEXP_STACK,
|
||||||
|
@ -448,6 +449,9 @@ struct sexp_struct {
|
||||||
struct {
|
struct {
|
||||||
sexp var, value, source;
|
sexp var, value, source;
|
||||||
} set;
|
} set;
|
||||||
|
struct {
|
||||||
|
sexp var, value, source;
|
||||||
|
} set_syn;
|
||||||
struct {
|
struct {
|
||||||
sexp name, cell, source;
|
sexp name, cell, source;
|
||||||
} ref;
|
} ref;
|
||||||
|
@ -725,6 +729,7 @@ sexp sexp_make_flonum(sexp ctx, double f);
|
||||||
#define sexp_cndp(x) (sexp_check_tag(x, SEXP_CND))
|
#define sexp_cndp(x) (sexp_check_tag(x, SEXP_CND))
|
||||||
#define sexp_refp(x) (sexp_check_tag(x, SEXP_REF))
|
#define sexp_refp(x) (sexp_check_tag(x, SEXP_REF))
|
||||||
#define sexp_setp(x) (sexp_check_tag(x, SEXP_SET))
|
#define sexp_setp(x) (sexp_check_tag(x, SEXP_SET))
|
||||||
|
#define sexp_set_synp(x) (sexp_check_tag(x, SEXP_SET_SYN))
|
||||||
#define sexp_seqp(x) (sexp_check_tag(x, SEXP_SEQ))
|
#define sexp_seqp(x) (sexp_check_tag(x, SEXP_SEQ))
|
||||||
#define sexp_litp(x) (sexp_check_tag(x, SEXP_LIT))
|
#define sexp_litp(x) (sexp_check_tag(x, SEXP_LIT))
|
||||||
#define sexp_contextp(x) (sexp_check_tag(x, SEXP_CONTEXT))
|
#define sexp_contextp(x) (sexp_check_tag(x, SEXP_CONTEXT))
|
||||||
|
@ -1075,6 +1080,10 @@ SEXP_API sexp sexp_make_unsigned_integer(sexp ctx, sexp_luint_t x);
|
||||||
#define sexp_set_value(x) (sexp_field(x, set, SEXP_SET, value))
|
#define sexp_set_value(x) (sexp_field(x, set, SEXP_SET, value))
|
||||||
#define sexp_set_source(x) (sexp_field(x, set, SEXP_SET, source))
|
#define sexp_set_source(x) (sexp_field(x, set, SEXP_SET, source))
|
||||||
|
|
||||||
|
#define sexp_set_syn_var(x) (sexp_field(x, set, SEXP_SET_SYN, var))
|
||||||
|
#define sexp_set_syn_value(x) (sexp_field(x, set, SEXP_SET_SYN, value))
|
||||||
|
#define sexp_set_syn_source(x) (sexp_field(x, set, SEXP_SET_SYN, source))
|
||||||
|
|
||||||
#define sexp_ref_name(x) (sexp_field(x, ref, SEXP_REF, name))
|
#define sexp_ref_name(x) (sexp_field(x, ref, SEXP_REF, name))
|
||||||
#define sexp_ref_cell(x) ((x)->value.ref.cell)
|
#define sexp_ref_cell(x) ((x)->value.ref.cell)
|
||||||
#define sexp_ref_loc(x) (sexp_cdr(sexp_ref_cell(x)))
|
#define sexp_ref_loc(x) (sexp_cdr(sexp_ref_cell(x)))
|
||||||
|
|
1
sexp.c
1
sexp.c
|
@ -218,6 +218,7 @@ static struct sexp_type_struct _sexp_type_specs[] = {
|
||||||
{SEXP_CND, sexp_offsetof(cnd, test), 4, 4, 0, 0, sexp_sizeof(cnd), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"If", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
{SEXP_CND, sexp_offsetof(cnd, test), 4, 4, 0, 0, sexp_sizeof(cnd), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"If", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
||||||
{SEXP_REF, sexp_offsetof(ref, name), 3, 3, 0, 0, sexp_sizeof(ref), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Ref", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
{SEXP_REF, sexp_offsetof(ref, name), 3, 3, 0, 0, sexp_sizeof(ref), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Ref", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
||||||
{SEXP_SET, sexp_offsetof(set, var), 3, 3, 0, 0, sexp_sizeof(set), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Set!", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
{SEXP_SET, sexp_offsetof(set, var), 3, 3, 0, 0, sexp_sizeof(set), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Set!", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
||||||
|
{SEXP_SET_SYN, sexp_offsetof(set_syn, var), 3, 3, 0, 0, sexp_sizeof(set_syn), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Set-Syn!", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
||||||
{SEXP_SEQ, sexp_offsetof(seq, ls), 2, 2, 0, 0, sexp_sizeof(seq), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Seq", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
{SEXP_SEQ, sexp_offsetof(seq, ls), 2, 2, 0, 0, sexp_sizeof(seq), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Seq", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
||||||
{SEXP_LIT, sexp_offsetof(lit, value), 2, 2, 0, 0, sexp_sizeof(lit), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Lit", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
{SEXP_LIT, sexp_offsetof(lit, value), 2, 2, 0, 0, sexp_sizeof(lit), 0, 0, 0, 0, 0, 0, 0, 0, (sexp)"Lit", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, (sexp)sexp_write_simple_object, NULL, NULL},
|
||||||
{SEXP_STACK, sexp_offsetof(stack, data), 0, 0, sexp_offsetof(stack, top), 1, sexp_sizeof(stack), offsetof(struct sexp_struct, value.stack.length), sizeof(sexp), 0, 0, 0, 0, 0, 0, (sexp)"Stack", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, NULL, NULL, NULL},
|
{SEXP_STACK, sexp_offsetof(stack, data), 0, 0, sexp_offsetof(stack, top), 1, sexp_sizeof(stack), offsetof(struct sexp_struct, value.stack.length), sizeof(sexp), 0, 0, 0, 0, 0, 0, (sexp)"Stack", SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, SEXP_FALSE, NULL, NULL, NULL},
|
||||||
|
|
Loading…
Add table
Reference in a new issue