gnash-commit
[Top][All Lists]
Advanced

[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";




reply via email to

[Prev in Thread] Current Thread [Next in Thread]