-/* opcodes.c
-
- Routines for handling Flash2 AVM2 ABC Actionscript
-
- Extension module for the rfxswf library.
- Part of the swftools package.
-
- Copyright (c) 2008 Matthias Kramm <kramm@quiss.org>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
-
#include "opcodes.h"
code_t* abc_add(code_t*prev)
{
self->data[0] = (void*)(ptroff_t)v;
return self;
}
-code_t* abc_callmethod(code_t*prev, abc_method_body_t* m, int v)
+code_t* abc_callmethod(code_t*prev, abc_method_t* m, int v)
{
code_t*self = add_opcode(prev, 0x43);
self->data[0] = m;
self->data[1] = (void*)(ptroff_t)v;
return self;
}
-code_t* abc_callstatic(code_t*prev, abc_method_t* m, int v)
+code_t* abc_callstatic(code_t*prev, abc_method_body_t* m, int v)
{
code_t*self = add_opcode(prev, 0x44);
self->data[0] = m;
/* FIXME: write debuginfo debuginfo */
return self;
}
-code_t* abc_debugfile(code_t*prev, char* s)
+code_t* abc_debugfile(code_t*prev, char* name)
{
code_t*self = add_opcode(prev, 0xf1);
- self->data[0] = strdup(s);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc_debugfile2(code_t*prev, string_t* s)
+{
+ code_t*self = add_opcode(prev, 0xf1);
+ self->data[0] = string_dup3(s);
return self;
}
code_t* abc_debugline(code_t*prev, int v)
code_t*self = add_opcode(prev, 0x2a);
return self;
}
-code_t* abc_dxns(code_t*prev, char* s)
+code_t* abc_dxns(code_t*prev, char* name)
{
code_t*self = add_opcode(prev, 0x06);
- self->data[0] = strdup(s);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc_dxns2(code_t*prev, string_t* s)
+{
+ code_t*self = add_opcode(prev, 0x06);
+ self->data[0] = string_dup3(s);
return self;
}
code_t* abc_dxnslate(code_t*prev)
self->data[0] = m;
return self;
}
-code_t* abc_newfunction(code_t*prev, abc_method_body_t* m)
+code_t* abc_newfunction(code_t*prev, abc_method_t* m)
{
code_t*self = add_opcode(prev, 0x40);
self->data[0] = m;
self->data[0] = (void*)(ptroff_t)v;
return self;
}
-code_t* abc_pushstring(code_t*prev, char* s)
+code_t* abc_pushstring(code_t*prev, char* name)
+{
+ code_t*self = add_opcode(prev, 0x2c);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc_pushstring2(code_t*prev, string_t* s)
{
code_t*self = add_opcode(prev, 0x2c);
- self->data[0] = strdup(s);
+ self->data[0] = string_dup3(s);
return self;
}
code_t* abc_pushtrue(code_t*prev)
code_t*self = add_opcode(prev, 0xa7);
return self;
}
+code_t* abc_applytype(code_t*prev, int v)
+{
+ code_t*self = add_opcode(prev, 0x53);
+ self->data[0] = (void*)(ptroff_t)v;
+ return self;
+}
+code_t* abc___pushpackage__(code_t*prev, char* name)
+{
+ code_t*self = add_opcode(prev, 0xfb);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc___pushpackage__2(code_t*prev, string_t* s)
+{
+ code_t*self = add_opcode(prev, 0xfb);
+ self->data[0] = string_dup3(s);
+ return self;
+}
+code_t* abc___rethrow__(code_t*prev)
+{
+ code_t*self = add_opcode(prev, 0xfc);
+ return self;
+}
+code_t* abc___fallthrough__(code_t*prev, char* name)
+{
+ code_t*self = add_opcode(prev, 0xfd);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc___fallthrough__2(code_t*prev, string_t* s)
+{
+ code_t*self = add_opcode(prev, 0xfd);
+ self->data[0] = string_dup3(s);
+ return self;
+}
+code_t* abc___continue__(code_t*prev, char* name)
+{
+ code_t*self = add_opcode(prev, 0xfe);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc___continue__2(code_t*prev, string_t* s)
+{
+ code_t*self = add_opcode(prev, 0xfe);
+ self->data[0] = string_dup3(s);
+ return self;
+}
+code_t* abc___break__(code_t*prev, char* name)
+{
+ code_t*self = add_opcode(prev, 0xff);
+ self->data[0] = string_new4(name);
+ return self;
+}
+code_t* abc___break__2(code_t*prev, string_t* s)
+{
+ code_t*self = add_opcode(prev, 0xff);
+ self->data[0] = string_dup3(s);
+ return self;
+}