diff options
| author | redbrain <redbrain@gcc.gnu.org> | 2011-03-14 21:14:12 +0000 |
|---|---|---|
| committer | redbrain <redbrain@gcc.gnu.org> | 2011-03-14 21:14:12 +0000 |
| commit | b72cff75a5b887b4cf66caa4c7ab3adb1622ec1a (patch) | |
| tree | b8f21ca436ae756b79e608f847672a5c8a26c3cf /libgpython | |
| parent | 9e3d077e1b38cd6eb078ce2c569a73ed923333f2 (diff) | |
| download | gcc-b72cff75a5b887b4cf66caa4c7ab3adb1622ec1a.tar.gz | |
large changes in how objects are stored
Diffstat (limited to 'libgpython')
| -rw-r--r-- | libgpython/autom4te.cache/requests | 170 | ||||
| -rw-r--r-- | libgpython/include/gpython/objects.h | 14 | ||||
| -rw-r--r-- | libgpython/include/gpython/vectors.h | 39 | ||||
| -rw-r--r-- | libgpython/runtime/obj-integer.c | 2 | ||||
| -rw-r--r-- | libgpython/runtime/py-garbage.c | 46 | ||||
| -rw-r--r-- | libgpython/runtime/py-runtime.c | 119 | ||||
| -rw-r--r-- | libgpython/runtime/vectors.c | 38 |
7 files changed, 249 insertions, 179 deletions
diff --git a/libgpython/autom4te.cache/requests b/libgpython/autom4te.cache/requests index 34a13161827..48a3e69cf2f 100644 --- a/libgpython/autom4te.cache/requests +++ b/libgpython/autom4te.cache/requests @@ -56,8 +56,8 @@ '_m4_warn' => 1, 'AC_LIBTOOL_OBJDIR' => 1, 'gl_FUNC_ARGZ' => 1, - 'AM_SANITY_CHECK' => 1, 'LTOBSOLETE_VERSION' => 1, + 'AM_SANITY_CHECK' => 1, 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, 'LT_LIB_M' => 1, @@ -72,16 +72,16 @@ 'LT_SYS_DLOPEN_DEPLIBS' => 1, '_LT_AC_LANG_F77' => 1, 'AC_LIBTOOL_CONFIG' => 1, - 'AC_LTDL_DLLIB' => 1, '_AM_SUBST_NOTMAKE' => 1, + 'AC_LTDL_DLLIB' => 1, '_AM_AUTOCONF_VERSION' => 1, 'AM_DISABLE_SHARED' => 1, '_LTDL_SETUP' => 1, - 'AM_PROG_LIBTOOL' => 1, '_LT_AC_LANG_CXX' => 1, - 'AM_PROG_LD' => 1, - '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LIBTOOL' => 1, 'AC_LIB_LTDL' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LD' => 1, 'AU_DEFUN' => 1, 'AC_PROG_NM' => 1, 'AC_LIBTOOL_DLOPEN' => 1, @@ -105,31 +105,31 @@ 'AC_LTDL_OBJDIR' => 1, '_LT_PATH_TOOL_PREFIX' => 1, 'AC_LIBTOOL_RC' => 1, - 'AM_SILENT_RULES' => 1, - 'AC_DISABLE_FAST_INSTALL' => 1, '_LT_AC_PROG_ECHO_BACKSLASH' => 1, - 'include' => 1, - '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + 'AM_SILENT_RULES' => 1, '_LT_AC_TRY_DLOPEN_SELF' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'include' => 1, 'LT_AC_PROG_SED' => 1, 'AM_ENABLE_SHARED' => 1, 'LTDL_INSTALLABLE' => 1, '_LT_AC_LANG_GCJ_CONFIG' => 1, 'AC_ENABLE_SHARED' => 1, - 'AC_ENABLE_STATIC' => 1, 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, - 'AM_PROG_CC_C_O' => 1, + 'AC_ENABLE_STATIC' => 1, '_LT_AC_TAGVAR' => 1, + 'AM_PROG_CC_C_O' => 1, 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, 'AM_CONDITIONAL' => 1, 'LT_LIB_DLLOAD' => 1, - 'LTDL_INIT' => 1, 'LTVERSION_VERSION' => 1, - 'm4_include' => 1, + 'LTDL_INIT' => 1, 'AM_PROG_INSTALL_SH' => 1, + 'm4_include' => 1, 'AC_PROG_EGREP' => 1, - '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AC_PATH_MAGIC' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AC_LTDL_SYSSEARCHPATH' => 1, 'AM_MAKE_INCLUDE' => 1, '_LT_AC_TAGCONFIG' => 1, @@ -173,11 +173,11 @@ 'AM_PROG_NM' => 1, 'AC_LIBLTDL_CONVENIENCE' => 1, 'AC_DEPLIBS_CHECK_METHOD' => 1, - 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AC_LTDL_ENABLE_INSTALL' => 1, - 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, 'LT_PROG_GCJ' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_DISABLE_STATIC' => 1, 'LT_PATH_NM' => 1, @@ -185,25 +185,25 @@ '_LT_AC_LOCK' => 1, '_LT_AC_LANG_RC_CONFIG' => 1, 'LT_SYS_MODULE_PATH' => 1, - 'LT_WITH_LTDL' => 1, 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + 'LT_WITH_LTDL' => 1, 'AC_LTDL_SHLIBPATH' => 1, 'AM_AUX_DIR_EXPAND' => 1, - 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, '_LT_AC_LANG_F77_CONFIG' => 1, - '_AM_SET_OPTIONS' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, '_LT_COMPILER_OPTION' => 1, - '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + '_AM_SET_OPTIONS' => 1, 'AM_RUN_LOG' => 1, - 'AC_LIBTOOL_PICMODE' => 1, - 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, - 'LT_PATH_LD' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_LIBTOOL_PICMODE' => 1, 'AC_CHECK_LIBM' => 1, + 'LT_PATH_LD' => 1, 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, '_AM_MANGLE_OPTION' => 1, - 'AC_LTDL_SYMBOL_USCORE' => 1, 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AC_LTDL_SYMBOL_USCORE' => 1, 'AM_SET_DEPDIR' => 1, '_LT_CC_BASENAME' => 1, '_LT_LIBOBJ' => 1 @@ -221,25 +221,25 @@ 'configure.ac' ], { - '_LT_AC_TAGCONFIG' => 1, 'AM_PROG_F77_C_O' => 1, - 'AC_INIT' => 1, + '_LT_AC_TAGCONFIG' => 1, 'm4_pattern_forbid' => 1, - 'AC_CANONICAL_TARGET' => 1, + 'AC_INIT' => 1, '_AM_COND_IF' => 1, - 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_CANONICAL_TARGET' => 1, 'AC_SUBST' => 1, - 'AC_CANONICAL_HOST' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, 'AC_FC_SRCEXT' => 1, + 'AC_CANONICAL_HOST' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'LT_CONFIG_LTDL_DIR' => 1, - 'AC_CONFIG_LINKS' => 1, 'AC_REQUIRE_AUX_FILE' => 1, - 'm4_sinclude' => 1, + 'AC_CONFIG_LINKS' => 1, 'LT_SUPPORTED_TAG' => 1, + 'm4_sinclude' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, '_m4_warn' => 1, @@ -252,17 +252,17 @@ 'include' => 1, 'AM_GNU_GETTEXT' => 1, 'AC_LIBSOURCE' => 1, - 'AC_CANONICAL_BUILD' => 1, 'AM_PROG_FC_C_O' => 1, + 'AC_CANONICAL_BUILD' => 1, 'AC_FC_FREEFORM' => 1, 'AH_OUTPUT' => 1, - 'AC_CONFIG_AUX_DIR' => 1, '_AM_SUBST_NOTMAKE' => 1, - 'AM_PROG_CC_C_O' => 1, - 'sinclude' => 1, + 'AC_CONFIG_AUX_DIR' => 1, 'm4_pattern_allow' => 1, - 'AM_CONDITIONAL' => 1, + 'sinclude' => 1, + 'AM_PROG_CC_C_O' => 1, 'AC_CANONICAL_SYSTEM' => 1, + 'AM_CONDITIONAL' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'm4_include' => 1, @@ -323,8 +323,8 @@ '_m4_warn' => 1, 'AC_LIBTOOL_OBJDIR' => 1, 'gl_FUNC_ARGZ' => 1, - 'AM_SANITY_CHECK' => 1, 'LTOBSOLETE_VERSION' => 1, + 'AM_SANITY_CHECK' => 1, 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, 'LT_LIB_M' => 1, @@ -339,16 +339,16 @@ 'LT_SYS_DLOPEN_DEPLIBS' => 1, '_LT_AC_LANG_F77' => 1, 'AC_LIBTOOL_CONFIG' => 1, - 'AC_LTDL_DLLIB' => 1, '_AM_SUBST_NOTMAKE' => 1, + 'AC_LTDL_DLLIB' => 1, '_AM_AUTOCONF_VERSION' => 1, 'AM_DISABLE_SHARED' => 1, '_LTDL_SETUP' => 1, - 'AM_PROG_LIBTOOL' => 1, '_LT_AC_LANG_CXX' => 1, - 'AM_PROG_LD' => 1, - '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LIBTOOL' => 1, 'AC_LIB_LTDL' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LD' => 1, 'AU_DEFUN' => 1, 'AC_PROG_NM' => 1, 'AC_LIBTOOL_DLOPEN' => 1, @@ -372,31 +372,31 @@ 'AC_LTDL_OBJDIR' => 1, '_LT_PATH_TOOL_PREFIX' => 1, 'AC_LIBTOOL_RC' => 1, - 'AM_SILENT_RULES' => 1, - 'AC_DISABLE_FAST_INSTALL' => 1, '_LT_AC_PROG_ECHO_BACKSLASH' => 1, - 'include' => 1, - '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + 'AM_SILENT_RULES' => 1, '_LT_AC_TRY_DLOPEN_SELF' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'include' => 1, 'LT_AC_PROG_SED' => 1, 'AM_ENABLE_SHARED' => 1, 'LTDL_INSTALLABLE' => 1, '_LT_AC_LANG_GCJ_CONFIG' => 1, 'AC_ENABLE_SHARED' => 1, - 'AC_ENABLE_STATIC' => 1, 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, - 'AM_PROG_CC_C_O' => 1, + 'AC_ENABLE_STATIC' => 1, '_LT_AC_TAGVAR' => 1, + 'AM_PROG_CC_C_O' => 1, 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, 'AM_CONDITIONAL' => 1, 'LT_LIB_DLLOAD' => 1, - 'LTDL_INIT' => 1, 'LTVERSION_VERSION' => 1, - 'm4_include' => 1, + 'LTDL_INIT' => 1, 'AM_PROG_INSTALL_SH' => 1, + 'm4_include' => 1, 'AC_PROG_EGREP' => 1, - '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AC_PATH_MAGIC' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'AC_LTDL_SYSSEARCHPATH' => 1, 'AM_MAKE_INCLUDE' => 1, '_LT_AC_TAGCONFIG' => 1, @@ -440,11 +440,11 @@ 'AM_PROG_NM' => 1, 'AC_LIBLTDL_CONVENIENCE' => 1, 'AC_DEPLIBS_CHECK_METHOD' => 1, - 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AC_LTDL_ENABLE_INSTALL' => 1, - 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, 'LT_PROG_GCJ' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_DISABLE_STATIC' => 1, 'LT_PATH_NM' => 1, @@ -452,25 +452,25 @@ '_LT_AC_LOCK' => 1, '_LT_AC_LANG_RC_CONFIG' => 1, 'LT_SYS_MODULE_PATH' => 1, - 'LT_WITH_LTDL' => 1, 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + 'LT_WITH_LTDL' => 1, 'AC_LTDL_SHLIBPATH' => 1, 'AM_AUX_DIR_EXPAND' => 1, - 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, '_LT_AC_LANG_F77_CONFIG' => 1, - '_AM_SET_OPTIONS' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, '_LT_COMPILER_OPTION' => 1, - '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + '_AM_SET_OPTIONS' => 1, 'AM_RUN_LOG' => 1, - 'AC_LIBTOOL_PICMODE' => 1, - 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, - 'LT_PATH_LD' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_LIBTOOL_PICMODE' => 1, 'AC_CHECK_LIBM' => 1, + 'LT_PATH_LD' => 1, 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, '_AM_MANGLE_OPTION' => 1, - 'AC_LTDL_SYMBOL_USCORE' => 1, 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AC_LTDL_SYMBOL_USCORE' => 1, 'AM_SET_DEPDIR' => 1, '_LT_CC_BASENAME' => 1, '_LT_LIBOBJ' => 1 @@ -530,8 +530,8 @@ '_m4_warn' => 1, 'AC_LIBTOOL_OBJDIR' => 1, 'gl_FUNC_ARGZ' => 1, - 'LTOBSOLETE_VERSION' => 1, 'AM_SANITY_CHECK' => 1, + 'LTOBSOLETE_VERSION' => 1, 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, 'LT_LIB_M' => 1, @@ -546,16 +546,16 @@ 'LT_SYS_DLOPEN_DEPLIBS' => 1, '_LT_AC_LANG_F77' => 1, 'AC_LIBTOOL_CONFIG' => 1, - '_AM_SUBST_NOTMAKE' => 1, 'AC_LTDL_DLLIB' => 1, + '_AM_SUBST_NOTMAKE' => 1, '_AM_AUTOCONF_VERSION' => 1, 'AM_DISABLE_SHARED' => 1, '_LTDL_SETUP' => 1, - '_LT_AC_LANG_CXX' => 1, 'AM_PROG_LIBTOOL' => 1, - 'AC_LIB_LTDL' => 1, - '_LT_AC_FILE_LTDLL_C' => 1, + '_LT_AC_LANG_CXX' => 1, 'AM_PROG_LD' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AC_LIB_LTDL' => 1, 'AU_DEFUN' => 1, 'AC_PROG_NM' => 1, 'AC_LIBTOOL_DLOPEN' => 1, @@ -579,31 +579,31 @@ 'AC_LTDL_OBJDIR' => 1, '_LT_PATH_TOOL_PREFIX' => 1, 'AC_LIBTOOL_RC' => 1, - '_LT_AC_PROG_ECHO_BACKSLASH' => 1, - 'AC_DISABLE_FAST_INSTALL' => 1, 'AM_SILENT_RULES' => 1, - '_LT_AC_TRY_DLOPEN_SELF' => 1, - '_LT_AC_SYS_LIBPATH_AIX' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + '_LT_AC_PROG_ECHO_BACKSLASH' => 1, 'include' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + '_LT_AC_TRY_DLOPEN_SELF' => 1, 'LT_AC_PROG_SED' => 1, 'AM_ENABLE_SHARED' => 1, 'LTDL_INSTALLABLE' => 1, '_LT_AC_LANG_GCJ_CONFIG' => 1, 'AC_ENABLE_SHARED' => 1, - 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, 'AC_ENABLE_STATIC' => 1, - '_LT_AC_TAGVAR' => 1, + 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, 'AM_PROG_CC_C_O' => 1, + '_LT_AC_TAGVAR' => 1, 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, 'AM_CONDITIONAL' => 1, 'LT_LIB_DLLOAD' => 1, - 'LTVERSION_VERSION' => 1, 'LTDL_INIT' => 1, - 'AM_PROG_INSTALL_SH' => 1, + 'LTVERSION_VERSION' => 1, 'm4_include' => 1, + 'AM_PROG_INSTALL_SH' => 1, 'AC_PROG_EGREP' => 1, - 'AC_PATH_MAGIC' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AC_PATH_MAGIC' => 1, 'AC_LTDL_SYSSEARCHPATH' => 1, 'AM_MAKE_INCLUDE' => 1, '_LT_AC_TAGCONFIG' => 1, @@ -647,38 +647,38 @@ 'AM_PROG_NM' => 1, 'AC_LIBLTDL_CONVENIENCE' => 1, 'AC_DEPLIBS_CHECK_METHOD' => 1, - 'AC_LIBLTDL_INSTALLABLE' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AC_LIBLTDL_INSTALLABLE' => 1, 'AC_LTDL_ENABLE_INSTALL' => 1, - 'LT_PROG_GCJ' => 1, 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, + 'LT_PROG_GCJ' => 1, 'AM_INIT_AUTOMAKE' => 1, - 'AC_DISABLE_STATIC' => 1, 'gl_VISIBILITY' => 1, + 'AC_DISABLE_STATIC' => 1, 'LT_PATH_NM' => 1, 'AC_LTDL_SHLIBEXT' => 1, '_LT_AC_LOCK' => 1, '_LT_AC_LANG_RC_CONFIG' => 1, 'LT_SYS_MODULE_PATH' => 1, - 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, 'LT_WITH_LTDL' => 1, + 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, 'AC_LTDL_SHLIBPATH' => 1, 'AM_AUX_DIR_EXPAND' => 1, - '_LT_AC_LANG_F77_CONFIG' => 1, 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, - '_LT_COMPILER_OPTION' => 1, + '_LT_AC_LANG_F77_CONFIG' => 1, '_AM_SET_OPTIONS' => 1, - 'AM_RUN_LOG' => 1, + '_LT_COMPILER_OPTION' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, - 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, - 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AM_RUN_LOG' => 1, 'AC_LIBTOOL_PICMODE' => 1, - 'AC_CHECK_LIBM' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, 'LT_PATH_LD' => 1, + 'AC_CHECK_LIBM' => 1, 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, '_AM_MANGLE_OPTION' => 1, - 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, 'AC_LTDL_SYMBOL_USCORE' => 1, + 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, 'AM_SET_DEPDIR' => 1, '_LT_CC_BASENAME' => 1, '_LT_LIBOBJ' => 1 diff --git a/libgpython/include/gpython/objects.h b/libgpython/include/gpython/objects.h index a51547fad15..90320740154 100644 --- a/libgpython/include/gpython/objects.h +++ b/libgpython/include/gpython/objects.h @@ -29,7 +29,8 @@ enum GPY_LIT_T { enum GPY_OBJECT_T { TYPE_OBJECT_STATE, TYPE_OBJECT_LIT, - TYPE_NULL + TYPE_CALLABLE, + TYPE_NULL, }; typedef struct gpy_rr_literal_t { @@ -58,6 +59,7 @@ typedef struct gpy_object_t { enum GPY_OBJECT_T T; union{ gpy_object_state_t * object_state; + struct gpy_callable__t * call; gpy_literal_t * literal; } o ; } gpy_object_t ; @@ -118,16 +120,6 @@ typedef struct gpy_typedef_t { struct gpy_builtin_method_def_t * methods; } gpy_typedef_t ; -#define Gpy_Object_State_Init( x ) \ - x = gpy_malloc( sizeof(struct gpy_rr_object_state_t) ); \ - debug("object created at <%p>!\n", (void*)x ); \ - x->obj_t_ident = NULL; x->ref_count = 0; \ - x->self = NULL; x->definition = NULL; - -#define Gpy_Object_Init_Ctx( x,y ) \ - Gpy_Object_State_Init( x ); \ - gpy_vec_push (((gpy_context_t*)(y->vector[y->length-1]))->symbols, x); - #define NULL_OBJ_STATE (gpy_object_state_t *) NULL #define NULL_OBJECT (gpy_object_t *) NULL diff --git a/libgpython/include/gpython/vectors.h b/libgpython/include/gpython/vectors.h index ec1a1201b6d..a275aa13402 100644 --- a/libgpython/include/gpython/vectors.h +++ b/libgpython/include/gpython/vectors.h @@ -37,39 +37,38 @@ typedef struct gpy_hash_table_t { gpy_hash_entry_t * array; } gpy_hash_tab_t ; -typedef struct gpy_rr_context_t { - gpy_vector_t * symbols; - /* ... maybe more things later date! */ -} gpy_context_t ; -typedef gpy_context_t * gpy_ctx_t; - #define Gpy_Vec_Head( V,T ) \ (T)(V->vector[V->length-1]) -#define Gpy_Namespace_Head \ - Gpy_Vec_Head(gpy_namespace_vec,gpy_ctx_t) +extern gpy_hashval_t gpy_dd_hash_string (const char *); + +extern gpy_hash_entry_t * gpy_dd_hash_lookup_table (gpy_hash_tab_t *, gpy_hashval_t); + +extern void ** gpy_dd_hash_insert (const gpy_hashval_t , void * const , + gpy_hash_tab_t * const); + +extern void gpy_dd_hash_grow_table (gpy_hash_tab_t *); -extern gpy_hashval_t gpy_dd_hash_string( const char * ); +extern void gpy_dd_hash_init_table (gpy_hash_tab_t **); -extern gpy_hash_entry_t * gpy_dd_hash_lookup_table( gpy_hash_tab_t *, gpy_hashval_t ); +extern void gpy_vec_init (gpy_vector_t * const); -extern void ** gpy_dd_hash_insert( const gpy_hashval_t , void * const , - gpy_hash_tab_t * const ); +extern void gpy_vec_push (gpy_vector_t * const, void * const); -extern void gpy_dd_hash_grow_table( gpy_hash_tab_t * ); +extern void * gpy_vec_pop (gpy_vector_t * const); -extern void gpy_dd_hash_init_table( gpy_hash_tab_t ** ); +extern void gpy_vec_free (gpy_vector_t *); -extern void gpy_vec_init( gpy_vector_t * const ); +extern void gpy_vec_frees (gpy_vector_t *, ...); -extern void gpy_vec_push( gpy_vector_t * const, void * const ); +extern void gpy_obj_integer_mod_init (gpy_vector_t * const); -extern void * gpy_vec_pop( gpy_vector_t * const ); +extern gpy_hash_entry_t * gpy_rr_lookup_decl (gpy_hashval_t, gpy_vector_t *); -extern void gpy_vec_free( gpy_vector_t * ); +extern gpy_vector_t * gpy_primitives; -extern void gpy_vec_frees( gpy_vector_t *, ... ); +extern gpy_vector_t * gpy_namespace_vec; -extern void gpy_obj_integer_mod_init( gpy_vector_t * const ); +extern gpy_vector_t * gpy_call_stack; #endif //__GCC_VECTORS_H__ diff --git a/libgpython/runtime/obj-integer.c b/libgpython/runtime/obj-integer.c index 71943325a8c..e19a691b354 100644 --- a/libgpython/runtime/obj-integer.c +++ b/libgpython/runtime/obj-integer.c @@ -51,7 +51,7 @@ gpy_object_t * gpy_obj_integer_init (gpy_typedef_t * type, gpy_object_t * retval = NULL_OBJECT; bool check = gpy_args_check_fmt (args, "i"); - gpy_assert(check); + gpy_assert (check); int val = gpy_args_lit_parse_int (args[0]); struct gpy_obj_integer_t * self = (struct gpy_obj_integer_t *) diff --git a/libgpython/runtime/py-garbage.c b/libgpython/runtime/py-garbage.c index d6eb2e06607..f98ad783724 100644 --- a/libgpython/runtime/py-garbage.c +++ b/libgpython/runtime/py-garbage.c @@ -52,7 +52,7 @@ void gpy_garbage_invoke (void) } } -void gpy_garbage_mark_obj__( gpy_object_t * const sym ) +void gpy_garbage_mark_obj__ (gpy_object_t * const sym) { if( sym ) { @@ -71,42 +71,44 @@ void gpy_garbage_mark_obj__( gpy_object_t * const sym ) } } -void gpy_garbage_invoke_sweep( gpy_vector_t * const context ) +void gpy_garbage_invoke_sweep (gpy_vector_t * const context) { signed long ctx_l = context->length; if( context ) { debug("sweeping context table for garbage length <%i>...\n", ctx_l); - gpy_context_t * ctx_idx = NULL; signed long idx = (ctx_l - 1); + gpy_hash_tab_t * ctx_idx = NULL; + signed long idx = (ctx_l - 1); - while( idx >= 0 ) + while (idx >= 0) { ctx_idx = context->vector[ idx ]; - void ** s_arr = ctx_idx->symbols->vector; + gpy_hash_entry_t * s_arr = ctx_idx->array; - int i = 0; int len = (ctx_idx->symbols->length); - debug("vector length <%i>!\n", len ); + int i = 0; int len = (ctx_idx->length); + debug("table length <%i>!\n", len ); for( ; i<len; ++i ) { - gpy_object_t * o = (gpy_object_t *) s_arr[i]; - gpy_assert (o->T == TYPE_OBJECT_STATE); - if( o ) + gpy_hash_entry_t oe = s_arr[i]; + if (oe.data) { - debug( "object <%p> has ref count <%i>!\n", - (void *) o, o->o.object_state->ref_count ); - + gpy_object_t * o = oe.data; + gpy_assert (o->T == TYPE_OBJECT_STATE); + debug ("object <%p> has ref count <%i>!\n", + (void *) o, o->o.object_state->ref_count); + // If no references remain - if( o->o.object_state->ref_count <= 0 ) + if (o->o.object_state->ref_count <= 0) { gpy_garbage_mark_obj( o ); - s_arr[ i ] = NULL; + s_arr[i] = (gpy_hash_entry_t) { 0, NULL }; } } } idx--; } } - gpy_garbage_invoke( ); + gpy_garbage_invoke (); } void gpy_garbage_free_obj (gpy_object_t * x) @@ -126,18 +128,18 @@ void gpy_garbage_free_obj (gpy_object_t * x) break; } - gpy_free(x); + gpy_free (x); } /* Cleanup the program for exit! */ -void gpy_cleanup( void ) +void gpy_cleanup (void) { debug("cleanup.......\n"); - gpy_garbage_invoke_sweep( gpy_namespace_vec ); + gpy_garbage_invoke_sweep (gpy_namespace_vec); - gpy_vec_free( gpy_primitives ); - gpy_vec_free( gpy_namespace_vec ); + gpy_vec_free (gpy_primitives); + gpy_vec_free (gpy_namespace_vec); - mpfr_free_cache( ); + mpfr_free_cache (); } diff --git a/libgpython/runtime/py-runtime.c b/libgpython/runtime/py-runtime.c index 8cd0fa64cb3..c7a310776a0 100644 --- a/libgpython/runtime/py-runtime.c +++ b/libgpython/runtime/py-runtime.c @@ -31,7 +31,6 @@ along with GCC; see the file COPYING3. If not see gpy_vector_t * gpy_primitives; gpy_vector_t * gpy_namespace_vec; -gpy_callable_t * callables = NULL; /* Used for stack-traces ... */ gpy_vector_t * gpy_call_stack; @@ -50,23 +49,81 @@ void gpy_dump_current_stack_trace (void) return; } -void gpy_rr_set_callables (gpy_callable_t * c) +void gpy_rr_register_callable (gpy_std_callable call, int nargs, + char * ident) { - callables = c; - int idx = 0; - while ( c[idx].ident != NULL ) + gpy_object_t * c = NULL_OBJECT; + + gpy_callable_t * call_ = (gpy_callable_t *) + gpy_malloc (sizeof(gpy_callable_t)); + + call_->ident = ident; + call_->n = nargs; + call_->call = call; + + c = (gpy_object_t *) + gpy_malloc (sizeof(gpy_object_t)); + c->T = TYPE_CALLABLE; + c->o.call = call_; + + gpy_hashval_t h = gpy_dd_hash_string (ident); + + gpy_hash_entry_t * f = gpy_rr_lookup_decl (h, gpy_namespace_vec); + if (f) { - debug ("registerd call <...>!\n"); - idx++; + gpy_object_t * prev = f->data; + gpy_free (prev); // fix later + + f->data = c; + } + else + { + void ** r = gpy_dd_hash_insert (h, c, Gpy_Vec_Head (gpy_namespace_vec, + gpy_hash_tab_t *)); + if (r) + fatal ("error registering decl <%s>!\n", ident); } } +void gpy_rr_register_decl (char * ident) +{ + gpy_hashval_t h = gpy_dd_hash_string (ident); + gpy_hash_entry_t * f = gpy_rr_lookup_decl (h, gpy_namespace_vec); + if (!f) + { + gpy_object_t * o = (gpy_object_t *) + gpy_malloc (sizeof (gpy_object_t)); + o->T = TYPE_NULL; + o->o.object_state = NULL; + + void ** r = gpy_dd_hash_insert (h, o, Gpy_Vec_Head (gpy_namespace_vec, + gpy_hash_tab_t *)); + if (r) + fatal ("error registering decl <%s>!\n", ident); + } +} + +void gpy_rr_set_decl_val (char *ident, gpy_object_t *o) +{ + gpy_hashval_t h = gpy_dd_hash_string (ident); + gpy_hash_entry_t * f = gpy_rr_lookup_decl (h, gpy_namespace_vec); + + if (f) + { + gpy_object_t * prev = f->data; + gpy_free (prev); // fix later... + f->data = o; + } + else + fatal ("decl <%s> is un-registered to a current context!\n", ident); +} + void gpy_rr_init_runtime (void) { /* Setup runtime namespace Init builtin's */ - gpy_rr_init_primitives( ); + gpy_rr_init_primitives (); gpy_namespace_vec = (gpy_vector_t*) gpy_malloc( sizeof(gpy_vector_t) ); @@ -76,13 +133,9 @@ void gpy_rr_init_runtime (void) gpy_malloc(sizeof(gpy_vector_t)); gpy_vec_init( gpy_call_stack ); - gpy_context_t * head = (gpy_context_t *) - gpy_malloc( sizeof(gpy_context_t) ); - - head->symbols = (gpy_vector_t*) - gpy_malloc( sizeof(gpy_vector_t) ); - gpy_vec_init( head->symbols ); - + gpy_hash_tab_t * head = (gpy_hash_tab_t *) + gpy_malloc (sizeof(gpy_hash_tab_t)); + gpy_dd_hash_init_table (&head); gpy_vec_push( gpy_namespace_vec, head ); } @@ -117,7 +170,7 @@ gpy_object_t * gpy_rr_fold_integer (int x) gpy_typedef_t * Int_def = (gpy_typedef_t *) gpy_primitives->vector[ 0 ]; - gpy_assert( Int_def ); + gpy_assert (Int_def); retval = Int_def->init_hook (Int_def, args); gpy_free(args); @@ -189,28 +242,31 @@ void gpy_rr_decr_ref_count( gpy_object_t * x1 ) void gpy_rr_push_context (void) { - gpy_context_t * ctx = (gpy_context_t *) - gpy_malloc( sizeof(gpy_context_t) ); - ctx->symbols = (gpy_vector_t*) - gpy_malloc( sizeof(gpy_vector_t) ); - gpy_vec_init( ctx->symbols ); - - gpy_vec_push( gpy_namespace_vec, ctx ); + gpy_hash_tab_t * head = (gpy_hash_tab_t *) + gpy_malloc (sizeof(gpy_hash_tab_t)); + gpy_dd_hash_init_table (&head); + + gpy_vec_push (gpy_namespace_vec, head); } void gpy_rr_pop_context (void) { - gpy_context_t * head = Gpy_Namespace_Head; - void ** vec = head->symbols->vector; + gpy_hash_tab_t * head = Gpy_Vec_Head (gpy_namespace_vec, + gpy_hash_tab_t *); + gpy_hash_entry_t * array = head->array; unsigned int idx = 0; - for( ; idx<(head->symbols->length); ++idx ) + for( ; idx<(head->length); ++idx ) { - gpy_object_t * i = (gpy_object_t *) vec[ idx ]; - gpy_rr_decr_ref_count(i); + gpy_hash_entry_t i = array[idx]; + if (i.data) + { + gpy_object_t * o = i.data; + gpy_rr_decr_ref_count (o); + } } - gpy_garbage_invoke_sweep( gpy_namespace_vec ); + gpy_garbage_invoke_sweep (gpy_namespace_vec); /* Loop over for stragglers like returns which need pushed up a context soo they can still be garbage collected.... @@ -220,9 +276,8 @@ void gpy_rr_pop_context (void) */ //.... - gpy_context_t * popd = gpy_vec_pop( gpy_namespace_vec ); - gpy_vec_free( popd->symbols ); - gpy_free( popd ); + gpy_hash_tab_t * popd = gpy_vec_pop (gpy_namespace_vec); + gpy_free (popd); } void gpy_rr_finalize_block_decls (int n, ...) diff --git a/libgpython/runtime/vectors.c b/libgpython/runtime/vectors.c index 8037ad59e4b..0d944d0fe06 100644 --- a/libgpython/runtime/vectors.c +++ b/libgpython/runtime/vectors.c @@ -81,8 +81,8 @@ gpy_dd_hash_lookup_table( gpy_hash_tab_t * tbl, gpy_hashval_t h ) return retval; } -void ** gpy_dd_hash_insert( const gpy_hashval_t h, void * const obj, - gpy_hash_tab_t * const tbl ) +void ** gpy_dd_hash_insert (const gpy_hashval_t h, void * const obj, + gpy_hash_tab_t * const tbl) { void **retval = NULL; gpy_hash_entry_t *entry = NULL; @@ -101,7 +101,7 @@ void ** gpy_dd_hash_insert( const gpy_hashval_t h, void * const obj, return retval; } -void gpy_dd_hash_grow_table( gpy_hash_tab_t * tbl ) +void gpy_dd_hash_grow_table (gpy_hash_tab_t * tbl) { unsigned int prev_size= tbl->size, size= 0, i= 0; gpy_hash_entry_t *prev_array= tbl->array, *array; @@ -126,7 +126,7 @@ void gpy_dd_hash_grow_table( gpy_hash_tab_t * tbl ) } inline -void gpy_dd_hash_init_table( gpy_hash_tab_t ** tbl ) +void gpy_dd_hash_init_table (gpy_hash_tab_t ** tbl) { if( tbl ) { @@ -137,14 +137,14 @@ void gpy_dd_hash_init_table( gpy_hash_tab_t ** tbl ) } inline -void gpy_vec_init( gpy_vector_t * const v ) +void gpy_vec_init (gpy_vector_t * const v) { v->size = gpy_threshold_alloc( 0 ); v->vector = (void **) gpy_calloc( v->size, sizeof(void *) ); v->length = 0; } -void gpy_vec_push( gpy_vector_t * const v, void * const s ) +void gpy_vec_push (gpy_vector_t * const v, void * const s) { if( s ) { @@ -160,7 +160,7 @@ void gpy_vec_push( gpy_vector_t * const v, void * const s ) } inline -void * gpy_vec_pop( gpy_vector_t * const v ) +void * gpy_vec_pop (gpy_vector_t * const v) { register void * retval = NULL; if( v->length > 0 ) @@ -172,7 +172,7 @@ void * gpy_vec_pop( gpy_vector_t * const v ) return retval; } -void * gpy_vec_index( int idx, gpy_vector_t * const v ) +void * gpy_vec_index (int idx, gpy_vector_t * const v) { void * retval = NULL; if( v ) @@ -198,3 +198,25 @@ void gpy_vec_free( gpy_vector_t * v ) v = NULL; } +gpy_hash_entry_t * gpy_rr_lookup_decl (gpy_hashval_t h, + gpy_vector_t *namespace) +{ + gpy_hash_entry_t * retval = NULL; + int idx = 0; + int head = namespace->length - 1; + + for (idx = head; idx >= 0; --idx) + { + gpy_hash_tab_t * itx = (gpy_hash_tab_t *) + namespace->vector[idx]; + + gpy_hash_entry_t * e = gpy_dd_hash_lookup_table (itx, h); + if (e->data) + { + retval = e; + } + if (retval) + break; + } + return retval; +} |
