experimenting with the new reader
This commit is contained in:
parent
554667b227
commit
b327791484
44
bin/main.c
44
bin/main.c
@ -810,7 +810,7 @@ static int handle_logopt (hcl_t* hcl, const hcl_bch_t* str)
|
|||||||
#if defined(HCL_BUILD_DEBUG)
|
#if defined(HCL_BUILD_DEBUG)
|
||||||
static int handle_dbgopt (hcl_t* hcl, const hcl_bch_t* str)
|
static int handle_dbgopt (hcl_t* hcl, const hcl_bch_t* str)
|
||||||
{
|
{
|
||||||
xtn_t* xtn = (xtn_t*)hcl_getxtn(hcl);
|
/*xtn_t* xtn = (xtn_t*)hcl_getxtn(hcl);*/
|
||||||
const hcl_bch_t* cm, * flt;
|
const hcl_bch_t* cm, * flt;
|
||||||
hcl_oow_t len;
|
hcl_oow_t len;
|
||||||
hcl_bitmask_t trait, dbgopt = 0;
|
hcl_bitmask_t trait, dbgopt = 0;
|
||||||
@ -1173,6 +1173,48 @@ hcl_logufmt (hcl, HCL_LOG_WARN, fmt, ustr, 0x6789);
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
////////////////////////////
|
||||||
|
{
|
||||||
|
hcl_cnode_t* xx;
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
xx = hcl_read2(hcl);
|
||||||
|
if (!xx)
|
||||||
|
{
|
||||||
|
if (hcl->errnum == HCL_EFINIS)
|
||||||
|
{
|
||||||
|
/* end of input */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (hcl->errnum == HCL_ESYNERR)
|
||||||
|
{
|
||||||
|
print_synerr (hcl);
|
||||||
|
if (xtn->reader_istty && hcl_getsynerrnum(hcl) != HCL_SYNERR_EOF)
|
||||||
|
{
|
||||||
|
/* TODO: drain remaining data in the reader including the actual inputstream and buffered data in hcl */
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcl_logbfmt (hcl, HCL_LOG_STDERR, "ERROR: cannot read object - [%d] %js\n", hcl_geterrnum(hcl), hcl_geterrmsg(hcl));
|
||||||
|
}
|
||||||
|
goto oops;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcl_logbfmt (hcl, HCL_LOG_STDERR, "OK: got cnode - %p\n", xx);
|
||||||
|
hcl_freecnode (hcl, xx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
////////////////////////////
|
||||||
|
#endif
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
hcl_oop_t obj;
|
hcl_oop_t obj;
|
||||||
|
@ -66,6 +66,7 @@ libhcl_la_SOURCES = \
|
|||||||
bigint.c \
|
bigint.c \
|
||||||
cnode.c \
|
cnode.c \
|
||||||
comp.c \
|
comp.c \
|
||||||
|
comp2.c \
|
||||||
debug.c \
|
debug.c \
|
||||||
decode.c \
|
decode.c \
|
||||||
dic.c \
|
dic.c \
|
||||||
@ -83,6 +84,7 @@ libhcl_la_SOURCES = \
|
|||||||
prim.c \
|
prim.c \
|
||||||
print.c \
|
print.c \
|
||||||
rbt.c \
|
rbt.c \
|
||||||
|
read.c \
|
||||||
read2.c \
|
read2.c \
|
||||||
sym.c \
|
sym.c \
|
||||||
utf8.c \
|
utf8.c \
|
||||||
|
@ -151,13 +151,14 @@ am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \
|
|||||||
$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
|
$(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4)
|
||||||
libhcl_la_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__append_6)
|
libhcl_la_DEPENDENCIES = $(am__DEPENDENCIES_5) $(am__append_6)
|
||||||
am_libhcl_la_OBJECTS = libhcl_la-bigint.lo libhcl_la-cnode.lo \
|
am_libhcl_la_OBJECTS = libhcl_la-bigint.lo libhcl_la-cnode.lo \
|
||||||
libhcl_la-comp.lo libhcl_la-debug.lo libhcl_la-decode.lo \
|
libhcl_la-comp.lo libhcl_la-comp2.lo libhcl_la-debug.lo \
|
||||||
libhcl_la-dic.lo libhcl_la-err.lo libhcl_la-exec.lo \
|
libhcl_la-decode.lo libhcl_la-dic.lo libhcl_la-err.lo \
|
||||||
libhcl_la-fmt.lo libhcl_la-gc.lo libhcl_la-hcl.lo \
|
libhcl_la-exec.lo libhcl_la-fmt.lo libhcl_la-gc.lo \
|
||||||
libhcl_la-heap.lo libhcl_la-number.lo libhcl_la-obj.lo \
|
libhcl_la-hcl.lo libhcl_la-heap.lo libhcl_la-number.lo \
|
||||||
libhcl_la-opt.lo libhcl_la-prim.lo libhcl_la-print.lo \
|
libhcl_la-obj.lo libhcl_la-opt.lo libhcl_la-prim.lo \
|
||||||
libhcl_la-rbt.lo libhcl_la-read2.lo libhcl_la-sym.lo \
|
libhcl_la-print.lo libhcl_la-rbt.lo libhcl_la-read.lo \
|
||||||
libhcl_la-utf8.lo libhcl_la-utl.lo libhcl_la-xma.lo
|
libhcl_la-read2.lo libhcl_la-sym.lo libhcl_la-utf8.lo \
|
||||||
|
libhcl_la-utl.lo libhcl_la-xma.lo
|
||||||
libhcl_la_OBJECTS = $(am_libhcl_la_OBJECTS)
|
libhcl_la_OBJECTS = $(am_libhcl_la_OBJECTS)
|
||||||
AM_V_lt = $(am__v_lt_@AM_V@)
|
AM_V_lt = $(am__v_lt_@AM_V@)
|
||||||
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
|
||||||
@ -197,6 +198,7 @@ depcomp = $(SHELL) $(top_srcdir)/ac/depcomp
|
|||||||
am__maybe_remake_depfiles = depfiles
|
am__maybe_remake_depfiles = depfiles
|
||||||
am__depfiles_remade = ./$(DEPDIR)/libhcl_la-bigint.Plo \
|
am__depfiles_remade = ./$(DEPDIR)/libhcl_la-bigint.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-cnode.Plo ./$(DEPDIR)/libhcl_la-comp.Plo \
|
./$(DEPDIR)/libhcl_la-cnode.Plo ./$(DEPDIR)/libhcl_la-comp.Plo \
|
||||||
|
./$(DEPDIR)/libhcl_la-comp2.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-debug.Plo \
|
./$(DEPDIR)/libhcl_la-debug.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-decode.Plo ./$(DEPDIR)/libhcl_la-dic.Plo \
|
./$(DEPDIR)/libhcl_la-decode.Plo ./$(DEPDIR)/libhcl_la-dic.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-err.Plo ./$(DEPDIR)/libhcl_la-exec.Plo \
|
./$(DEPDIR)/libhcl_la-err.Plo ./$(DEPDIR)/libhcl_la-exec.Plo \
|
||||||
@ -205,9 +207,9 @@ am__depfiles_remade = ./$(DEPDIR)/libhcl_la-bigint.Plo \
|
|||||||
./$(DEPDIR)/libhcl_la-number.Plo ./$(DEPDIR)/libhcl_la-obj.Plo \
|
./$(DEPDIR)/libhcl_la-number.Plo ./$(DEPDIR)/libhcl_la-obj.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-opt.Plo ./$(DEPDIR)/libhcl_la-prim.Plo \
|
./$(DEPDIR)/libhcl_la-opt.Plo ./$(DEPDIR)/libhcl_la-prim.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-print.Plo ./$(DEPDIR)/libhcl_la-rbt.Plo \
|
./$(DEPDIR)/libhcl_la-print.Plo ./$(DEPDIR)/libhcl_la-rbt.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-read2.Plo ./$(DEPDIR)/libhcl_la-sym.Plo \
|
./$(DEPDIR)/libhcl_la-read.Plo ./$(DEPDIR)/libhcl_la-read2.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-utf8.Plo ./$(DEPDIR)/libhcl_la-utl.Plo \
|
./$(DEPDIR)/libhcl_la-sym.Plo ./$(DEPDIR)/libhcl_la-utf8.Plo \
|
||||||
./$(DEPDIR)/libhcl_la-xma.Plo \
|
./$(DEPDIR)/libhcl_la-utl.Plo ./$(DEPDIR)/libhcl_la-xma.Plo \
|
||||||
./$(DEPDIR)/libhclx_la-cb-impl.Plo \
|
./$(DEPDIR)/libhclx_la-cb-impl.Plo \
|
||||||
./$(DEPDIR)/libhclx_la-hcl-c.Plo \
|
./$(DEPDIR)/libhclx_la-hcl-c.Plo \
|
||||||
./$(DEPDIR)/libhclx_la-hcl-s.Plo \
|
./$(DEPDIR)/libhclx_la-hcl-s.Plo \
|
||||||
@ -438,6 +440,7 @@ libhcl_la_SOURCES = \
|
|||||||
bigint.c \
|
bigint.c \
|
||||||
cnode.c \
|
cnode.c \
|
||||||
comp.c \
|
comp.c \
|
||||||
|
comp2.c \
|
||||||
debug.c \
|
debug.c \
|
||||||
decode.c \
|
decode.c \
|
||||||
dic.c \
|
dic.c \
|
||||||
@ -455,6 +458,7 @@ libhcl_la_SOURCES = \
|
|||||||
prim.c \
|
prim.c \
|
||||||
print.c \
|
print.c \
|
||||||
rbt.c \
|
rbt.c \
|
||||||
|
read.c \
|
||||||
read2.c \
|
read2.c \
|
||||||
sym.c \
|
sym.c \
|
||||||
utf8.c \
|
utf8.c \
|
||||||
@ -575,6 +579,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-bigint.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-bigint.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-cnode.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-cnode.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-comp.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-comp.Plo@am__quote@ # am--include-marker
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-comp2.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-debug.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-debug.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-decode.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-decode.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-dic.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-dic.Plo@am__quote@ # am--include-marker
|
||||||
@ -590,6 +595,7 @@ distclean-compile:
|
|||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-prim.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-prim.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-print.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-print.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-rbt.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-rbt.Plo@am__quote@ # am--include-marker
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-read.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-read2.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-read2.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-sym.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-sym.Plo@am__quote@ # am--include-marker
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-utf8.Plo@am__quote@ # am--include-marker
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhcl_la-utf8.Plo@am__quote@ # am--include-marker
|
||||||
@ -653,6 +659,13 @@ libhcl_la-comp.lo: comp.c
|
|||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhcl_la-comp.lo `test -f 'comp.c' || echo '$(srcdir)/'`comp.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhcl_la-comp.lo `test -f 'comp.c' || echo '$(srcdir)/'`comp.c
|
||||||
|
|
||||||
|
libhcl_la-comp2.lo: comp2.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhcl_la-comp2.lo -MD -MP -MF $(DEPDIR)/libhcl_la-comp2.Tpo -c -o libhcl_la-comp2.lo `test -f 'comp2.c' || echo '$(srcdir)/'`comp2.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhcl_la-comp2.Tpo $(DEPDIR)/libhcl_la-comp2.Plo
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='comp2.c' object='libhcl_la-comp2.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhcl_la-comp2.lo `test -f 'comp2.c' || echo '$(srcdir)/'`comp2.c
|
||||||
|
|
||||||
libhcl_la-debug.lo: debug.c
|
libhcl_la-debug.lo: debug.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhcl_la-debug.lo -MD -MP -MF $(DEPDIR)/libhcl_la-debug.Tpo -c -o libhcl_la-debug.lo `test -f 'debug.c' || echo '$(srcdir)/'`debug.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhcl_la-debug.lo -MD -MP -MF $(DEPDIR)/libhcl_la-debug.Tpo -c -o libhcl_la-debug.lo `test -f 'debug.c' || echo '$(srcdir)/'`debug.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhcl_la-debug.Tpo $(DEPDIR)/libhcl_la-debug.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhcl_la-debug.Tpo $(DEPDIR)/libhcl_la-debug.Plo
|
||||||
@ -758,6 +771,13 @@ libhcl_la-rbt.lo: rbt.c
|
|||||||
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhcl_la-rbt.lo `test -f 'rbt.c' || echo '$(srcdir)/'`rbt.c
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhcl_la-rbt.lo `test -f 'rbt.c' || echo '$(srcdir)/'`rbt.c
|
||||||
|
|
||||||
|
libhcl_la-read.lo: read.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhcl_la-read.lo -MD -MP -MF $(DEPDIR)/libhcl_la-read.Tpo -c -o libhcl_la-read.lo `test -f 'read.c' || echo '$(srcdir)/'`read.c
|
||||||
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhcl_la-read.Tpo $(DEPDIR)/libhcl_la-read.Plo
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='read.c' object='libhcl_la-read.lo' libtool=yes @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhcl_la-read.lo `test -f 'read.c' || echo '$(srcdir)/'`read.c
|
||||||
|
|
||||||
libhcl_la-read2.lo: read2.c
|
libhcl_la-read2.lo: read2.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhcl_la-read2.lo -MD -MP -MF $(DEPDIR)/libhcl_la-read2.Tpo -c -o libhcl_la-read2.lo `test -f 'read2.c' || echo '$(srcdir)/'`read2.c
|
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhcl_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhcl_la-read2.lo -MD -MP -MF $(DEPDIR)/libhcl_la-read2.Tpo -c -o libhcl_la-read2.lo `test -f 'read2.c' || echo '$(srcdir)/'`read2.c
|
||||||
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhcl_la-read2.Tpo $(DEPDIR)/libhcl_la-read2.Plo
|
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhcl_la-read2.Tpo $(DEPDIR)/libhcl_la-read2.Plo
|
||||||
@ -993,6 +1013,7 @@ distclean: distclean-am
|
|||||||
-rm -f ./$(DEPDIR)/libhcl_la-bigint.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-bigint.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-cnode.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-cnode.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-comp.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-comp.Plo
|
||||||
|
-rm -f ./$(DEPDIR)/libhcl_la-comp2.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-debug.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-debug.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-decode.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-decode.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-dic.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-dic.Plo
|
||||||
@ -1008,6 +1029,7 @@ distclean: distclean-am
|
|||||||
-rm -f ./$(DEPDIR)/libhcl_la-prim.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-prim.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-print.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-print.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-rbt.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-rbt.Plo
|
||||||
|
-rm -f ./$(DEPDIR)/libhcl_la-read.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-read2.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-read2.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-sym.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-sym.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-utf8.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-utf8.Plo
|
||||||
@ -1068,6 +1090,7 @@ maintainer-clean: maintainer-clean-am
|
|||||||
-rm -f ./$(DEPDIR)/libhcl_la-bigint.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-bigint.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-cnode.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-cnode.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-comp.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-comp.Plo
|
||||||
|
-rm -f ./$(DEPDIR)/libhcl_la-comp2.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-debug.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-debug.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-decode.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-decode.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-dic.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-dic.Plo
|
||||||
@ -1083,6 +1106,7 @@ maintainer-clean: maintainer-clean-am
|
|||||||
-rm -f ./$(DEPDIR)/libhcl_la-prim.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-prim.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-print.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-print.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-rbt.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-rbt.Plo
|
||||||
|
-rm -f ./$(DEPDIR)/libhcl_la-read.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-read2.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-read2.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-sym.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-sym.Plo
|
||||||
-rm -f ./$(DEPDIR)/libhcl_la-utf8.Plo
|
-rm -f ./$(DEPDIR)/libhcl_la-utf8.Plo
|
||||||
|
@ -167,8 +167,9 @@ redo:
|
|||||||
hcl_cnode_t* tmp;
|
hcl_cnode_t* tmp;
|
||||||
tmp = c->u.list.head;
|
tmp = c->u.list.head;
|
||||||
hcl_freemem (hcl, c);
|
hcl_freemem (hcl, c);
|
||||||
if (tmp)
|
if (tmp) /* it's not set for an empty list */
|
||||||
{
|
{
|
||||||
|
|
||||||
c = tmp;
|
c = tmp;
|
||||||
goto redo;
|
goto redo;
|
||||||
}
|
}
|
||||||
@ -182,7 +183,10 @@ redo:
|
|||||||
tmp1 = c->u.cons.car;
|
tmp1 = c->u.cons.car;
|
||||||
tmp2 = c->u.cons.cdr;
|
tmp2 = c->u.cons.cdr;
|
||||||
|
|
||||||
|
HCL_ASSERT (hcl, tmp1 != HCL_NULL);
|
||||||
hcl_freemem (hcl, c);
|
hcl_freemem (hcl, c);
|
||||||
|
|
||||||
|
|
||||||
hcl_freecnode (hcl, tmp1); /* TODO: remove recursion? */
|
hcl_freecnode (hcl, tmp1); /* TODO: remove recursion? */
|
||||||
|
|
||||||
if (tmp2)
|
if (tmp2)
|
||||||
@ -190,9 +194,12 @@ redo:
|
|||||||
c = tmp2;
|
c = tmp2;
|
||||||
goto redo;
|
goto redo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
hcl_freemem (hcl, c);
|
hcl_freemem (hcl, c);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2770,7 +2770,7 @@ static HCL_INLINE int emit_set (hcl_t* hcl)
|
|||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
int hcl_compile (hcl_t* hcl, hcl_oop_t obj)
|
int hcl_compile2 (hcl_t* hcl, hcl_oop_t obj)
|
||||||
{
|
{
|
||||||
hcl_oow_t saved_bc_len, saved_lit_len;
|
hcl_oow_t saved_bc_len, saved_lit_len;
|
||||||
hcl_bitmask_t log_default_type_mask;
|
hcl_bitmask_t log_default_type_mask;
|
||||||
|
2993
lib/comp2.c
Normal file
2993
lib/comp2.c
Normal file
File diff suppressed because it is too large
Load Diff
@ -216,7 +216,6 @@ enum hcl_cnode_type_t
|
|||||||
typedef enum hcl_cnode_type_t hcl_cnode_type_t;
|
typedef enum hcl_cnode_type_t hcl_cnode_type_t;
|
||||||
|
|
||||||
/* NOTE: hcl_cnode_t used by the built-in compiler is not an OOP object */
|
/* NOTE: hcl_cnode_t used by the built-in compiler is not an OOP object */
|
||||||
typedef struct hcl_cnode_t hcl_cnode_t;
|
|
||||||
struct hcl_cnode_t
|
struct hcl_cnode_t
|
||||||
{
|
{
|
||||||
hcl_cnode_type_t type;
|
hcl_cnode_type_t type;
|
||||||
@ -376,9 +375,7 @@ struct hcl_compiler_t
|
|||||||
{
|
{
|
||||||
hcl_oop_t s; /* stack for reading */
|
hcl_oop_t s; /* stack for reading */
|
||||||
hcl_oop_t e; /* last object read */
|
hcl_oop_t e; /* last object read */
|
||||||
|
|
||||||
hcl_rstl_t* st;
|
hcl_rstl_t* st;
|
||||||
hcl_cnode_t* ecn; /* last object cnode read */
|
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
@ -1368,6 +1368,7 @@ struct hcl_synerr_t
|
|||||||
|
|
||||||
#if defined(HCL_INCLUDE_COMPILER)
|
#if defined(HCL_INCLUDE_COMPILER)
|
||||||
typedef struct hcl_compiler_t hcl_compiler_t;
|
typedef struct hcl_compiler_t hcl_compiler_t;
|
||||||
|
typedef struct hcl_cnode_t hcl_cnode_t;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define HCL_ERRMSG_CAPA (2048)
|
#define HCL_ERRMSG_CAPA (2048)
|
||||||
@ -1977,6 +1978,10 @@ HCL_EXPORT hcl_oop_t hcl_read (
|
|||||||
hcl_t* hcl
|
hcl_t* hcl
|
||||||
);
|
);
|
||||||
|
|
||||||
|
HCL_EXPORT hcl_cnode_t* hcl_read2 (
|
||||||
|
hcl_t* hcl
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
HCL_EXPORT int hcl_print (
|
HCL_EXPORT int hcl_print (
|
||||||
hcl_t* hcl,
|
hcl_t* hcl,
|
||||||
|
107
lib/read2.c
107
lib/read2.c
@ -414,7 +414,7 @@ static HCL_INLINE int add_token_char (hcl_t* hcl, hcl_ooch_t c)
|
|||||||
|
|
||||||
tmp.ptr = &c;
|
tmp.ptr = &c;
|
||||||
tmp.len = 1;
|
tmp.len = 1;
|
||||||
return copy_string_to (hcl, &tmp, TOKEN_NAME(hcl), &TOKEN_NAME_CAPA(hcl), 1, '\0');
|
return copy_string_to(hcl, &tmp, TOKEN_NAME(hcl), &TOKEN_NAME_CAPA(hcl), 1, '\0');
|
||||||
}
|
}
|
||||||
|
|
||||||
static HCL_INLINE void unget_char (hcl_t* hcl, const hcl_iolxc_t* c)
|
static HCL_INLINE void unget_char (hcl_t* hcl, const hcl_iolxc_t* c)
|
||||||
@ -1438,6 +1438,7 @@ static HCL_INLINE hcl_cnode_t* leave_list (hcl_t* hcl, int* flagv, int* oldflagv
|
|||||||
if (fv & (COMMAED | COLONED))
|
if (fv & (COMMAED | COLONED))
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, ((fv & COMMAED)? HCL_SYNERR_COMMANOVALUE: HCL_SYNERR_COLONNOVALUE), TOKEN_LOC(hcl), HCL_NULL);
|
hcl_setsynerr (hcl, ((fv & COMMAED)? HCL_SYNERR_COMMANOVALUE: HCL_SYNERR_COLONNOVALUE), TOKEN_LOC(hcl), HCL_NULL);
|
||||||
|
if (head) hcl_freecnode (hcl, head);
|
||||||
return HCL_NULL;
|
return HCL_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1455,12 +1456,12 @@ static HCL_INLINE hcl_cnode_t* leave_list (hcl_t* hcl, int* flagv, int* oldflagv
|
|||||||
*flagv = hcl->c->r.st->flagv;
|
*flagv = hcl->c->r.st->flagv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* return the head of the list being left */
|
|
||||||
|
|
||||||
/* NOTE: empty xlist will get translated to #nil.
|
/* NOTE: empty xlist will get translated to #nil.
|
||||||
* this is useful when used in the lambda expression to express an empty argument. also in defun.
|
* this is useful when used in the lambda expression to express an empty argument. also in defun.
|
||||||
* (lambda () ...) is equivalent to (lambda #nil ...)
|
* (lambda () ...) is equivalent to (lambda #nil ...)
|
||||||
* (defun x() ...) */
|
* (defun x() ...) */
|
||||||
|
|
||||||
|
/* [NOTE] the head is NULL if the list is empty */
|
||||||
list = hcl_makecnodelist(hcl, &loc, concode, head);
|
list = hcl_makecnodelist(hcl, &loc, concode, head);
|
||||||
if (HCL_UNLIKELY(!list)) hcl_freecnode (hcl, head);
|
if (HCL_UNLIKELY(!list)) hcl_freecnode (hcl, head);
|
||||||
return list;
|
return list;
|
||||||
@ -1537,7 +1538,7 @@ static HCL_INLINE void clear_comma_colon_flag (hcl_t* hcl)
|
|||||||
rstl->flagv &= ~(COMMAED | COLONED);
|
rstl->flagv &= ~(COMMAED | COLONED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static hcl_cnode_t* chain_to_list (hcl_t* hcl, hcl_cnode_t* obj)
|
static int chain_to_list (hcl_t* hcl, hcl_cnode_t* obj)
|
||||||
{
|
{
|
||||||
hcl_rstl_t* rstl;
|
hcl_rstl_t* rstl;
|
||||||
int flagv;
|
int flagv;
|
||||||
@ -1555,7 +1556,7 @@ static hcl_cnode_t* chain_to_list (hcl_t* hcl, hcl_cnode_t* obj)
|
|||||||
* allowed. so i can safely hard-code the error code to
|
* allowed. so i can safely hard-code the error code to
|
||||||
* HCL_SYNERR_RBRACK. */
|
* HCL_SYNERR_RBRACK. */
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_RBRACK, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_RBRACK, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return HCL_NULL;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (flagv & DOTTED)
|
else if (flagv & DOTTED)
|
||||||
{
|
{
|
||||||
@ -1587,11 +1588,11 @@ static hcl_cnode_t* chain_to_list (hcl_t* hcl, hcl_cnode_t* obj)
|
|||||||
/* there is no separator between array/dictionary elements
|
/* there is no separator between array/dictionary elements
|
||||||
* for instance, [1 2] { 10 20 } */
|
* for instance, [1 2] { 10 20 } */
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_NOSEP, TOKEN_LOC(hcl), HCL_NULL);
|
hcl_setsynerr (hcl, HCL_SYNERR_NOSEP, TOKEN_LOC(hcl), HCL_NULL);
|
||||||
return HCL_NULL;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
cons = hcl_makecnodecons(hcl, &obj->loc, obj, HCL_NULL);
|
cons = hcl_makecnodecons(hcl, &obj->loc, obj, HCL_NULL);
|
||||||
if (HCL_UNLIKELY(!cons)) return HCL_NULL;
|
if (HCL_UNLIKELY(!cons)) return -1;
|
||||||
|
|
||||||
if (rstl->count <= 0)
|
if (rstl->count <= 0)
|
||||||
{
|
{
|
||||||
@ -1610,7 +1611,7 @@ static hcl_cnode_t* chain_to_list (hcl_t* hcl, hcl_cnode_t* obj)
|
|||||||
* append it to the list */
|
* append it to the list */
|
||||||
tail = rstl->tail;
|
tail = rstl->tail;
|
||||||
HCL_ASSERT (hcl, tail->type == HCL_CNODE_CONS);
|
HCL_ASSERT (hcl, tail->type == HCL_CNODE_CONS);
|
||||||
tail->u.cons.cdr = obj;
|
tail->u.cons.cdr = cons;
|
||||||
rstl->tail = cons;
|
rstl->tail = cons;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1618,7 +1619,7 @@ static hcl_cnode_t* chain_to_list (hcl_t* hcl, hcl_cnode_t* obj)
|
|||||||
rstl->count++;
|
rstl->count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static hcl_cnode_t* read_vlist (hcl_t* hcl)
|
static hcl_cnode_t* read_vlist (hcl_t* hcl)
|
||||||
@ -1686,13 +1687,13 @@ oops:
|
|||||||
return HCL_NULL;
|
return HCL_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_object (hcl_t* hcl)
|
static hcl_cnode_t* read_object (hcl_t* hcl)
|
||||||
{
|
{
|
||||||
/* this function read an s-expression non-recursively
|
/* this function read an s-expression non-recursively
|
||||||
* by manipulating its own stack. */
|
* by manipulating its own stack. */
|
||||||
|
|
||||||
int level = 0, array_level = 0, flagv = 0;
|
int level = 0, array_level = 0, flagv = 0;
|
||||||
hcl_cnode_t* obj;
|
hcl_cnode_t* obj = HCL_NULL;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
@ -1701,11 +1702,11 @@ static int read_object (hcl_t* hcl)
|
|||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_ILTOK, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_ILTOK, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
|
|
||||||
case HCL_IOTOK_EOF:
|
case HCL_IOTOK_EOF:
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_EOF, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_EOF, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
|
|
||||||
case HCL_IOTOK_INCLUDE:
|
case HCL_IOTOK_INCLUDE:
|
||||||
/* TODO: should i limit where #include can be specified?
|
/* TODO: should i limit where #include can be specified?
|
||||||
@ -1714,9 +1715,9 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (TOKEN_TYPE(hcl) != HCL_IOTOK_STRLIT)
|
if (TOKEN_TYPE(hcl) != HCL_IOTOK_STRLIT)
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_STRING, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_STRING, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
if (begin_include(hcl) <= -1) return -1;
|
if (begin_include(hcl) <= -1) goto oops;
|
||||||
goto redo;
|
goto redo;
|
||||||
|
|
||||||
case HCL_IOTOK_LBRACK: /* [] */
|
case HCL_IOTOK_LBRACK: /* [] */
|
||||||
@ -1737,7 +1738,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
case HCL_IOTOK_QLPAREN: /* #() */
|
case HCL_IOTOK_QLPAREN: /* #() */
|
||||||
#if 1
|
#if 1
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_ILTOK, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_ILTOK, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
#else
|
#else
|
||||||
flagv = 0;
|
flagv = 0;
|
||||||
LIST_FLAG_SET_CONCODE (flagv, HCL_CONCODE_QLIST);
|
LIST_FLAG_SET_CONCODE (flagv, HCL_CONCODE_QLIST);
|
||||||
@ -1752,17 +1753,17 @@ static int read_object (hcl_t* hcl)
|
|||||||
{
|
{
|
||||||
/* the nesting level has become too deep */
|
/* the nesting level has become too deep */
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_NESTING, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_NESTING, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* push some data to simulate recursion into
|
/* push some data to simulate recursion into
|
||||||
* a list literal or an array literal */
|
* a list literal or an array literal */
|
||||||
if (enter_list(hcl, TOKEN_LOC(hcl), flagv) <= -1) return -1;
|
if (enter_list(hcl, TOKEN_LOC(hcl), flagv) <= -1) goto oops;
|
||||||
level++;
|
level++;
|
||||||
if (LIST_FLAG_GET_CONCODE(flagv) == HCL_CONCODE_ARRAY) array_level++;
|
if (LIST_FLAG_GET_CONCODE(flagv) == HCL_CONCODE_ARRAY) array_level++;
|
||||||
|
|
||||||
/* read the next token */
|
/* read the next token */
|
||||||
GET_TOKEN (hcl);
|
GET_TOKEN_WITH_GOTO (hcl, oops);
|
||||||
goto redo;
|
goto redo;
|
||||||
|
|
||||||
case HCL_IOTOK_DOT:
|
case HCL_IOTOK_DOT:
|
||||||
@ -1773,30 +1774,30 @@ static int read_object (hcl_t* hcl)
|
|||||||
* 2. at the beginning of a list
|
* 2. at the beginning of a list
|
||||||
* 3. inside an #(), #[], #{}, () */
|
* 3. inside an #(), #[], #{}, () */
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_DOTBANNED, TOKEN_LOC(hcl), HCL_NULL);
|
hcl_setsynerr (hcl, HCL_SYNERR_DOTBANNED, TOKEN_LOC(hcl), HCL_NULL);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_TOKEN (hcl);
|
GET_TOKEN_WITH_GOTO (hcl, oops);
|
||||||
goto redo;
|
goto redo;
|
||||||
|
|
||||||
case HCL_IOTOK_COLON:
|
case HCL_IOTOK_COLON:
|
||||||
if (level <= 0 || !can_colon_list(hcl))
|
if (level <= 0 || !can_colon_list(hcl))
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_COLONBANNED, TOKEN_LOC(hcl), HCL_NULL);
|
hcl_setsynerr (hcl, HCL_SYNERR_COLONBANNED, TOKEN_LOC(hcl), HCL_NULL);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_TOKEN (hcl);
|
GET_TOKEN_WITH_GOTO (hcl, oops);
|
||||||
goto redo;
|
goto redo;
|
||||||
|
|
||||||
case HCL_IOTOK_COMMA:
|
case HCL_IOTOK_COMMA:
|
||||||
if (level <= 0 || !can_comma_list(hcl))
|
if (level <= 0 || !can_comma_list(hcl))
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_COMMABANNED, TOKEN_LOC(hcl), HCL_NULL);
|
hcl_setsynerr (hcl, HCL_SYNERR_COMMABANNED, TOKEN_LOC(hcl), HCL_NULL);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
GET_TOKEN (hcl);
|
GET_TOKEN_WITH_GOTO (hcl, oops);
|
||||||
goto redo;
|
goto redo;
|
||||||
|
|
||||||
case HCL_IOTOK_RPAREN: /* xlist (), qlist #() */
|
case HCL_IOTOK_RPAREN: /* xlist (), qlist #() */
|
||||||
@ -1822,7 +1823,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (level <= 0)
|
if (level <= 0)
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_UNBALPBB, TOKEN_LOC(hcl), HCL_NULL);
|
hcl_setsynerr (hcl, HCL_SYNERR_UNBALPBB, TOKEN_LOC(hcl), HCL_NULL);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
concode = LIST_FLAG_GET_CONCODE(flagv);
|
concode = LIST_FLAG_GET_CONCODE(flagv);
|
||||||
@ -1830,7 +1831,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (req[concode].closer != TOKEN_TYPE(hcl))
|
if (req[concode].closer != TOKEN_TYPE(hcl))
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, req[concode].synerr, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, req[concode].synerr, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -1854,7 +1855,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
* indicated by level<=0.
|
* indicated by level<=0.
|
||||||
*/
|
*/
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_LPAREN, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_LPAREN, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
obj = leave_list(hcl, &flagv, &oldflagv);
|
obj = leave_list(hcl, &flagv, &oldflagv);
|
||||||
@ -1870,7 +1871,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (array_level > 0) /* TODO: this check is wrong... i think .. */
|
if (array_level > 0) /* TODO: this check is wrong... i think .. */
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_VBARBANNED, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_VBARBANNED, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
obj = read_vlist(hcl);
|
obj = read_vlist(hcl);
|
||||||
break;
|
break;
|
||||||
@ -1902,7 +1903,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (!HCL_IN_SMPTR_RANGE(v))
|
if (!HCL_IN_SMPTR_RANGE(v))
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_SMPTRLIT, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_SMPTRLIT, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
obj = hcl_makecnodesmptrlit(hcl, TOKEN_LOC(hcl), v);
|
obj = hcl_makecnodesmptrlit(hcl, TOKEN_LOC(hcl), v);
|
||||||
@ -1923,7 +1924,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (v > HCL_ERROR_MAX)
|
if (v > HCL_ERROR_MAX)
|
||||||
{
|
{
|
||||||
hcl_setsynerr (hcl, HCL_SYNERR_ERRLIT, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
hcl_setsynerr (hcl, HCL_SYNERR_ERRLIT, TOKEN_LOC(hcl), TOKEN_NAME(hcl));
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1979,7 +1980,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
if (!pfbase)
|
if (!pfbase)
|
||||||
{
|
{
|
||||||
/* TODO switch to syntax error */
|
/* TODO switch to syntax error */
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
hcl_pushvolat (hcl, &obj);
|
hcl_pushvolat (hcl, &obj);
|
||||||
@ -2005,13 +2006,13 @@ static int read_object (hcl_t* hcl)
|
|||||||
default:
|
default:
|
||||||
hcl_popvolat (hcl);
|
hcl_popvolat (hcl);
|
||||||
hcl_seterrbfmt (hcl, HCL_EINVAL, "invalid pfbase type - %d\n", pfbase->type);
|
hcl_seterrbfmt (hcl, HCL_EINVAL, "invalid pfbase type - %d\n", pfbase->type);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!val || !hcl_putatsysdic(hcl, obj, val))
|
if (!val || !hcl_putatsysdic(hcl, obj, val))
|
||||||
{
|
{
|
||||||
hcl_popvolat (hcl);
|
hcl_popvolat (hcl);
|
||||||
return -1;
|
goto oops;
|
||||||
}
|
}
|
||||||
hcl_popvolat (hcl);
|
hcl_popvolat (hcl);
|
||||||
|
|
||||||
@ -2023,7 +2024,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!obj) return -1;
|
if (!obj) goto oops;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* check if the element is read for a quoted list */
|
/* check if the element is read for a quoted list */
|
||||||
@ -2034,11 +2035,7 @@ static int read_object (hcl_t* hcl)
|
|||||||
HCL_ASSERT (hcl, level > 0);
|
HCL_ASSERT (hcl, level > 0);
|
||||||
|
|
||||||
/* if so, append the element read into the quote list */
|
/* if so, append the element read into the quote list */
|
||||||
if (chain_to_list(hcl, obj) == HCL_NULL)
|
if (chain_to_list(hcl, obj) <= -1) goto oops;
|
||||||
{
|
|
||||||
hcl_freecnode (hcl, obj);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* exit out of the quoted list. the quoted list can have
|
/* exit out of the quoted list. the quoted list can have
|
||||||
* one element only. */
|
* one element only. */
|
||||||
@ -2056,43 +2053,38 @@ static int read_object (hcl_t* hcl)
|
|||||||
|
|
||||||
/* if not, append the element read into the current list.
|
/* if not, append the element read into the current list.
|
||||||
* if we are not at the top level, we must be in a list */
|
* if we are not at the top level, we must be in a list */
|
||||||
if (chain_to_list(hcl, obj) == HCL_NULL)
|
if (chain_to_list(hcl, obj) <= -1) goto oops;
|
||||||
{
|
|
||||||
hcl_freecnode (hcl, obj);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
clear_comma_colon_flag (hcl);
|
clear_comma_colon_flag (hcl);
|
||||||
|
|
||||||
/* read the next token */
|
/* read the next token */
|
||||||
GET_TOKEN (hcl);
|
GET_TOKEN_WITH_GOTO (hcl, oops);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* upon exit, we must be at the top level */
|
/* upon exit, we must be at the top level */
|
||||||
HCL_ASSERT (hcl, level == 0);
|
HCL_ASSERT (hcl, level == 0);
|
||||||
HCL_ASSERT (hcl, array_level == 0);
|
HCL_ASSERT (hcl, array_level == 0);
|
||||||
|
|
||||||
hcl->c->r.ecn = obj;
|
return obj;
|
||||||
return 0;
|
|
||||||
|
oops:
|
||||||
|
if (obj) hcl_freecnode (hcl, obj);
|
||||||
|
return HCL_NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HCL_INLINE int __read (hcl_t* hcl)
|
hcl_cnode_t* hcl_read2 (hcl_t* hcl)
|
||||||
{
|
{
|
||||||
if (get_token(hcl) <= -1) return -1;
|
HCL_ASSERT (hcl, hcl->c && hcl->c->reader);
|
||||||
|
if (get_token(hcl) <= -1) return HCL_NULL;
|
||||||
if (TOKEN_TYPE(hcl) == HCL_IOTOK_EOF)
|
if (TOKEN_TYPE(hcl) == HCL_IOTOK_EOF)
|
||||||
{
|
{
|
||||||
hcl_seterrnum (hcl, HCL_EFINIS);
|
hcl_seterrnum (hcl, HCL_EFINIS);
|
||||||
return -1;
|
return HCL_NULL;
|
||||||
}
|
}
|
||||||
return read_object(hcl);
|
return read_object(hcl);
|
||||||
}
|
}
|
||||||
|
|
||||||
hcl_oop_t hcl_read (hcl_t* hcl)
|
|
||||||
{
|
|
||||||
HCL_ASSERT (hcl, hcl->c && hcl->c->reader);
|
|
||||||
if (__read(hcl) <= -1) return HCL_NULL;
|
|
||||||
return hcl->c->r.e;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
/* TODO: rename compiler to something else that can include reader, printer, and compiler
|
/* TODO: rename compiler to something else that can include reader, printer, and compiler
|
||||||
@ -2329,3 +2321,4 @@ int hcl_unreadchar (hcl_t* hcl, const hcl_iolxc_t* c)
|
|||||||
unget_char (hcl, c);
|
unget_char (hcl, c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user