rev 527 - trunk/src

SVN User <[email protected]> Fri, 21 May 2004 01:40:39 -0400
Newsgroups gmane.comp.lang.prothon.cvs
Message-ID <[email protected]>
Author: mark
Date: 2004-05-21 01:40:36 -0400 (Fri, 21 May 2004)
New Revision: 527

Modified:
   trunk/src/interp.c
   trunk/src/prothon.y
Log:
added access to any object's attributes by obj[symbol]

Modified: trunk/src/interp.c
===================================================================
--- trunk/src/interp.c	2004-05-21 05:05:39 UTC (rev 526)
+++ trunk/src/interp.c	2004-05-21 05:40:36 UTC (rev 527)
@@ -203,6 +203,10 @@
 			return NULL;
 		}
 		return res;
+	} else if (has_proto_QUES(ist, ref_key, OBJ(INT_PROTO))) {
+		obj_p param[2];  
+		param[0]=0; param[1]=slice1(ref_key);
+        return call_func(ist, ref_self, SYM(GETITEM_), 2, param, 0);
 	} else {
 		raise_exception(ist, OBJ(INTERNAL_EXC), "Invalid reference type");
 		return NULL;
@@ -231,6 +235,11 @@
 		}
 		if_exc_return;
 		set_attr(ist, scope_obj, ref_key->data.ptr, value);
+	} else if (has_proto_QUES(ist, ref_key, OBJ(INT_PROTO))) {
+		obj_p param[4];  
+		param[0]=0; param[1]=slice1(ref_key);
+		param[2]=0; param[3]=value;
+        call_func(ist, ref_self, SYM(SETITEM_), 4, param, 0);
 	} else
 		raise_exception(ist, OBJ(INTERNAL_EXC), "Invalid reference type");
 }
@@ -256,6 +265,10 @@
 		}
 		if_exc_return;
 		del_attr(ist, scope_obj, ref_key->data.ptr);
+	} else if (has_proto_QUES(ist, ref_key, OBJ(INT_PROTO))) {
+		obj_p param[2];  
+		param[0]=0; param[1]=slice1(ref_key);
+        call_func(ist, ref_self, SYM(DELITEM_), 2, param, 0);
 	} else
 		raise_exception(ist, OBJ(INTERNAL_EXC), "Invalid reference type");
 }
@@ -852,7 +865,7 @@
 			case OP_DEREF: {
 				obj_p att;			
 				fr_sp -= 2;
-				att = get_item(ist, fr_stack[fr_sp], fr_stack[fr_sp+1]);
+				att = get_item(ist, fr_stack[fr_sp], fr_stack[fr_sp+1]); IF_EXC_BREAK;
 				if (!att) {
 					raise_exception( ist, OBJ(INTERPRETER_EXC), 
 										  "attribute %s not found", 

Modified: trunk/src/prothon.y
===================================================================
--- trunk/src/prothon.y	2004-05-21 05:05:39 UTC (rev 526)
+++ trunk/src/prothon.y	2004-05-21 05:40:36 UTC (rev 527)
@@ -582,6 +582,7 @@
 	;
 target_param:
 		attr_ref
+	|	obj '[' obj ']'												{ $$ = append_code(yylex_param, $1, $3, 0); }
 	|	obj '[' slice ']'											{ $$ = append_code(yylex_param, $1, $3, 0); }
 	;
 attr_ref: