rev 223 - in trunk: include/prothon modules/Dict modules/File modules/Float modules/List modules/Re modules/String modules/Tuple pr src

SVN User <[email protected]>
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: bcollins
Date: 2004-03-31 01:05:15 -0500 (Wed, 31 Mar 2004)
New Revision: 223

Modified:
   trunk/include/prothon/prothon.h
   trunk/include/prothon/prothon_dll.h
   trunk/modules/Dict/Dict.c
   trunk/modules/File/File.c
   trunk/modules/Float/Float.c
   trunk/modules/List/List.c
   trunk/modules/Re/Re.c
   trunk/modules/String/String.c
   trunk/modules/Tuple/Tuple.c
   trunk/pr/scope.pr
   trunk/src/builtins.c
   trunk/src/object.c
   trunk/src/symbol.c
Log:
New module handlers. Need to still add code to init some module objects
(Like init LIST_PROTO to an empty list).

This moves all items for built-in's into builtins.c (out of object.c).


Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/include/prothon/prothon.h	2004-03-31 06:05:15 UTC (rev 223)
@@ -73,7 +73,6 @@
 
 #ifdef WIN32
 #define PR_DECLARE_EXPORT		__declspec(dllexport)
-#pragma section("._objinit",read)
 #define PR_PLACE_IN_SECTION(type,name,sect) \
 	__declspec(allocate(sect)) type name
 #define LONG_LONG_FMT			"%I64d"
@@ -91,7 +90,7 @@
 //#define DEBUG_THREADS
 //#define DEBUG_MEM_MGR
 //#define TRACE_PARSER
-#define TRACE_INTERPRETER
+//#define TRACE_INTERPRETER
 //#define DUMP_MODULE_CODE
 #define DUMP_OBJECTS_AT_END
 
@@ -709,35 +708,6 @@
 // If the formal param list is empty, you can put NULL instead of the list.
 obj_p new_func_obj(isp ist, pr_func* func_ptr, obj_p label_def_list);
 
-typedef void (* mod_initcall_t)(void);
-
-#define MODULE_DECLARE(name)	\
-static isp ist;			\
-static pr_services_t *services;	\
-static obj_p name##_OBJ;
-
-/* Declare the start of a new module */
-#define MODULE_START(name)					\
-PR_PLACE_IN_SECTION(static mod_initcall_t,initcalls_##name,"._objinit") = NULL
-
-#define MODULE_END(name)					\
-PR_PLACE_IN_SECTION(static mod_initcall_t,initcalls_##name##_end,"._objinit") = NULL
-
-
-// DEF: convenience C macro equivalent of Prothon DEF statement
-// Note that pcnt normally doesn't need to be checked to make sure 
-// params are present since formal params are always automatically checked
-// on every call.
-// see Int.c for example of usage
-#define DEF(slf, func, fparam_list) \
-static obj_p slf##func(isp ist, obj_p self, int pcnt, obj_p* parms, obj_p dlocals); 		\
-static void slf##func##init(void) {								\
-	set_attr(ist, slf##_OBJ, sym(ist, #func), new_func_obj(ist, slf##func, fparam_list));	\
-}												\
-PR_PLACE_IN_SECTION(static mod_initcall_t,slf##func##init_ptr, "._objinit") = slf##func##init; \
-static obj_p slf##func(isp ist, obj_p self, int pcnt, obj_p* parms, obj_p dlocals)
-
-
 // FORM_RPARAM: convenience macro for single formal right parameter
 // Defines a formal label/default-value list that matches  func(rparam).
 // This is the call made in a binary operation such a a+b.  "a" is self and 

Modified: trunk/include/prothon/prothon_dll.h
===================================================================
--- trunk/include/prothon/prothon_dll.h	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/include/prothon/prothon_dll.h	2004-03-31 06:05:15 UTC (rev 223)
@@ -122,8 +122,40 @@
 
 #ifdef WIN32
 #pragma section("._module_init",read)
+#pragma section("._objinit",read)
 #endif
 
+typedef void (* mod_initcall_t)(void);
+
+/* XXX: Need to document all this stuff */
+#define MODULE_DECLARE(name)    \
+static isp ist;                 \
+static pr_services_t *services; \
+static obj_p name##_OBJ;
+
+/* Should be used to initialize the name##_OBJ */
+#define MODULE_START(name)					\
+PR_PLACE_IN_SECTION(static mod_initcall_t,initcalls_##name,	\
+		    "._objinit") = NULL;			\
+static void name##_create(void);				\
+PR_PLACE_IN_SECTION(static mod_initcall_t,name##_create_ptr,	\
+		"._objinit") = name##_create;			\
+static void name##_create(void)
+
+
+#define MODULE_END(name)                                        \
+PR_PLACE_IN_SECTION(static mod_initcall_t,initcalls_##name##_end,"._objinit") = NULL
+
+
+#define DEF(slf, func, fparam_list) \
+static obj_p slf##func(isp ist, obj_p self, int pcnt, obj_p* parms, obj_p dlocals);             \
+static void slf##func##init(void) {                                                             \
+        set_attr(ist, slf##_OBJ, sym(ist, #func), new_func_obj(ist, slf##func, fparam_list));   \
+}                                                                                               \
+PR_PLACE_IN_SECTION(static mod_initcall_t,slf##func##init_ptr, "._objinit") = slf##func##init; \
+static obj_p slf##func(isp ist, obj_p self, int pcnt, obj_p* parms, obj_p dlocals)
+
+
 #define MAIN_MODULE_INIT(name)								\
 static void name##_module_install(void);						\
 PR_DECLARE_EXPORT void name##_dll_entry(pr_services_t* srvcs)				\
@@ -136,19 +168,22 @@
 	name##_dll_entry;								\
 static void name##_module_install(void)
 
-#define MODULE_SUB_INIT(name, proto, add_to_base)		\
+#define MODULE_ADD_TO_BASE(name)			\
+do {							\
+	set_attr(ist, OBJ(MODULES), sym(ist, #name),	\
+		 name##_OBJ);				\
+	set_attr(ist, OBJ(OBJECT), sym(ist, #name),	\
+		 name##_OBJ);				\
+} while(0)
+
+#define MODULE_ADD_TO_OBJ(name, obj, __sym)			\
 do {								\
+	set_attr(ist, obj, sym(ist, __sym), name##_OBJ);	\
+} while(0)
+
+#define MODULE_SUB_INIT(name)		\
+do {								\
 	mod_initcall_t *initcalls = &initcalls_##name;		\
-	if (proto != NO_PROTO)					\
-		name##_OBJ = OBJ(proto);			\
-	else							\
-		name##_OBJ = new_object(NULL);			\
-	if (add_to_base) {					\
-		set_attr(ist, OBJ(MODULES),			\
-			sym(ist, #name), name##_OBJ);		\
-		set_attr(ist, OBJ(OBJECT),			\
-			sym(ist, #name), name##_OBJ);		\
-	}							\
 	initcalls++;						\
 	while (*initcalls) {					\
 		(*initcalls)();					\

Modified: trunk/modules/Dict/Dict.c
===================================================================
--- trunk/modules/Dict/Dict.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/Dict/Dict.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -58,10 +58,15 @@
 
 MODULE_DECLARE(Dict);
 
-MODULE_START(Dict);
+MODULE_START(Dict)
+{
+	Dict_OBJ = OBJ(DICT_PROTO);
+	MODULE_ADD_TO_BASE(Dict);
+}
+
 MODULE_END(Dict);
 
 MAIN_MODULE_INIT(Dict)
 {
-	MODULE_SUB_INIT(Dict, DICT_PROTO, 0);
+	MODULE_SUB_INIT(Dict);
 }

Modified: trunk/modules/File/File.c
===================================================================
--- trunk/modules/File/File.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/File/File.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -108,7 +108,11 @@
 	return file_obj;
 }
 
-MODULE_START(File);
+MODULE_START(File)
+{
+	File_OBJ = new_object(NULL);
+	MODULE_ADD_TO_BASE(File);
+}
 
 DEF(File, __init__, list6( sym(ist, "path"),    NULL, 
                                   sym(ist, "mode"),    new_string_obj("r"),
@@ -653,7 +657,10 @@
 
 MODULE_END(File);
 
-MODULE_START(Dir);
+MODULE_START(Dir)
+{
+	Dir_OBJ = new_object(NULL);
+}
 
 DEF(Dir, __init__, list2(sym(ist, "path"), NULL)) {
 	obj_p file_obj = new_string_obj(strch(parms[1]));
@@ -715,8 +722,8 @@
 	apr_status_t aprerr;
 	obj_p file_obj;
 
-	MODULE_SUB_INIT(File, NO_PROTO, 1);
-	MODULE_SUB_INIT(Dir,  NO_PROTO, 0);
+	MODULE_SUB_INIT(File);
+	MODULE_SUB_INIT(Dir);
 
 	/* Create base file objects for std{in,out,err} */
 	aprerr = apr_pool_create(&std_pool, get_pr_head_pool());

Modified: trunk/modules/Float/Float.c
===================================================================
--- trunk/modules/Float/Float.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/Float/Float.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -68,7 +68,10 @@
 MODULE_DECLARE(Float);
 
 
-MODULE_START(Float);
+MODULE_START(Float)
+{
+	Float_OBJ = OBJ(FLOAT_PROTO);
+}
 
 DEF(Float, __bool__, NULL) { 
 	if (Float_value(self) != 0.0 )
@@ -322,5 +325,5 @@
 
 MAIN_MODULE_INIT(Float)
 {
-	MODULE_SUB_INIT(Float, FLOAT_PROTO, 0);
+	MODULE_SUB_INIT(Float);
 }

Modified: trunk/modules/List/List.c
===================================================================
--- trunk/modules/List/List.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/List/List.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -60,7 +60,10 @@
 
 MODULE_DECLARE(List);
 
-MODULE_START(List);
+MODULE_START(List)
+{
+	List_OBJ = OBJ(LIST_PROTO);
+}
 
 DEF(List, __add__, FORM_RPARAM) { 
 	int i;
@@ -241,5 +244,5 @@
 
 MAIN_MODULE_INIT(List)
 {
-	MODULE_SUB_INIT(List, LIST_PROTO, 0);
+	MODULE_SUB_INIT(List);
 }

Modified: trunk/modules/Re/Re.c
===================================================================
--- trunk/modules/Re/Re.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/Re/Re.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -63,17 +63,34 @@
 
 #define numgrps(re_obj) (((regex_t*)((re_obj)->data.ptr))->re_nsub)
 
-static obj_p RE_EXC; 
+static obj_p ReException_OBJ; 
 static obj_p i_flg, s_flg;
 
 MODULE_DECLARE(Re);
 MODULE_DECLARE(ReCompiled);
 MODULE_DECLARE(ReMatch);
 
-MODULE_START(Re);
+MODULE_START(Re)
+{
+	Re_OBJ = new_object(NULL);
+	MODULE_SET_DOC(Re, "module for regular expressions");
+	MODULE_ADD_TO_BASE(Re);
 
-DEF( Re, compile, list4( sym(ist, "pattern"), NULL, 
-								sym(ist, "flags"),   OBJ(ZERO_INT) ) ) {
+	ReException_OBJ = new_object(OBJ(EXCEPTION));
+	MODULE_SET_DOC(ReException, "Re module error");
+	MODULE_ADD_TO_OBJ(ReException, Re_OBJ, "ReException");
+
+	i_flg = new_int_obj(REG_ICASE);
+	s_flg = new_int_obj(REG_NEWLINE);   // reverse meaning
+
+	set_attr(ist, Re_OBJ, sym(ist, "I"),          i_flg);
+	set_attr(ist, Re_OBJ, sym(ist, "IGNORECASE"), i_flg);
+	set_attr(ist, Re_OBJ, sym(ist, "S"),          s_flg);
+	set_attr(ist, Re_OBJ, sym(ist, "DOTALL"),     s_flg);
+}
+
+DEF(Re, compile, list4( sym(ist, "pattern"), NULL, 
+			sym(ist, "flags"),   OBJ(ZERO_INT) ) ) {
 	obj_p re_obj;
 	regex_t* e = pr_malloc(sizeof(regex_t));
 	int flags_in, flags=0, err;
@@ -94,15 +111,15 @@
 		if ((buf_size = regerror(err, NULL, msg, 1024)) > 1024) {
 			char* msg2 = pr_malloc(buf_size+1);
 			regerror(err, NULL, msg2, buf_size);
-			raise_exception(ist, RE_EXC, "%s", msg2);
+			raise_exception(ist, ReException_OBJ, "%s", msg2);
 			pr_free(msg2);
 		} else 
-			raise_exception(ist, RE_EXC, "%s", msg);
+			raise_exception(ist, ReException_OBJ, "%s", msg);
 		pr_free(e);
 		return NULL;
 	}
 	if (e->re_nsub > MAX_GROUPS) {
-		raise_exception(ist, RE_EXC, "more than 99 groups in regular expression");
+		raise_exception(ist, ReException_OBJ, "more than 99 groups in regular expression");
 		return NULL;
 	}
 	re_obj = new_object(ReCompiled_OBJ);
@@ -115,7 +132,12 @@
 
 MODULE_END(Re);
 
-MODULE_START(ReCompiled);
+MODULE_START(ReCompiled)
+{
+	ReCompiled_OBJ = new_object(NULL);
+	MODULE_ADD_TO_OBJ(ReCompiled, Re_OBJ, "Re");
+	MODULE_SET_DOC(ReCompiled, "prototype for compiled regular expressions");
+}
 
 DEF(ReCompiled, findall, FORM_RPARAM) {
 	char* s;
@@ -143,10 +165,10 @@
 			if ((buf_size = regerror(err, NULL, msg, 1024)) > 1024) {
 				char* msg2 = pr_malloc(buf_size+1);
 				regerror(err, NULL, msg2, buf_size);
-				raise_exception(ist, RE_EXC, "%s", msg2);
+				raise_exception(ist, ReException_OBJ, "%s", msg2);
 				pr_free(msg2);
 			} else 
-				raise_exception(ist, RE_EXC, "%s", msg);
+				raise_exception(ist, ReException_OBJ, "%s", msg);
 			pr_free(m);
 			return NULL;
 		}
@@ -205,10 +227,10 @@
 		if ((buf_size = regerror(err, NULL, msg, 1024)) > 1024) {
 			char* msg2 = pr_malloc(buf_size+1);
 			regerror(err, NULL, msg2, buf_size);
-			raise_exception(ist, RE_EXC, "%s", msg2);
+			raise_exception(ist, ReException_OBJ, "%s", msg2);
 			pr_free(msg2);
 		} else 
-			raise_exception(ist, RE_EXC, "%s", msg);
+			raise_exception(ist, ReException_OBJ, "%s", msg);
 		pr_free(m);
 		return NULL;
 	}
@@ -263,10 +285,10 @@
 			if ((buf_size = regerror(err, NULL, msg, 1024)) > 1024) {
 				char* msg2 = pr_malloc(buf_size+1);
 				regerror(err, NULL, msg2, buf_size);
-				raise_exception(ist, RE_EXC, "%s", msg2);
+				raise_exception(ist, ReException_OBJ, "%s", msg2);
 				pr_free(msg2);
 			} else 
-				raise_exception(ist, RE_EXC, "%s", msg);
+				raise_exception(ist, ReException_OBJ, "%s", msg);
 			pr_free(m);
 			return NULL;
 		}
@@ -367,7 +389,7 @@
 	*(*p2)=0;
 	return FALSE;
 err:
-	raise_exception(ist, RE_EXC, "invalid escape sequence");
+	raise_exception(ist, ReException_OBJ, "invalid escape sequence");
 	return TRUE;
 }
 
@@ -420,10 +442,10 @@
 			if ((buf_size = regerror(err, NULL, msg, 1024)) > 1024) {
 				char* msg2 = pr_malloc(buf_size+1);
 				regerror(err, NULL, msg2, buf_size);
-				raise_exception(ist, RE_EXC, "%s", msg2);
+				raise_exception(ist, ReException_OBJ, "%s", msg2);
 				pr_free(msg2);
 			} else 
-				raise_exception(ist, RE_EXC, "%s", msg);
+				raise_exception(ist, ReException_OBJ, "%s", msg);
 			pr_free(m);
 			return NULL;
 		}
@@ -490,7 +512,12 @@
 
 MODULE_END(ReCompiled);
 
-MODULE_START(ReMatch);
+MODULE_START(ReMatch)
+{
+	ReMatch_OBJ = new_object(NULL);
+	MODULE_SET_DOC(ReMatch, "prototype for regular expression match objects");
+	MODULE_ADD_TO_OBJ(ReMatch, Re_OBJ, "Match");
+}
 
 DEF(ReMatch, __objlist__, FORM_RPARAM) {
 	return parms[1];
@@ -504,7 +531,7 @@
 	}
 	grp = (int)(parms[1]->data.i64);
 	if (grp < 0 || grp >= list_len(ist, self)/2) {
-		raise_exception(ist, RE_EXC, "start function groupid parameter value invalid");
+		raise_exception(ist, ReException_OBJ, "start function groupid parameter value invalid");
 		return NULL;
 	}
 	return list_item(ist, self, 2*grp);
@@ -518,7 +545,7 @@
 	}
 	grp = (int)(parms[1]->data.i64);
 	if (grp < 0 || grp >= list_len(ist, self)/2) {
-		raise_exception(ist, RE_EXC, "end function groupid parameter value invalid");
+		raise_exception(ist, ReException_OBJ, "end function groupid parameter value invalid");
 		return NULL;
 	}
 	return list_item(ist, self, 2*grp+1);
@@ -533,7 +560,7 @@
 	}
 	grp = (int)(parms[1]->data.i64);
 	if (grp < 0 || grp >= list_len(ist, self)/2) {
-		raise_exception(ist, RE_EXC, "span function groupid parameter value invalid");
+		raise_exception(ist, ReException_OBJ, "span function groupid parameter value invalid");
 		return NULL;
 	}
 	res = new_tuple_obj(2);
@@ -636,27 +663,7 @@
 
 MAIN_MODULE_INIT(Re)
 {
-	MODULE_SUB_INIT(Re, NO_PROTO, 1);
-	MODULE_SUB_INIT(ReCompiled, NO_PROTO, 0);
-	MODULE_SUB_INIT(ReMatch, NO_PROTO, 0);
-
-	MODULE_SET_DOC(Re, "module for regular expressions");
-	MODULE_SET_DOC(ReCompiled, "prototype for compiled regular expressions");
-	MODULE_SET_DOC(ReMatch, "prototype for regular expression match objects");
-
-	set_attr(ist, Re_OBJ, sym(ist, "Re"), ReCompiled_OBJ);
-	set_attr(ist, Re_OBJ, sym(ist, "Match"), ReMatch_OBJ);
-
-	RE_EXC = new_object(OBJ(EXCEPTION));
-	add_doc_to_obj(ist, RE_EXC,
-			"Re module error");
-	set_attr(ist, Re_OBJ,    sym(ist, "ReException"),	RE_EXC);
-
-	i_flg = new_int_obj(REG_ICASE);
-	s_flg = new_int_obj(REG_NEWLINE);   // reverse meaning
-
-	set_attr(ist, Re_OBJ, sym(ist, "I"),          i_flg);
-	set_attr(ist, Re_OBJ, sym(ist, "IGNORECASE"), i_flg);
-	set_attr(ist, Re_OBJ, sym(ist, "S"),          s_flg);
-	set_attr(ist, Re_OBJ, sym(ist, "DOTALL"),     s_flg);
+	MODULE_SUB_INIT(Re);
+	MODULE_SUB_INIT(ReCompiled);
+	MODULE_SUB_INIT(ReMatch);
 }

Modified: trunk/modules/String/String.c
===================================================================
--- trunk/modules/String/String.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/String/String.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -62,7 +62,10 @@
 MODULE_DECLARE(String);
 MODULE_DECLARE(StringGen);
 
-MODULE_START(String);
+MODULE_START(String)
+{
+	String_OBJ = OBJ(STRING_PROTO);
+}
 
 DEF(String, cmp, FORM_RPARAM){
 	obj_p other = parms[1];
@@ -219,7 +222,11 @@
 
 MODULE_END(String);
 
-MODULE_START(StringGen);
+MODULE_START(StringGen)
+{
+	StringGen_OBJ = new_object(NULL);
+}
+
 DEF(StringGen, next, NULL) {
         int ch;
         obj_p res = NULL;
@@ -240,6 +247,6 @@
 
 MAIN_MODULE_INIT(String)
 {
-	MODULE_SUB_INIT(String, STRING_PROTO, 0);
-	MODULE_SUB_INIT(StringGen, NO_PROTO, 0);
+	MODULE_SUB_INIT(String);
+	MODULE_SUB_INIT(StringGen);
 }

Modified: trunk/modules/Tuple/Tuple.c
===================================================================
--- trunk/modules/Tuple/Tuple.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/modules/Tuple/Tuple.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -61,7 +61,10 @@
 MODULE_DECLARE(Tgen);
 MODULE_DECLARE(Tuple);
 
-MODULE_START(Tuple);
+MODULE_START(Tuple)
+{
+	Tuple_OBJ = OBJ(TUPLE_PROTO);
+}
 
 DEF(Tuple, __rin__, FORM_RPARAM) { 
 	int i, llen = list_len(ist, self);
@@ -194,7 +197,10 @@
 
 MODULE_END(Tuple);
 
-MODULE_START(Tgen);
+MODULE_START(Tgen)
+{
+	Tgen_OBJ = new_object(NULL);
+}
 
 DEF(Tgen, next, NULL) {
 	obj_p res, list_obj = self->data.ptr;
@@ -213,6 +219,6 @@
 
 MAIN_MODULE_INIT(Tuple)
 {
-	MODULE_SUB_INIT(Tgen,  NO_PROTO,    1);
-	MODULE_SUB_INIT(Tuple, TUPLE_PROTO, 0);
+	MODULE_SUB_INIT(Tuple);
+	MODULE_SUB_INIT(Tgen);
 }

Modified: trunk/pr/scope.pr
===================================================================
--- trunk/pr/scope.pr	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/pr/scope.pr	2004-03-31 06:05:15 UTC (rev 223)
@@ -1,25 +1,3 @@
-<<<<<<< .mine
-
-print
-print "This should print 1 2 3 4 5 6"
-print
-
-obj = Object()
-obj.x = 1
-Object.x = 2
-X = 3
-def obj.f1():
-	x = 4
-	def f2():
-		x = 5
-		print .x, ^x, X, &x, x, @x
-	return f2
-x=6
-with obj:
-	.f1()() # prints 1 2 3 4 5 6
-
-print
-=======
 #!/usr/local/bin/prothon
 
 print
@@ -40,4 +18,3 @@
 obj.f()
 
 print
->>>>>>> .r210

Modified: trunk/src/builtins.c
===================================================================
--- trunk/src/builtins.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/src/builtins.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -80,8 +80,24 @@
 
 // ***************************** Object *********************************
 
-MODULE_START(Object);
+MODULE_START(Object)
+{
+	Object_OBJ = OBJ(OBJECT);
+	MODULE_SET_DOC(Object,  "prototype base for all objects");
 
+	add_doc_to_obj(ist, OBJ(SYMBOL_PROTO),  "Symbol object prototype");
+	add_doc_to_obj(ist, OBJ(HASH_PROTO),    "Hash object prototype");
+	add_doc_to_obj(ist, OBJ(SLICE_PROTO),   "Slice object prototype");
+	add_doc_to_obj(ist, OBJ(SUPER_PROTO),   "Super object prototype");
+	add_doc_to_obj(ist, OBJ(ROOT_GLOBALS),  "Root_Globals: recursive container of all objects");
+	add_doc_to_obj(ist, OBJ(MODULES),       "Modules: container of all modules");
+
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Root_Globals"),    OBJ(ROOT_GLOBALS));
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Modules"),         OBJ(MODULES));
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Symbols"),         OBJ(SYMBOLS));
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Object"),          OBJ(OBJECT));
+}
+
 DEF(Object, __init__, NULL) {
 	return self;
 }
@@ -245,7 +261,12 @@
 
 // ***************************** PR_FALSE *****************************************
 
-MODULE_START(False);
+MODULE_START(False)
+{
+	False_OBJ = OBJ(PR_FALSE);
+	MODULE_SET_DOC(False, "boolean false singleton value");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "False"), False_OBJ);
+}
 
 DEF(False, __str__,  NULL) { return new_string_obj("False"); }
 DEF(False, __bool__, NULL) { return False_OBJ; }
@@ -260,7 +281,12 @@
 
 // ***************************** PR_TRUE *****************************************
 
-MODULE_START(True);
+MODULE_START(True)
+{
+	True_OBJ = OBJ(PR_TRUE);
+	MODULE_SET_DOC(Object, "boolean true singleton value");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "True"), True_OBJ);
+}
 
 DEF(True, __str__,  NULL)  { return new_string_obj("True"); }
 DEF(True, __bool__, NULL)  { return True_OBJ; }
@@ -277,13 +303,58 @@
 
 // ***************************** NONE *****************************************
 
-MODULE_START(None);
+MODULE_START(None)
+{
+	None_OBJ = OBJ(NONE);
+	MODULE_SET_DOC(None, "represents empty set");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "None"), None_OBJ);
+}
+
 DEF(None, __str__,  NULL) { return new_string_obj("None"); }
 DEF(None, __bool__, NULL) { return OBJ(PR_FALSE); }
 MODULE_END(None);
 
 // ***************************** EXCEPTION ************************************
-MODULE_START(Exception);
+MODULE_START(Exception)
+{
+	Exception_OBJ = OBJ(EXCEPTION);
+	MODULE_SET_DOC(Exception, "root for all exception objects");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Exception"), Exception_OBJ);
+
+	/* Other exception objects dependent on this one */
+	OBJ(INTERNAL_EXC)	= new_object(Exception_OBJ);
+	OBJ(PARSEERROR_EXC)	= new_object(Exception_OBJ);
+	OBJ(INTERPRETER_EXC)	= new_object(Exception_OBJ);
+	OBJ(ASSERTION_EXC)	= new_object(Exception_OBJ);
+	OBJ(NAME_EXC)		= new_object(Exception_OBJ);
+	OBJ(INDEX_EXC)		= new_object(Exception_OBJ);
+	OBJ(FUNCNOTFOUND_EXC)	= new_object(Exception_OBJ);
+	OBJ(TYPE_EXC)		= new_object(Exception_OBJ);
+	OBJ(MUTABLE_EXC)	= new_object(Exception_OBJ);
+	OBJ(DIVIDEZERO_EXC)	= new_object(Exception_OBJ);
+	OBJ(OUTOFMEMORY_EXC)	= new_object(Exception_OBJ);
+	OBJ(IOEXCEPTION)	= new_object(Exception_OBJ);
+	OBJ(FILENOTFOUND_EXC)	= new_object(OBJ(IOEXCEPTION));
+	OBJ(STOP_ITERATION_EXC)	= new_object(Exception_OBJ);
+	OBJ(LOCK_EXC)		= new_object(Exception_OBJ);
+
+	/* And their doc entries */
+	add_doc_to_obj(ist, OBJ(INTERNAL_EXC),		"Internal Prothon Error");
+	add_doc_to_obj(ist, OBJ(PARSEERROR_EXC),	"Parse Error");
+	add_doc_to_obj(ist, OBJ(INTERPRETER_EXC),	"Program Error");
+	add_doc_to_obj(ist, OBJ(ASSERTION_EXC),		"Assertion Error");
+	add_doc_to_obj(ist, OBJ(NAME_EXC),		"Name Error");
+	add_doc_to_obj(ist, OBJ(INDEX_EXC),		"Index Error");
+	add_doc_to_obj(ist, OBJ(TYPE_EXC),		"Type Error");
+	add_doc_to_obj(ist, OBJ(MUTABLE_EXC),		"Mutable Error");
+	add_doc_to_obj(ist, OBJ(DIVIDEZERO_EXC),	"Divide by zero error");
+	add_doc_to_obj(ist, OBJ(OUTOFMEMORY_EXC),	"Out Of Memory Error");
+	add_doc_to_obj(ist, OBJ(IOEXCEPTION),		"IO Error");
+	add_doc_to_obj(ist, OBJ(FILENOTFOUND_EXC),	"File Not Found");
+	add_doc_to_obj(ist, OBJ(STOP_ITERATION_EXC),	"End Of Generated Sequence (no error)");
+	add_doc_to_obj(ist, OBJ(LOCK_EXC),		"Locking Error");
+}
+
 DEF(Exception, __init__,  FORM_STAR_PARAM) {
 	obj_p res;
 	if (list_len(ist, parms[1]) > 0)
@@ -297,7 +368,12 @@
 MODULE_END(Exception);
 
 // ***************************** GEN ******************************************
-MODULE_START(Gen);
+MODULE_START(Gen)
+{
+	Gen_OBJ = OBJ(GEN_PROTO);
+	MODULE_SET_DOC(Gen, "generator object prototype");
+}
+
 DEF(Gen, __gen__, NULL) {
 	return self; 
 }
@@ -305,7 +381,12 @@
 
 // ***************************** SEQUENCE *************************************
 
-MODULE_START(Seq);
+MODULE_START(Seq)
+{
+	Seq_OBJ = OBJ(SEQ_PROTO);
+	MODULE_SET_DOC(Seq, "object prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Sequence"), Seq_OBJ);
+}
 
 static int seq_len(isp ist, obj_p seq) {
 	if (has_proto(ist, seq, OBJ(STRING_PROTO)))
@@ -488,15 +569,33 @@
 
 // ***************************** INT *******************************************
 
-MODULE_START(Int);
-MODULE_START(IntGen);
-
 #define	INT_DATA_SIZE		8
 #define is_Int(objid)		(has_proto(ist, objid, Int_OBJ))
 #define Int_value(objid)	(objid->data.i64)
 
 static obj_p SYM_LIMIT;	
 
+MODULE_START(Int)
+{
+	Int_OBJ = OBJ(INT_PROTO);
+	MODULE_SET_DOC(Int, "number object prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Int"), Int_OBJ);
+
+	/* Dependent objects */
+	OBJ(ZERO_INT)		= new_int_obj(0);
+	OBJ(MAX_INT)		= new_int_obj(MAX_INT_VAL);
+	OBJ(LONG_PROTO)		= new_object(NULL);
+	OBJ(FLOAT_PROTO)	= new_object(NULL);
+	OBJ(IMAG_PROTO)		= new_object(NULL);
+
+	add_doc_to_obj(ist, OBJ(FLOAT_PROTO),	"Float number object prototype");
+	add_doc_to_obj(ist, OBJ(IMAG_PROTO),	"Imaginary number object prototype");
+	add_doc_to_obj(ist, OBJ(LONG_PROTO),	"Long integer number object prototype");
+
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Float"),		OBJ(FLOAT_PROTO));
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Imaginary"),	OBJ(IMAG_PROTO));
+}
+
 DEF(Int, __bool__, NULL) { 
 	if (Int_value(self)) return OBJ(PR_TRUE);
 	else				 return OBJ(PR_FALSE);
@@ -698,6 +797,20 @@
 	return gen_obj;
 }
 
+DEF(Int, chr, NULL) {
+	char s[1];
+	s[0] = (char) Int_value(self);
+	return new_string_n_obj(s, 1);
+}
+
+MODULE_END(Int);
+
+MODULE_START(IntGen)
+{
+	IntGen_OBJ = new_object(NULL);
+	MODULE_SET_DOC(Int, "number generator object prototype");
+}
+
 DEF (IntGen, next, NULL) {
 	obj_p limit, res;
 	if ( !(limit=get_attr(ist, self, SYM_LIMIT)) ||
@@ -717,18 +830,16 @@
 	return res;
 }
 
-DEF(Int, chr, NULL){
-	char s[1];
-	s[0] = (char) Int_value(self);
-	return new_string_n_obj(s, 1);
-}
-
-MODULE_END(Int);
 MODULE_END(IntGen);
 
 // ***************************** STRING_PROTO *********************************
 
-MODULE_START(String);
+MODULE_START(String)
+{
+	String_OBJ = OBJ(STRING_PROTO);
+	MODULE_SET_DOC(String, "string object prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "String"), String_OBJ);
+}
 
 DEF(String, __str__, NULL) {
 	return self;
@@ -764,7 +875,12 @@
 
 // ***************************** TUPLE ******************************************
 
-MODULE_START(Tuple);
+MODULE_START(Tuple)
+{
+	Tuple_OBJ = OBJ(TUPLE_PROTO);
+	MODULE_SET_DOC(Tuple,   "object prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Tuple"), Tuple_OBJ);
+}
 
 DEF(Tuple, __str__, NULL) {
 	if (self == Tuple_OBJ)
@@ -794,7 +910,12 @@
 
 // ***************************** LIST ******************************************
 
-MODULE_START(List);
+MODULE_START(List)
+{
+	List_OBJ = OBJ(LIST_PROTO);
+	MODULE_SET_DOC(List, "object prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "List"), List_OBJ);
+}
 
 DEF(List, __str__, NULL) {
 	if (self == List_OBJ)
@@ -1022,7 +1143,12 @@
 
 // ***************************** DICT ******************************************
 
-MODULE_START(Dict);
+MODULE_START(Dict)
+{
+	Dict_OBJ = OBJ(DICT_PROTO);
+	MODULE_SET_DOC(Dict, "dictionary object prototype");
+	set_attr(ist, OBJ(OBJECT), sym(ist, "Dict"), Dict_OBJ);
+}
 
 DEF(Dict, __str__, NULL) {
 	int i;
@@ -1132,7 +1258,12 @@
 
 // ***************************** FUNC ******************************************
 
-MODULE_START(Func);
+MODULE_START(Func)
+{
+	Func_OBJ = OBJ(FUNC_PROTO);
+	MODULE_SET_DOC(Func, "function object prototype");
+}
+
 DEF(Func, __objlist__, FORM_RPARAM) {
 	return parms[1];
 }
@@ -1140,23 +1271,60 @@
 
 // ***************************** INIT_BUILTINS ********************************
 
+static void core_builtins_init(void)
+{
+	OBJ(OBJECT)		= new_object(NULL);
+	OBJ(OBJECT)->attr_proto.proto = OBJ(OBJECT);
+
+	OBJ(SEQ_PROTO)		= new_object(NULL);
+	OBJ(TUPLE_PROTO)	= new_object(OBJ(SEQ_PROTO));
+	OBJ(LIST_PROTO)		= new_object(OBJ(TUPLE_PROTO));
+	OBJ(SYMBOL_PROTO)	= new_object(NULL);
+
+	OBJ(HASH_PROTO)		= new_object(NULL);
+	OBJ(SLICE_PROTO)	= new_object(NULL);
+	OBJ(SUPER_PROTO)	= new_object(NULL);
+	OBJ(THREAD_PROTO)	= new_object(NULL);
+	OBJ(ROOT_GLOBALS)	= new_object(NULL);
+	OBJ(MODULES)		= new_object(NULL);
+	OBJ(PR_FALSE)		= new_object(NULL);
+	OBJ(PR_TRUE)		= new_object(NULL);
+	OBJ(NONE)		= new_object(NULL);
+	OBJ(EXCEPTION)		= new_object(NULL);
+	OBJ(GEN_PROTO)		= new_object(NULL);
+	OBJ(INT_PROTO)		= new_object(NULL);
+	OBJ(STRING_PROTO)	= new_object(NULL);
+	OBJ(DICT_PROTO)		= new_object(NULL);
+	OBJ(FUNC_PROTO)		= new_object(NULL);
+
+	OBJ(SYMBOLS)		= new_list_obj(SYM_ENUM_COUNT+20);
+
+	init_symbol(ist);
+
+	add_doc_to_obj(ist, OBJ(SYMBOLS), "Symbols: list of all symbol objects");
+}
+
 MAIN_MODULE_INIT(Builtins)
 {
-	MODULE_SUB_INIT(Object, OBJECT, 0);
-	MODULE_SUB_INIT(False, PR_FALSE, 0);
-	MODULE_SUB_INIT(True, PR_TRUE, 0);
-	MODULE_SUB_INIT(None, NONE, 0);
-	MODULE_SUB_INIT(Exception, EXCEPTION, 0);
-	MODULE_SUB_INIT(Gen, GEN_PROTO, 0);
-	MODULE_SUB_INIT(String, STRING_PROTO, 0);
-	MODULE_SUB_INIT(Tuple, TUPLE_PROTO, 0);
-	MODULE_SUB_INIT(List, LIST_PROTO, 0);
-	MODULE_SUB_INIT(Dict, DICT_PROTO, 0);
-	MODULE_SUB_INIT(Seq, SEQ_PROTO, 0);
-	MODULE_SUB_INIT(Func, FUNC_PROTO, 0);
+	/* Call this first to get things sort of setup for the rest of
+	 * these things */
+	core_builtins_init();
 
+	MODULE_SUB_INIT(Object);
+	MODULE_SUB_INIT(Seq);
+	MODULE_SUB_INIT(Tuple);
+	MODULE_SUB_INIT(List);
+	MODULE_SUB_INIT(False);
+	MODULE_SUB_INIT(True);
+	MODULE_SUB_INIT(None);
+	MODULE_SUB_INIT(Exception);
+	MODULE_SUB_INIT(Gen);
+	MODULE_SUB_INIT(String);
+	MODULE_SUB_INIT(Dict);
+	MODULE_SUB_INIT(Func);
+
 	SYM_LIMIT = sym(ist, "limit");
 
-	MODULE_SUB_INIT(Int, INT_PROTO, 0);
-	MODULE_SUB_INIT(IntGen, NO_PROTO, 0);
+	MODULE_SUB_INIT(Int);
+	MODULE_SUB_INIT(IntGen);
 }

Modified: trunk/src/object.c
===================================================================
--- trunk/src/object.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/src/object.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -135,93 +135,7 @@
 		pr_exit(1);
 	}
 
-	/* create initial objects */
-	OBJ(OBJECT) 					= new_object(NULL);
-	OBJ(OBJECT)->attr_proto.proto 	= OBJ(OBJECT);
-	OBJ(NONE) 					    = new_object(NULL);
-	OBJ(PR_TRUE) 					= new_object(NULL);
-	OBJ(PR_FALSE) 					= new_object(NULL);
- 	OBJ(INT_PROTO) 				    = new_object(NULL);
-	OBJ(LONG_PROTO) 			    = new_object(NULL);
-	OBJ(FLOAT_PROTO) 	 	 	    = new_object(NULL);
-	OBJ(IMAG_PROTO) 			    = new_object(NULL);
-	OBJ(SYMBOL_PROTO) 	 	 	    = new_object(NULL);
-	OBJ(SEQ_PROTO) 	 	 	    	= new_object(NULL);
-	OBJ(STRING_PROTO) 	 	 	    = new_object(OBJ(SEQ_PROTO));
-	OBJ(TUPLE_PROTO) 			    = new_object(OBJ(SEQ_PROTO));
-	OBJ(LIST_PROTO) 			    = new_object(OBJ(TUPLE_PROTO));
-	OBJ(DICT_PROTO) 			    = new_object(NULL);
-	OBJ(FUNC_PROTO) 			    = new_object(NULL);
-	OBJ(HASH_PROTO) 			    = new_object(NULL);
-	OBJ(SLICE_PROTO) 			    = new_object(NULL);
-	OBJ(SUPER_PROTO) 			    = new_object(NULL);
-	OBJ(GEN_PROTO) 				    = new_object(NULL);
-	OBJ(THREAD_PROTO) 			    = new_object(NULL);
-	OBJ(EXCEPTION) 				    = new_object(NULL);
-	OBJ(INTERNAL_EXC)			    = new_object(OBJ(EXCEPTION));
-	OBJ(PARSEERROR_EXC)			    = new_object(OBJ(EXCEPTION));
-	OBJ(INTERPRETER_EXC)		    = new_object(OBJ(EXCEPTION));  
-	OBJ(ASSERTION_EXC)			    = new_object(OBJ(EXCEPTION));  
-	OBJ(NAME_EXC)				    = new_object(OBJ(EXCEPTION));  
-	OBJ(INDEX_EXC)				    = new_object(OBJ(EXCEPTION));  
-	OBJ(FUNCNOTFOUND_EXC)			= new_object(OBJ(EXCEPTION));  
-	OBJ(TYPE_EXC)				    = new_object(OBJ(EXCEPTION));  
-	OBJ(MUTABLE_EXC)				= new_object(OBJ(EXCEPTION));  
-	OBJ(DIVIDEZERO_EXC)				= new_object(OBJ(EXCEPTION));  
-	OBJ(OUTOFMEMORY_EXC) 		    = new_object(OBJ(EXCEPTION));  
-	OBJ(IOEXCEPTION) 			    = new_object(OBJ(EXCEPTION));  
-	OBJ(FILENOTFOUND_EXC) 		    = new_object(OBJ(IOEXCEPTION));
-	OBJ(STOP_ITERATION_EXC)			    = new_object(OBJ(EXCEPTION)); 
-	OBJ(LOCK_EXC)					= new_object(OBJ(EXCEPTION)); 
-			    
-	OBJ(ZERO_INT)					= new_int_obj(0);
-	OBJ(MAX_INT)					= new_int_obj(MAX_INT_VAL);
-
-	OBJ(ROOT_GLOBALS) 			    = new_object(NULL);
-	OBJ(MODULES) 				    = new_object(NULL);
-	OBJ(SYMBOLS)					= new_list_obj(SYM_ENUM_COUNT+20);
-
-	init_symbol(ist);
-
-	add_doc_to_obj(ist, OBJ(OBJECT),			"Object: proto of all objects");
-	add_doc_to_obj(ist, OBJ(NONE),				"None: represents empty set");
-	add_doc_to_obj(ist, OBJ(PR_TRUE),				"True: boolean true singleton value");
-	add_doc_to_obj(ist, OBJ(PR_FALSE),				"False: boolean false singleton value");
-	add_doc_to_obj(ist, OBJ(SYMBOL_PROTO),		"Symbol object prototype");
-	add_doc_to_obj(ist, OBJ(INT_PROTO),			"Integer number object prototype");
-	add_doc_to_obj(ist, OBJ(FLOAT_PROTO),		"Float number object prototype");
-	add_doc_to_obj(ist, OBJ(IMAG_PROTO),		"Imaginary number object prototype");
-	add_doc_to_obj(ist, OBJ(LONG_PROTO),		"Long integer number object prototype");
-	add_doc_to_obj(ist, OBJ(SEQ_PROTO),			"Sequence object prototype");
-	add_doc_to_obj(ist, OBJ(STRING_PROTO),		"String object prototype");
-	add_doc_to_obj(ist, OBJ(TUPLE_PROTO),		"Tuple object prototype");
-	add_doc_to_obj(ist, OBJ(LIST_PROTO),		"List object prototype");
-	add_doc_to_obj(ist, OBJ(DICT_PROTO),		"Dictionary object prototype");
-	add_doc_to_obj(ist, OBJ(FUNC_PROTO),		"Function object prototype");
-	add_doc_to_obj(ist, OBJ(HASH_PROTO),		"Hash object prototype");
-	add_doc_to_obj(ist, OBJ(SLICE_PROTO),		"Slice object prototype");
-	add_doc_to_obj(ist, OBJ(SUPER_PROTO),		"Super object prototype");
-	add_doc_to_obj(ist, OBJ(GEN_PROTO),			"Generator object prototype");
-	add_doc_to_obj(ist, OBJ(EXCEPTION),			"Exception: Root exception for all exception objects");
-	add_doc_to_obj(ist, OBJ(INTERNAL_EXC),		"Internal Prothon Error");
-	add_doc_to_obj(ist, OBJ(PARSEERROR_EXC),	"Parse Error");
-	add_doc_to_obj(ist, OBJ(INTERPRETER_EXC),	"Program Error");
-	add_doc_to_obj(ist, OBJ(ASSERTION_EXC),		"Assertion Error");
-	add_doc_to_obj(ist, OBJ(NAME_EXC),			"Name Error");
-	add_doc_to_obj(ist, OBJ(INDEX_EXC),			"Index Error");
-	add_doc_to_obj(ist, OBJ(TYPE_EXC),			"Type Error");
-	add_doc_to_obj(ist, OBJ(MUTABLE_EXC),		"Mutable Error");
-	add_doc_to_obj(ist, OBJ(DIVIDEZERO_EXC),	"Divide by zero error");
-	add_doc_to_obj(ist, OBJ(OUTOFMEMORY_EXC),	"Out Of Memory Error");
-	add_doc_to_obj(ist, OBJ(IOEXCEPTION),		"IO Error");
-	add_doc_to_obj(ist, OBJ(FILENOTFOUND_EXC),	"File Not Found");
-	add_doc_to_obj(ist, OBJ(STOP_ITERATION_EXC),	"StopIteration Exception (not an error)");
-	add_doc_to_obj(ist, OBJ(LOCK_EXC),			"Locking Error");
-
-	add_doc_to_obj(ist, OBJ(ROOT_GLOBALS),		"Root_Globals: recursive container of all objects");
-	add_doc_to_obj(ist, OBJ(MODULES),			"Modules: container of all modules");
-	add_doc_to_obj(ist, OBJ(SYMBOLS),			"Symbols: list of all symbol objects");
-
+	/* Setup the services struct */
 	dll_services.get_ist		  = get_ist;		
 	dll_services.get_attr		  = get_attr;		
 	dll_services.set_attr		  = set_attr;		
@@ -272,25 +186,6 @@
 	dll_services.clr_immutable	  = clr_immutable;
 	dll_services.get_pr_head_pool = get_pr_head_pool;
 
-	set_attr(ist, OBJ(OBJECT), sym(ist, "Root_Globals"), OBJ(ROOT_GLOBALS));
-	set_attr(ist, OBJ(OBJECT), sym(ist, "Modules"),      OBJ(MODULES));
-	set_attr(ist, OBJ(OBJECT), sym(ist, "Symbols"),      OBJ(SYMBOLS));
-
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "None"),		 OBJ(NONE));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "True"),		 OBJ(PR_TRUE));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "False"),       OBJ(PR_FALSE));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Exception"),   OBJ(EXCEPTION));
-
-	set_attr(ist, OBJ(OBJECT),  sym(ist, "Object"),      OBJ(OBJECT));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Int"),		 OBJ(INT_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Float"),		 OBJ(FLOAT_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Imaginary"),	 OBJ(IMAG_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Sequence"),	 OBJ(SEQ_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "String"),		 OBJ(STRING_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Tuple"),		 OBJ(TUPLE_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "List"),		 OBJ(LIST_PROTO));
-	set_attr(ist, OBJ(OBJECT),	sym(ist, "Dict"),		 OBJ(DICT_PROTO));
-
 	/* Load all of our builtin dll's */
 	dll_initcalls++;
 	while (*dll_initcalls) {

Modified: trunk/src/symbol.c
===================================================================
--- trunk/src/symbol.c	2004-03-31 02:03:35 UTC (rev 222)
+++ trunk/src/symbol.c	2004-03-31 06:05:15 UTC (rev 223)
@@ -261,7 +261,7 @@
 //********************************* init_symbol *******************************
 void init_symbol(isp ist){
 	int i;
-	for(i=0; i < SYM_ENUM_COUNT; i++)
+	for(i = 0; i < SYM_ENUM_COUNT; i++)
 		sym_id_table[i].id = sym(ist, sym_id_table[i].str);
 	set_attr(ist, OBJ(SYMBOL_PROTO), SYM(__STR__), new_func_obj(ist, str_sym, NULL));
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.