rev 635 - in trunk: . include/prothon pr/test src
SVN User <[email protected]> Fri, 18 Jun 2004 19:56:01 -0400
| Newsgroups | gmane.comp.lang.prothon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mark
Date: 2004-06-18 19:55:59 -0400 (Fri, 18 Jun 2004)
New Revision: 635
Modified:
trunk/STATUS.txt
trunk/include/prothon/prothon.h
trunk/pr/test/test.pr
trunk/src/builtins-core.c
trunk/src/src.vcproj
Log:
added object.range() (which doesn't work yet)
Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt 2004-06-18 06:05:25 UTC (rev 634)
+++ trunk/STATUS.txt 2004-06-18 23:55:59 UTC (rev 635)
@@ -9,13 +9,17 @@
--- support any object that supports file methods in stdxxx (duck std)
http://www.prothon.org/pipermail/prothon-user/2004-June/001769.html
+--- range function
+
--- += --> = a + b, +! --> .append!()
---- CThread & UThread
+--- OSThread, Thread, and Gate
--- Python regrets from Paul and print proposal
http://www.prothon.org/pipermail/prothon-user/2004-June/001970.html
http://www.prothon.org/pipermail/prothon-user/2004-June/001991.html
+--- pretty print
+ http://www.prothon.org/pipermail/prothon-user/2004-June/002112.html
--- implement 1xc3fe ?
Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h 2004-06-18 06:05:25 UTC (rev 634)
+++ trunk/include/prothon/prothon.h 2004-06-18 23:55:59 UTC (rev 635)
@@ -987,12 +987,14 @@
i32_t int2i32t(isp ist, obj_p self);
#define INT_64_PARAM(index, var) /* i64_t var; */ \
-{ if (!has_proto(ist, (index > 0 ? parms[((index)-1)*2+1] : list_item(ist, parms[1], -index)), OBJ(INT_PROTO))) { \
- raise_exception(ist, OBJ(TYPE_EXC), \
- "expected a integer in parameter " #index); \
- return (index > 0 ? parms[((index)-1)*2+1] : list_item(ist, parms[1], -index)); \
- } \
- (var) = int2i64t(ist, index > 0 ? parms[((index)-1)*2+1] : list_item(ist, parms[1], -index)); }
+do { obj_p item = index > 0 ? parms[((index)-1)*2+1] : \
+ list_item(ist, parms[1], -index); \
+ if (!has_proto(ist, item, OBJ(INT_PROTO))) { \
+ raise_exception(ist, OBJ(TYPE_EXC), \
+ "expected a integer in parameter " #index); \
+ return NULL; } (var) = int2i64t(ist, item); \
+} while (FALSE)
+
i64_t int2i64t(isp ist, obj_p self);
#define BYTES__PARAM(index, var) /* obj_p var; */ \
Modified: trunk/pr/test/test.pr
===================================================================
--- trunk/pr/test/test.pr 2004-06-18 06:05:25 UTC (rev 634)
+++ trunk/pr/test/test.pr 2004-06-18 23:55:59 UTC (rev 635)
@@ -1,54 +1,19 @@
#!/usr/bin/env prothon
-print TempDir
-print TempDir(), TempDir
+def f():
+ if 'static' not in f.attrs_:
+ f.static = 0
+ f.static += 1
+
+ tmp = f.static
+ def outer.f():
+ f.static += 1
+ return f.static
+ f.static = tmp
+
+ return f.static
-/*
-d = Dir()
-print 'dir:',d, ' len:', len(d), d.path, d.name
-print
-print '--- dirs ---'
-dirs = d.dirs()
-for i in d.numDirs():
- print "{0:-60.60} {1:17.17}".fmt(dirs[i].path, dirs[i].name)
-print
-print '--- files ---'
-files = d.files()
-for i in d.numFiles():
- print "{0:-60.60} {1:17.17}".fmt(files[i].path, files[i].name)
-print
+print f()
+print f()
+print f()
-files[2].open('r')
-print files[2].read()
-files[2].close()
-
-File("abc/test").delete()
-f = File("abc/test.txt")
-print f, f.exists?(), f.open?()
-f.open('w')
-print f, f.exists?(), f.open?()
-f.write(x"303132")
-print f, f.exists?(), f.open?()
-f.close()
-print f, f.exists?(), f.open?()
-
-d = Dir()
-print d, d.modTime()
-print d, ' len:', len(d), d.path, d.name
-
-files = Dir().files()
-f = files[0]
-print f, f.modTime(), f.size()
-f.setModTime(Time(1080000000000000))
-print f, f.modTime(), f.size()
-f.setModTime(Time(1090000000000000))
-print f, f.modTime(), f.size()
-
-t = TempFile(delOnClose=False)
-print t, t.open?(), t.exists?()
-t.close()
-print t, t.open?(), t.exists?()
-t.delete()
-print t, t.open?(), t.exists?()
-
-*/
\ No newline at end of file
Modified: trunk/src/builtins-core.c
===================================================================
--- trunk/src/builtins-core.c 2004-06-18 06:05:25 UTC (rev 634)
+++ trunk/src/builtins-core.c 2004-06-18 23:55:59 UTC (rev 635)
@@ -76,6 +76,7 @@
MODULE_DECLARE(Seq);
MODULE_DECLARE(Func);
MODULE_DECLARE(Method);
+MODULE_DECLARE(RangeGen);
// ***************************** Object *********************************
@@ -827,7 +828,64 @@
DEF(Func, objList_, FORM_RPARAM) {
return parms[1];
}
+// ***************************** RANGE ****************************************
+typedef struct {
+ data_size_t size;
+ i64_t value;
+ i64_t stop;
+ i64_t step;
+} range_t;
+
+typedef range_t* range_p;
+
+MODULE_START(RangeGen)
+{
+ RangeGen_OBJ = NEW_OBJ(Gen_OBJ);
+ MODULE_ADD_TO_OBJ(RangeGen, OBJ(OBJECT), "Range");
+ MODULE_SET_DOC(RangeGen, "range generator object prototype");
+ set_obj_id(RangeGen_OBJ, *, RangeGen);
+}
+
+DEF(Object, range, FPARM3(start, NEW_INT(0), stop, OBJ(NONE), step, OBJ(NONE))) {
+ obj_p range_obj;
+ range_p rangep;
+ i64_t start, stop, step=1;
+
+ INT_64_PARAM(1, start);
+ if (parms[3] != OBJ(NONE)) INT_64_PARAM(2, stop);
+ else { stop = start; start = 0; }
+ if (parms[5] != OBJ(NONE)) INT_64_PARAM(3, step);
+ if (!step) {
+ raise_exception(ist, OBJ(VALUE_EXC), "range increment must be non-zero");
+ return NULL;
+ }
+ range_obj = NEW_OBJ(RangeGen_OBJ);
+ range_obj->data.ptr = rangep = (range_p) pr_malloc(sizeof(range_t));
+ rangep->size = sizeof(range_t);
+ rangep->value = start;
+ rangep->stop = stop;
+ rangep->step = step;
+ return range_obj;
+}
+
+DEF(RangeGen, next, NULL) {
+ obj_p res;
+ range_p rangep;
+ BIN_CONTENT_CHK(RangeGen);
+ rangep = self->data.ptr;
+ if ( rangep->step > 0 && rangep->value >= rangep->stop ||
+ rangep->step < 0 && rangep->value <= rangep->stop ) {
+ raise_exception(ist, OBJ(STOP_ITERATION_EXC), NULL);
+ return NULL;
+ }
+ res = NEW_INT(rangep->value);
+ rangep->value += rangep->step;
+ return res;
+}
+
+// ***************************** MAIN_MODULE_INIT *****************************
+
MAIN_MODULE_INIT(Core)
{
MODULE_SUB_INIT(Object);
@@ -872,6 +930,7 @@
MODULE_ADD_SYM(Object, notIn__QUES);
MODULE_ADD_SYM(Object, CurrentThread);
MODULE_ADD_SYM(Object, Sleep);
+ MODULE_ADD_SYM(Object, range);
MODULE_ADD_SYM(Object, toStorProxy_);
MODULE_ADD_SYM(Object, fromStorProxy_);
@@ -918,5 +977,8 @@
MODULE_ADD_SYM(Func, unbind);
MODULE_ADD_SYM(Func, objList_);
+ MODULE_SUB_INIT(RangeGen);
+ MODULE_ADD_SYM(RangeGen, next);
+
check_exceptions(ist);
}
Modified: trunk/src/src.vcproj
===================================================================
--- trunk/src/src.vcproj 2004-06-18 06:05:25 UTC (rev 634)
+++ trunk/src/src.vcproj 2004-06-18 23:55:59 UTC (rev 635)
@@ -92,7 +92,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
- AdditionalDependencies="apr.lib aprutil.lib wsock32.lib"
+ AdditionalDependencies="apr.lib aprutil.lib wsock32.lib Rpcrt4.lib"
OutputFile="$(OutDir)/prothon.exe"
LinkIncremental="1"
AdditionalLibraryDirectories="..\apr\apr\LibR;..\apr\apr-util\LibR"