rev 589 - in trunk: pr/test src

SVN User <[email protected]> Wed, 09 Jun 2004 23:53:53 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-06-09 23:53:50 -0400 (Wed, 09 Jun 2004)
New Revision: 589

Modified:
   trunk/pr/test/test.pr
   trunk/src/builtins-file.c
   trunk/src/builtins-string.c
   trunk/src/interp.c
   trunk/src/parser_routines.c
Log:
fixed bug with Func constructor

Modified: trunk/pr/test/test.pr
===================================================================
--- trunk/pr/test/test.pr	2004-06-09 23:35:48 UTC (rev 588)
+++ trunk/pr/test/test.pr	2004-06-10 03:53:50 UTC (rev 589)
@@ -1,57 +1,6 @@
 #!/usr/bin/env prothon
 
-# dict.pr
-
-def err(str):
-    print str
-    Sys.exit(1)
-
-d = {1:2}
-if d.keys()   != [1]  : err( 'error in keys' )
-if d.values() != [2]  : err( 'error in values' )
-if d.get(1)   !=  2   : err( 'error1 in get' )
-if d.get(2)   != None : err( 'error2 in get' )
-if d.get(3,4) !=  4   : err( 'error3 in get' )
-if d.get(3,5) !=  5   : err( 'error4 in get' )
-if d.setDefault!(3,4) !=  4   : err( 'error5 in setdefault' )
-if d.get(3,5) !=  4   : err( 'error6 in get' )
-if 3 not in d: err( 'error 7 in not in' )
-
-d = {1:2, 3:4}
-e = d.copy()
-   
-if d.items() != e.items():
-    err( 'error1' )
-    
-if Len(e.items()) != 2:
-    err( 'error2' )
-
-d.clear!()
-
-d = {1:2}
-d.update!({3:4})
-if d.items() != e.items():
-    err( 'error3' )
-
-if not e.hasKey?(1) or e.hasKey?(2): err( 'error4' )
-
-dd = Dict(a=1)
-
-if `a  not in dd: err( 'error5' )
-if "a" not in dd: err( 'error6' )
-
-print 'all tests passed'
-
-print """
-The following should be:  
-1 (1, 2) 3 (3, 4).
-"""
-print 'before...\n', d, e
-
-for i in e:
-	print i
-	print i, d.popItem!(),
-
-print 'after...\n'
-
-print 'done...\n'
+def f1(x=''):
+	print 'f1 '+x
+	
+g = Func(f1)

Modified: trunk/src/builtins-file.c
===================================================================
--- trunk/src/builtins-file.c	2004-06-09 23:35:48 UTC (rev 588)
+++ trunk/src/builtins-file.c	2004-06-10 03:53:50 UTC (rev 589)
@@ -625,7 +625,7 @@
 		raise_exception(ist, OBJ(IOEXCEPTION), "writeLines called on file opened without write perms");
 		return NULL;
 	}
-	if (has_proto(ist, parms[1], OBJ(BYTES_PROTO))) {
+	if (has_proto(ist, parms[1], OBJ(STRING_PROTO))) {
 		str  = pr2c_strptr(ist, parms[1]);
 		size = pr_strlen(parms[1]);
 		aprerr = apr_file_write(STREAM(self), str, &size);
@@ -638,8 +638,8 @@
 		int i, llen = (int) list_len(ist, parms[1]);
 		for(i = 0; i < llen; i++) {
 			obj_p item = list_item(ist, parms[1], i);
-			if (!has_proto(ist, item, OBJ(BYTES_PROTO))) {
-				raise_exception(ist, OBJ(TYPE_EXC), "file writeLines lst item must be a string");
+			if (!has_proto(ist, item, OBJ(STRING_PROTO))) {
+				raise_exception(ist, OBJ(TYPE_EXC), "writeLines first item must be a string");
 				return NULL;
 			}
 			str  = pr2c_strptr(ist, item);
@@ -667,7 +667,6 @@
 	return parms[1];
 }
 
-
 #define __STDIN		0
 #define __STDOUT	1
 #define __STDERR	2
Modified: trunk/src/builtins-string.c
===================================================================
--- trunk/src/builtins-string.c	2004-06-09 23:35:48 UTC (rev 588)
+++ trunk/src/builtins-string.c	2004-06-10 03:53:50 UTC (rev 589)
@@ -123,10 +123,8 @@
 	data_size_t i, data_size, len;
 	char* res;
 
-	if (!str_obj) {
-		raise_exception(ist, OBJ(VALUE_EXC), "string object missing");
-		return NULL;
-	}
+	if (!str_obj)
+		return "<null>";
 	if (str_obj->data_type == DATA_TYPE_IMMDATA) {
 		data_size = str_obj->imm_data_len;
 		ch3p      = str_obj->data.str;

Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c	2004-06-09 23:35:48 UTC (rev 588)
+++ trunk/src/interp.c	2004-06-10 03:53:50 UTC (rev 589)
@@ -1214,7 +1214,8 @@
 					free_clist(plist);
 					IF_EXC_BREAK;
 					fr_push(res);
-				} else if (has_proto(ist, func_obj, OBJ(FUNC_PROTO))) {
+				} else if ( func_obj != OBJ(FUNC_PROTO) && 
+					        has_proto(ist, func_obj, OBJ(FUNC_PROTO)) ) {
 					obj_p new_locals, self;
 					frame_p new_frame;
 					IF_EXC_BREAK;
@@ -1406,7 +1407,8 @@
 					free_clist(plist);
 					IF_EXC_BREAK;
 					fr_push(res);
-				} else if (has_proto(ist, func_obj, OBJ(FUNC_PROTO))) {
+				} else if ( func_obj != OBJ(FUNC_PROTO) && 
+					        has_proto(ist, func_obj, OBJ(FUNC_PROTO)) ) {
 					obj_p new_locals, self;
 					frame_p new_frame;
 					IF_EXC_BREAK;
@@ -1704,7 +1706,8 @@
 		if (intrp_exobj) return NULL;
 		if (!func_sym) del_unlock(self);
 		return res;
-	} else if (has_proto(ist, func_obj, OBJ(FUNC_PROTO))) {
+	} else if ( func_obj != OBJ(FUNC_PROTO) && 
+		        has_proto(ist, func_obj, OBJ(FUNC_PROTO)) ) {
 		frame_p frame, new_frame;
 		obj_p new_locals, aself; 
 		if (!ist) {

Modified: trunk/src/parser_routines.c
===================================================================
--- trunk/src/parser_routines.c	2004-06-09 23:35:48 UTC (rev 588)
+++ trunk/src/parser_routines.c	2004-06-10 03:53:50 UTC (rev 589)
@@ -302,11 +302,13 @@
 	(*max_stack_depth) = max(*max_stack_depth, (*stack_depth) + p->max_stack_depth);
 	(*stack_depth) += p->stack_depth;
 }
+code_p append_code(void* param, code_p p1, code_p p3, int size) {
+	if (p3) {
+		if (p1) {
+			data_size_t data_size = sizeof(code) + (p1->len + p3->len + size)*sizeof(code_t);
+			p1 = pr_realloc(p1, data_size);
 
-code_p append_code(void* param, code_p p1, code_p p3, int size){
-	if (p3){
-		if (p1){
-			p1 = pr_realloc(p1, sizeof(code) + (p1->len + p3->len + size)*sizeof(code_t));
+			p1->size = data_size;
 			memcpy(p1->code_data + p1->len, p3->code_data, p3->len * sizeof(code_t));
 			add_all_srcmap(p1, p3, p1->len, TRUE);
 			p1->len += p3->len + size;
@@ -316,13 +318,19 @@
 			pr_free(p3);
 			return debug_retrn(__LINE__, p1);
 		} else if (size) {
+			data_size_t data_size;
 			p3->len += size;
-			p3 = pr_realloc(p3, sizeof(code) + p3->len*sizeof(code_t));
+			data_size = sizeof(code) + p3->len*sizeof(code_t);
+			p3 = pr_realloc(p3, data_size);
+			p3->size = data_size;
 		}
 		return debug_retrn(__LINE__, p3);
 	} else if (p1 && size) {
+		data_size_t data_size;
 		p1->len += size;
-		p1 = pr_realloc(p1, sizeof(code) + p1->len*sizeof(code_t));
+		data_size = sizeof(code) + p1->len*sizeof(code_t);
+		p1 = pr_realloc(p1, data_size);
+		p1->size = data_size;
 	}
 	return debug_retrn(__LINE__, p1);
 }
@@ -430,8 +438,11 @@
 	return debug_retrn(__LINE__, p);
 }
 code_p obj_label_to_attrref(void* param, code_p obj, obj_p label){
+	data_size_t data_size;
 	obj->len += 2;
-	obj = pr_realloc(obj, sizeof(code)+(obj->len)*sizeof(code_t));
+	data_size = sizeof(code)+(obj->len)*sizeof(code_t);
+	obj = pr_realloc(obj, data_size);
+	obj->size = data_size;
 	obj->code_data[obj->len-2].bytecode.opcode = OP_PUSH;
 	obj->code_data[obj->len-2].bytecode.param = 2;
 	obj->code_data[obj->len-1].data = sym(IST, pr2c_strptr(IST, label));
@@ -577,11 +588,14 @@
 	res->code_data[2].data = PARAM_NORMAL;
 	return debug_retrn(__LINE__, res);
 }
-code_p label_eq_expr_to_formparm(void* param, obj_p label, code_p expr){
+code_p label_eq_expr_to_formparm(void* param, obj_p label, code_p expr) {
+	data_size_t data_size;
 	expr->len += 2;
 	expr->stack_depth++;
 	expr->max_stack_depth++;
-	expr = pr_realloc(expr, sizeof(code)+(expr->len)*sizeof(code_t));
+	data_size = sizeof(code)+(expr->len)*sizeof(code_t);
+	expr = pr_realloc(expr, data_size);
+	expr->size = data_size;
 	memmove(expr->code_data+2, expr->code_data, ((expr->len)-2)*sizeof(code_t));
 	expr->code_data[0].bytecode.opcode = OP_PUSH;
 	expr->code_data[0].bytecode.param  = 2;
@@ -666,10 +680,13 @@
 	res->stack_depth -= 2;
 	return debug_retrn(__LINE__, res);
 }
-code_p expr_to_slice(void* param, code_p expr){
+code_p expr_to_slice(void* param, code_p expr) {
+	data_size_t data_size;
 	expr->len += 4;
+	data_size = sizeof(code)+(expr->len)*sizeof(code_t);
 	expr->max_stack_depth = max(expr->max_stack_depth, expr->stack_depth + 2);
-	expr = pr_realloc(expr, sizeof(code)+(expr->len)*sizeof(code_t));
+	expr = pr_realloc(expr, data_size);
+	expr->size = data_size;
 	expr->code_data[expr->len-4].bytecode.opcode = OP_PUSH;
 	expr->code_data[expr->len-4].bytecode.param = 3;
 	expr->code_data[expr->len-3].data = SLICEPARAM_MISSING;
@@ -678,9 +695,12 @@
 	return debug_retrn(__LINE__, expr);
 }
 code_p unary(void* param, int op, code_p parm){
+	data_size_t data_size;
 	parm->len += 4;
+	data_size = sizeof(code)+(parm->len)*sizeof(code_t);
 	parm->max_stack_depth = max(parm->max_stack_depth, parm->stack_depth + 5);
-	parm = pr_realloc(parm, sizeof(code)+(parm->len)*sizeof(code_t));
+	parm = pr_realloc(parm, data_size);
+	parm->size = data_size;
 	parm->code_data[parm->len-4].bytecode.opcode = OP_PUSH;
 	parm->code_data[parm->len-4].bytecode.param = 3;
 	parm->code_data[parm->len-3].data = sym_id_table[op].id;
@@ -1626,8 +1646,11 @@
 	return debug_retrn(__LINE__, res);
 }
 code_p op_expr(int op, code_p expr, int size){
+	data_size_t data_size;
 	expr->len += 1;
-	expr = pr_realloc(expr, sizeof(code)+(expr->len)*sizeof(code_t));
+	data_size = sizeof(code)+(expr->len)*sizeof(code_t);
+	expr = pr_realloc(expr, data_size);
+	expr->size = data_size;
 	expr->code_data[expr->len-1].bytecode.opcode = op;
 	expr->stack_depth -= size;
 	return debug_retrn(__LINE__, expr);