rev 453 - in trunk: . pr src
SVN User <[email protected]> Tue, 04 May 2004 01:58:07 -0400
| Newsgroups | gmane.comp.lang.prothon.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: mark
Date: 2004-05-04 01:58:04 -0400 (Tue, 04 May 2004)
New Revision: 453
Modified:
trunk/STATUS.txt
trunk/pr/modint.pr
trunk/src/bytecodes.h
trunk/src/interp.c
trunk/src/parser.h
trunk/src/parser_routines.c
trunk/src/prothon.y
Log:
added support for ^ as an object, modint.pr now uses
^() as a feature
Modified: trunk/STATUS.txt
===================================================================
--- trunk/STATUS.txt 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/STATUS.txt 2004-05-04 05:58:04 UTC (rev 453)
@@ -5,12 +5,6 @@
--- allow obj.func.bind() to default to obj.func.bind(obj)
---- allow no parens in object statement
-
---- add ^ as an obj
-
---- fix str-to-obj in parser for '\000abc'.len()
-
--- fix bug1.pr and bug2.pr
--- networking code -- web access demonstration of security
Modified: trunk/pr/modint.pr
===================================================================
--- trunk/pr/modint.pr 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/pr/modint.pr 2004-05-04 05:58:04 UTC (rev 453)
@@ -7,7 +7,7 @@
def $__add__(other):
if $modulo != other.modulo:
raise TypeError
- return ^__call__(^__add__(other) % $modulo)
+ return ^(^__add__(other) % $modulo)
object Mod16Int(ModInt):
$modulo = 16
Modified: trunk/src/bytecodes.h
===================================================================
--- trunk/src/bytecodes.h 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/src/bytecodes.h 2004-05-04 05:58:04 UTC (rev 453)
@@ -270,6 +270,12 @@
// |opcode|
OP_PUSH_SELF,
+// PUSH_SUPER
+// push super object-id onto stack
+// param: <unused>
+// |opcode|
+OP_PUSH_SUPER,
+
// OP_CHAIN_CMP
// make chain compare object from items on stack
// stack: VALUE_OBJ, True/False -> cmp_object
Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/src/interp.c 2004-05-04 05:58:04 UTC (rev 453)
@@ -761,6 +761,9 @@
case OP_PUSH_SELF:
fr_push(frame->self);
break;
+ case OP_PUSH_SUPER:
+ fr_push(proto_item(ist, frame->self, 0));
+ break;
case OP_PUSH_SELF_REF:
fr_push(frame->self);
fr_push(fr_data(1));
@@ -1761,6 +1764,8 @@
break;
case OP_PUSH_SELF: fprintf(fout,"%4d %20s(%4d) %s", pc, "OP_PUSH_SELF", param, codedata(str, code, op, param, pc));
break;
+ case OP_PUSH_SUPER: fprintf(fout,"%4d %20s(%4d) %s", pc, "OP_PUSH_SUPER", param, codedata(str, code, op, param, pc));
+ break;
case OP_GEN: fprintf(fout,"%4d %20s(%4d) %s", pc, "OP_GEN", param, codedata(str, code, op, param, pc));
break;
case OP_OBJ: fprintf(fout,"%4d %20s(%4d) %s", pc, "OP_OBJ", param, codedata(str, code, op, param, pc));
Modified: trunk/src/parser.h
===================================================================
--- trunk/src/parser.h 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/src/parser.h 2004-05-04 05:58:04 UTC (rev 453)
@@ -156,6 +156,7 @@
code_p del_ref(void* param, code_p expr);
code_p ds_label_to_attrref(void* param, obj_p label);
code_p ds_to_obj(void* param);
+code_p caret_to_obj(void* param);
code_p exceptall(void* param);
code_p exec_expr(void* param, code_p expr);
code_p expr_andor_expr(void* param, code_p lparm, code_p rparm, int andor_flg);
Modified: trunk/src/parser_routines.c
===================================================================
--- trunk/src/parser_routines.c 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/src/parser_routines.c 2004-05-04 05:58:04 UTC (rev 453)
@@ -1402,6 +1402,10 @@
code_p p = new_code(param, 1, 1, 1, OP_PUSH_SELF);
return debug_retrn(__LINE__, p);
}
+code_p caret_to_obj(void* param){
+ code_p p = new_code(param, 1, 1, 1, OP_PUSH_SUPER);
+ return debug_retrn(__LINE__, p);
+}
code_p assign_right(void* param, clist_p right){
code_p res;
int i, k=0, len=0, stack_depth=0, max_stack_depth = 0;
Modified: trunk/src/prothon.y
===================================================================
--- trunk/src/prothon.y 2004-05-04 05:05:19 UTC (rev 452)
+++ trunk/src/prothon.y 2004-05-04 05:58:04 UTC (rev 453)
@@ -381,7 +381,7 @@
obj_ref:
OBJ_ LABEL { $$ = label_to_attrref(yylex_param, $2); state->defdoc_flag=1; }
| OBJ_ '$' LABEL %prec UDOT { $$ = ds_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
- | OBJ_ '^' LABEL %prec UCARET { $$ = caret_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
+ | OBJ_ '^' LABEL { $$ = caret_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| OBJ_ '&' LABEL %prec UAMP { $$ = amp_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| OBJ_ '@' LABEL { $$ = at_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| OBJ_ obj '.' LABEL { $$ = obj_label_to_attrref(yylex_param, $2, $4);state->defdoc_flag=1; }
@@ -397,7 +397,7 @@
proto_ref:
LABEL { $$ = label_to_attrref(yylex_param, $1); }
| '$' LABEL %prec UDOT { $$ = ds_label_to_attrref(yylex_param, $2); }
- | '^' LABEL %prec UCARET { $$ = caret_label_to_attrref(yylex_param, $2); }
+ | '^' LABEL { $$ = caret_label_to_attrref(yylex_param, $2); }
| '&' LABEL %prec UAMP { $$ = amp_label_to_attrref(yylex_param, $2); }
| '@' LABEL { $$ = at_label_to_attrref(yylex_param, $2); }
;
@@ -408,7 +408,7 @@
def_ref:
DEF_ LABEL { $$ = label_to_attrref(yylex_param, $2); state->defdoc_flag=1; }
| DEF_ '$' LABEL %prec UDOT { $$ = ds_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
- | DEF_ '^' LABEL %prec UCARET { $$ = caret_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
+ | DEF_ '^' LABEL { $$ = caret_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| DEF_ '&' LABEL %prec UAMP { $$ = amp_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| DEF_ '@' LABEL { $$ = at_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| DEF_ obj '.' LABEL { $$ = obj_label_to_attrref(yylex_param, $2, $4);state->defdoc_flag=1; }
@@ -416,7 +416,7 @@
gen_ref:
GEN LABEL { $$ = label_to_attrref(yylex_param, $2); state->defdoc_flag=1; }
| GEN '$' LABEL %prec UDOT { $$ = ds_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
- | GEN '^' LABEL %prec UCARET { $$ = caret_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
+ | GEN '^' LABEL { $$ = caret_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| GEN '&' LABEL %prec UAMP { $$ = amp_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| GEN '@' LABEL { $$ = at_label_to_attrref(yylex_param, $3); state->defdoc_flag=1; }
| GEN obj '.' LABEL { $$ = obj_label_to_attrref(yylex_param, $2, $4);state->defdoc_flag=1; }
@@ -561,6 +561,7 @@
;
obj:
'$' { $$ = ds_to_obj(yylex_param); }
+ | '^' { $$ = caret_to_obj(yylex_param); }
| target_param { $$ = tgtparm_to_obj(yylex_param, $1); }
| INT_ { $$ = int_to_obj(yylex_param, $1); }
| LONG_ { $$ = string_to_obj(yylex_param, $1, NEW_LONG); }
@@ -595,7 +596,7 @@
;
attr_ref:
'$' LABEL %prec UDOT { $$ = ds_label_to_attrref(yylex_param, $2); }
- | '^' LABEL %prec UCARET { $$ = caret_label_to_attrref(yylex_param, $2); }
+ | '^' LABEL { $$ = caret_label_to_attrref(yylex_param, $2); }
| obj '.' LABEL { $$ = obj_label_to_attrref(yylex_param, $1, $3); }
;
unbound_ref: