summaryrefslogtreecommitdiff
path: root/libgpython
diff options
context:
space:
mode:
authorredbrain <redbrain@gcc.gnu.org>2011-03-14 21:14:12 +0000
committerredbrain <redbrain@gcc.gnu.org>2011-03-14 21:14:12 +0000
commitb72cff75a5b887b4cf66caa4c7ab3adb1622ec1a (patch)
treeb8f21ca436ae756b79e608f847672a5c8a26c3cf /libgpython
parent9e3d077e1b38cd6eb078ce2c569a73ed923333f2 (diff)
downloadgcc-b72cff75a5b887b4cf66caa4c7ab3adb1622ec1a.tar.gz
large changes in how objects are stored
Diffstat (limited to 'libgpython')
-rw-r--r--libgpython/autom4te.cache/requests170
-rw-r--r--libgpython/include/gpython/objects.h14
-rw-r--r--libgpython/include/gpython/vectors.h39
-rw-r--r--libgpython/runtime/obj-integer.c2
-rw-r--r--libgpython/runtime/py-garbage.c46
-rw-r--r--libgpython/runtime/py-runtime.c119
-rw-r--r--libgpython/runtime/vectors.c38
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;
+}