[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