[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnash-commit] gnash ./ChangeLog server/Function.cpp server/ac...
From: |
strk |
Subject: |
[Gnash-commit] gnash ./ChangeLog server/Function.cpp server/ac... |
Date: |
Mon, 13 Feb 2006 12:09:16 +0000 |
CVSROOT: /sources/gnash
Module name: gnash
Branch:
Changes by: strk <address@hidden> 06/02/13 12:09:16
Modified files:
. : ChangeLog
server : Function.cpp action.cpp
testsuite/actionscript.all: Function.as
Log message:
Implemented Function.call
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/ChangeLog.diff?tr1=1.130&tr2=1.131&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/Function.cpp.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/server/action.cpp.diff?tr1=1.45&tr2=1.46&r1=text&r2=text
http://cvs.savannah.gnu.org/viewcvs/gnash/gnash/testsuite/actionscript.all/Function.as.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
Patches:
Index: gnash/ChangeLog
diff -u gnash/ChangeLog:1.130 gnash/ChangeLog:1.131
--- gnash/ChangeLog:1.130 Mon Feb 13 10:44:11 2006
+++ gnash/ChangeLog Mon Feb 13 12:09:16 2006
@@ -10,7 +10,7 @@
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.
+ 'prototype' based inheritance. Implemented Function.call
2006-02-09 Michael Carlson <address@hidden>
Index: gnash/server/Function.cpp
diff -u gnash/server/Function.cpp:1.5 gnash/server/Function.cpp:1.6
--- gnash/server/Function.cpp:1.5 Mon Feb 13 10:44:12 2006
+++ gnash/server/Function.cpp Mon Feb 13 12:09:16 2006
@@ -364,7 +364,35 @@
}
void function_call(const fn_call& fn) {
- log_msg("%s:unimplemented \n", __FUNCTION__);
+
+ // Get function body
+ function_as_object* function_obj = fn.env->top(1).to_as_function();
+ assert(function_obj);
+
+ // Copy new function call from old one, we'll modify
+ // the copy only if needed
+ fn_call new_fn_call(fn);
+
+ if ( ! fn.nargs )
+ {
+ IF_VERBOSE_DEBUG(log_msg("Function.call() with no args\n"));
+ new_fn_call.nargs=0;
+ }
+ else
+ {
+ // Get the object to use as 'this' reference
+ as_object *this_ptr = fn.arg(0).to_object();
+ new_fn_call.this_ptr = this_ptr;
+ new_fn_call.nargs--;
+ new_fn_call.first_arg_bottom_index--;
+ }
+
+ // Call the function
+ (*function_obj)(new_fn_call);
+
+ //log_msg("at function_call exit, stack: \n"); fn.env->dump_stack();
+
+ //log_msg("%s: tocheck \n", __FUNCTION__);
}
Index: gnash/server/action.cpp
diff -u gnash/server/action.cpp:1.45 gnash/server/action.cpp:1.46
--- gnash/server/action.cpp:1.45 Mon Feb 13 10:44:12 2006
+++ gnash/server/action.cpp Mon Feb 13 12:09:16 2006
@@ -1916,6 +1916,9 @@
env->drop(nargs + 2);
env->top(0) = result;
+
+ // This is to check stack status after call method
+ //log_msg("at doActionCallMethod() end, stack: \n");
env->dump_stack();
}
/*private*/
Index: gnash/testsuite/actionscript.all/Function.as
diff -u gnash/testsuite/actionscript.all/Function.as:1.8
gnash/testsuite/actionscript.all/Function.as:1.9
--- gnash/testsuite/actionscript.all/Function.as:1.8 Fri Feb 10 13:20:04 2006
+++ gnash/testsuite/actionscript.all/Function.as Mon Feb 13 12:09:16 2006
@@ -36,6 +36,9 @@
var ret=getThisName.apply(this_ref, [1,2,3]);
check ( ret == "extname123" );
+// Test Function.call(arg1, arg2, arg3)
+check ( getThisName.call(this_ref, 1, 2, 3) == "extname123" );
+
// Define a class with its constructor
var TestClass = function() {
this.name = "NONE";