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: