[Swfdec-commits] 2 commits - swfdec/swfdec_as_number.c test/trace

Pekka Lampila medar at kemper.freedesktop.org
Sat Feb 16 12:47:20 PST 2008


 swfdec/swfdec_as_number.c                    |   61 ++++++-
 test/trace/Makefile.am                       |    9 +
 test/trace/number-tostring-radix-5.swf       |binary
 test/trace/number-tostring-radix-5.swf.trace |  206 +++++++++++++++++++++++++++
 test/trace/number-tostring-radix-6.swf       |binary
 test/trace/number-tostring-radix-6.swf.trace |  206 +++++++++++++++++++++++++++
 test/trace/number-tostring-radix-7.swf       |binary
 test/trace/number-tostring-radix-7.swf.trace |  206 +++++++++++++++++++++++++++
 test/trace/number-tostring-radix-8.swf       |binary
 test/trace/number-tostring-radix-8.swf.trace |  206 +++++++++++++++++++++++++++
 test/trace/number-tostring-radix.as          |   27 +++
 11 files changed, 913 insertions(+), 8 deletions(-)

New commits:
commit a931a9c4ecc3fbd02bf4cb04f25a93f9958d1882
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sat Feb 16 22:47:13 2008 +0200

    Add a test for specifying radix in Number.toString

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 6b332b6..86d3f08 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1770,6 +1770,15 @@ EXTRA_DIST = \
 	number-properties-7.swf.trace \
 	number-properties-8.swf \
 	number-properties-8.swf.trace \
+	number-tostring-radix.as \
+	number-tostring-radix-5.swf \
+	number-tostring-radix-5.swf.trace \
+	number-tostring-radix-6.swf \
+	number-tostring-radix-6.swf.trace \
+	number-tostring-radix-7.swf \
+	number-tostring-radix-7.swf.trace \
+	number-tostring-radix-8.swf \
+	number-tostring-radix-8.swf.trace \
 	object-hasownproperty.as \
 	object-hasownproperty-5.swf \
 	object-hasownproperty-5.swf.trace \
diff --git a/test/trace/number-tostring-radix-5.swf b/test/trace/number-tostring-radix-5.swf
new file mode 100644
index 0000000..1168bc6
Binary files /dev/null and b/test/trace/number-tostring-radix-5.swf differ
diff --git a/test/trace/number-tostring-radix-5.swf.trace b/test/trace/number-tostring-radix-5.swf.trace
new file mode 100644
index 0000000..44715cb
--- /dev/null
+++ b/test/trace/number-tostring-radix-5.swf.trace
@@ -0,0 +1,206 @@
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+-0.38
+-0.38
+0.94
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0.94
+0.94
+0.94
+-12179.877
+-12179.877
+-10111110010011
+-121201002
+-2332103
+-342204
+-132215
+-50336
+-27623
+-17632
+-12179.877
+-9172
+-706b
+-570b
+-461d
+-391e
+-2f93
+-2827
+-21ab
+-1ee0
+-1a8j
+-16ck
+-133d
+-100c
+-l3b
+-jc4
+-i0b
+-gj2
+-fer
+-eds
+-dft
+-ckr
+-bsj
+-b62
+-ai7
+-9wy
+-9eb
+-12179.877
+-12179.877
+-12179.877
+-12179.877
+1230312412
+1230312412
+1001001010101010001001111011100
+10011202001100100101
+1021111101033130
+10004424444122
+322025510444
+42326324440
+11125211734
+3152040311
+1230312412
+58152aa1a
+2a4042424
+167b78714
+b9580820
+73027027
+495513dc
+2gg89d66
+2031gg9a
+172gbibg
+j49910c
+e752g17
+aifllha
+873ai80
+6ac6714
+50oeolc
+3pe7ek4
+34k199a
+2fdhg10
+21seb1r
+1kir3nm
+1bu63q5
+14la4us
+vee8fa
+r2mg36
+neubn7
+kchv4s
+1230312412
+1230312412
+1230312412
+1230312412
+undefined
diff --git a/test/trace/number-tostring-radix-6.swf b/test/trace/number-tostring-radix-6.swf
new file mode 100644
index 0000000..2687eef
Binary files /dev/null and b/test/trace/number-tostring-radix-6.swf differ
diff --git a/test/trace/number-tostring-radix-6.swf.trace b/test/trace/number-tostring-radix-6.swf.trace
new file mode 100644
index 0000000..44715cb
--- /dev/null
+++ b/test/trace/number-tostring-radix-6.swf.trace
@@ -0,0 +1,206 @@
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+-0.38
+-0.38
+0.94
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0.94
+0.94
+0.94
+-12179.877
+-12179.877
+-10111110010011
+-121201002
+-2332103
+-342204
+-132215
+-50336
+-27623
+-17632
+-12179.877
+-9172
+-706b
+-570b
+-461d
+-391e
+-2f93
+-2827
+-21ab
+-1ee0
+-1a8j
+-16ck
+-133d
+-100c
+-l3b
+-jc4
+-i0b
+-gj2
+-fer
+-eds
+-dft
+-ckr
+-bsj
+-b62
+-ai7
+-9wy
+-9eb
+-12179.877
+-12179.877
+-12179.877
+-12179.877
+1230312412
+1230312412
+1001001010101010001001111011100
+10011202001100100101
+1021111101033130
+10004424444122
+322025510444
+42326324440
+11125211734
+3152040311
+1230312412
+58152aa1a
+2a4042424
+167b78714
+b9580820
+73027027
+495513dc
+2gg89d66
+2031gg9a
+172gbibg
+j49910c
+e752g17
+aifllha
+873ai80
+6ac6714
+50oeolc
+3pe7ek4
+34k199a
+2fdhg10
+21seb1r
+1kir3nm
+1bu63q5
+14la4us
+vee8fa
+r2mg36
+neubn7
+kchv4s
+1230312412
+1230312412
+1230312412
+1230312412
+undefined
diff --git a/test/trace/number-tostring-radix-7.swf b/test/trace/number-tostring-radix-7.swf
new file mode 100644
index 0000000..1840e63
Binary files /dev/null and b/test/trace/number-tostring-radix-7.swf differ
diff --git a/test/trace/number-tostring-radix-7.swf.trace b/test/trace/number-tostring-radix-7.swf.trace
new file mode 100644
index 0000000..44715cb
--- /dev/null
+++ b/test/trace/number-tostring-radix-7.swf.trace
@@ -0,0 +1,206 @@
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+-0.38
+-0.38
+0.94
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0.94
+0.94
+0.94
+-12179.877
+-12179.877
+-10111110010011
+-121201002
+-2332103
+-342204
+-132215
+-50336
+-27623
+-17632
+-12179.877
+-9172
+-706b
+-570b
+-461d
+-391e
+-2f93
+-2827
+-21ab
+-1ee0
+-1a8j
+-16ck
+-133d
+-100c
+-l3b
+-jc4
+-i0b
+-gj2
+-fer
+-eds
+-dft
+-ckr
+-bsj
+-b62
+-ai7
+-9wy
+-9eb
+-12179.877
+-12179.877
+-12179.877
+-12179.877
+1230312412
+1230312412
+1001001010101010001001111011100
+10011202001100100101
+1021111101033130
+10004424444122
+322025510444
+42326324440
+11125211734
+3152040311
+1230312412
+58152aa1a
+2a4042424
+167b78714
+b9580820
+73027027
+495513dc
+2gg89d66
+2031gg9a
+172gbibg
+j49910c
+e752g17
+aifllha
+873ai80
+6ac6714
+50oeolc
+3pe7ek4
+34k199a
+2fdhg10
+21seb1r
+1kir3nm
+1bu63q5
+14la4us
+vee8fa
+r2mg36
+neubn7
+kchv4s
+1230312412
+1230312412
+1230312412
+1230312412
+undefined
diff --git a/test/trace/number-tostring-radix-8.swf b/test/trace/number-tostring-radix-8.swf
new file mode 100644
index 0000000..ef47ff8
Binary files /dev/null and b/test/trace/number-tostring-radix-8.swf differ
diff --git a/test/trace/number-tostring-radix-8.swf.trace b/test/trace/number-tostring-radix-8.swf.trace
new file mode 100644
index 0000000..44715cb
--- /dev/null
+++ b/test/trace/number-tostring-radix-8.swf.trace
@@ -0,0 +1,206 @@
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+-0.38
+-0.38
+-0.38
+-0.38
+0.94
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0
+0.94
+0.94
+0.94
+0.94
+-12179.877
+-12179.877
+-10111110010011
+-121201002
+-2332103
+-342204
+-132215
+-50336
+-27623
+-17632
+-12179.877
+-9172
+-706b
+-570b
+-461d
+-391e
+-2f93
+-2827
+-21ab
+-1ee0
+-1a8j
+-16ck
+-133d
+-100c
+-l3b
+-jc4
+-i0b
+-gj2
+-fer
+-eds
+-dft
+-ckr
+-bsj
+-b62
+-ai7
+-9wy
+-9eb
+-12179.877
+-12179.877
+-12179.877
+-12179.877
+1230312412
+1230312412
+1001001010101010001001111011100
+10011202001100100101
+1021111101033130
+10004424444122
+322025510444
+42326324440
+11125211734
+3152040311
+1230312412
+58152aa1a
+2a4042424
+167b78714
+b9580820
+73027027
+495513dc
+2gg89d66
+2031gg9a
+172gbibg
+j49910c
+e752g17
+aifllha
+873ai80
+6ac6714
+50oeolc
+3pe7ek4
+34k199a
+2fdhg10
+21seb1r
+1kir3nm
+1bu63q5
+14la4us
+vee8fa
+r2mg36
+neubn7
+kchv4s
+1230312412
+1230312412
+1230312412
+1230312412
+undefined
diff --git a/test/trace/number-tostring-radix.as b/test/trace/number-tostring-radix.as
new file mode 100644
index 0000000..01e961a
--- /dev/null
+++ b/test/trace/number-tostring-radix.as
@@ -0,0 +1,27 @@
+// makeswf -v 7 -r 1 -o test-7.swf test.as
+
+
+var numbers = [
+  0,
+  -0.38,
+  0.94,
+  123.123
+  -12303,
+  1230312412
+  /* FIXME: Flash player doesn't like these...
+  12391283981421234812
+  NaN,
+  Infinity,
+  Infinity,
+  -Infinity*/
+];
+
+for (var i = 0; i < numbers.length; i++) {
+  for (var radix = 0; radix <= 40; radix++) {
+    trace (numbers[i].toString (radix));
+  }
+}
+
+trace (n.toString (2));
+
+loadMovie ("FSCommand:quit", "");
commit 82e8ba19dd1678eb17d5e343b3e5754bb0110fa7
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Sat Feb 16 22:45:50 2008 +0200

    Adapted radix support for Number.toString from Tamarin

diff --git a/swfdec/swfdec_as_number.c b/swfdec/swfdec_as_number.c
index 71472ee..ceb94e6 100644
--- a/swfdec/swfdec_as_number.c
+++ b/swfdec/swfdec_as_number.c
@@ -67,6 +67,50 @@ swfdec_as_number_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
   }
 }
 
+// code adapted from Tamarin's convertDoubleToStringRadix in MathUtils.cpp
+// 2008-02-16
+static const char *
+swfdec_as_number_toStringRadix (SwfdecAsContext *context, double value,
+    int radix)
+{
+  gboolean negative;
+  GString *str;
+  double left = floor (value);
+
+  g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), SWFDEC_AS_STR_NaN);
+  g_return_val_if_fail (radix >= 2 && radix <= 36, SWFDEC_AS_STR_NaN);
+  g_return_val_if_fail (!isinf (value) && !isnan (value), SWFDEC_AS_STR_NaN);
+
+  if (value < 0) {
+    negative = TRUE;
+    value = -value;
+  } else {
+    negative = FALSE;
+  }
+
+  if (value < 1)
+    return SWFDEC_AS_STR_0;
+
+  str = g_string_new ("");
+
+  left = floor (value);
+
+  while (left != 0)
+  {
+    double val = left;
+    left = floor (left / radix);
+    val -= (left * radix);
+
+    g_string_prepend_c (str,
+	(val < 10 ? ((int)val + '0') : ((int)val + ('a' - 10))));
+  }
+
+  if (negative)
+    g_string_prepend_c (str, '-');
+
+  return swfdec_as_context_give_string (context, g_string_free (str, FALSE));
+}
+
 SWFDEC_AS_NATIVE (106, 1, swfdec_as_number_toString)
 void
 swfdec_as_number_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
@@ -75,16 +119,17 @@ swfdec_as_number_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
   SwfdecAsNumber *num;
   SwfdecAsValue val;
   const char *s;
-  
-  if (!SWFDEC_IS_AS_NUMBER (object))
-    return;
+  int radix;
 
-  num = SWFDEC_AS_NUMBER (object);
-  if (argc > 0) {
-    SWFDEC_FIXME ("radix is not yet implemented");
+  SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_NUMBER, &num, "|i", &radix);
+
+  if (radix == 10 || radix < 2 || radix > 36 || isinf (num->number) ||
+      isnan (num->number)) {
+    SWFDEC_AS_VALUE_SET_NUMBER (&val, num->number);
+    s = swfdec_as_value_to_string (cx, &val);
+  } else {
+    s = swfdec_as_number_toStringRadix (cx, num->number, radix);
   }
-  SWFDEC_AS_VALUE_SET_NUMBER (&val, num->number);
-  s = swfdec_as_value_to_string (object->context, &val);
   SWFDEC_AS_VALUE_SET_STRING (ret, s);
 }
 


More information about the Swfdec-commits mailing list