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));
}