Please take our Survey
logo       

Choosing A Webhost:
A web hosting service is a type of Internet hosting service that allows individuals and organizations to provide their own website accessible via the World Wide Web. Web hosts are companies that provide space on a server they own for use by their clients as well as providing Internet connectivity, typically in a data center. Web hosts can also provide data center space and connectivity to the Internet for servers they do not own to be located in their data center, called colocation. more...

rev 222 - in trunk: . include/prothon modules/File modules/List modules/Str: msg#00090

lang.prothon.cvs

Subject: rev 222 - in trunk: . include/prothon modules/File modules/List modules/String modules/Tuple src

Author: mark
Date: 2004-03-30 21:03:35 -0500 (Tue, 30 Mar 2004)
New Revision: 222

Modified:
trunk/STATUS.txt
trunk/include/prothon/prothon.h
trunk/modules/File/File.c
trunk/modules/List/List.c
trunk/modules/String/String.c
trunk/modules/Tuple/Tuple.c
trunk/src/builtins.c
trunk/src/interp.c
trunk/src/object.c
trunk/src/parser_routines.c
Log:
added generators for tuples and lists so you can now
do for i in [1,2,3] and for i in (1,2,3)

Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/STATUS.txt 2004-03-31 02:03:35 UTC (rev 222)
@@ -35,16 +35,16 @@

Syntax extension modifier -- language spec?

+make := work like = but usable as an expr
+
----------------------- TO-DO (highest priority first) ------------------------

--- implement new space/tab indent scheme

--- add var? form to lexer

---- fix bugs from bugzilla
+--- make print a function

---- make print a function, support stdin, out, & err
-
--- write and publish prothon directives
--- credit Ruby


Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/include/prothon/prothon.h 2004-03-31 02:03:35 UTC (rev 222)
@@ -252,7 +252,7 @@
IOEXCEPTION, //
FUNCNOTFOUND_EXC, //
FILENOTFOUND_EXC, //
- END_OF_GEN_EXC, //
+ STOP_ITERATION_EXC, //
LOCK_EXC, //

// constants

Modified: trunk/modules/File/File.c
===================================================================
--- trunk/modules/File/File.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/modules/File/File.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -716,7 +716,7 @@
obj_p file_obj;

MODULE_SUB_INIT(File, NO_PROTO, 1);
- MODULE_SUB_INIT(Dir, NO_PROTO, 0);
+ MODULE_SUB_INIT(Dir, NO_PROTO, 0);

/* Create base file objects for std{in,out,err} */
aprerr = apr_pool_create(&std_pool, get_pr_head_pool());

Modified: trunk/modules/List/List.c
===================================================================
--- trunk/modules/List/List.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/modules/List/List.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -238,6 +238,7 @@

MODULE_END(List);

+
MAIN_MODULE_INIT(List)
{
MODULE_SUB_INIT(List, LIST_PROTO, 0);

Modified: trunk/modules/String/String.c
===================================================================
--- trunk/modules/String/String.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/modules/String/String.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -232,7 +232,7 @@
res_str[0] = ch;
res_str[1] = 0;
} else
- raise_exception(ist, OBJ(END_OF_GEN_EXC), NULL);
+ raise_exception(ist, OBJ(STOP_ITERATION_EXC), NULL);
write_unlock(ist, self);
return res;
}

Modified: trunk/modules/Tuple/Tuple.c
===================================================================
--- trunk/modules/Tuple/Tuple.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/modules/Tuple/Tuple.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -58,6 +58,7 @@
#include <stdio.h>
#include <string.h>

+MODULE_DECLARE(Tgen);
MODULE_DECLARE(Tuple);

MODULE_START(Tuple);
@@ -183,9 +184,35 @@
return NULL;
}

+DEF(Tuple, __gen__, NULL) {
+ obj_p list_obj, gen_obj = new_object(Tgen_OBJ);
+ gen_obj->data_type = OBJ_TYPE_DATAPTR;
+ gen_obj->data.ptr = list_obj = clone_list_obj(ist, self);
+ listlen(list_obj) = 0;
+ return gen_obj;
+}
+
MODULE_END(Tuple);

+MODULE_START(Tgen);
+
+DEF(Tgen, next, NULL) {
+ obj_p res, list_obj = self->data.ptr;
+ size_t lsiz = listsize(list_obj);
+ size_t llen = listlen(list_obj);
+ if (llen == lsiz) {
+ raise_exception(ist, OBJ(STOP_ITERATION_EXC), NULL);
+ return NULL;
+ }
+ res = listitem(list_obj, llen);
+ listlen(list_obj)++;
+ return res;
+}
+
+MODULE_END(Tgen);
+
MAIN_MODULE_INIT(Tuple)
{
+ MODULE_SUB_INIT(Tgen, NO_PROTO, 1);
MODULE_SUB_INIT(Tuple, TUPLE_PROTO, 0);
}

Modified: trunk/src/builtins.c
===================================================================
--- trunk/src/builtins.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/src/builtins.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -707,7 +707,7 @@
del_attr(ist, self, SYM_LIMIT);
read_lock(ist, self);
}
- raise_exception(ist, OBJ(END_OF_GEN_EXC), NULL);
+ raise_exception(ist, OBJ(STOP_ITERATION_EXC), NULL);
return NULL;
}
res = new_int_obj(Int_value(self));

Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/src/interp.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -513,7 +513,7 @@
} else
*switch_frame = DONE_FRAME_FLAG;
if (fr_gen)
- raise_exception(ist, OBJ(END_OF_GEN_EXC), NULL);
+ raise_exception(ist, OBJ(STOP_ITERATION_EXC), NULL);
else
*free_frame = frame;
if (!res) res = return_value;
@@ -904,7 +904,7 @@
if (fr_stack[fr_sp+1] == SYM(NEXT) &&
has_proto(ist, fr_stack[fr_sp], OBJ(GEN_PROTO))) {
exec_frame_t*
new_frame=(exec_frame_t*)(fr_stack[fr_sp]->data.ptr);
if (!new_frame) {
- raise_exception(ist,
OBJ(END_OF_GEN_EXC), NULL);
+ raise_exception(ist,
OBJ(STOP_ITERATION_EXC), NULL);
break;
}
new_frame->prev_frame = frame;

Modified: trunk/src/object.c
===================================================================
--- trunk/src/object.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/src/object.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -171,7 +171,7 @@
OBJ(OUTOFMEMORY_EXC) = new_object(OBJ(EXCEPTION));
OBJ(IOEXCEPTION) =
new_object(OBJ(EXCEPTION));
OBJ(FILENOTFOUND_EXC) = new_object(OBJ(IOEXCEPTION));
- OBJ(END_OF_GEN_EXC) =
new_object(OBJ(EXCEPTION));
+ OBJ(STOP_ITERATION_EXC) =
new_object(OBJ(EXCEPTION));
OBJ(LOCK_EXC) =
new_object(OBJ(EXCEPTION));

OBJ(ZERO_INT) = new_int_obj(0);
@@ -215,7 +215,7 @@
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(END_OF_GEN_EXC), "End Of Generated
Sequence (not an error)");
+ 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");

Modified: trunk/src/parser_routines.c
===================================================================
--- trunk/src/parser_routines.c 2004-03-30 23:51:20 UTC (rev 221)
+++ trunk/src/parser_routines.c 2004-03-31 02:03:35 UTC (rev 222)
@@ -730,7 +730,7 @@
assert(els_loc == k);
res->code_data[k ].bytecode.opcode = OP_PUSH;
res->code_data[k++].bytecode.param = 3;
- res->code_data[k++].data = OBJ(END_OF_GEN_EXC);
+ res->code_data[k++].data = OBJ(STOP_ITERATION_EXC);
res->code_data[k++].data = NULL;
res->code_data[k ].bytecode.opcode = OP_EXCEPT;
res->code_data[k ].bytecode.param = end_els_loc - k;




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

Recently Viewed:
qnx.openqnx.dev...    gcc.libstdc++.c...    solaris.opensol...    information-ret...    misc.misterhous...    web.catalyst.ge...    apache.webservi...    redhat.release....    hardware.lirc/2...    kernel.autofs/2...    technology.sust...    linux.vdr/2003-...    editors.lyx.gen...    org.user-groups...    netbsd.devel.pk...    xdg.devel/2004-...    version-control...    jakarta.slide.d...    debian.packages...    creativecommons...    ports.ppc.embed...    bug-tracking.bu...   
Home | blog view | USPTO Patent Archive | advertise | OSDir is an inevitable website. super tiny logo

Free Magazines

Cisco News
Receive a free quarterly e-newsletter with exclusive articles on how Cisco IT uses its own products and solutions to enable the business.
subscribe

Systems Management News, the newspaper for IT systems administration and data center managers! Each issue of Systems Management News is chock-full of news and analysis to help you understand what's happening in your field.
subscribe

The Enterprise Newsweekly eWeek is the essential technology information source for builders of e-business.
subscribe

Oracle Magazine Oracle Magazine contains technology strategy articles, sample code, tips, Oracle and partner news, how to articles for developers and DBAs, and more. Oracle (NASDAQ: ORCL) is the world's largest enterprise software company.
subscribe

Total Telecom Total Telecom is "The Economist of the communications industry".
subscribe