[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ./ChangeLog server/Object.cpp server/Obje...
From: |
strk |
Subject: |
[Gnash-commit] gnash ./ChangeLog server/Object.cpp server/Obje... |
Date: |
Tue, 14 Feb 2006 12:29:48 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch:
Changes by: strk <address@hidden> 06/02/14 12:29:48
Modified files:
. : ChangeLog
server : Object.cpp Object.h action.cpp
testsuite/actionscript.all: Inheritance.as
Log message:
* server/Object.{h,cpp}: new instanceOf(function_as_object*) method.
* server/action.cpp: SWF::ACTION_INSTANCEOF implemented.
* testsuite/actionscript.all/Inheritance.as: instanceOf tests.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.134&tr2=1.135&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/Object.cpp.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/Object.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.46&tr2=1.47&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/testsuite/actionscript.all/Inheritance.as.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.134 gnash/ChangeLog:1.135
--- gnash/ChangeLog:1.134 Tue Feb 14 08:17:51 2006
+++ gnash/ChangeLog Tue Feb 14 12:29:48 2006
@@ -1,3 +1,10 @@
+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
+
2006-02-14 Michael Carlson <address@hidden>
* server/array.cpp: Make tostring() and join() not output any
@@ -16,15 +23,15 @@
* testsuite/actionscript.all/xtrace.as: trace window enlarged.
* testsuite/actionscript.all/Inheritance.as: inheritance test
- * server/Object.h: new header file for definitions from as_object up to
- as_value (will split again at sometime). gnash::as_object_interface
class
- definition merged with gnash::as_object, now directly derived from
- gnash::resource.
+ * server/Object.h: new header file for definitions from as_object
+ up to as_value (will split again at sometime).
+ gnash::as_object_interface class definition merged with
+ gnash::as_object, now directly derived from gnash::resource.
* server/action.cpp: doActionEquals and doActionStrictEquals private
- action_buffer methods. Made as_value::to_object valid for AS_FUNCTION
- value types
+ action_buffer methods. Made as_value::to_object valid for AS_FUNCTION
+ value types
* server/Function.{cpp,h}: Made 'Function' an AS_FUNCTION to allow for
- 'prototype' based inheritance. Implemented Function.call
+ 'prototype' based inheritance. Implemented Function.call
2006-02-12 Michael Carlson <address@hidden>
Index: gnash/server/Object.cpp
diff -u gnash/server/Object.cpp:1.5 gnash/server/Object.cpp:1.6
--- gnash/server/Object.cpp:1.5 Mon Feb 13 10:44:12 2006
+++ gnash/server/Object.cpp Tue Feb 14 12:29:48 2006
@@ -24,6 +24,7 @@
//#include "Object.h"
#include "action.h" // when we've finished, Object.h will stay, action.h away
+#include "Function.h"
namespace gnash {
@@ -117,6 +118,7 @@
return false;
}
+
void
as_object::clear()
{
@@ -128,5 +130,17 @@
}
}
+bool
+as_object::instanceOf(function_as_object* ctor)
+{
+ as_object* proto=m_prototype;
+ do {
+ if ( proto == ctor->m_properties ) return true;
+ proto = ctor->m_properties;
+ } while (proto);
+
+ return false;
+}
+
} // end of gnash namespace
Index: gnash/server/Object.h
diff -u gnash/server/Object.h:1.1 gnash/server/Object.h:1.2
--- gnash/server/Object.h:1.1 Mon Feb 13 10:44:12 2006
+++ gnash/server/Object.h Tue Feb 14 12:29:48 2006
@@ -483,6 +483,14 @@
virtual movie* to_movie() { return NULL; }
void clear();
+
+ /// Check whether this object is an instance of the given
+ /// function_as_object constructor
+ //
+ /// NOTE: built-in classes should NOT be C_FUNCTIONS for this to
+ /// work
+ ///
+ bool instanceOf(function_as_object* ctor);
};
} // namespace gnash
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.46 gnash/server/action.cpp:1.47
--- gnash/server/action.cpp:1.46 Mon Feb 13 12:09:16 2006
+++ gnash/server/action.cpp Tue Feb 14 12:29:48 2006
@@ -1813,52 +1813,29 @@
action_buffer::doActionInstanceOf(as_environment* env)
{
// Get the "super" function
- as_value& super = env->top(0);
+ function_as_object* super = env->top(0).to_as_function();
// Get the "instance"
- as_value& instance = env->top(1);
-
+ as_object* instance = env->top(1).to_object();
+ // Invalid args!
+ if ( ! super || ! instance )
+ {
//IF_VERBOSE_ACTION(
- log_msg("-- %s intance_of %s\n",
- instance.to_string(),
- super.to_string());
+ log_msg("-- %s instance_of %s (invalid args?)\n",
+ env->top(1).to_string(),
+ env->top(0).to_string());
//);
- as_value result;
-
- // If any of the two is undefined, result is false
- if ( instance.get_type() == as_value::UNDEFINED || \
- super.get_type() == as_value::UNDEFINED )
- {
- result.set_bool(false);
- }
- else
- {
-
- // @@ TODO
-
- // Check if 'instance' implements all
- // methods of 'super'
-
- // @@ TODO
-
- result.set_undefined();
-
-
- #if 0
- if ( instance->implements(super) ) {
- env->push(true);
- } else {
- env->push(false);
- }
- #endif
+ env->drop(2);
+ env->top(0) = as_value(false);
+ return;
}
- // @@ TODO
- log_error("tocheck opcode: ACTION_INSTANCEOF (%02X)\n",
SWF::ACTION_INSTANCEOF);
env->drop(1);
- env->top(0) = result;
+ env->top(0) = as_value(instance->instanceOf(super));
+
+ //log_msg("tocheck: opcode %x\n", SWF::ACTION_INSTANCEOF);
}
/*private*/
@@ -2863,7 +2840,7 @@
break;
case SWF::ACTION_INSTANCEOF: // instance of
// @@ TODO
- log_error("todo opcode: %02X\n",
action_id);
+ doActionInstanceOf(env);
break;
case SWF::ACTION_ENUM2: // enumerate object
// @@ TODO
Index: gnash/testsuite/actionscript.all/Inheritance.as
diff -u gnash/testsuite/actionscript.all/Inheritance.as:1.1
gnash/testsuite/actionscript.all/Inheritance.as:1.2
--- gnash/testsuite/actionscript.all/Inheritance.as:1.1 Mon Feb 13 10:44:12 2006
+++ gnash/testsuite/actionscript.all/Inheritance.as Tue Feb 14 12:29:48 2006
@@ -101,3 +101,8 @@
check(subInstance.sayHello() == "hello from Sub" );
subInstance.sayHello = function() { return "hello from subInstance"; };
check(subInstance.sayHello() == "hello from subInstance" );
+
+// Test the instanceOf operator
+check(subInstance instanceOf Sub);
+check(subInstance instanceOf Super);
+check(subInstance instanceOf Object);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Gnash-commit] gnash ./ChangeLog server/Object.cpp server/Obje...,
strk <=