coding a better compiler
This commit is contained in:
parent
58ec16aa0a
commit
e4ae7add8b
18
bin/main.c
18
bin/main.c
@ -1207,6 +1207,24 @@ while (1)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
hcl_logbfmt (hcl, HCL_LOG_STDERR, "OK: got cnode - %p\n", xx);
|
hcl_logbfmt (hcl, HCL_LOG_STDERR, "OK: got cnode - %p\n", xx);
|
||||||
|
|
||||||
|
if (hcl_compile2(hcl, xx) <= -1)
|
||||||
|
{
|
||||||
|
hcl_logbfmt (hcl, HCL_LOG_STDERR, "ERR: unable to compile - %p\n", xx);
|
||||||
|
if (hcl->errnum == HCL_ESYNERR)
|
||||||
|
{
|
||||||
|
print_synerr (hcl);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcl_logbfmt (hcl, HCL_LOG_STDERR, "ERROR: cannot compile object - [%d] %js\n", hcl_geterrnum(hcl), hcl_geterrmsg(hcl));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcl_decode (hcl, 0, hcl_getbclen(hcl));
|
||||||
|
}
|
||||||
|
|
||||||
hcl_freecnode (hcl, xx);
|
hcl_freecnode (hcl, xx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,6 @@ 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 \
|
||||||
|
@ -151,14 +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-comp2.lo libhcl_la-debug.lo \
|
libhcl_la-comp.lo libhcl_la-debug.lo libhcl_la-decode.lo \
|
||||||
libhcl_la-decode.lo libhcl_la-dic.lo libhcl_la-err.lo \
|
libhcl_la-dic.lo libhcl_la-err.lo libhcl_la-exec.lo \
|
||||||
libhcl_la-exec.lo libhcl_la-fmt.lo libhcl_la-gc.lo \
|
libhcl_la-fmt.lo libhcl_la-gc.lo libhcl_la-hcl.lo \
|
||||||
libhcl_la-hcl.lo libhcl_la-heap.lo libhcl_la-number.lo \
|
libhcl_la-heap.lo libhcl_la-number.lo libhcl_la-obj.lo \
|
||||||
libhcl_la-obj.lo libhcl_la-opt.lo libhcl_la-prim.lo \
|
libhcl_la-opt.lo libhcl_la-prim.lo libhcl_la-print.lo \
|
||||||
libhcl_la-print.lo libhcl_la-rbt.lo libhcl_la-read.lo \
|
libhcl_la-rbt.lo libhcl_la-read.lo libhcl_la-read2.lo \
|
||||||
libhcl_la-read2.lo libhcl_la-sym.lo libhcl_la-utf8.lo \
|
libhcl_la-sym.lo libhcl_la-utf8.lo libhcl_la-utl.lo \
|
||||||
libhcl_la-utl.lo libhcl_la-xma.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@)
|
||||||
@ -198,7 +198,6 @@ 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 \
|
||||||
@ -394,6 +393,7 @@ pdfdir = @pdfdir@
|
|||||||
prefix = @prefix@
|
prefix = @prefix@
|
||||||
program_transform_name = @program_transform_name@
|
program_transform_name = @program_transform_name@
|
||||||
psdir = @psdir@
|
psdir = @psdir@
|
||||||
|
runstatedir = @runstatedir@
|
||||||
sbindir = @sbindir@
|
sbindir = @sbindir@
|
||||||
sharedstatedir = @sharedstatedir@
|
sharedstatedir = @sharedstatedir@
|
||||||
srcdir = @srcdir@
|
srcdir = @srcdir@
|
||||||
@ -440,7 +440,6 @@ 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 \
|
||||||
@ -579,7 +578,6 @@ 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
|
||||||
@ -659,13 +657,6 @@ 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
|
||||||
@ -1013,7 +1004,6 @@ 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
|
||||||
@ -1090,7 +1080,6 @@ 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
|
||||||
|
14
lib/cnode.c
14
lib/cnode.c
@ -61,11 +61,10 @@ hcl_cnode_t* hcl_makecnodecharlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
hcl_cnode_t* hcl_makecnodesymbol (hcl_t* hcl, const hcl_ioloc_t* loc, int dotted, const hcl_ooch_t* ptr, hcl_oow_t len)
|
hcl_cnode_t* hcl_makecnodesymbol (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len)
|
||||||
{
|
{
|
||||||
hcl_cnode_t* c = make_cnode(hcl, HCL_CNODE_SYMBOL, loc, HCL_SIZEOF(*ptr) * (len + 1));
|
hcl_cnode_t* c = make_cnode(hcl, HCL_CNODE_SYMBOL, loc, HCL_SIZEOF(*ptr) * (len + 1));
|
||||||
if (HCL_UNLIKELY(!c)) return HCL_NULL;
|
if (HCL_UNLIKELY(!c)) return HCL_NULL;
|
||||||
c->u.symbol.dotted = dotted;
|
|
||||||
c->u.symbol.ptr = (hcl_ooch_t*)(c + 1);
|
c->u.symbol.ptr = (hcl_ooch_t*)(c + 1);
|
||||||
c->u.symbol.len = len;
|
c->u.symbol.len = len;
|
||||||
hcl_copy_oochars (c->u.symbol.ptr, ptr, len);
|
hcl_copy_oochars (c->u.symbol.ptr, ptr, len);
|
||||||
@ -73,6 +72,17 @@ hcl_cnode_t* hcl_makecnodesymbol (hcl_t* hcl, const hcl_ioloc_t* loc, int dotted
|
|||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hcl_cnode_t* hcl_makecnodedsymbol (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len)
|
||||||
|
{
|
||||||
|
hcl_cnode_t* c = make_cnode(hcl, HCL_CNODE_DSYMBOL, loc, HCL_SIZEOF(*ptr) * (len + 1));
|
||||||
|
if (HCL_UNLIKELY(!c)) return HCL_NULL;
|
||||||
|
c->u.dsymbol.ptr = (hcl_ooch_t*)(c + 1);
|
||||||
|
c->u.dsymbol.len = len;
|
||||||
|
hcl_copy_oochars (c->u.dsymbol.ptr, ptr, len);
|
||||||
|
c->u.dsymbol.ptr[len] = '\0';
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
hcl_cnode_t* hcl_makecnodestrlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len)
|
hcl_cnode_t* hcl_makecnodestrlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len)
|
||||||
{
|
{
|
||||||
hcl_cnode_t* c = make_cnode(hcl, HCL_CNODE_STRLIT, loc, HCL_SIZEOF(*ptr) * (len + 1));
|
hcl_cnode_t* c = make_cnode(hcl, HCL_CNODE_STRLIT, loc, HCL_SIZEOF(*ptr) * (len + 1));
|
||||||
|
@ -2770,7 +2770,7 @@ static HCL_INLINE int emit_set (hcl_t* hcl)
|
|||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
int hcl_compile2 (hcl_t* hcl, hcl_oop_t obj)
|
int hcl_compile (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;
|
||||||
|
835
lib/comp2.c
835
lib/comp2.c
File diff suppressed because it is too large
Load Diff
@ -89,6 +89,7 @@ static hcl_ooch_t* errstr[] =
|
|||||||
static char* synerrstr[] =
|
static char* synerrstr[] =
|
||||||
{
|
{
|
||||||
"no error",
|
"no error",
|
||||||
|
"internal error",
|
||||||
"illegal character",
|
"illegal character",
|
||||||
"illegal token",
|
"illegal token",
|
||||||
"comment not closed",
|
"comment not closed",
|
||||||
@ -100,6 +101,7 @@ static char* synerrstr[] =
|
|||||||
"wrong error literal",
|
"wrong error literal",
|
||||||
"wrong smptr literal",
|
"wrong smptr literal",
|
||||||
"wrong multi-segment identifer",
|
"wrong multi-segment identifer",
|
||||||
|
"invalid radix for a numeric literal",
|
||||||
|
|
||||||
"sudden end of input",
|
"sudden end of input",
|
||||||
"( expected",
|
"( expected",
|
||||||
|
13
lib/gc.c
13
lib/gc.c
@ -58,6 +58,7 @@ static struct
|
|||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
|
|
||||||
static void compact_symbol_table (hcl_t* hcl, hcl_oop_t _nil)
|
static void compact_symbol_table (hcl_t* hcl, hcl_oop_t _nil)
|
||||||
{
|
{
|
||||||
hcl_oop_char_t symbol;
|
hcl_oop_char_t symbol;
|
||||||
@ -837,3 +838,15 @@ int hcl_ignite (hcl_t* hcl)
|
|||||||
hcl->p.e = hcl->_nil;
|
hcl->p.e = hcl->_nil;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int hcl_getsyncodebyoocs_noseterr (hcl_t* hcl, const hcl_oocs_t* name)
|
||||||
|
{
|
||||||
|
hcl_oow_t i;
|
||||||
|
for (i = 0; i < HCL_COUNTOF(syminfo); i++)
|
||||||
|
{
|
||||||
|
if (hcl_comp_oochars(syminfo[i].ptr, syminfo[i].len, name->ptr, name->len) == 0)
|
||||||
|
return syminfo[i].syncode;
|
||||||
|
}
|
||||||
|
return 0; /* 0 indicates no syntax code found */
|
||||||
|
}
|
||||||
|
109
lib/hcl-prv.h
109
lib/hcl-prv.h
@ -185,6 +185,7 @@ enum hcl_cnode_type_t
|
|||||||
{
|
{
|
||||||
HCL_CNODE_CHARLIT,
|
HCL_CNODE_CHARLIT,
|
||||||
HCL_CNODE_SYMBOL,
|
HCL_CNODE_SYMBOL,
|
||||||
|
HCL_CNODE_DSYMBOL, /* dotted symbol */
|
||||||
HCL_CNODE_STRLIT,
|
HCL_CNODE_STRLIT,
|
||||||
HCL_CNODE_NUMLIT,
|
HCL_CNODE_NUMLIT,
|
||||||
HCL_CNODE_RADNUMLIT,
|
HCL_CNODE_RADNUMLIT,
|
||||||
@ -195,6 +196,7 @@ enum hcl_cnode_type_t
|
|||||||
HCL_CNODE_TRUE,
|
HCL_CNODE_TRUE,
|
||||||
HCL_CNODE_FALSE,
|
HCL_CNODE_FALSE,
|
||||||
|
|
||||||
|
#if 0
|
||||||
HCL_CNODE_AND,
|
HCL_CNODE_AND,
|
||||||
HCL_CNODE_BREAK,
|
HCL_CNODE_BREAK,
|
||||||
HCL_CNODE_DEFUN,
|
HCL_CNODE_DEFUN,
|
||||||
@ -209,6 +211,7 @@ enum hcl_cnode_type_t
|
|||||||
HCL_CNODE_SET,
|
HCL_CNODE_SET,
|
||||||
HCL_CNODE_UNTIL,
|
HCL_CNODE_UNTIL,
|
||||||
HCL_CNODE_WHILE,
|
HCL_CNODE_WHILE,
|
||||||
|
#endif
|
||||||
|
|
||||||
HCL_CNODE_CONS,
|
HCL_CNODE_CONS,
|
||||||
HCL_CNODE_LIST
|
HCL_CNODE_LIST
|
||||||
@ -227,32 +230,14 @@ struct hcl_cnode_t
|
|||||||
{
|
{
|
||||||
hcl_ooch_t v;
|
hcl_ooch_t v;
|
||||||
} charlit;
|
} charlit;
|
||||||
struct
|
|
||||||
{
|
hcl_oocs_t symbol;
|
||||||
int dotted;
|
hcl_oocs_t dsymbol;
|
||||||
hcl_ooch_t* ptr;
|
hcl_oocs_t strlit;
|
||||||
hcl_oow_t len;
|
hcl_oocs_t numlit;
|
||||||
} symbol;
|
hcl_oocs_t radnumlit;
|
||||||
struct
|
hcl_oocs_t fpdeclit;
|
||||||
{
|
|
||||||
hcl_ooch_t* ptr;
|
|
||||||
hcl_oow_t len;
|
|
||||||
} strlit;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
hcl_ooch_t* ptr;
|
|
||||||
hcl_oow_t len;
|
|
||||||
} numlit;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
hcl_ooch_t* ptr;
|
|
||||||
hcl_oow_t len;
|
|
||||||
} radnumlit;
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
hcl_ooch_t* ptr;
|
|
||||||
hcl_oow_t len;
|
|
||||||
} fpdeclit;
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
hcl_oow_t v;
|
hcl_oow_t v;
|
||||||
@ -279,6 +264,7 @@ struct hcl_cframe_t
|
|||||||
{
|
{
|
||||||
int opcode;
|
int opcode;
|
||||||
hcl_oop_t operand;
|
hcl_oop_t operand;
|
||||||
|
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
@ -316,6 +302,48 @@ struct hcl_cframe_t
|
|||||||
};
|
};
|
||||||
typedef struct hcl_cframe_t hcl_cframe_t;
|
typedef struct hcl_cframe_t hcl_cframe_t;
|
||||||
|
|
||||||
|
struct hcl_cframe2_t
|
||||||
|
{
|
||||||
|
int opcode;
|
||||||
|
hcl_cnode_t* operand;
|
||||||
|
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
int var_type;
|
||||||
|
} set;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hcl_ooi_t cond_pos;
|
||||||
|
hcl_ooi_t body_pos;
|
||||||
|
} post_while;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hcl_ooi_t body_pos;
|
||||||
|
} post_if;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hcl_ooi_t index;
|
||||||
|
} array_list;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hcl_ooi_t index;
|
||||||
|
} bytearray_list;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hcl_ooi_t lfbase_pos;
|
||||||
|
hcl_ooi_t lfsize_pos;
|
||||||
|
} lambda;
|
||||||
|
} u;
|
||||||
|
};
|
||||||
|
typedef struct hcl_cframe2_t hcl_cframe2_t;
|
||||||
|
|
||||||
struct hcl_blk_info_t
|
struct hcl_blk_info_t
|
||||||
{
|
{
|
||||||
hcl_oow_t tmprcnt;
|
hcl_oow_t tmprcnt;
|
||||||
@ -334,6 +362,14 @@ struct hcl_rstl_t /* reader stack for list reading */
|
|||||||
hcl_rstl_t* prev;
|
hcl_rstl_t* prev;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct hcl_oocx_t hcl_oocx_t;
|
||||||
|
struct hcl_oocx_t
|
||||||
|
{
|
||||||
|
hcl_oocs_t s;
|
||||||
|
hcl_oow_t capa;
|
||||||
|
};
|
||||||
|
|
||||||
struct hcl_compiler_t
|
struct hcl_compiler_t
|
||||||
{
|
{
|
||||||
/* output handler */
|
/* output handler */
|
||||||
@ -400,6 +436,13 @@ struct hcl_compiler_t
|
|||||||
hcl_ooi_t top;
|
hcl_ooi_t top;
|
||||||
hcl_oow_t capa;
|
hcl_oow_t capa;
|
||||||
} cfs;
|
} cfs;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
hcl_cframe2_t* ptr;
|
||||||
|
hcl_ooi_t top;
|
||||||
|
hcl_oow_t capa;
|
||||||
|
} cfs2;
|
||||||
/* == END COMPILER STACK == */
|
/* == END COMPILER STACK == */
|
||||||
|
|
||||||
struct
|
struct
|
||||||
@ -409,6 +452,8 @@ struct hcl_compiler_t
|
|||||||
hcl_oow_t capa;
|
hcl_oow_t capa;
|
||||||
} tv; /* temporary variables including arguments */
|
} tv; /* temporary variables including arguments */
|
||||||
|
|
||||||
|
hcl_oocx_t tv2;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
hcl_ooi_t depth;
|
hcl_ooi_t depth;
|
||||||
@ -802,7 +847,7 @@ void* hcl_callocheapmem (
|
|||||||
hcl_oow_t size
|
hcl_oow_t size
|
||||||
);
|
);
|
||||||
|
|
||||||
void* hcl_callocheapmem_noerr (
|
void* hcl_callocheapmem_noseterr (
|
||||||
hcl_t* hcl,
|
hcl_t* hcl,
|
||||||
hcl_heap_t* heap,
|
hcl_heap_t* heap,
|
||||||
hcl_oow_t size
|
hcl_oow_t size
|
||||||
@ -901,10 +946,15 @@ hcl_oow_t hcl_getobjpayloadbytes (
|
|||||||
);
|
);
|
||||||
|
|
||||||
void hcl_gc_ms_sweep_lazy (
|
void hcl_gc_ms_sweep_lazy (
|
||||||
hcl_t* moo,
|
hcl_t* hcl,
|
||||||
hcl_oow_t allocsize
|
hcl_oow_t allocsize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
int hcl_getsyncodebyoocs_noseterr (
|
||||||
|
hcl_t* hcl,
|
||||||
|
const hcl_oocs_t* name
|
||||||
|
);
|
||||||
|
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
/* utf8.c */
|
/* utf8.c */
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
@ -1261,7 +1311,8 @@ hcl_cnode_t* hcl_makecnodenil (hcl_t* hcl, const hcl_ioloc_t* loc);
|
|||||||
hcl_cnode_t* hcl_makecnodetrue (hcl_t* hcl, const hcl_ioloc_t* loc);
|
hcl_cnode_t* hcl_makecnodetrue (hcl_t* hcl, const hcl_ioloc_t* loc);
|
||||||
hcl_cnode_t* hcl_makecnodefalse (hcl_t* hcl, const hcl_ioloc_t* loc);
|
hcl_cnode_t* hcl_makecnodefalse (hcl_t* hcl, const hcl_ioloc_t* loc);
|
||||||
hcl_cnode_t* hcl_makecnodecharlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t ch);
|
hcl_cnode_t* hcl_makecnodecharlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t ch);
|
||||||
hcl_cnode_t* hcl_makecnodesymbol (hcl_t* hcl, const hcl_ioloc_t* loc, int dotted, const hcl_ooch_t* ptr, hcl_oow_t len);
|
hcl_cnode_t* hcl_makecnodesymbol (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
||||||
|
hcl_cnode_t* hcl_makecnodedsymbol (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
||||||
hcl_cnode_t* hcl_makecnodestrlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
hcl_cnode_t* hcl_makecnodestrlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
||||||
hcl_cnode_t* hcl_makecnodenumlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
hcl_cnode_t* hcl_makecnodenumlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
||||||
hcl_cnode_t* hcl_makecnoderadnumlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
hcl_cnode_t* hcl_makecnoderadnumlit (hcl_t* hcl, const hcl_ioloc_t* loc, const hcl_ooch_t* ptr, hcl_oow_t len);
|
||||||
|
@ -95,6 +95,7 @@ typedef enum hcl_errnum_t hcl_errnum_t;
|
|||||||
enum hcl_synerrnum_t
|
enum hcl_synerrnum_t
|
||||||
{
|
{
|
||||||
HCL_SYNERR_NOERR,
|
HCL_SYNERR_NOERR,
|
||||||
|
HCL_SYNERR_INTERN, /* internal error */
|
||||||
HCL_SYNERR_ILCHR, /* illegal character */
|
HCL_SYNERR_ILCHR, /* illegal character */
|
||||||
HCL_SYNERR_ILTOK, /* invalid token */
|
HCL_SYNERR_ILTOK, /* invalid token */
|
||||||
HCL_SYNERR_CMTNC, /* comment not closed */
|
HCL_SYNERR_CMTNC, /* comment not closed */
|
||||||
@ -106,6 +107,7 @@ enum hcl_synerrnum_t
|
|||||||
HCL_SYNERR_ERRLIT, /* wrong error literal */
|
HCL_SYNERR_ERRLIT, /* wrong error literal */
|
||||||
HCL_SYNERR_SMPTRLIT, /* wrong smptr literal */
|
HCL_SYNERR_SMPTRLIT, /* wrong smptr literal */
|
||||||
HCL_SYNERR_MSEGIDENT, /* wrong multi-segment identifier */
|
HCL_SYNERR_MSEGIDENT, /* wrong multi-segment identifier */
|
||||||
|
HCL_SYNERR_RADIX, /* invalid radix for a numeric literal */
|
||||||
|
|
||||||
HCL_SYNERR_EOF, /* sudden end of input */
|
HCL_SYNERR_EOF, /* sudden end of input */
|
||||||
HCL_SYNERR_LPAREN, /* ( expected */
|
HCL_SYNERR_LPAREN, /* ( expected */
|
||||||
|
@ -107,7 +107,7 @@ void* hcl_callocheapmem (hcl_t* hcl, hcl_heap_t* heap, hcl_oow_t size)
|
|||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void* hcl_callocheapmem_noerr (hcl_t* hcl, hcl_heap_t* heap, hcl_oow_t size)
|
void* hcl_callocheapmem_noseterr (hcl_t* hcl, hcl_heap_t* heap, hcl_oow_t size)
|
||||||
{
|
{
|
||||||
void* ptr;
|
void* ptr;
|
||||||
ptr = HCL_MMGR_ALLOC(&heap->xmmgr, size);
|
ptr = HCL_MMGR_ALLOC(&heap->xmmgr, size);
|
||||||
|
@ -62,7 +62,7 @@ void* hcl_allocbytes (hcl_t* hcl, hcl_oow_t size)
|
|||||||
|
|
||||||
if (hcl->gci.lazy_sweep) hcl_gc_ms_sweep_lazy (hcl, allocsize);
|
if (hcl->gci.lazy_sweep) hcl_gc_ms_sweep_lazy (hcl, allocsize);
|
||||||
|
|
||||||
gch = (hcl_gchdr_t*)hcl_callocheapmem_noerr(hcl, hcl->heap, allocsize);
|
gch = (hcl_gchdr_t*)hcl_callocheapmem_noseterr(hcl, hcl->heap, allocsize);
|
||||||
if (!gch)
|
if (!gch)
|
||||||
{
|
{
|
||||||
if (HCL_UNLIKELY(hcl->option.trait & HCL_TRAIT_NOGC)) goto calloc_heapmem_fail;
|
if (HCL_UNLIKELY(hcl->option.trait & HCL_TRAIT_NOGC)) goto calloc_heapmem_fail;
|
||||||
@ -71,7 +71,7 @@ void* hcl_allocbytes (hcl_t* hcl, hcl_oow_t size)
|
|||||||
hcl_gc (hcl, 0);
|
hcl_gc (hcl, 0);
|
||||||
if (hcl->gci.lazy_sweep) hcl_gc_ms_sweep_lazy (hcl, allocsize);
|
if (hcl->gci.lazy_sweep) hcl_gc_ms_sweep_lazy (hcl, allocsize);
|
||||||
|
|
||||||
gch = (hcl_gchdr_t*)hcl_callocheapmem_noerr(hcl, hcl->heap, allocsize);
|
gch = (hcl_gchdr_t*)hcl_callocheapmem_noseterr(hcl, hcl->heap, allocsize);
|
||||||
if (HCL_UNLIKELY(!gch))
|
if (HCL_UNLIKELY(!gch))
|
||||||
{
|
{
|
||||||
sweep_the_rest:
|
sweep_the_rest:
|
||||||
|
@ -2256,6 +2256,14 @@ static void fini_compiler (hcl_t* hcl)
|
|||||||
hcl->c->cfs.capa = 0;
|
hcl->c->cfs.capa = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hcl->c->cfs2.ptr)
|
||||||
|
{
|
||||||
|
hcl_freemem (hcl, hcl->c->cfs2.ptr);
|
||||||
|
hcl->c->cfs2.ptr = HCL_NULL;
|
||||||
|
hcl->c->cfs2.top = -1;
|
||||||
|
hcl->c->cfs2.capa = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (hcl->c->tv.ptr)
|
if (hcl->c->tv.ptr)
|
||||||
{
|
{
|
||||||
hcl_freemem (hcl, hcl->c->tv.ptr);
|
hcl_freemem (hcl, hcl->c->tv.ptr);
|
||||||
@ -2317,6 +2325,7 @@ int hcl_attachio (hcl_t* hcl, hcl_ioimpl_t reader, hcl_ioimpl_t printer)
|
|||||||
hcl->c->r.e = hcl->_nil;
|
hcl->c->r.e = hcl->_nil;
|
||||||
|
|
||||||
hcl->c->cfs.top = -1;
|
hcl->c->cfs.top = -1;
|
||||||
|
hcl->c->cfs2.top = -1;
|
||||||
hcl->c->blk.depth = -1;
|
hcl->c->blk.depth = -1;
|
||||||
}
|
}
|
||||||
else if (hcl->c->reader || hcl->c->printer)
|
else if (hcl->c->reader || hcl->c->printer)
|
||||||
|
14
lib/read2.c
14
lib/read2.c
@ -1638,7 +1638,7 @@ static hcl_cnode_t* read_vlist (hcl_t* hcl)
|
|||||||
{
|
{
|
||||||
hcl_cnode_t* sym, * cons;
|
hcl_cnode_t* sym, * cons;
|
||||||
|
|
||||||
sym = hcl_makecnodesymbol(hcl, TOKEN_LOC(hcl), 0, TOKEN_NAME_PTR(hcl), TOKEN_NAME_LEN(hcl));
|
sym = hcl_makecnodesymbol(hcl, TOKEN_LOC(hcl), TOKEN_NAME_PTR(hcl), TOKEN_NAME_LEN(hcl));
|
||||||
if (HCL_UNLIKELY(!sym)) goto oops;
|
if (HCL_UNLIKELY(!sym)) goto oops;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
@ -1958,11 +1958,11 @@ static hcl_cnode_t* read_object (hcl_t* hcl)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case HCL_IOTOK_IDENT:
|
case HCL_IOTOK_IDENT:
|
||||||
obj = hcl_makecnodesymbol(hcl, TOKEN_LOC(hcl), 0, TOKEN_NAME_PTR(hcl), TOKEN_NAME_LEN(hcl));
|
obj = hcl_makecnodesymbol(hcl, TOKEN_LOC(hcl), TOKEN_NAME_PTR(hcl), TOKEN_NAME_LEN(hcl));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case HCL_IOTOK_IDENT_DOTTED:
|
case HCL_IOTOK_IDENT_DOTTED:
|
||||||
obj = hcl_makecnodesymbol(hcl, TOKEN_LOC(hcl), 1, TOKEN_NAME_PTR(hcl), TOKEN_NAME_LEN(hcl));
|
obj = hcl_makecnodedsymbol(hcl, TOKEN_LOC(hcl), TOKEN_NAME_PTR(hcl), TOKEN_NAME_LEN(hcl));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2045,6 +2045,14 @@ hcl_cnode_t* hcl_read2 (hcl_t* hcl)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* TODO:
|
||||||
|
hcl_cnodetoobj (hcl_t* hcl, hcl_cnode_t* x)
|
||||||
|
{
|
||||||
|
* drop location information and compose object ??
|
||||||
|
* is it doable? can convert a dotted symbol to a proper value?
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* ========================================================================= */
|
/* ========================================================================= */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user