rev 651 - in trunk: . include/prothon modules/DBM modules/Prosist modules/Re modules/SQLite pr/test src

SVN User <[email protected]> Wed, 23 Jun 2004 00:55:46 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-06-23 00:55:43 -0400 (Wed, 23 Jun 2004)
New Revision: 651

Modified:
   trunk/STATUS.txt
   trunk/include/prothon/prothon.h
   trunk/modules/DBM/DBM.c
   trunk/modules/Prosist/Prosist.c
   trunk/modules/Re/Re.c
   trunk/modules/SQLite/SQLite.c
   trunk/pr/test/test.pr
   trunk/src/builtins-attrdict.c
   trunk/src/builtins-core.c
   trunk/src/builtins-dict.c
   trunk/src/builtins-file.c
   trunk/src/builtins-list.c
   trunk/src/builtins-protolist.c
   trunk/src/builtins-thread.c
   trunk/src/builtins-tuple.c
   trunk/src/interp.c
   trunk/src/interp.h
Log:
fixed 3 or 4 bugs from the bug list

Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/STATUS.txt	2004-06-23 04:55:43 UTC (rev 651)
@@ -2,7 +2,6 @@
 ----------------------- TO-DO (highest priority first) ------------------------
 
 --- finish live formal param defaults, bugs, and easy changes
---- evaluate default expressions on every function call
 
 --- fix raise command
 --- change proto() to newObject() 

Modified: trunk/include/prothon/prothon.h
===================================================================
--- trunk/include/prothon/prothon.h	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/include/prothon/prothon.h	2004-06-23 04:55:43 UTC (rev 651)
@@ -300,23 +300,23 @@
 	OBJECT,				// 2 Object
 	NONE,				// 3 None
 
-	NOKEY,		//
-	PARAM_STAR,			//
-	PARAM_STAR_STAR,	//
-	NODEF,				//
+	NOKEY,				// 4
+	PARAM_STAR,			// 5
+	PARAM_STAR_STAR,	// 6
+	NODEF,				// 7
 
 // prototype objects used as protos for basic "types"
-	INT_PROTO,			//  Int
-	FLOAT_PROTO,		//  Float
-	IMAG_PROTO,			//  Imaginary
-	SYMBOL_PROTO,		//  Symbol
-	DATETIME_PROTO,		//  Time
-	SEQ_PROTO,			//  Sequence
-	BYTES_PROTO,		//  Bytes
-	STRING_PROTO,		//  String
-	TUPLE_PROTO,		//  Tuple
-	LIST_PROTO,			//  List
-	DICT_PROTO,			//  Dict
+	INT_PROTO,			// 8 Int
+	FLOAT_PROTO,		// 9 Float
+	IMAG_PROTO,			// 10 Imaginary
+	SYMBOL_PROTO,		// 11 Symbol
+	DATETIME_PROTO,		// 12 Time
+	SEQ_PROTO,			// 13 Sequence
+	BYTES_PROTO,		// 14 Bytes
+	STRING_PROTO,		// 15 String
+	TUPLE_PROTO,		// 16 Tuple
+	LIST_PROTO,			// 17 List
+	DICT_PROTO,			// 18 Dict
 	FUNC_PROTO,			//  Func
 	METHOD_PROTO,		//  Method
 	HASH_PROTO,			//  Hash

Modified: trunk/modules/DBM/DBM.c
===================================================================
--- trunk/modules/DBM/DBM.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/modules/DBM/DBM.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -301,7 +301,6 @@
 }
 
 DEF(DB, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(DB);
 	return parms[1];
 }
 
Modified: trunk/modules/Prosist/Prosist.c
===================================================================
--- trunk/modules/Prosist/Prosist.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/modules/Prosist/Prosist.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -1024,7 +1024,6 @@
 }
 
 DEF(Prosist, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(Prosist);
 	return parms[1];
 }
 
@@ -1041,7 +1040,6 @@
 }
 
 DEF(MutWrap, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(MutWrap);
 	return parms[1];
 }
 

Modified: trunk/modules/Re/Re.c
===================================================================
--- trunk/modules/Re/Re.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/modules/Re/Re.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -490,8 +490,8 @@
 }
 
 DEF(reCompiled, del_, NULL) {
-	BIN_CONTENT_CHK(reCompiled);
-	regfree((regex_t*)(self->data.ptr));
+	if (self->data.ptr)
+		regfree((regex_t*)(self->data.ptr));
 	return OBJ(NONE);
 }
 

Modified: trunk/modules/SQLite/SQLite.c
===================================================================
--- trunk/modules/SQLite/SQLite.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/modules/SQLite/SQLite.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -170,7 +170,6 @@
 }
 
 DEF(Connection, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(Connection);
 	return parms[1];
 }
 
@@ -279,7 +278,7 @@
 
 DEF(Cursor, objList_, FORM_RPARAM) {
 	cursor_p cursorp  = (cursor_p)(self->data.ptr);
-	BIN_CONTENT_CHK(Cursor);
+	if (!self->data.ptr) return parms[1];
 	if (cursorp->row_list)
 		return cursorp->row_list;
 	return parms[1];

Modified: trunk/pr/test/test.pr
===================================================================
--- trunk/pr/test/test.pr	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/pr/test/test.pr	2004-06-23 04:55:43 UTC (rev 651)
@@ -1,37 +1,5 @@
 #!/usr/bin/env prothon
 
-def err(n):
-	print "\n test {n} failed".fmt()
-	sys.exit(1)
-
-z=0
-def f(x=y):
-	outer.z = x
-	
-y=1
-f(0)
-if z != 0: err(1)
-
-y=2
-f()
-if z != 2: err(2)
-
-y=3
-f()
-if z != 3: err(3)
-
-n=[]
-n.g=f
-y=4
-n.g(9)
-if z != 9: err(4)
-
-n.g()
-y=5
-t = Thread(f)
-Sleep(1.0)
-if z != 5: err(5)
-
-print """
-all tests passed
-"""
+object x:
+	pass
+x.attrs_.delItem_($eee)

Modified: trunk/src/builtins-attrdict.c
===================================================================
--- trunk/src/builtins-attrdict.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-attrdict.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -155,7 +155,7 @@
 
 DEF(AttrDict, str_, NULL) {
 	obj_p res, dict;
-	BIN_STR_CHK(AttrDict);
+	BIN_STR_CHK(AttrDict_OBJ);
 	dict = attr2dict(ist, self->data.ptr); if_exc_return NULL;
 	res = call_func0(ist, dict, SYM(STR_));
 	del_unlock(dict);
@@ -201,6 +201,7 @@
 DEF(AttrDict, getItem_, FORM_RPARAM) {
 	obj_p res = NULL, index;
 	BIN_CONTENT_CHK(AttrDict);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	if (list_len(ist, parms[1]) > 1) {
 		raise_exception(ist, OBJ(INTERPRETER_EXC), "slice not allowed in attr dictionary indexing");	
 		return NULL;
@@ -218,6 +219,7 @@
 DEF(AttrDict, setItem_, FORM_PARAM2) {
 	obj_p index;
 	BIN_CONTENT_CHK(AttrDict);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	if (list_len(ist, parms[1]) > 1) {
 		raise_exception(ist, OBJ(INTERPRETER_EXC), "slice not allowed in attr dictionary indexing");	
 		return NULL;
@@ -235,6 +237,7 @@
 DEF(AttrDict, delItem_, FORM_RPARAM) {
 	obj_p index;
 	BIN_CONTENT_CHK(AttrDict);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	if (list_len(ist, parms[1]) > 1) {
 		raise_exception(ist, OBJ(INTERPRETER_EXC), "slice not allowed in attr dictionary indexing");	
 		return NULL;
@@ -299,7 +302,6 @@
 }
 
 DEF(AttrDict, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(AttrDict);
 	return parms[1];
 }
 
Modified: trunk/src/builtins-core.c
===================================================================
--- trunk/src/builtins-core.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-core.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -637,8 +637,9 @@
 	ch3_p  self_str   = NULL;
 	u8_t* self_bytes = NULL;
 
-	CHECK_TYPE_EXC(self, OBJ(SEQ_PROTO), "sequence");
-	
+	CHECK_TYPE_EXC(self,    OBJ(SEQ_PROTO), sequence);
+	CHECK_TYPE_EXC(slice, OBJ(SLICE_PROTO), slice);
+
 	if (seq_type == SEQ_TYPE_BYTES) {
 		self_bytes = bytes_ptr(self);
 		self_len   = (int) bytes_len(self);

Modified: trunk/src/builtins-dict.c
===================================================================
--- trunk/src/builtins-dict.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-dict.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -408,8 +408,8 @@
 }
 
 DEF(Dict, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(Dict);
-	return parms[1];
+	if (!self->data.ptr) return parms[1];
+	return dict_keys_values(ist, self, 0 /*values*/);
 }
 
 DEF(Dict, getItem_, FORM_RPARAM) {
@@ -417,7 +417,7 @@
 
 	BIN_CONTENT_CHK(Dict);
 	CHECK_TYPE_EXC(self, OBJ(DICT_PROTO), "dict");
-
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	if (list_len(ist, parms[1]) > 1) {
 		raise_exception(ist, OBJ(INTERPRETER_EXC), "slice not allowed in dictionary indexing");	
 		return NULL;

Modified: trunk/src/builtins-file.c
===================================================================
--- trunk/src/builtins-file.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-file.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -590,8 +590,8 @@
 }
 
 DEF(TempDir, del_, NULL) {
-	BIN_CONTENT_CHK(TempDir);
-	call_func0(ist, self, sym(ist, "delete"));
+	if (self->data.ptr)
+		call_func0(ist, self, sym(ist, "delete"));
 	return OBJ(NONE);
 }
 
Modified: trunk/src/builtins-list.c
===================================================================
--- trunk/src/builtins-list.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-list.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -382,6 +382,7 @@
 	i64_t i, new_len, exp_len, index1 = 0, index2 = 0, index3 = 0, slice1_empty=FALSE, slice2_empty=FALSE;
 	size_t val_len, self_len, slice_len = list_len(ist, slice);
 	BIN_CONTENT_CHK(List);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	def_write_lock(self);
 	self_len = listlen(self);
 	slice_item1 = list_item(ist, slice,0);
@@ -497,6 +498,7 @@
 	i64_t i, new_len, index1 = 0, index2 = 0, index3 = 0, slice1_empty=FALSE, slice2_empty=FALSE;
 	size_t exp_len, self_len, slice_len = list_len(ist, slice);
 	BIN_CONTENT_CHK(List);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	def_write_lock(self);
 	self_len = listlen(self);
 	slice_item1 = list_item(ist, slice,0);

Modified: trunk/src/builtins-protolist.c
===================================================================
--- trunk/src/builtins-protolist.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-protolist.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -141,6 +141,7 @@
 DEF(ProtoList, getItem_, FORM_RPARAM) {
 	obj_p res, list;
 	BIN_CONTENT_CHK(ProtoList);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	res = call_func1(ist, list = protos2list(ist, self->data.ptr), 
 		                  sym(ist, "getItem_"), parms[1]);
 	del_unlock(list);
@@ -150,6 +151,7 @@
 DEF(ProtoList, setItem_, FORM_PARAM2) {
 	obj_p list;
 	BIN_CONTENT_CHK(ProtoList);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	call_func2(ist, list = protos2list(ist, self->data.ptr), 
 	                sym(ist, "setItem_"), parms[1], parms[3]);
 	list2protos(ist, list, self->data.ptr);
@@ -160,6 +162,7 @@
 DEF(ProtoList, delItem_, FORM_RPARAM) {
 	obj_p list;
 	BIN_CONTENT_CHK(ProtoList);
+	CHECK_TYPE_EXC(parms[1], OBJ(SLICE_PROTO), Slice);
 	call_func1(ist, list = protos2list(ist, self->data.ptr), 
 	                sym(ist, "delItem_"), parms[1]);
 	list2protos(ist, list, self->data.ptr);
@@ -221,7 +224,6 @@
 }
 
 DEF(ProtoList, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(ProtoList);
 	return parms[1];
 }
 
Modified: trunk/src/builtins-thread.c
===================================================================
--- trunk/src/builtins-thread.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-thread.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -321,7 +321,6 @@
 }
 
 DEF(Thread, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(Thread);
 	return parms[1];
 }
 
@@ -353,7 +352,7 @@
 
 DEF(Mutex, str_, NULL) {
 	char name[30];
-	BIN_CONTENT_CHK(Mutex);
+	BIN_STR_CHK(Mutex);
 	apr_snprintf(name, sizeof(name), "<Mutex:%lx>", (unsigned long)(intptr_t)self);
 	return NEW_STRING(name);
 }
@@ -385,13 +384,12 @@
 }
 
 DEF(Mutex, del_, NULL) {
-	BIN_CONTENT_CHK(Mutex);
-	apr_thread_mutex_destroy((apr_thread_mutex_t*)(self->data.ptr));
+	if (self->data.ptr)
+		apr_thread_mutex_destroy((apr_thread_mutex_t*)(self->data.ptr));
 	return OBJ(NONE);
 }
 
 DEF(Mutex, objList_, FORM_RPARAM) {
-	BIN_CONTENT_CHK(Mutex);
 	return parms[1];
 }
 

Modified: trunk/src/builtins-tuple.c
===================================================================
--- trunk/src/builtins-tuple.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/builtins-tuple.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -126,6 +126,7 @@
 }
 
 DEF(Tuple, objList_, FORM_RPARAM) {
+	if (!self->data.ptr) return parms[1];
 	return self;
 }
 

Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/interp.c	2004-06-23 04:55:43 UTC (rev 651)
@@ -772,8 +772,12 @@
 	if (fr_prev) {
 		if (fr_ccall) 
 			res = fr_tos;
-		else 
-			fr_prev->stack[fr_prev->stack_ptr-1] = fr_tos;
+		else {
+			if (fr_prev->no_return_flag)
+				fr_prev->no_return_flag = FALSE;
+			else
+				fr_prev->stack[fr_prev->stack_ptr-1] = fr_tos;
+		}
 		*switch_frame = fr_prev;
 		(*switch_frame)->next_frame = NULL;
 	} else {
@@ -1356,7 +1360,7 @@
 					                              fr_stack[fr_sp], fr_data(1), NULL, "with" );
 				switch_frame->prev_frame = frame;
 				frame->next_frame = switch_frame;
-				fr_push(OBJ(NONE));
+				frame->no_return_flag = TRUE;
 end_op_obj:		break;
 			case OP_CALL: {
 				obj_p name_obj;

Modified: trunk/src/interp.h
===================================================================
--- trunk/src/interp.h	2004-06-23 02:23:14 UTC (rev 650)
+++ trunk/src/interp.h	2004-06-23 04:55:43 UTC (rev 651)
@@ -105,6 +105,7 @@
 	fparam_proc_state_t fparam_proc_state;
 	int					fparam_proc_state_idx;
 	obj_p				new_locals;
+	int					no_return_flag;
 	obj_p				stack[];
 } frame_t;