rev 637 - in trunk: . include/prothon pr/test src

SVN User <[email protected]> Fri, 18 Jun 2004 21:14:36 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-06-18 21:14:33 -0400 (Fri, 18 Jun 2004)
New Revision: 637

Modified:
   trunk/STATUS.txt
   trunk/include/prothon/prothon.h
   trunk/pr/test/test.pr
   trunk/src/builtins-core.c
   trunk/src/builtins-dict.c
   trunk/src/builtins-int.c
   trunk/src/builtins-list.c
   trunk/src/builtins-string.c
   trunk/src/builtins-tuple.c
   trunk/src/object.c
Log:
implemented List(iter_)

Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/STATUS.txt	2004-06-19 01:14:33 UTC (rev 637)
@@ -8,6 +8,7 @@
 		http://www.prothon.org/pipermail/prothon-user/2004-June/001863.html
 --- support any object that supports file methods in stdxxx (duck std)
 		http://www.prothon.org/pipermail/prothon-user/2004-June/001769.html	
+--- TextFileGen
 
 --- range function
 

Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/include/prothon/prothon.h	2004-06-19 01:14:33 UTC (rev 637)
@@ -320,16 +320,17 @@
 	OUTER_PROTO,		// 20 
 	SUPER_PROTO,		// 21
 	GEN_PROTO,			// 22 
-	THREAD_PROTO,		// 23 Thread
-	MUTEX_PROTO,		// 24 Mutex
+	ITER_PROTO,			// 23
+	THREAD_PROTO,		//   Thread
+	MUTEX_PROTO,		//   Mutex
   
 // Exceptions
-	EXCEPTION,			//  25 Exception
-	INTERNAL_EXC,		//  26 InternalError
-	PARSEERROR_EXC,		//  27
-	INTERPRETER_EXC,	//  28
-	ASSERTION_EXC,		//  29 AssertionError
-	NAME_EXC,			//  30 NameError
+	EXCEPTION,			//    Exception
+	INTERNAL_EXC,		//    InternalError
+	PARSEERROR_EXC,		//   
+	INTERPRETER_EXC,	//   
+	ASSERTION_EXC,		//    AssertionError
+	NAME_EXC,			//    NameError
 	INDEX_EXC,			//   IndexError
 	TYPE_EXC,			//   TypeError
 	VALUE_EXC,			//   ValueError

Modified: trunk/pr/test/test.pr
===================================================================
--- trunk/pr/test/test.pr	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/pr/test/test.pr	2004-06-19 01:14:33 UTC (rev 637)
@@ -1,4 +1,5 @@
 #!/usr/bin/env prothon
 
-for i in range(20, 0, -2):
-	print i
+print List(10.iter_())
+print List(range(20, 0, -2))
+

Modified: trunk/src/builtins-core.c
===================================================================
--- trunk/src/builtins-core.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/builtins-core.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -841,7 +841,7 @@
 
 MODULE_START(RangeGen)
 {
-	RangeGen_OBJ = NEW_OBJ(NULL);
+	RangeGen_OBJ = NEW_OBJ(OBJ(ITER_PROTO));
 	MODULE_ADD_TO_OBJ(RangeGen, OBJ(OBJECT), "Range");
 	MODULE_SET_DOC(RangeGen, "range generator object prototype");
 	set_obj_id(RangeGen_OBJ, *, RangeGen);

Modified: trunk/src/builtins-dict.c
===================================================================
--- trunk/src/builtins-dict.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/builtins-dict.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -564,7 +564,7 @@
 
 MODULE_START(DictGen)
 {
-	DictGen_OBJ = NEW_OBJ(NULL);
+	DictGen_OBJ = NEW_OBJ(OBJ(ITER_PROTO));
 	set_obj_id(DictGen_OBJ, *, DictGen);
 }
 

Modified: trunk/src/builtins-int.c
===================================================================
--- trunk/src/builtins-int.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/builtins-int.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -2706,7 +2706,7 @@
 
 MODULE_START(IntGen)
 {
-	IntGen_OBJ = NEW_OBJ(OBJ(INT_PROTO));
+	IntGen_OBJ = NEW_OBJ(OBJ(ITER_PROTO));
 	MODULE_SET_DOC(IntGen, "number generator object prototype");
 	set_obj_id(IntGen_OBJ, *, IntGen);
 }

Modified: trunk/src/builtins-list.c
===================================================================
--- trunk/src/builtins-list.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/builtins-list.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -327,6 +327,19 @@
 
 DEF(List, init_, FORM_STAR_PARAM) {
 	BIN_EMPTY_OR_NOT_CHK(List);
+	if (list_len(ist, parms[1])) {
+		obj_p item = list_item(ist, parms[1], 0);
+		if (has_proto(ist, item, OBJ(ITER_PROTO))) {
+			obj_p new_list = new_list_obj(ist, 10);
+			while (TRUE) {
+				obj_p new_item = call_func0(ist, item, SYM(NEXT));
+				if (catch_exception(ist, OBJ(STOP_ITERATION_EXC), NULL)) break;
+				if_exc_return NULL;
+				list_append(ist, new_list, new_item);
+			}
+			return new_list;
+		}
+	}
 	read_unlock(ist, self);
 	read_unlock(ist, parms[1]);
 	copy_object_data(ist, self, parms[1]);

Modified: trunk/src/builtins-string.c
===================================================================
--- trunk/src/builtins-string.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/builtins-string.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -1084,7 +1084,7 @@
 
 MODULE_START(StringGen)
 {
-	StringGen_OBJ = NEW_OBJ(NULL);
+	StringGen_OBJ = NEW_OBJ(OBJ(ITER_PROTO));
 	set_attr(ist, OBJ(OBJECT), sym(ist, "StringGen"), StringGen_OBJ);
 	set_obj_id(StringGen_OBJ, *, StringGen);
 }

Modified: trunk/src/builtins-tuple.c
===================================================================
--- trunk/src/builtins-tuple.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/builtins-tuple.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -331,7 +331,7 @@
 //*************************** TUPLE GENERATOR OBJECT **************************
 MODULE_START(Tgen)
 {
-	Tgen_OBJ = NEW_OBJ(NULL);
+	Tgen_OBJ = NEW_OBJ(OBJ(ITER_PROTO));
 }
 
 DEF(Tgen, next, NULL) {

Modified: trunk/src/object.c
===================================================================
--- trunk/src/object.c	2004-06-19 00:25:16 UTC (rev 636)
+++ trunk/src/object.c	2004-06-19 01:14:33 UTC (rev 637)
@@ -232,7 +232,8 @@
 	OBJ(NONE)               = NEW_OBJ(NULL);
 	OBJ(EXCEPTION)          = NEW_OBJ(NULL);
 	OBJ(FUNC_PROTO)         = NEW_OBJ(NULL);
-	OBJ(GEN_PROTO)          = NEW_OBJ(NULL);
+	OBJ(ITER_PROTO)         = NEW_OBJ(NULL);
+	OBJ(GEN_PROTO)          = NEW_OBJ(OBJ(ITER_PROTO));
 	OBJ(INT_PROTO)          = NEW_OBJ(NULL);
 	OBJ(BYTES_PROTO)        = NEW_OBJ(OBJ(SEQ_PROTO));
 	OBJ(STRING_PROTO)       = NEW_OBJ(OBJ(SEQ_PROTO));