gnash-commit
[Top][All Lists]
Advanced

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

[Gnash-commit] gnash ChangeLog server/as_value.cpp testsuite/a...


From: Sandro Santilli
Subject: [Gnash-commit] gnash ChangeLog server/as_value.cpp testsuite/a...
Date: Fri, 30 Nov 2007 19:01:03 +0000

CVSROOT:        /sources/gnash
Module name:    gnash
Changes by:     Sandro Santilli <strk>  07/11/30 19:01:03

Modified files:
        .              : ChangeLog 
        server         : as_value.cpp 
        testsuite/actionscript.all: Number.as 

Log message:
        add support for parsing hex strings in swf6+

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnash/ChangeLog?cvsroot=gnash&r1=1.5032&r2=1.5033
http://cvs.savannah.gnu.org/viewcvs/gnash/server/as_value.cpp?cvsroot=gnash&r1=1.99&r2=1.100
http://cvs.savannah.gnu.org/viewcvs/gnash/testsuite/actionscript.all/Number.as?cvsroot=gnash&r1=1.34&r2=1.35

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnash/gnash/ChangeLog,v
retrieving revision 1.5032
retrieving revision 1.5033
diff -u -b -r1.5032 -r1.5033
--- ChangeLog   30 Nov 2007 18:36:06 -0000      1.5032
+++ ChangeLog   30 Nov 2007 19:01:02 -0000      1.5033
@@ -1,5 +1,11 @@
 2007-11-30 Sandro Santilli <address@hidden>
 
+       * server/as_value.cpp (to_number): add support for parsing hex
+         strings in swf6+
+       * testsuite/actionscript.all/Number.as: success in hex parsing tests.
+
+2007-11-30 Sandro Santilli <address@hidden>
+
        * testsuite/actionscript.all/Number.as: add test for '0xRRGGBB'
          automatic conversion to number in SWF6+ (gnash fails).
        * testsuite/misc-mtasc.all/: Makefile.am, TextFieldTest.as:

Index: server/as_value.cpp
===================================================================
RCS file: /sources/gnash/gnash/server/as_value.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -b -r1.99 -r1.100
--- server/as_value.cpp 26 Nov 2007 20:43:47 -0000      1.99
+++ server/as_value.cpp 30 Nov 2007 19:01:03 -0000      1.100
@@ -54,6 +54,33 @@
 // Define the macro below to make to_primitive verbose
 //#define GNASH_DEBUG_CONVERSION_TO_PRIMITIVE 1
 
+namespace {
+
+uint8_t parseHex(char c)
+{
+       switch (c)
+       {
+               case '0': return 0;
+               case '1': return 1;
+               case '2': return 2;
+               case '3': return 3;
+               case '4': return 4;
+               case '5': return 5;
+               case '6': return 6;
+               case '7': return 7;
+               case '8': return 8;
+               case '9': return 9;
+               case 'a': case 'A': return 10;
+               case 'b': case 'B': return 11;
+               case 'c': case 'C': return 12;
+               case 'd': case 'D': return 13;
+               case 'e': case 'E': return 14;
+               case 'f': case 'F': return 15;
+       }
+}
+
+}
+
 namespace gnash {
 
 //
@@ -345,6 +372,19 @@
     {
         case STRING:
         {
+            std::string s = getStr();
+
+            if ( swfversion > 5 )
+            {
+               if ( s.length() == 8 && s[0] == '0' && ( s[1] == 'x' || s[1] == 
'X' ) )
+               {
+                       uint8_t r = (parseHex(s[2])<<4) + parseHex(s[3]);
+                       uint8_t g = (parseHex(s[4])<<4) + parseHex(s[5]);
+                       uint8_t b = (parseHex(s[6])<<4) + parseHex(s[7]);
+                       return (double)((r<<16)|(g<<8)|b);
+               }
+            }
+
             // @@ Moock says the rule here is: if the
             // string is a valid float literal, then it
             // gets converted; otherwise it is set to NaN.

Index: testsuite/actionscript.all/Number.as
===================================================================
RCS file: /sources/gnash/gnash/testsuite/actionscript.all/Number.as,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- testsuite/actionscript.all/Number.as        30 Nov 2007 18:36:06 -0000      
1.34
+++ testsuite/actionscript.all/Number.as        30 Nov 2007 19:01:03 -0000      
1.35
@@ -27,7 +27,7 @@
 // TODO: test with SWF target != 6 (the only one tested so far)
 //     
 
-rcsid="$Id: Number.as,v 1.34 2007/11/30 18:36:06 strk Exp $";
+rcsid="$Id: Number.as,v 1.35 2007/11/30 19:01:03 strk Exp $";
 
 #include "check.as"
 
@@ -258,8 +258,10 @@
 
 // string:0xFF0000 number:0xFF0000 equality
 #if OUTPUT_VERSION > 5
- xcheck_equals("0xFF0000", 0xFF0000);
- xcheck_equals("0XFF0000", 0xFF0000);
+ check_equals("0xFF0000", 0xFF0000);
+ check_equals("0XFF0000", 0xFF0000);
+ check_equals("0Xff0000", 0xFF0000);
+ check("0Xff000000" != 0xFF000000);
 #else
  check("0xFF0000" != 0xFF0000);
  check("0XFF0000" != 0xFF0000);
@@ -453,8 +455,8 @@
  check_totals(146);
 #else
 #if OUTPUT_VERSION < 7
- check_totals(156);
+ check_totals(158);
 #else
- check_totals(154);
+ check_totals(156);
 #endif
 #endif




reply via email to

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