[Swfdec-commits] 11 commits - swfdec/swfdec_text_field_movie_html.c test/trace vivified/code
Pekka Lampila
medar at kemper.freedesktop.org
Fri May 2 05:32:18 PDT 2008
swfdec/swfdec_text_field_movie_html.c | 3
test/trace/text-field-html-input-5.swf |binary
test/trace/text-field-html-input-5.swf.trace | 12 +
test/trace/text-field-html-input-6.swf |binary
test/trace/text-field-html-input-6.swf.trace | 40 ++++
test/trace/text-field-html-input-7.swf |binary
test/trace/text-field-html-input-7.swf.trace | 40 ++++
test/trace/text-field-html-input-8.swf |binary
test/trace/text-field-html-input-8.swf.trace | 38 ++++
test/trace/text-field-html-input.as | 5
vivified/code/vivi_code_asm_push.c | 23 ++
vivified/code/vivi_code_defaults.h | 1
vivified/code/vivi_code_number.c | 53 +++++-
vivified/code/vivi_code_number.h | 11 +
vivified/code/vivi_decompiler.c | 6
vivified/code/vivi_parser.c | 228 +++++++++++++++++++++++----
16 files changed, 415 insertions(+), 45 deletions(-)
New commits:
commit aac286cf8b3f49376056ece2f35066d68e795f11
Merge: 6bc424a... 041b515...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 2 15:29:50 2008 +0300
Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec
commit 6bc424af8edcf8bee14e80fa911fbaac17aa85f7
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 2 15:06:25 2008 +0300
Expand the text-field-html-input test with a test for <tab>
diff --git a/test/trace/text-field-html-input-5.swf b/test/trace/text-field-html-input-5.swf
index a0d642f..b07006a 100644
Binary files a/test/trace/text-field-html-input-5.swf and b/test/trace/text-field-html-input-5.swf differ
diff --git a/test/trace/text-field-html-input-5.swf.trace b/test/trace/text-field-html-input-5.swf.trace
index 8890a81..53a9c69 100644
--- a/test/trace/text-field-html-input-5.swf.trace
+++ b/test/trace/text-field-html-input-5.swf.trace
@@ -346,3 +346,15 @@ a<p>b<font size='10'>c</p>d
24: a<p>b<font size='10'>c</p>d: multiline: 1 condenseWhite: 2
undefined
a<p>b<font size='10'>c</p>d
+25: a<tab>b <tab> c: multiline: 0 condenseWhite: 0
+undefined
+a<tab>b <tab> c
+25: a<tab>b <tab> c: multiline: 1 condenseWhite: 0
+undefined
+a<tab>b <tab> c
+25: a<tab>b <tab> c: multiline: 0 condenseWhite: 2
+undefined
+a<tab>b <tab> c
+25: a<tab>b <tab> c: multiline: 1 condenseWhite: 2
+undefined
+a<tab>b <tab> c
diff --git a/test/trace/text-field-html-input-6.swf b/test/trace/text-field-html-input-6.swf
index e7f8193..9bc5bf8 100644
Binary files a/test/trace/text-field-html-input-6.swf and b/test/trace/text-field-html-input-6.swf differ
diff --git a/test/trace/text-field-html-input-6.swf.trace b/test/trace/text-field-html-input-6.swf.trace
index d3b3aaf..433b4f9 100644
--- a/test/trace/text-field-html-input-6.swf.trace
+++ b/test/trace/text-field-html-input-6.swf.trace
@@ -864,3 +864,43 @@ abc
d
2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=10 tabStops= target= underline=false url=
3/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
4/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: false condenseWhite: false
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: true condenseWhite: false
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: false condenseWhite: true
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: true condenseWhite: true
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning= leading=0 leftMargin=0 letterSpacing= rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input-7.swf b/test/trace/text-field-html-input-7.swf
index 38a97cd..6c8a5ae 100644
Binary files a/test/trace/text-field-html-input-7.swf and b/test/trace/text-field-html-input-7.swf differ
diff --git a/test/trace/text-field-html-input-7.swf.trace b/test/trace/text-field-html-input-7.swf.trace
index aae712b..f02b3a9 100644
--- a/test/trace/text-field-html-input-7.swf.trace
+++ b/test/trace/text-field-html-input-7.swf.trace
@@ -800,3 +800,43 @@ abc
d
2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=10 tabStops= target= underline=false url=
3/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
4/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: false condenseWhite: false
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: true condenseWhite: false
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: false condenseWhite: true
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: true condenseWhite: true
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=undefined leading=0 leftMargin=0 letterSpacing=undefined rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input-8.swf b/test/trace/text-field-html-input-8.swf
index c7cde07..25aaa5b 100644
Binary files a/test/trace/text-field-html-input-8.swf and b/test/trace/text-field-html-input-8.swf differ
diff --git a/test/trace/text-field-html-input-8.swf.trace b/test/trace/text-field-html-input-8.swf.trace
index 82e685f..904c300 100644
--- a/test/trace/text-field-html-input-8.swf.trace
+++ b/test/trace/text-field-html-input-8.swf.trace
@@ -798,3 +798,41 @@ abc
d
2/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=10 tabStops= target= underline=false url=
3/
: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
4/d: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: false condenseWhite: false
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: true condenseWhite: false
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+5/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+6/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: false condenseWhite: true
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+5/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+25: a<tab>b <tab> c: multiline: true condenseWhite: true
+a b c
+<P ALIGN="LEFT"><FONT FACE="Times New Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">a b c</FONT></P>
+0/a: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+1/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+2/b: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+3/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+4/ : align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
+5/c: align=left blockIndent=0 bold=false bullet=false color=0 display=block font=Times New Roman indent=0 italic=false kerning=false leading=0 leftMargin=0 letterSpacing=0 rightMargin=0 size=12 tabStops= target= underline=false url=
diff --git a/test/trace/text-field-html-input.as b/test/trace/text-field-html-input.as
index 296c246..d9f4f52 100644
--- a/test/trace/text-field-html-input.as
+++ b/test/trace/text-field-html-input.as
@@ -57,7 +57,8 @@ var texts = [
"a<u>b</p>c",
"a<p>b<li>c</p>d",
"a<p>b<textformat indent='10'>c</p>d",
- "a<p>b<font size='10'>c</p>d"
+ "a<p>b<font size='10'>c</p>d",
+ "a<tab>b\t<tab> c"
];
for (var i = 0; i < texts.length; i++) {
@@ -79,4 +80,4 @@ for (var i = 0; i < texts.length; i++) {
}
}
-loadMovie ("FSCommand:quit", "");
+getURL ("FSCommand:quit", "");
commit 06f343aea767df6d2bbc7b2f37eeb007949819b0
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri May 2 15:03:07 2008 +0300
Implement <tab> tag for HTML input in TextFields
diff --git a/swfdec/swfdec_text_field_movie_html.c b/swfdec/swfdec_text_field_movie_html.c
index a1b0738..1315f12 100644
--- a/swfdec/swfdec_text_field_movie_html.c
+++ b/swfdec/swfdec_text_field_movie_html.c
@@ -359,6 +359,9 @@ swfdec_text_field_movie_html_parse_tag (ParserData *data, const char *p)
SwfdecAsObject *object;
SwfdecAsValue val;
+ if (name_length == 3 && !g_strncasecmp (name, "tab", 3))
+ data->text = g_string_append_c (data->text, '\t');
+
if (data->multiline) {
if (name_length == 2 && !g_strncasecmp (name, "br", 2))
{
commit 2b6e8f629e16006c1e718474f2a38cf3aa70e1a6
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 14:36:05 2008 +0300
Make parse_statement_list return the block
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 6c3c017..77daecb 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -122,9 +122,9 @@ typedef ViviCodeValue * (*ParseValueFunction) (ParseData *data);
typedef ViviCodeValue * (*ParseValueStatementFunction) (ParseData *data, ViviCodeStatement **statement);
typedef ViviCodeStatement * (*ParseStatementFunction) (ParseData *data);
-static void
+static ViviCodeStatement *
parse_statement_list (ParseData *data, PeekFunction peek,
- ParseStatementFunction parse, ViviCodeStatement **block, guint separator);
+ ParseStatementFunction parse, guint separator);
static void
parse_value_statement_list (ParseData *data, PeekFunction peek,
@@ -2627,8 +2627,8 @@ parse_iteration_statement (ParseData *data)
if (try_parse_token (data, TOKEN_VAR)) {
// FIXME: no in
- parse_statement_list (data, peek_variable_declaration,
- parse_variable_declaration, &pre_statement, TOKEN_COMMA);
+ pre_statement = parse_statement_list (data, peek_variable_declaration,
+ parse_variable_declaration, TOKEN_COMMA);
// FIXME: ugly
// If there was only one VariableDeclaration, get the name for pre_value
g_assert (VIVI_IS_CODE_BLOCK (pre_statement));
@@ -2865,7 +2865,7 @@ parse_block (ParseData *data)
parse_token (data, TOKEN_BRACE_LEFT);
if (!try_parse_token (data, TOKEN_BRACE_RIGHT)) {
- parse_statement_list (data, peek_statement, parse_statement, &statement,
+ statement = parse_statement_list (data, peek_statement, parse_statement,
TOKEN_NONE);
parse_token (data, TOKEN_BRACE_RIGHT);
} else {
@@ -2887,8 +2887,8 @@ parse_variable_statement (ParseData *data)
ViviCodeStatement *statement;
parse_token (data, TOKEN_VAR);
- parse_statement_list (data, peek_variable_declaration,
- parse_variable_declaration, &statement, TOKEN_COMMA);
+ statement = parse_statement_list (data, peek_variable_declaration,
+ parse_variable_declaration, TOKEN_COMMA);
parse_automatic_semicolon (data);
return statement;
@@ -3001,8 +3001,8 @@ parse_function_definition (ParseData *data, gboolean name_required)
parse_token (data, TOKEN_BRACE_LEFT);
vivi_parser_start_level (data);
- parse_statement_list (data, peek_source_element, parse_source_element,
- &body, TOKEN_NONE);
+ body = parse_statement_list (data, peek_source_element, parse_source_element,
+ TOKEN_NONE);
vivi_parser_end_level (data);
parse_token (data, TOKEN_BRACE_RIGHT);
@@ -3082,8 +3082,8 @@ parse_program (ParseData *data)
g_assert (data->level == NULL);
vivi_parser_start_level (data);
- parse_statement_list (data, peek_source_element, parse_source_element,
- &statement, TOKEN_NONE);
+ statement = parse_statement_list (data, peek_source_element,
+ parse_source_element, TOKEN_NONE);
if (!try_parse_token (data, TOKEN_NONE))
vivi_parser_error_unexpected (data, ERROR_TOKEN_STATEMENT);
@@ -3095,25 +3095,27 @@ parse_program (ParseData *data)
// parsing
-static void
+static ViviCodeStatement *
parse_statement_list (ParseData *data, PeekFunction peek,
- ParseStatementFunction parse, ViviCodeStatement **block, guint separator)
+ ParseStatementFunction parse, guint separator)
{
ViviCodeStatement *statement;
+ ViviCodeStatement *block;
g_assert (data != NULL);
g_assert (peek != NULL);
g_assert (parse != NULL);
- g_assert (block != NULL);
- *block = vivi_code_block_new ();
+ block = vivi_code_block_new ();
do {
statement = parse (data);
- vivi_code_block_add_statement (VIVI_CODE_BLOCK (*block), statement);
+ vivi_code_block_add_statement (VIVI_CODE_BLOCK (block), statement);
g_object_unref (statement);
} while ((separator == TOKEN_NONE || try_parse_token (data, separator)) &&
peek (data));
+
+ return block;
}
static void
commit 138a335f4d9c61412baca459603f0403aedb5db4
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 14:29:32 2008 +0300
Parse unary + and - operators and Number built-in call
diff --git a/vivified/code/vivi_code_defaults.h b/vivified/code/vivi_code_defaults.h
index 6486c3f..28759ac 100644
--- a/vivified/code/vivi_code_defaults.h
+++ b/vivified/code/vivi_code_defaults.h
@@ -87,6 +87,7 @@ DEFAULT_BUILTIN_VALUE_CALL (AsciiToChar, ascii_to_char, "chr")
DEFAULT_BUILTIN_VALUE_CALL (GetVariable, get_variable, "eval")
DEFAULT_BUILTIN_VALUE_CALL (ToInteger, to_integer, "int")
DEFAULT_BUILTIN_VALUE_CALL (StringLength, string_length, "length")
+DEFAULT_BUILTIN_VALUE_CALL (ToNumber, to_number, "Number")
DEFAULT_BUILTIN_VALUE_CALL (CharToAscii, char_to_ascii, "ord")
DEFAULT_BUILTIN_VALUE_CALL (Random, random, "random")
DEFAULT_BUILTIN_VALUE_CALL (TargetPath, target_path, "targetPath")
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 5791175..6c3c017 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -1505,6 +1505,7 @@ static const BuiltinCall builtin_calls[] = {
{ "getTimer", vivi_code_get_timer_new, NULL, NULL },
{ "int", NULL, vivi_code_to_integer_new, NULL },
{ "length", NULL, vivi_code_string_length_new, NULL },
+ { "Number", NULL, vivi_code_to_number_new, NULL },
{ "ord", NULL, vivi_code_char_to_ascii_new, NULL },
{ "random", NULL, vivi_code_random_new, NULL },
{ "substring", NULL, NULL, parse_substring },
@@ -1983,9 +1984,42 @@ parse_unary_expression (ParseData *data, ViviCodeStatement **statement)
vivi_parser_assignment_new (value, tmp));
g_object_unref (tmp);
break;
- /*case TOKEN_PLUS:
+ case TOKEN_PLUS:
+ vivi_parser_scanner_get_next_token (data->scanner);
+
+ value = parse_unary_expression (data, statement);
+
+ if (!VIVI_IS_CODE_NUMBER (value)) {
+ tmp = value;
+ value = vivi_code_to_number_new (tmp);
+ g_object_unref (tmp);
+ }
+ break;
case TOKEN_MINUS:
- case TOKEN_BITWISE_NOT:*/
+ vivi_parser_scanner_get_next_token (data->scanner);
+
+ value = parse_unary_expression (data, statement);
+
+ if (VIVI_IS_CODE_NUMBER (value)) {
+ tmp = value;
+ value = vivi_code_number_new (
+ -vivi_code_number_get_value (VIVI_CODE_NUMBER (tmp)));
+ g_object_unref (tmp);
+ } else {
+ ViviCodeValue *number;
+
+ tmp = value;
+ value = vivi_code_to_number_new (tmp);
+ g_object_unref (tmp);
+
+ number = vivi_code_number_new (-1);
+ tmp = value;
+ value = vivi_code_multiply_new (number, tmp);
+ g_object_unref (tmp);
+ g_object_unref (number);
+ }
+ break;
+ //case TOKEN_BITWISE_NOT:
case TOKEN_LOGICAL_NOT:
vivi_parser_start_code_token (data);
commit a8820bb8ed292ad84b2942a1d2fe1001b45fb8cd
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 13:48:45 2008 +0300
Add hints for ViviCodeNumber to change the way it's compiled to asm
diff --git a/vivified/code/vivi_code_number.c b/vivified/code/vivi_code_number.c
index f909200..b2f4060 100644
--- a/vivified/code/vivi_code_number.c
+++ b/vivified/code/vivi_code_number.c
@@ -43,9 +43,38 @@ vivi_code_number_compile (ViviCodeToken *token, ViviCodeAssembler *assembler)
{
ViviCodeNumber *number = VIVI_CODE_NUMBER (token);
ViviCodeAsm *code;
+ ViviCodeNumberHint hint;
code = vivi_code_asm_push_new ();
- vivi_code_asm_push_add_double (VIVI_CODE_ASM_PUSH (code), number->value);
+
+ if (number->hint == VIVI_CODE_NUMBER_HINT_UNDEFINED) {
+ if (swfdec_as_double_to_integer (number->value) == number->value) {
+ hint = VIVI_CODE_NUMBER_HINT_INT;
+ } else {
+ hint = VIVI_CODE_NUMBER_HINT_DOUBLE;
+ }
+ } else {
+ hint = number->hint;
+ }
+
+ // FIXME: warning/error when conversion isn't accurate?
+ switch (hint) {
+ case VIVI_CODE_NUMBER_HINT_INT:
+ vivi_code_asm_push_add_integer (VIVI_CODE_ASM_PUSH (code),
+ swfdec_as_double_to_integer (number->value));
+ break;
+ case VIVI_CODE_NUMBER_HINT_FLOAT:
+ vivi_code_asm_push_add_float (VIVI_CODE_ASM_PUSH (code),
+ (float)number->value);
+ break;
+ case VIVI_CODE_NUMBER_HINT_DOUBLE:
+ vivi_code_asm_push_add_double (VIVI_CODE_ASM_PUSH (code), number->value);
+ break;
+ case VIVI_CODE_NUMBER_HINT_UNDEFINED:
+ default:
+ g_assert_not_reached ();
+ }
+
vivi_code_assembler_add_code (assembler, code);
g_object_unref (code);
}
@@ -83,3 +112,20 @@ vivi_code_number_get_value (ViviCodeNumber *number)
return number->value;
}
+void
+vivi_code_number_set_hint (ViviCodeNumber *number, ViviCodeNumberHint hint)
+{
+ g_return_if_fail (VIVI_IS_CODE_NUMBER (number));
+ g_return_if_fail (hint <= VIVI_CODE_NUMBER_HINT_INT);
+
+ number->hint = hint;
+}
+
+ViviCodeNumberHint
+vivi_code_number_get_hint(ViviCodeNumber *number)
+{
+ g_return_val_if_fail (VIVI_IS_CODE_NUMBER (number),
+ VIVI_CODE_NUMBER_HINT_UNDEFINED);
+
+ return number->hint;
+}
diff --git a/vivified/code/vivi_code_number.h b/vivified/code/vivi_code_number.h
index 943041e..f9c6d18 100644
--- a/vivified/code/vivi_code_number.h
+++ b/vivified/code/vivi_code_number.h
@@ -24,6 +24,12 @@
G_BEGIN_DECLS
+typedef enum {
+ VIVI_CODE_NUMBER_HINT_UNDEFINED,
+ VIVI_CODE_NUMBER_HINT_DOUBLE,
+ VIVI_CODE_NUMBER_HINT_FLOAT,
+ VIVI_CODE_NUMBER_HINT_INT
+} ViviCodeNumberHint;
typedef struct _ViviCodeNumber ViviCodeNumber;
typedef struct _ViviCodeNumberClass ViviCodeNumberClass;
@@ -40,6 +46,7 @@ struct _ViviCodeNumber
ViviCodeConstant constant;
double value;
+ ViviCodeNumberHint hint;
};
struct _ViviCodeNumberClass
@@ -53,6 +60,10 @@ ViviCodeValue * vivi_code_number_new (double value);
double vivi_code_number_get_value (ViviCodeNumber * number);
+void vivi_code_number_set_hint (ViviCodeNumber * number,
+ ViviCodeNumberHint hint);
+ViviCodeNumberHint vivi_code_number_get_hint (ViviCodeNumber * number);
+
G_END_DECLS
#endif
diff --git a/vivified/code/vivi_decompiler.c b/vivified/code/vivi_decompiler.c
index 98757d3..eb51427 100644
--- a/vivified/code/vivi_decompiler.c
+++ b/vivified/code/vivi_decompiler.c
@@ -154,6 +154,8 @@ vivi_decompile_push (ViviDecompilerBlock *block, ViviDecompilerState *state,
}
case 1: /* float */
val = vivi_code_number_new (swfdec_bits_get_float (&bits));
+ vivi_code_number_set_hint (VIVI_CODE_NUMBER (val),
+ VIVI_CODE_NUMBER_HINT_FLOAT);
break;
case 2: /* null */
val = vivi_code_null_new ();
@@ -170,9 +172,13 @@ vivi_decompile_push (ViviDecompilerBlock *block, ViviDecompilerState *state,
break;
case 6: /* double */
val = vivi_code_number_new (swfdec_bits_get_double (&bits));
+ vivi_code_number_set_hint (VIVI_CODE_NUMBER (val),
+ VIVI_CODE_NUMBER_HINT_DOUBLE);
break;
case 7: /* 32bit int */
val = vivi_code_number_new (swfdec_bits_get_s32 (&bits));
+ vivi_code_number_set_hint (VIVI_CODE_NUMBER (val),
+ VIVI_CODE_NUMBER_HINT_INT);
break;
case 8: /* 8bit ConstantPool address */
case 9: /* 16bit ConstantPool address */
commit b830ecf0ed31ac095029af51759e9b012210a572
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 13:38:01 2008 +0300
Fix printing of numbers in ViviCodeNumber too
diff --git a/vivified/code/vivi_code_number.c b/vivified/code/vivi_code_number.c
index 01dc54a..f909200 100644
--- a/vivified/code/vivi_code_number.c
+++ b/vivified/code/vivi_code_number.c
@@ -32,11 +32,10 @@ static void
vivi_code_number_print (ViviCodeToken *token, ViviCodePrinter *printer)
{
ViviCodeNumber *number = VIVI_CODE_NUMBER (token);
- char *s;
+ char s[G_ASCII_DTOSTR_BUF_SIZE];
- s = g_strdup_printf ("%g", number->value);
+ g_ascii_dtostr (s, G_ASCII_DTOSTR_BUF_SIZE, number->value);
vivi_code_printer_print (printer, s);
- g_free (s);
}
static void
commit 351844c29168d4c4fceb142e99ec421b4ed6b611
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 13:33:20 2008 +0300
Implement the parsing of push asm statement
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 51ef9a9..5791175 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -30,6 +30,7 @@
#include "vivi_code_and.h"
#include "vivi_code_asm_code_default.h"
+#include "vivi_code_asm_push.h"
#include "vivi_code_assignment.h"
#include "vivi_code_binary_default.h"
#include "vivi_code_block.h"
@@ -693,6 +694,19 @@ parse_numeric_value (ParseData *data)
}
}
+static int
+parse_integer_value (ParseData *data)
+{
+ double number = peek_numeric_value (data);
+
+ if (swfdec_as_double_to_integer (number) != number)
+ vivi_parser_error (data, "Expected integer, got double");
+
+ vivi_parser_scanner_get_next_token (data->scanner);
+
+ return swfdec_as_double_to_integer (number);
+}
+
static gboolean
peek_numeric (ParseData *data)
{
@@ -1043,9 +1057,101 @@ parse_variable_declaration (ParseData *data)
// asm functions
static ViviCodeAsm *
-parse_asm_if (ParseData *data)
+parse_asm_push (ParseData *data)
{
- return NULL;
+ ViviCodeAsmPush *push;
+
+ push = VIVI_CODE_ASM_PUSH (vivi_code_asm_push_new ());
+
+ if (try_parse_restricted_semicolon (data)) {
+ // TODO: warning?
+ return VIVI_CODE_ASM (push);
+ }
+
+ do {
+ switch ((guint) vivi_parser_scanner_peek_next_token (data->scanner)) {
+ case TOKEN_STRING:
+ vivi_code_asm_push_add_string (push, parse_string_value (data));
+ break;
+ case TOKEN_NUMBER:
+ {
+ double number = parse_numeric_value (data);
+ if (peek_token (data, TOKEN_IDENTIFIER) &&
+ g_ascii_strcasecmp (peek_identifier_value (data), "i") == 0) {
+ vivi_parser_scanner_get_next_token (data->scanner);
+ // TODO: add warning if losing accuracy
+ vivi_code_asm_push_add_integer (push,
+ swfdec_as_double_to_integer (number));
+ } else if (peek_token (data, TOKEN_IDENTIFIER) &&
+ g_ascii_strcasecmp (peek_identifier_value (data), "f") == 0) {
+ vivi_parser_scanner_get_next_token (data->scanner);
+ // TODO: add warning if losing accuracy
+ vivi_code_asm_push_add_float (push, (float)number);
+ } else if (peek_token (data, TOKEN_IDENTIFIER) &&
+ g_ascii_strcasecmp (peek_identifier_value (data), "d") == 0) {
+ vivi_parser_scanner_get_next_token (data->scanner);
+ vivi_code_asm_push_add_double (push, number);
+ } else {
+ if (swfdec_as_double_to_integer (number) == number) {
+ vivi_code_asm_push_add_integer (push,
+ swfdec_as_double_to_integer (number));
+ } else {
+ vivi_code_asm_push_add_double (push, number);
+ }
+ }
+ }
+ break;
+ case TOKEN_BOOLEAN:
+ vivi_code_asm_push_add_boolean (push, parse_boolean_value (data));
+ break;
+ case TOKEN_NULL:
+ vivi_parser_scanner_get_next_token (data->scanner);
+ vivi_code_asm_push_add_null (push);
+ break;
+ case TOKEN_UNDEFINED:
+ vivi_parser_scanner_get_next_token (data->scanner);
+ vivi_code_asm_push_add_undefined (push);
+ break;
+ case TOKEN_IDENTIFIER:
+ {
+ const char *identifier = parse_identifier_value (data);
+ if (g_ascii_strcasecmp (identifier, "pool") == 0) {
+ int number = parse_integer_value (data);
+ if (number < 0 || number > G_MAXUINT16) {
+ vivi_parser_error (data, "Invalid pool index: %i", number);
+ number = 0;
+ }
+ if (number < 256) {
+ vivi_code_asm_push_add_pool (push, number);
+ } else {
+ vivi_code_asm_push_add_pool_big (push, number);
+ }
+ } else if (g_ascii_strcasecmp (identifier, "reg") == 0) {
+ int number = parse_integer_value (data);
+ if (number < 0 || number >= 256) {
+ vivi_parser_error (data, "Invalid register number: %i", number);
+ number = 0;
+ }
+ vivi_code_asm_push_add_register (push, number);
+ } else {
+ vivi_parser_error (data, "Invalid identifier in push: %s",
+ identifier);
+ vivi_code_asm_push_add_undefined (push);
+ }
+ }
+ break;
+ default:
+ vivi_parser_error (data, "Invalid token in push: %s",
+ vivi_parser_scanner_token_name (
+ vivi_parser_scanner_get_next_token (data->scanner)));
+ vivi_code_asm_push_add_undefined (push);
+ break;
+ }
+ } while (try_parse_token (data, TOKEN_COMMA));
+
+ parse_automatic_semicolon (data);
+
+ return VIVI_CODE_ASM (push);
}
typedef ViviCodeAsm *(*AsmConstructor) (void);
@@ -1062,7 +1168,7 @@ static const AsmStatement asm_statements[] = {
{ G_STRINGIFY (underscore_name), vivi_code_asm_ ## underscore_name ## _new, NULL },
#include "vivi_code_defaults.h"
#undef DEFAULT_ASM
- { "if", NULL, parse_asm_if }
+ { "push", NULL, parse_asm_push }
};
#if 0
DEFAULT_ASM (GotoFrame, goto_frame, SWFDEC_AS_ACTION_GOTO_FRAME)
commit adaadbb335117b3a08d833b3fa30b7b2a2814d51
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 13:32:26 2008 +0300
Fix the printing of doubles and floats for AsmPush
diff --git a/vivified/code/vivi_code_asm_push.c b/vivified/code/vivi_code_asm_push.c
index add3da3..e21f9f1 100644
--- a/vivified/code/vivi_code_asm_push.c
+++ b/vivified/code/vivi_code_asm_push.c
@@ -86,9 +86,14 @@ vivi_code_asm_push_print (ViviCodeToken *token, ViviCodePrinter*printer)
g_free (s2);
break;
case VIVI_CODE_CONSTANT_FLOAT:
- s = g_strdup_printf ("%.ff", swfdec_bits_get_float (&bits));
- vivi_code_printer_print (printer, s);
- g_free (s);
+ {
+ s = g_malloc (G_ASCII_DTOSTR_BUF_SIZE);
+ g_ascii_dtostr (s, G_ASCII_DTOSTR_BUF_SIZE,
+ swfdec_bits_get_float (&bits));
+ vivi_code_printer_print (printer, s);
+ vivi_code_printer_print (printer, "f");
+ g_free (s);
+ }
break;
case VIVI_CODE_CONSTANT_NULL:
vivi_code_printer_print (printer, "null");
@@ -105,9 +110,15 @@ vivi_code_asm_push_print (ViviCodeToken *token, ViviCodePrinter*printer)
vivi_code_printer_print (printer, swfdec_bits_get_u8 (&bits) ? "true" : "false");
break;
case VIVI_CODE_CONSTANT_DOUBLE:
- s = g_strdup_printf ("%.g", swfdec_bits_get_double (&bits));
- vivi_code_printer_print (printer, s);
- g_free (s);
+ {
+ double number = swfdec_bits_get_double (&bits);
+ s = g_malloc (G_ASCII_DTOSTR_BUF_SIZE);
+ g_ascii_dtostr (s, G_ASCII_DTOSTR_BUF_SIZE, number);
+ vivi_code_printer_print (printer, s);
+ if (number == swfdec_as_double_to_integer (number))
+ vivi_code_printer_print (printer, "d");
+ g_free (s);
+ }
break;
case VIVI_CODE_CONSTANT_INTEGER:
s = g_strdup_printf ("%d", swfdec_bits_get_s32 (&bits));
commit 8c32cbf2a95ab42fbc5d9b5a8b101b4f70c74a86
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 09:42:36 2008 +0300
Make peek check two elements for asm and built-in calls/statements
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 5a8f556..51ef9a9 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -1122,10 +1122,17 @@ parse_asm_code (ParseData *data)
static gboolean
peek_asm_statement (ParseData *data)
{
+ const ViviParserValue *value;
+
if (!peek_token (data, TOKEN_IDENTIFIER))
return FALSE;
- return (g_ascii_strcasecmp (peek_identifier_value (data), "asm") == 0);
+ if (g_ascii_strcasecmp (peek_identifier_value (data), "asm") != 0)
+ return FALSE;
+
+ value = vivi_parser_scanner_get_value (data->scanner, 2);
+
+ return (value->token == TOKEN_BRACE_LEFT);
}
static ViviCodeStatement *
@@ -1404,13 +1411,17 @@ peek_builtin_call (ParseData *data)
{
guint i;
const char *identifier;
+ const ViviParserValue *value;
if (!peek_token (data, TOKEN_IDENTIFIER))
return FALSE;
identifier = vivi_parser_scanner_get_value (data->scanner, 1)->value.v_identifier;
- // TODO: Check that ( follows?
+ value = vivi_parser_scanner_get_value (data->scanner, 2);
+
+ if (value->token != TOKEN_PARENTHESIS_LEFT)
+ return FALSE;
for (i = 0; i < G_N_ELEMENTS (builtin_calls); i++) {
if (g_ascii_strcasecmp (identifier, builtin_calls[i].name) == 0)
@@ -1465,13 +1476,17 @@ peek_builtin_statement (ParseData *data)
{
guint i;
const char *identifier;
+ const ViviParserValue *value;
if (!peek_token (data, TOKEN_IDENTIFIER))
return FALSE;
identifier = peek_identifier_value (data);
- // TODO: Check that ( follows?
+ value = vivi_parser_scanner_get_value (data->scanner, 2);
+
+ if (value->token != TOKEN_PARENTHESIS_LEFT)
+ return FALSE;
for (i = 0; i < G_N_ELEMENTS (builtin_statements); i++) {
if (g_ascii_strcasecmp (identifier, builtin_statements[i].name) == 0)
commit 45405ffd9c9fc81036927276bc93434824113b75
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Wed Apr 30 09:35:28 2008 +0300
Small fixes/cleanups to the scanner
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 4ca6ccb..5a8f556 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -620,7 +620,8 @@ parse_null (ParseData *data)
G_GNUC_UNUSED static gboolean
peek_boolean_value (ParseData *data)
{
- const ViviParserValue *value = vivi_parser_scanner_get_value (data->scanner, 1);
+ const ViviParserValue *value =
+ vivi_parser_scanner_get_value (data->scanner, 1);
if (value->token == TOKEN_BOOLEAN) {
return value->value.v_boolean;
@@ -633,7 +634,7 @@ static gboolean
parse_boolean_value (ParseData *data)
{
const ViviParserValue *value;
-
+
parse_token (data, TOKEN_BOOLEAN);
value = vivi_parser_scanner_get_value (data->scanner, 0);
@@ -667,7 +668,8 @@ parse_boolean (ParseData *data)
G_GNUC_UNUSED static double
peek_numeric_value (ParseData *data)
{
- const ViviParserValue *value = vivi_parser_scanner_get_value (data->scanner, 1);
+ const ViviParserValue *value =
+ vivi_parser_scanner_get_value (data->scanner, 1);
if (value->token == TOKEN_NUMBER) {
return value->value.v_number;
@@ -714,7 +716,9 @@ parse_numeric (ParseData *data)
G_GNUC_UNUSED static const char *
peek_string_value (ParseData *data)
{
- const ViviParserValue *value = vivi_parser_scanner_get_value (data->scanner, 1);
+ const ViviParserValue *value =
+ vivi_parser_scanner_get_value (data->scanner, 1);
+
if (value->token == TOKEN_STRING) {
return value->value.v_string->str;
} else {
@@ -805,7 +809,8 @@ parse_literal (ParseData *data)
static const char *
peek_identifier_value (ParseData *data)
{
- const ViviParserValue *value = vivi_parser_scanner_get_value (data->scanner, 1);
+ const ViviParserValue *value =
+ vivi_parser_scanner_get_value (data->scanner, 1);
if (value->token == TOKEN_IDENTIFIER) {
return value->value.v_identifier;
@@ -818,6 +823,7 @@ static const char *
parse_identifier_value (ParseData *data)
{
const ViviParserValue *value;
+
parse_token (data, TOKEN_IDENTIFIER);
value = vivi_parser_scanner_get_value (data->scanner, 0);
@@ -1043,7 +1049,7 @@ parse_asm_if (ParseData *data)
}
typedef ViviCodeAsm *(*AsmConstructor) (void);
-typedef ViviCodeAsm * (*ParseAsmFunction) (ParseData *data);
+typedef ViviCodeAsm *(*ParseAsmFunction) (ParseData *data);
typedef struct {
const char * name;
@@ -1099,8 +1105,6 @@ parse_asm_code (ParseData *data)
}
if (i >= G_N_ELEMENTS (asm_statements)) {
vivi_parser_error (data, "Unknown asm statement: %s", identifier);
- // FIXME
- vivi_parser_scanner_get_next_token (data->scanner);
i = 0;
}
g_free (identifier);
@@ -2925,7 +2929,8 @@ parse_program (ParseData *data)
parse_statement_list (data, peek_source_element, parse_source_element,
&statement, TOKEN_NONE);
- parse_token (data, TOKEN_NONE);
+ if (!try_parse_token (data, TOKEN_NONE))
+ vivi_parser_error_unexpected (data, ERROR_TOKEN_STATEMENT);
vivi_parser_end_level (data);
g_assert (data->level == NULL);
More information about the Swfdec-commits
mailing list