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: