From 00b11b74cd4cbfce5d1f976a5ebd76f30282b71b Mon Sep 17 00:00:00 2001 From: "hyunghwan.chung" Date: Sat, 13 Aug 2016 06:46:14 +0000 Subject: [PATCH] added STIX_STACK_SETRETTORCV() --- stix/lib/Makefile.am | 10 ++++----- stix/lib/Makefile.in | 49 ++++++++++++++++++++++++++++++++------------ stix/lib/exec.c | 31 +++++++++++++--------------- stix/lib/stix.h | 2 +- 4 files changed, 56 insertions(+), 36 deletions(-) diff --git a/stix/lib/Makefile.am b/stix/lib/Makefile.am index 96ae6c5..ed76fad 100644 --- a/stix/lib/Makefile.am +++ b/stix/lib/Makefile.am @@ -85,17 +85,17 @@ LIBADD_MOD_COMMON = -lstix pkgmodexecdir = $(libdir) -pkgmodexec_LTLIBRARIES = libstix-snd.la #libstix-con.la +pkgmodexec_LTLIBRARIES = libstix-snd.la libstix-con.la libstix_snd_la_SOURCES = mod-snd.c mod-snd.h libstix_snd_la_CPPFLAGS = $(CPPFLAGS_MOD_COMMON) libstix_snd_la_LDFLAGS = $(LDFLAGS_MOD_COMMON) libstix_snd_la_LIBADD = $(LIBADD_MOD_COMMON) -#libstix_con_la_SOURCES = mod-con.c mod-con.h -#libstix_con_la_CPPFLAGS = $(CPPFLAGS_MOD_COMMON) -#libstix_con_la_LDFLAGS = $(LDFLAGS_MOD_COMMON) -#libstix_con_la_LIBADD = $(LIBADD_MOD_COMMON) +libstix_con_la_SOURCES = mod-con.c mod-con.h +libstix_con_la_CPPFLAGS = $(CPPFLAGS_MOD_COMMON) +libstix_con_la_LDFLAGS = $(LDFLAGS_MOD_COMMON) +libstix_con_la_LIBADD = $(LIBADD_MOD_COMMON) endif diff --git a/stix/lib/Makefile.in b/stix/lib/Makefile.in index 40fa492..b4ea68d 100644 --- a/stix/lib/Makefile.in +++ b/stix/lib/Makefile.in @@ -133,16 +133,28 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)" \ "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) $(pkgmodexec_LTLIBRARIES) am__DEPENDENCIES_1 = +@ENABLE_STATIC_MODULE_FALSE@libstix_con_la_DEPENDENCIES = \ +@ENABLE_STATIC_MODULE_FALSE@ $(am__DEPENDENCIES_1) +am__libstix_con_la_SOURCES_DIST = mod-con.c mod-con.h +@ENABLE_STATIC_MODULE_FALSE@am_libstix_con_la_OBJECTS = \ +@ENABLE_STATIC_MODULE_FALSE@ libstix_con_la-mod-con.lo +libstix_con_la_OBJECTS = $(am_libstix_con_la_OBJECTS) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +libstix_con_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ + $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ + $(AM_CFLAGS) $(CFLAGS) $(libstix_con_la_LDFLAGS) $(LDFLAGS) -o \ + $@ +@ENABLE_STATIC_MODULE_FALSE@am_libstix_con_la_rpath = -rpath \ +@ENABLE_STATIC_MODULE_FALSE@ $(pkgmodexecdir) @ENABLE_STATIC_MODULE_FALSE@libstix_snd_la_DEPENDENCIES = \ @ENABLE_STATIC_MODULE_FALSE@ $(am__DEPENDENCIES_1) am__libstix_snd_la_SOURCES_DIST = mod-snd.c mod-snd.h @ENABLE_STATIC_MODULE_FALSE@am_libstix_snd_la_OBJECTS = \ @ENABLE_STATIC_MODULE_FALSE@ libstix_snd_la-mod-snd.lo libstix_snd_la_OBJECTS = $(am_libstix_snd_la_OBJECTS) -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = libstix_snd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libstix_snd_la_LDFLAGS) $(LDFLAGS) -o \ @@ -202,10 +214,11 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(libstix_snd_la_SOURCES) $(libstix_la_SOURCES) \ - $(stix_SOURCES) -DIST_SOURCES = $(am__libstix_snd_la_SOURCES_DIST) \ +SOURCES = $(libstix_con_la_SOURCES) $(libstix_snd_la_SOURCES) \ $(libstix_la_SOURCES) $(stix_SOURCES) +DIST_SOURCES = $(am__libstix_con_la_SOURCES_DIST) \ + $(am__libstix_snd_la_SOURCES_DIST) $(libstix_la_SOURCES) \ + $(stix_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ @@ -460,11 +473,15 @@ stix_LDADD = $(LIBADD_LIB_COMMON) -lstix #-ldyncall_s @ENABLE_STATIC_MODULE_FALSE@LDFLAGS_MOD_COMMON = $(LDFLAGS_LIB_COMMON) @ENABLE_STATIC_MODULE_FALSE@LIBADD_MOD_COMMON = -lstix @ENABLE_STATIC_MODULE_FALSE@pkgmodexecdir = $(libdir) -@ENABLE_STATIC_MODULE_FALSE@pkgmodexec_LTLIBRARIES = libstix-snd.la #libstix-con.la +@ENABLE_STATIC_MODULE_FALSE@pkgmodexec_LTLIBRARIES = libstix-snd.la libstix-con.la @ENABLE_STATIC_MODULE_FALSE@libstix_snd_la_SOURCES = mod-snd.c mod-snd.h @ENABLE_STATIC_MODULE_FALSE@libstix_snd_la_CPPFLAGS = $(CPPFLAGS_MOD_COMMON) @ENABLE_STATIC_MODULE_FALSE@libstix_snd_la_LDFLAGS = $(LDFLAGS_MOD_COMMON) @ENABLE_STATIC_MODULE_FALSE@libstix_snd_la_LIBADD = $(LIBADD_MOD_COMMON) +@ENABLE_STATIC_MODULE_FALSE@libstix_con_la_SOURCES = mod-con.c mod-con.h +@ENABLE_STATIC_MODULE_FALSE@libstix_con_la_CPPFLAGS = $(CPPFLAGS_MOD_COMMON) +@ENABLE_STATIC_MODULE_FALSE@libstix_con_la_LDFLAGS = $(LDFLAGS_MOD_COMMON) +@ENABLE_STATIC_MODULE_FALSE@libstix_con_la_LIBADD = $(LIBADD_MOD_COMMON) all: stix-cfg.h $(MAKE) $(AM_MAKEFLAGS) all-am @@ -586,6 +603,9 @@ clean-pkgmodexecLTLIBRARIES: rm -f $${locs}; \ } +libstix-con.la: $(libstix_con_la_OBJECTS) $(libstix_con_la_DEPENDENCIES) $(EXTRA_libstix_con_la_DEPENDENCIES) + $(AM_V_CCLD)$(libstix_con_la_LINK) $(am_libstix_con_la_rpath) $(libstix_con_la_OBJECTS) $(libstix_con_la_LIBADD) $(LIBS) + libstix-snd.la: $(libstix_snd_la_OBJECTS) $(libstix_snd_la_DEPENDENCIES) $(EXTRA_libstix_snd_la_DEPENDENCIES) $(AM_V_CCLD)$(libstix_snd_la_LINK) $(am_libstix_snd_la_rpath) $(libstix_snd_la_OBJECTS) $(libstix_snd_la_LIBADD) $(LIBS) @@ -651,6 +671,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstix_con_la-mod-con.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstix_la-bigint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstix_la-comp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libstix_la-debug.Plo@am__quote@ @@ -695,6 +716,13 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< +libstix_con_la-mod-con.lo: mod-con.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstix_con_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libstix_con_la-mod-con.lo -MD -MP -MF $(DEPDIR)/libstix_con_la-mod-con.Tpo -c -o libstix_con_la-mod-con.lo `test -f 'mod-con.c' || echo '$(srcdir)/'`mod-con.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstix_con_la-mod-con.Tpo $(DEPDIR)/libstix_con_la-mod-con.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mod-con.c' object='libstix_con_la-mod-con.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) $(libstix_con_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libstix_con_la-mod-con.lo `test -f 'mod-con.c' || echo '$(srcdir)/'`mod-con.c + libstix_snd_la-mod-snd.lo: mod-snd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libstix_snd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libstix_snd_la-mod-snd.lo -MD -MP -MF $(DEPDIR)/libstix_snd_la-mod-snd.Tpo -c -o libstix_snd_la-mod-snd.lo `test -f 'mod-snd.c' || echo '$(srcdir)/'`mod-snd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libstix_snd_la-mod-snd.Tpo $(DEPDIR)/libstix_snd_la-mod-snd.Plo @@ -1080,11 +1108,6 @@ uninstall-am: uninstall-binPROGRAMS uninstall-pkgincludeHEADERS \ uninstall-pkglibLTLIBRARIES uninstall-pkgmodexecLTLIBRARIES -#libstix_con_la_SOURCES = mod-con.c mod-con.h -#libstix_con_la_CPPFLAGS = $(CPPFLAGS_MOD_COMMON) -#libstix_con_la_LDFLAGS = $(LDFLAGS_MOD_COMMON) -#libstix_con_la_LIBADD = $(LIBADD_MOD_COMMON) - install-data-hook: @echo "#ifndef _STIX_CFG_H_" > "$(DESTDIR)$(pkgincludedir)/stix-cfg.h" @echo "#define _STIX_CFG_H_" >> "$(DESTDIR)$(pkgincludedir)/stix-cfg.h" diff --git a/stix/lib/exec.c b/stix/lib/exec.c index e75dccd..6b72374 100644 --- a/stix/lib/exec.c +++ b/stix/lib/exec.c @@ -1163,7 +1163,7 @@ static int prim_dump (stix_t* stix, stix_ooi_t nargs) stix_logbfmt (stix, 0, "ARGUMENT %zd: %O\n", i, STIX_STACK_GET(stix, stix->sp - i)); } - STIX_STACK_POPS (stix, nargs); /* leave the receiver as a return value */ + STIX_STACK_SETRETTORCV (stix, nargs); /* ^self */ return 1; /* success */ } @@ -1268,7 +1268,7 @@ static int prim_log (stix_t* stix, stix_ooi_t nargs) } } - STIX_STACK_POPS (stix, nargs); /* delete arguments, keep self */ + STIX_STACK_SETRETTORCV (stix, nargs); /* ^self */ return 1; } @@ -1283,8 +1283,7 @@ static int prim_identical (stix_t* stix, stix_ooi_t nargs) b = (rcv == arg)? stix->_true: stix->_false; - STIX_STACK_POP (stix); - STIX_STACK_SETTOP (stix, b); + STIX_STACK_SETRET (stix, nargs, b); return 1; } @@ -1299,8 +1298,7 @@ static int prim_not_identical (stix_t* stix, stix_ooi_t nargs) b = (rcv != arg)? stix->_true: stix->_false; - STIX_STACK_POP (stix); - STIX_STACK_SETTOP (stix, b); + STIX_STACK_SETRET (stix, nargs, b); return 1; } @@ -1309,9 +1307,11 @@ static int prim_class (stix_t* stix, stix_ooi_t nargs) stix_oop_t rcv, c; STIX_ASSERT (nargs == 0); + rcv = STIX_STACK_GETRCV(stix, nargs); c = STIX_CLASSOF(stix, rcv); - STIX_STACK_SETTOP (stix, c); + + STIX_STACK_SETRET (stix, nargs, c); return 1; /* success */ } @@ -1331,8 +1331,7 @@ static int prim_basic_new (stix_t* stix, stix_ooi_t nargs) obj = stix_instantiate (stix, rcv, STIX_NULL, 0); if (!obj) return -1; - /* emulate 'pop receiver' and 'push result' */ - STIX_STACK_SETTOP (stix, obj); + STIX_STACK_SETRET (stix, nargs, obj); return 1; /* success */ } @@ -1957,8 +1956,7 @@ static int prim_processor_add_timed_semaphore (stix_t* stix, stix_ooi_t nargs) /* Is this more desired??? - STIX_STACK_POPS (stix, nargs); - STIX_STACK_SETTOP (stix, stix->_false); + STIX_STACK_SETRET (stix, nargs, stix->_false); return 1; */ } @@ -1984,7 +1982,7 @@ static int prim_processor_add_timed_semaphore (stix_t* stix, stix_ooi_t nargs) if (add_to_sem_heap (stix, sem) <= -1) return -1; - STIX_STACK_POPS (stix, nargs); /* remove all arguments, ^self */ + STIX_STACK_SETRETTORCV (stix, nargs); /* ^self */ return 1; } @@ -2014,7 +2012,7 @@ static int prim_processor_remove_semaphore (stix_t* stix, stix_ooi_t nargs) STIX_ASSERT(sem->heap_index == STIX_SMOOI_TO_OOP(-1)); } - STIX_STACK_POPS (stix, nargs); /* keep the receiver in the stack. ^self */ + STIX_STACK_SETRETTORCV (stix, nargs); /* ^self */ return 1; } @@ -2667,9 +2665,8 @@ STIX_DEBUG0 (stix, "wrong function name...\n"); return 0; } - STIX_STACK_POPS (stix, 2); /* TODO: how to hold an address? as an integer???? or a byte array? */ - STIX_STACK_SETTOP (stix, STIX_SMOOI_TO_OOP(sym)); + STIX_STACK_SETRET (stix, nargs, STIX_SMOOI_TO_OOP(sym)); return 1; } @@ -3109,9 +3106,9 @@ static int send_message (stix_t* stix, stix_oop_char_t selector, int to_super, s } else { - /* manipulate the stack as if 'receier doesNotUnderstand: select' + /* manipulate the stack as if 'receier doesNotUnderstand: selector' * has been called. */ -/* TODO: if i manipulate the stack this way here, the stack track for the last call is kind of lost. +/* TODO: if i manipulate the stack this way here, the stack trace for the last call is kind of lost. * how can i preserve it gracefully? */ STIX_STACK_POPS (stix, nargs); nargs = 1; diff --git a/stix/lib/stix.h b/stix/lib/stix.h index de55fd6..25e14b1 100644 --- a/stix/lib/stix.h +++ b/stix/lib/stix.h @@ -908,7 +908,7 @@ struct stix_t /* you can't access arguments and receiver after this macro. * also you must not call this macro more than once */ #define STIX_STACK_SETRET(stix,nargs,retv) (STIX_STACK_POPS(stix, nargs), STIX_STACK_SETTOP(stix, retv)) - +#define STIX_STACK_SETRETTORCV(stix,nargs) (STIX_STACK_POPS(stix, nargs)) /* ========================================================================= * STIX VM LOGGING * ========================================================================= */