From 4c1a50df8347d1fabc8cebe1f69ad2da4ada2a1d Mon Sep 17 00:00:00 2001 From: hyung-hwan Date: Sun, 1 Sep 2024 16:28:40 +0900 Subject: [PATCH] made ALIST callable in XLIST --- lib/comp.c | 4 ++-- lib/print.c | 13 +++++++++++++ t/var-02.hcl | 20 +++++++++++++++++--- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/lib/comp.c b/lib/comp.c index 25448af..9108bf8 100644 --- a/lib/comp.c +++ b/lib/comp.c @@ -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 * ( ...) */ diff --git a/lib/print.c b/lib/print.c index a47ba1a..5b0bf82 100644 --- a/lib/print.c +++ b/lib/print.c @@ -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)); diff --git a/t/var-02.hcl b/t/var-02.hcl index 5dc34b2..ba39146 100644 --- a/t/var-02.hcl +++ b/t/var-02.hcl @@ -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" }