[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ./ChangeLog server/action.cpp server/acti...
From: |
strk |
Subject: |
[Gnash-commit] gnash ./ChangeLog server/action.cpp server/acti... |
Date: |
Tue, 14 Feb 2006 13:55:59 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch:
Changes by: strk <address@hidden> 06/02/14 13:55:59
Modified files:
. : ChangeLog
server : action.cpp action.h
Log message:
Implemented ACTION_CASTOP, not tested as Ming does not produce those
blocks
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.135&tr2=1.136&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.47&tr2=1.48&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.h.diff?tr1=1.18&tr2=1.19&r1=text&r2=text
Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.135 gnash/ChangeLog:1.136
--- gnash/ChangeLog:1.135 Tue Feb 14 12:29:48 2006
+++ gnash/ChangeLog Tue Feb 14 13:55:59 2006
@@ -1,9 +1,8 @@
2006-02-14 Sandro Santilli <address@hidden>
- * server/Object.{h,cpp}: new instanceOf(function_as_object*)
- method.
- * server/action.cpp: SWF::ACTION_INSTANCEOF implemented
- * testsuite/actionscript.all/Inheritance.as: instanceOf tests
+ * server/Object.{h,cpp}: new instanceOf(function_as_object*) method.
+ * server/action.cpp: ACTION_INSTANCEOF and ACTION_CASTOP implemented.
+ * testsuite/actionscript.all/Inheritance.as: instanceOf tests.
2006-02-14 Michael Carlson <address@hidden>
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.47 gnash/server/action.cpp:1.48
--- gnash/server/action.cpp:1.47 Tue Feb 14 12:29:48 2006
+++ gnash/server/action.cpp Tue Feb 14 13:55:59 2006
@@ -1827,7 +1827,7 @@
env->top(0).to_string());
//);
- env->drop(2);
+ env->drop(1);
env->top(0) = as_value(false);
return;
}
@@ -1838,6 +1838,40 @@
//log_msg("tocheck: opcode %x\n", SWF::ACTION_INSTANCEOF);
}
+ void
+ action_buffer::doActionCast(as_environment* env)
+ {
+ // Get the "super" function
+ function_as_object* super = env->top(0).to_as_function();
+
+ // Get the "instance"
+ as_object* instance = env->top(1).to_object();
+
+ // Invalid args!
+ if ( ! super || ! instance )
+ {
+ //IF_VERBOSE_ACTION(
+ log_msg("-- %s instance_of %s (invalid args?)\n",
+ env->top(1).to_string(),
+ env->top(0).to_string());
+ //);
+
+ env->drop(1);
+ env->top(0) = as_value();
+ return;
+ }
+
+ env->drop(1);
+ if ( instance->instanceOf(super) ) {
+ env->top(0) = as_value(instance);
+ } else {
+ env->top(0) = as_value();
+ }
+
+ //log_msg("tocheck: opcode %x\n", SWF::ACTION_CASTOP);
+ }
+
+
/*private*/
void
action_buffer::doActionCallMethod(as_environment* env)
@@ -2450,19 +2484,8 @@
}
case SWF::ACTION_CASTOP: // 0x2B
- {
- // TODO
- //
- // Pop o1, pop s2
- // Make sure o1 is an instance of s2.
- // If the cast succeeds, push o1, else
push NULL.
- //
- // The cast doesn't appear to coerce at
all, it's more
- // like a dynamic_cast<> in C++ I think.
- log_error("todo opcode: %02X\n",
action_id);
+ doActionCast(env);
break;
- }
-
case SWF::ACTION_IMPLEMENTSOP: // 0x2C
{
// Declare that a class s1 implements
one or more
Index: gnash/server/action.h
diff -u gnash/server/action.h:1.18 gnash/server/action.h:1.19
--- gnash/server/action.h:1.18 Mon Feb 13 10:44:12 2006
+++ gnash/server/action.h Tue Feb 14 13:55:59 2006
@@ -210,6 +210,8 @@
void doActionInstanceOf(as_environment* env);
+ void doActionCast(as_environment* env);
+
void doActionCallMethod(as_environment* env);
void doActionCallFunction(as_environment* env,