made ALIST callable in XLIST
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
hyung-hwan 2024-09-01 16:28:40 +09:00
parent 88e8471014
commit 4c1a50df83
3 changed files with 32 additions and 5 deletions

View File

@ -4214,8 +4214,8 @@ static int compile_cons_xlist_expression (hcl_t* hcl, hcl_cnode_t* obj, int nret
}
else if (HCL_CNODE_IS_SYMBOL(car) || HCL_CNODE_IS_DSYMBOL(car) ||
HCL_CNODE_IS_CONS_CONCODED(car, HCL_CONCODE_XLIST) ||
HCL_CNODE_IS_CONS_CONCODED(car, HCL_CONCODE_MLIST) /* ||
HCL_CNODE_IS_CONS_CONCODED(car, HCL_CONCODE_ALIST)*/) /* NOTE: ALIST is only used in read.c and the reader transforms it to the set expression */
HCL_CNODE_IS_CONS_CONCODED(car, HCL_CONCODE_MLIST) ||
HCL_CNODE_IS_CONS_CONCODED(car, HCL_CONCODE_ALIST))
{
/* normal function call
* (<operator> <operand1> ...) */

View File

@ -829,11 +829,24 @@ void hcl_dumpcnode (hcl_t* hcl, hcl_cnode_t* cnode, int newline)
break;
case HCL_CNODE_CONS:
{
hcl_concode_t cc;
hcl_logbfmt (hcl, HCL_LOG_FATAL, " (");
hcl_dumpcnode (hcl, HCL_CNODE_CONS_CAR(cnode), 0);
cc = HCL_CNODE_CONS_CONCODE(cnode);
switch (cc)
{
case HCL_CONCODE_ALIST:
hcl_logbfmt (hcl, HCL_LOG_FATAL, " := ");
break;
}
hcl_dumpcnode (hcl, HCL_CNODE_CONS_CDR(cnode),0);
hcl_logbfmt (hcl, HCL_LOG_FATAL, ") ");
break;
}
case HCL_CNODE_ELIST:
hcl_logbfmt (hcl, HCL_LOG_FATAL, " () ", HCL_CNODE_GET_TOKLEN(cnode), HCL_CNODE_GET_TOKPTR(cnode));

View File

@ -14,11 +14,25 @@ if (eqv? j 20) {
q := (x 30);
};
if (/= a 900) { print "ERROR: a is not 900\n" } \
if (/= a 900) { printf "ERROR: a is not 900\n" } \
else { printf "OK: %d\n" a };
if (/= b 60) { print "ERROR: b is not 60\n" } \
if (/= b 60) { printf "ERROR: b is not 60\n" } \
else { printf "OK: %d\n" b };
if (/= c 840) { print "ERROR: c is not 840\n" } \
if (/= c 840) { printf "ERROR: c is not 840\n" } \
else { printf "OK: %d\n" c };
[aa,bb,cc] := ((xx := x) 10)
if (/= aa 100) { printf "ERROR: aa is not 100\n" } \
else { printf "OK: %d\n" aa };
if (/= bb 20) { printf "ERROR: bb is not 20\n" } \
else { printf "OK: %d\n" bb };
if (/= cc 80) { printf "ERROR: cc is not 80\n" } \
else { printf "OK: %d\n" cc };
if (nqv? xx x) { printf "ERROR: xx is not equal to x\n"} \
else { printf "OK: xx and x are equal\n" }