gnash-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnash-commit] gnash ChangeLog server/asobj/string.cpp testsui...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/asobj/string.cpp testsui...
Date: Tue, 11 Dec 2007 11:34:58 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/12/11 11:34:58

Modified files:
        .              : ChangeLog 
        server/asobj   : string.cpp 
        testsuite/actionscript.all: String.as 
        testsuite/swfdec: PASSING 

Log message:
        fix String.slice, register native String functions,
        fix static vs. prototoype methods for String.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5128&r2=1.5129
http://cvs.savannah.gnu.org/viewcvs/gnash/server/asobj/string.cpp?cvsroot=gnash&r1=1.46&r2=1.47
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/String.as?cvsroot=gnash&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/swfdec/PASSING?cvsroot=gnash&r1=1.76&r2=1.77

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5128
retrieving revision 1.5129
diff -u -b -r1.5128 -r1.5129
--- ChangeLog   11 Dec 2007 10:06:00 -0000      1.5128
+++ ChangeLog   11 Dec 2007 11:34:57 -0000      1.5129
@@ -1,5 +1,12 @@
 2007-12-11 Sandro Santilli <address@hidden>
 
+       * server/asobj/string.cpp: fix slice, register native functions,
+         fix static vs. prototoype methods.
+       * testsuite/actionscript.all/String.as: add more tests
+       * testsuite/swfdec/PASSING: String.slice tests pass.
+
+2007-12-11 Sandro Santilli <address@hidden>
+
        * server/swf/tag_loaders.cpp (sound_stream_head_loader): tolerate
          lack of a 'latency' field in MP3 stream. Fixes bug #21729.
          Note that Ming also reports the file to have the same problem

Index: server/asobj/string.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/asobj/string.cpp,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -b -r1.46 -r1.47
--- server/asobj/string.cpp     4 Dec 2007 11:45:31 -0000       1.46
+++ server/asobj/string.cpp     11 Dec 2007 11:34:58 -0000      1.47
@@ -16,7 +16,7 @@
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-/* $Id: string.cpp,v 1.46 2007/12/04 11:45:31 strk Exp $ */
+/* $Id: string.cpp,v 1.47 2007/12/11 11:34:58 strk Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -76,22 +76,63 @@
 static void
 attachStringInterface(as_object& o)
 {
+       VM& vm = o.getVM();
+
     // TODO fill in the rest
-    o.init_member("concat", new builtin_function(string_concat));
-    o.init_member("slice", new builtin_function(string_slice));
-    o.init_member("split", new builtin_function(string_split));
-    o.init_member("lastIndexOf", new builtin_function(string_last_index_of));
-    o.init_member("substr", new builtin_function(string_sub_str));
-    o.init_member("substring", new builtin_function(string_sub_string));
-    o.init_member("indexOf", new builtin_function(string_index_of));
-    o.init_member("toString", new builtin_function(string_to_string));
-    o.init_member("fromCharCode", new builtin_function(string_from_char_code));
-    o.init_member("charAt", new builtin_function(string_char_at));
-    o.init_member("charCodeAt", new builtin_function(string_char_code_at));
-    o.init_member("toUpperCase", new builtin_function(string_to_upper_case));
-    o.init_member("toLowerCase", new builtin_function(string_to_lower_case));
-    o.init_member("valueOf", new builtin_function(as_object::tostring_method));
 
+       // ASnative(251, 1) - [String.prototype] valueOf
+       vm.registerNative(as_object::tostring_method, 251, 1);
+       o.init_member("valueOf", vm.getNative(251, 1));
+
+       // ASnative(251, 2) - [String.prototype] toString
+       vm.registerNative(string_to_string, 251, 2);
+       o.init_member("toString", vm.getNative(251, 2));
+
+       // ASnative(251, 3) - [String.prototype] toUpperCase
+       vm.registerNative(string_to_upper_case, 251, 3);
+       o.init_member("toUpperCase", vm.getNative(251, 3));
+
+       // ASnative(251, 4) - [String.prototype] toLowerCase
+       vm.registerNative(string_to_lower_case, 251, 4);
+       o.init_member("toLowerCase", vm.getNative(251, 4));
+
+       // ASnative(251, 5) - [String.prototype] charAt
+       vm.registerNative(string_char_at, 251, 5);
+       o.init_member("charAt", vm.getNative(251, 5));
+
+       // ASnative(251, 6) - [String.prototype] charCodeAt
+       vm.registerNative(string_char_code_at, 251, 6);
+       o.init_member("charCodeAt", vm.getNative(251, 6));
+
+       // ASnative(251, 7) - [String.prototype] concat
+       vm.registerNative(string_concat, 251, 7);
+       o.init_member("concat", vm.getNative(251, 7));
+
+       // ASnative(251, 8) - [String.prototype] indexOf
+       vm.registerNative(string_index_of, 251, 8);
+       o.init_member("indexOf", vm.getNative(251, 8));
+
+       // ASnative(251, 9) - [String.prototype] lastIndexOf
+       vm.registerNative(string_last_index_of, 251, 9);
+       o.init_member("lastIndexOf", vm.getNative(251, 9));
+
+       // ASnative(251, 10) - [String.prototype] slice
+       vm.registerNative(string_slice, 251, 10);
+       o.init_member("slice", vm.getNative(251, 10));
+
+       // ASnative(251, 11) - [String.prototype] substring
+       vm.registerNative(string_sub_string, 251, 11);
+       o.init_member("substring", vm.getNative(251, 11));
+
+       // ASnative(251, 12) - [String.prototype] split
+       vm.registerNative(string_split, 251, 12);
+       o.init_member("split", vm.getNative(251, 12));
+
+       // ASnative(251, 13) - [String.prototype] substr
+       vm.registerNative(string_sub_str, 251, 13);
+       o.init_member("substr", vm.getNative(251, 13));
+
+       // This isn't advertised as native, so might be a proper property ?
     boost::intrusive_ptr<builtin_function> length_getter(new 
builtin_function(string_get_length));
     o.init_readonly_property("length", *length_getter);
 
@@ -171,7 +212,7 @@
 
 
 static size_t
-valid_index(std::string subject, int index)
+valid_index(const std::string& subject, int index)
 {
     int myIndex = index;
 
@@ -193,28 +234,29 @@
     // Make a copy.
     std::string str = obj->str();
 
-    ENSURE_FN_ARGS(1, 2, str);
+    ENSURE_FN_ARGS(1, 2, as_value());
 
-    int start = fn.arg(0).to_number<int>();
+    size_t start = valid_index(str, fn.arg(0).to_int());
 
-    int end = str.size();
+    size_t len = str.length();
 
-    if (fn.nargs >= 2) {
-        end = fn.arg(1).to_number<int>();
+    size_t end = len;
+    if (fn.nargs >= 2)
+    {
+       end = valid_index(str, fn.arg(1).to_int());
 
-        if (end < start) {
-            // Swap start and end like substring
-            std::swap(start, end);
         }
 
-        start = valid_index(str, start);
-
-        end = valid_index(str, end) - start ;
-    } else {
-        start = valid_index(str, start);
+    if (end < start) // move out of if ?
+    {
+            return as_value("");
     }
 
-    return as_value(str.substr(start, end));
+    size_t retlen = end-start;
+
+    log_msg("start:%d, end:%d, retlen:%d", start, end, retlen);
+
+    return as_value(str.substr(start, retlen));
 }
 
 static as_value
@@ -591,12 +633,14 @@
 
     if ( cl == NULL )
     {
+       VM& vm = VM::get();
+
         cl=new builtin_function(&string_ctor, getStringInterface());
-       VM::get().addStatic(cl.get());
+       vm.addStatic(cl.get());
 
-        // replicate all interface to class, to be able to access
-        // all methods as static functions
-        attachStringInterface(*cl);
+       // ASnative(251, 14) - [String] fromCharCode 
+       vm.registerNative(string_from_char_code, 251, 14);
+       cl->init_member("fromCharCode", vm.getNative(251, 14)); 
 
     }
 

Index: testsuite/actionscript.all/String.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/String.as,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- testsuite/actionscript.all/String.as        2 Dec 2007 09:15:55 -0000       
1.28
+++ testsuite/actionscript.all/String.as        11 Dec 2007 11:34:58 -0000      
1.29
@@ -16,12 +16,71 @@
 
 // Original author: Mike Carlson - June 19th, 2006
 
-rcsid="$Id: String.as,v 1.28 2007/12/02 09:15:55 strk Exp $";
+rcsid="$Id: String.as,v 1.29 2007/12/11 11:34:58 strk Exp $";
 
 #include "check.as"
 
-// Gnash fails this always returning an object when String 
-// constructor is invoked.
+check_equals(typeof(String), 'function');
+check_equals(typeof(String.prototype), 'object');
+#if OUTPUT_VERSION > 5
+ check_equals(String.__proto__, Function.prototype); // both undefined in swf5
+#else
+ xcheck_equals(String.__proto__, Function.prototype); // gnash fails 
+#endif
+check_equals(typeof(String.prototype.valueOf), 'function');
+check_equals(typeof(String.prototype.toString), 'function');
+check_equals(typeof(String.prototype.toUpperCase), 'function');
+check_equals(typeof(String.prototype.toLowerCase), 'function');
+check_equals(typeof(String.prototype.charAt), 'function');
+check_equals(typeof(String.prototype.charCodeAt), 'function');
+check_equals(typeof(String.prototype.concat), 'function');
+check_equals(typeof(String.prototype.indexOf), 'function');
+check_equals(typeof(String.prototype.lastIndexOf), 'function');
+check_equals(typeof(String.prototype.slice), 'function');
+check_equals(typeof(String.prototype.substring), 'function');
+check_equals(typeof(String.prototype.split), 'function');
+check_equals(typeof(String.prototype.substr), 'function');
+check_equals(typeof(String.prototype.fromCharCode), 'undefined');
+#if OUTPUT_VERSION > 5
+ check_equals(typeof(String.valueOf), 'function');
+ check_equals(typeof(String.toString), 'function');
+#else
+ xcheck_equals(typeof(String.valueOf), 'undefined');
+ xcheck_equals(typeof(String.toString), 'undefined');
+#endif
+check_equals(typeof(String.toUpperCase), 'undefined');
+check_equals(typeof(String.toLowerCase), 'undefined');
+check_equals(typeof(String.charAt), 'undefined');
+check_equals(typeof(String.charCodeAt), 'undefined');
+check_equals(typeof(String.concat), 'undefined');
+check_equals(typeof(String.indexOf), 'undefined');
+check_equals(typeof(String.lastIndexOf), 'undefined');
+check_equals(typeof(String.slice), 'undefined');
+check_equals(typeof(String.substring), 'undefined');
+check_equals(typeof(String.split), 'undefined');
+check_equals(typeof(String.substr), 'undefined');
+check_equals(typeof(String.fromCharCode), 'function');
+
+#if OUTPUT_VERSION > 5
+check(String.hasOwnProperty('fromCharCode'));
+check(!String.hasOwnProperty('toString'));
+check(!String.hasOwnProperty('valueOf'));
+check(String.prototype.hasOwnProperty('valueOf'));
+check(String.prototype.hasOwnProperty('toString'));
+check(String.prototype.hasOwnProperty('toUpperCase'));
+check(String.prototype.hasOwnProperty('toLowerCase'));
+check(String.prototype.hasOwnProperty('charAt'));
+check(String.prototype.hasOwnProperty('charCodeAt'));
+check(String.prototype.hasOwnProperty('concat'));
+check(String.prototype.hasOwnProperty('indexOf'));
+check(String.prototype.hasOwnProperty('lastIndexOf'));
+check(String.prototype.hasOwnProperty('slice'));
+check(String.prototype.hasOwnProperty('substring'));
+check(String.prototype.hasOwnProperty('split'));
+check(String.prototype.hasOwnProperty('substr'));
+#endif
+
+
 check_equals(typeof(String()), 'string');
 
 var a;
@@ -42,8 +101,10 @@
 
 //----------------------------------------
 // Check String.indexOf
+// TODO: test with ASnative(251,8)
 //-----------------------------------------
 
+
 // wallawallawashinGTON
 check_equals ( a.indexOf("lawa"), 3 );
 check_equals ( a.indexOf("lawas"), 8 );
@@ -69,6 +130,7 @@
 
 //----------------------------------------
 // Check String.split
+// TODO: test with ASnative(251,12)
 //-----------------------------------------
 
 check_equals ( typeof(a.split), 'function' );
@@ -138,6 +200,7 @@
 
 //----------------------------------------
 // Check String.fromCharCode
+// TODO: test with ASnative(251,14)
 //-----------------------------------------
 
 
@@ -147,13 +210,15 @@
 
 //-------------------------------------------
 // Check String.toUpperCase and toLowerCase
+// TODO: test with ASnative(251,3)
 //-------------------------------------------
 
 check_equals ( a.toUpperCase(), "WALLAWALLAWASHINGTON" );
 check_equals ( a.toLowerCase(), "wallawallawashington" );
 
 //-------------------------------------------
-// Check substr / slice / substring
+// Check substr 
+// TODO: test with ASnative(251,13)
 //-------------------------------------------
 
 a = new String("abcdefghijklmnopqrstuvwxyz");
@@ -162,7 +227,25 @@
 check_equals ( a.substr(-1,1), "z" );
 check_equals ( a.substr(-2,3), "yz" );
 check_equals ( a.substr(-3,2), "xy" );
+var b = new String("1234");
+check_equals ( b.substr(3, 6), "4");
+
+//-------------------------------------------
+// Check slice 
+// TODO: test with ASnative(251,10)
+//-------------------------------------------
+
+a = new String("abcdefghijklmnopqrstuvwxyz");
 check_equals ( a.slice(-5,-3), "vw" );
+check_equals ( typeof(a.slice()), "undefined" );
+check_equals ( typeof(a.slice(-5,3)), "string" );
+check_equals ( a.slice(-5,3), "" );
+check_equals ( typeof(a.slice(-10,22)), "string" );
+check_equals ( a.slice(-10,22), "qrstuv" );
+check_equals ( a.slice(0,0), "" );
+check_equals ( a.slice(0,1), "a" );
+check_equals ( a.slice(1,1), "" );
+check_equals ( a.slice(1,2), "b" );
 #if OUTPUT_VERSION > 5
 check_equals ( a.slice.call(a, -5, -3), "vw" );
 check_equals ( String.prototype.slice.call(a, -5, -3), "vw" );
@@ -173,14 +256,22 @@
 check_equals ( String.prototype.slice.call(a, -5, -3), undefined );
 #endif
 check_equals ( a.slice(-4), "wxyz" );
+
+//-------------------------------------------
+// Check substring
+// TODO: test with ASnative(251,11)
+//-------------------------------------------
+
+a = new String("abcdefghijklmnopqrstuvwxyz");
 check_equals ( a.substring(5,2), "cde" );
 check_equals ( a.substring(5,7), "fg" );
 check_equals ( a.substring(3,3), "" );
+
 check_equals ( a.length, 26 );
 check_equals ( a.concat("sir ","william",15), "abcdefghijklmnopqrstuvwxyzsir 
william15");
+
 var b = new String("1234");
 check_equals ( b.substring(3, 6), "4");
-check_equals ( b.substr(3, 6), "4");
 
 // see check.as
 #ifdef MING_SUPPORTS_ASM
@@ -371,7 +462,7 @@
 String.prototype.toString = StringProtoToStringBackup;
 
 #if OUTPUT_VERSION < 6
- check_totals(130);
+ check_totals(170);
 #else
- check_totals(135);
+ check_totals(191);
 #endif

Index: testsuite/swfdec/PASSING
===================================================================
RCS file: /sources/gnash/gnash/testsuite/swfdec/PASSING,v
retrieving revision 1.76
retrieving revision 1.77
diff -u -b -r1.76 -r1.77
--- testsuite/swfdec/PASSING    11 Dec 2007 00:14:23 -0000      1.76
+++ testsuite/swfdec/PASSING    11 Dec 2007 11:34:58 -0000      1.77
@@ -554,6 +554,9 @@
 string-convert-5.swf:15de6c587a3c3e7c685b8f98ea862790
 string-convert-6.swf:841b7cc8e58c33c38efbfe1768ef82cf
 string-convert-7.swf:b822683afd33802bdd0e7ba31df63d68
+string-slice-5.swf:a98bdbd8ce5ff3cfd5406d3a9d04de33
+string-slice-6.swf:cfe7fde1085617b6673fda9895162e32
+string-slice-7.swf:eaed0b05db4e5a01579a94f283f8a068
 string-split-empty-5.swf:0cdbe0cfc78b49bdf37c1e71bfc5743f
 string-split-empty-6.swf:94aacd4a972c8eae6fa7ebe945074414
 string-split-empty-7.swf:3be198e0f9277bf4749bddddf85dce33




reply via email to

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