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);