-/* ast.c
+/* expr.c
Extension module for the rfxswf library.
Part of the swftools package.
return type1;
return TYPE_ANY;
}
-static char is_getlocal(code_t*c)
-{
- if(!c || c->prev || c->next)
- return 0;
- return(c->opcode == OPCODE_GETLOCAL
- || c->opcode == OPCODE_GETLOCAL_0
- || c->opcode == OPCODE_GETLOCAL_1
- || c->opcode == OPCODE_GETLOCAL_2
- || c->opcode == OPCODE_GETLOCAL_3);
-}
static int getlocalnr(code_t*c)
{
if(c->opcode == OPCODE_GETLOCAL) {return (ptroff_t)c->data[0];}
prefix = abc_dup(prefix); // we need the object, too
}
use_temp_var = 1;
- } else if(m->type == MULTINAMEL || m->type == MULTINAMELA) {
+ } else if(m->type == MULTINAMEL || m->type == MULTINAMELA ||
+ m->type == RTQNAME || m->type == RTQNAMEA) {
if(!justassign) {
/* dupping two values on the stack requires 5 operations and one register-
couldn't adobe just have given us a dup2? */
typedcode_t node_code_write(node_t*n)
{
- syntaxerror("not implemented yet");
+ typedcode_t t;
+ t.c = 0;
+ int tmp = gettempvar();
+ t.c = abc_setlocal(t.c, tmp);
+ code_t*w = toreadwrite(n->code.c, abc_getlocal(0,tmp), 1, 0, 0);
+ t.c = code_append(t.c, w);
+ t.c = abc_kill(t.c, tmp);
+ n->code.c=0;
+ t.t = n->code.t;
+ return t;
}
typedcode_t node_code_read(node_t*n)
{
return t;
}
}
+typedcode_t node_write(node_t*n)
+{
+ typedcode_t t = n->type->write(n);
+ node_free(n);
+ return t;
+}
code_t* node_exec(node_t*n)
{
code_t*c = n->type->exec(n);