Benjamin Otte
2007-Dec-23 13:00 UTC
[Swfdec] 6 commits - libswfdec/Makefile.am libswfdec/swfdec_character.c libswfdec/swfdec_external_interface.c libswfdec/swfdec.h libswfdec/swfdec_movie_as_drawing.c libswfdec/swfdec_player.c libswfdec/swfdec_player.h libswfdec/swfdec_player_internal.h libswfdec/swfdec_player_scripting.c libswfdec/swfdec_player_scripting.h libswfdec/swfdec_text_field_movie_html.c libswfdec/swfdec_xml.c libswfdec/swfdec_xml.h test/trace
libswfdec/Makefile.am | 2
libswfdec/swfdec.h | 1
libswfdec/swfdec_character.c | 1
libswfdec/swfdec_external_interface.c | 94 +
libswfdec/swfdec_movie_as_drawing.c | 12
libswfdec/swfdec_player.c | 53
libswfdec/swfdec_player.h | 7
libswfdec/swfdec_player_internal.h | 2
libswfdec/swfdec_player_scripting.c | 39
libswfdec/swfdec_player_scripting.h | 62
libswfdec/swfdec_text_field_movie_html.c | 2
libswfdec/swfdec_xml.c | 14
libswfdec/swfdec_xml.h | 3
test/trace/Makefile.am | 9
test/trace/externalinterface-escape-5.swf |binary
test/trace/externalinterface-escape-5.swf.trace | 1556 +++++++++++++++++++++++
test/trace/externalinterface-escape-6.swf |binary
test/trace/externalinterface-escape-6.swf.trace | 1555 +++++++++++++++++++++++
test/trace/externalinterface-escape-7.swf |binary
test/trace/externalinterface-escape-7.swf.trace | 1555 +++++++++++++++++++++++
test/trace/externalinterface-escape-8.swf |binary
test/trace/externalinterface-escape-8.swf.trace | 1558 ++++++++++++++++++++++++
test/trace/externalinterface-escape.as | 25
23 files changed, 6524 insertions(+), 26 deletions(-)
New commits:
commit 62a480eaa77fc633224786d302c096fe83ad5645
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Dec 21 17:30:30 2007 +0100
only convert to int after having converted to twips
diff --git a/libswfdec/swfdec_movie_as_drawing.c
b/libswfdec/swfdec_movie_as_drawing.c
index 599a553..bcedce6 100644
--- a/libswfdec/swfdec_movie_as_drawing.c
+++ b/libswfdec/swfdec_movie_as_drawing.c
@@ -266,9 +266,9 @@ swfdec_sprite_movie_moveTo (SwfdecAsContext *cx,
SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecMovie *movie;
- int x, y;
+ double x, y;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "|ii", &x,
&y);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "|nn", &x,
&y);
x = SWFDEC_DOUBLE_TO_TWIPS (x);
y = SWFDEC_DOUBLE_TO_TWIPS (y);
@@ -302,9 +302,9 @@ swfdec_sprite_movie_lineTo (SwfdecAsContext *cx,
SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecMovie *movie;
- int x, y;
+ double x, y;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "ii", &x,
&y);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "nn", &x,
&y);
x = SWFDEC_DOUBLE_TO_TWIPS (x);
y = SWFDEC_DOUBLE_TO_TWIPS (y);
@@ -326,9 +326,9 @@ swfdec_sprite_movie_curveTo (SwfdecAsContext *cx,
SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecMovie *movie;
- int x, y, c_x, c_y;
+ double x, y, c_x, c_y;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "iiii", &c_x,
&c_y, &x, &y);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE, &movie, "nnnn", &c_x,
&c_y, &x, &y);
x = SWFDEC_DOUBLE_TO_TWIPS (x);
y = SWFDEC_DOUBLE_TO_TWIPS (y);
commit fed39cbdc5e94ce0758571cdc77e97e0615977a3
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Dec 21 14:18:17 2007 +0100
make the names of the vfuncs more clear
There's two methods to call external functions: XML and JavaScript. Only
one
needs to be implemented.
diff --git a/libswfdec/swfdec_external_interface.c
b/libswfdec/swfdec_external_interface.c
index f0d3421..5c79bcb 100644
--- a/libswfdec/swfdec_external_interface.c
+++ b/libswfdec/swfdec_external_interface.c
@@ -53,8 +53,8 @@ swfdec_external_interface__objectID (SwfdecAsContext *cx,
return;
}
klass = SWFDEC_PLAYER_SCRIPTING_GET_CLASS (scripting);
- if (klass->get_id) {
- char *s = klass->get_id (scripting, player);
+ if (klass->js_get_id) {
+ char *s = klass->js_get_id (scripting, player);
SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_give_string (cx, s));
} else {
SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_EMPTY);
diff --git a/libswfdec/swfdec_player_scripting.h
b/libswfdec/swfdec_player_scripting.h
index 4b6d9fc..8ad3c8f 100644
--- a/libswfdec/swfdec_player_scripting.h
+++ b/libswfdec/swfdec_player_scripting.h
@@ -45,12 +45,12 @@ struct _SwfdecPlayerScriptingClass
{
GObjectClass object_class;
- char * (* get_id) (SwfdecPlayerScripting *scripting,
+ char * (* js_get_id) (SwfdecPlayerScripting *scripting,
SwfdecPlayer * player);
- char * (* call_js) (SwfdecPlayerScripting *scripting,
+ char * (* js_call) (SwfdecPlayerScripting *scripting,
SwfdecPlayer * player,
const char * code);
- char * (* call_xml) (SwfdecPlayerScripting *scripting,
+ char * (* xml_call) (SwfdecPlayerScripting *scripting,
SwfdecPlayer * player,
const char * xml);
};
commit 7b8368b4166bcbec9fc4211c32daabdac5cdad30
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Dec 21 14:14:55 2007 +0100
add a test for the ExternalInterface escaping functions
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 83df525..75fa33c 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -933,6 +933,15 @@ EXTRA_DIST = \
extends-simple.swf.trace \
extends-super.swf \
extends-super.swf.trace \
+ externalinterface-escape.as \
+ externalinterface-escape-5.swf \
+ externalinterface-escape-5.swf.trace \
+ externalinterface-escape-6.swf \
+ externalinterface-escape-6.swf.trace \
+ externalinterface-escape-7.swf \
+ externalinterface-escape-7.swf.trace \
+ externalinterface-escape-8.swf \
+ externalinterface-escape-8.swf.trace \
file-reference-constructor.as \
file-reference-constructor-7.swf \
file-reference-constructor-7.swf.trace \
diff --git a/test/trace/externalinterface-escape-5.swf
b/test/trace/externalinterface-escape-5.swf
new file mode 100644
index 0000000..6a7af61
Binary files /dev/null and b/test/trace/externalinterface-escape-5.swf differ
diff --git a/test/trace/externalinterface-escape-5.swf.trace
b/test/trace/externalinterface-escape-5.swf.trace
new file mode 100644
index 0000000..1b5eff9
--- /dev/null
+++ b/test/trace/externalinterface-escape-5.swf.trace
@@ -0,0 +1,1556 @@
+>>> 0:
+undefined
+undefined
+undefined
+undefined
+>>> 1:
+undefined
+undefined
+undefined
+undefined
+>>> 2:
+undefined
+undefined
+undefined
+undefined
+>>> 3:
+undefined
+undefined
+undefined
+undefined
+>>> 4:
+undefined
+undefined
+undefined
+undefined
+>>> 5:
+undefined
+undefined
+undefined
+undefined
+>>> 6:
+undefined
+undefined
+undefined
+undefined
+>>> 7:
+undefined
+undefined
+undefined
+undefined
+>>> 8:
+undefined
+undefined
+undefined
+undefined
+>>> 9:
+undefined
+undefined
+undefined
+undefined
+>>> 10:
+
+undefined
+undefined
+undefined
+undefined
+>>> 11:
+undefined
+undefined
+undefined
+undefined
+>>> 12:
+undefined
+undefined
+undefined
+undefined
+>>> 13:
+undefined
+undefined
+undefined
+undefined
+>>> 14:
+undefined
+undefined
+undefined
+undefined
+>>> 15:
+undefined
+undefined
+undefined
+undefined
+>>> 16:
+undefined
+undefined
+undefined
+undefined
+>>> 17:
+undefined
+undefined
+undefined
+undefined
+>>> 18:
+undefined
+undefined
+undefined
+undefined
+>>> 19:
+undefined
+undefined
+undefined
+undefined
+>>> 20:
+undefined
+undefined
+undefined
+undefined
+>>> 21:
+undefined
+undefined
+undefined
+undefined
+>>> 22:
+undefined
+undefined
+undefined
+undefined
+>>> 23:
+undefined
+undefined
+undefined
+undefined
+>>> 24:
+undefined
+undefined
+undefined
+undefined
+>>> 25:
+undefined
+undefined
+undefined
+undefined
+>>> 26:
+undefined
+undefined
+undefined
+undefined
+>>> 27:
+undefined
+undefined
+undefined
+undefined
+>>> 28:
+undefined
+undefined
+undefined
+undefined
+>>> 29:
+undefined
+undefined
+undefined
+undefined
+>>> 30:
+undefined
+undefined
+undefined
+undefined
+>>> 31:
+undefined
+undefined
+undefined
+undefined
+>>> 32:
+undefined
+undefined
+undefined
+undefined
+>>> 33: !
+undefined
+undefined
+undefined
+undefined
+>>> 34: "
+undefined
+undefined
+undefined
+undefined
+>>> 35: #
+undefined
+undefined
+undefined
+undefined
+>>> 36: $
+undefined
+undefined
+undefined
+undefined
+>>> 37: %
+undefined
+undefined
+undefined
+undefined
+>>> 38: &
+undefined
+undefined
+undefined
+undefined
+>>> 39: '
+undefined
+undefined
+undefined
+undefined
+>>> 40: (
+undefined
+undefined
+undefined
+undefined
+>>> 41: )
+undefined
+undefined
+undefined
+undefined
+>>> 42: *
+undefined
+undefined
+undefined
+undefined
+>>> 43: +
+undefined
+undefined
+undefined
+undefined
+>>> 44: ,
+undefined
+undefined
+undefined
+undefined
+>>> 45: -
+undefined
+undefined
+undefined
+undefined
+>>> 46: .
+undefined
+undefined
+undefined
+undefined
+>>> 47: /
+undefined
+undefined
+undefined
+undefined
+>>> 48: 0
+undefined
+undefined
+undefined
+undefined
+>>> 49: 1
+undefined
+undefined
+undefined
+undefined
+>>> 50: 2
+undefined
+undefined
+undefined
+undefined
+>>> 51: 3
+undefined
+undefined
+undefined
+undefined
+>>> 52: 4
+undefined
+undefined
+undefined
+undefined
+>>> 53: 5
+undefined
+undefined
+undefined
+undefined
+>>> 54: 6
+undefined
+undefined
+undefined
+undefined
+>>> 55: 7
+undefined
+undefined
+undefined
+undefined
+>>> 56: 8
+undefined
+undefined
+undefined
+undefined
+>>> 57: 9
+undefined
+undefined
+undefined
+undefined
+>>> 58: :
+undefined
+undefined
+undefined
+undefined
+>>> 59: ;
+undefined
+undefined
+undefined
+undefined
+>>> 60: <
+undefined
+undefined
+undefined
+undefined
+>>> 61: +undefined
+undefined
+undefined
+undefined
+>>> 62: >
+undefined
+undefined
+undefined
+undefined
+>>> 63: ?
+undefined
+undefined
+undefined
+undefined
+>>> 64: @
+undefined
+undefined
+undefined
+undefined
+>>> 65: A
+undefined
+undefined
+undefined
+undefined
+>>> 66: B
+undefined
+undefined
+undefined
+undefined
+>>> 67: C
+undefined
+undefined
+undefined
+undefined
+>>> 68: D
+undefined
+undefined
+undefined
+undefined
+>>> 69: E
+undefined
+undefined
+undefined
+undefined
+>>> 70: F
+undefined
+undefined
+undefined
+undefined
+>>> 71: G
+undefined
+undefined
+undefined
+undefined
+>>> 72: H
+undefined
+undefined
+undefined
+undefined
+>>> 73: I
+undefined
+undefined
+undefined
+undefined
+>>> 74: J
+undefined
+undefined
+undefined
+undefined
+>>> 75: K
+undefined
+undefined
+undefined
+undefined
+>>> 76: L
+undefined
+undefined
+undefined
+undefined
+>>> 77: M
+undefined
+undefined
+undefined
+undefined
+>>> 78: N
+undefined
+undefined
+undefined
+undefined
+>>> 79: O
+undefined
+undefined
+undefined
+undefined
+>>> 80: P
+undefined
+undefined
+undefined
+undefined
+>>> 81: Q
+undefined
+undefined
+undefined
+undefined
+>>> 82: R
+undefined
+undefined
+undefined
+undefined
+>>> 83: S
+undefined
+undefined
+undefined
+undefined
+>>> 84: T
+undefined
+undefined
+undefined
+undefined
+>>> 85: U
+undefined
+undefined
+undefined
+undefined
+>>> 86: V
+undefined
+undefined
+undefined
+undefined
+>>> 87: W
+undefined
+undefined
+undefined
+undefined
+>>> 88: X
+undefined
+undefined
+undefined
+undefined
+>>> 89: Y
+undefined
+undefined
+undefined
+undefined
+>>> 90: Z
+undefined
+undefined
+undefined
+undefined
+>>> 91: [
+undefined
+undefined
+undefined
+undefined
+>>> 92: \
+undefined
+undefined
+undefined
+undefined
+>>> 93: ]
+undefined
+undefined
+undefined
+undefined
+>>> 94: ^
+undefined
+undefined
+undefined
+undefined
+>>> 95: _
+undefined
+undefined
+undefined
+undefined
+>>> 96: `
+undefined
+undefined
+undefined
+undefined
+>>> 97: a
+undefined
+undefined
+undefined
+undefined
+>>> 98: b
+undefined
+undefined
+undefined
+undefined
+>>> 99: c
+undefined
+undefined
+undefined
+undefined
+>>> 100: d
+undefined
+undefined
+undefined
+undefined
+>>> 101: e
+undefined
+undefined
+undefined
+undefined
+>>> 102: f
+undefined
+undefined
+undefined
+undefined
+>>> 103: g
+undefined
+undefined
+undefined
+undefined
+>>> 104: h
+undefined
+undefined
+undefined
+undefined
+>>> 105: i
+undefined
+undefined
+undefined
+undefined
+>>> 106: j
+undefined
+undefined
+undefined
+undefined
+>>> 107: k
+undefined
+undefined
+undefined
+undefined
+>>> 108: l
+undefined
+undefined
+undefined
+undefined
+>>> 109: m
+undefined
+undefined
+undefined
+undefined
+>>> 110: n
+undefined
+undefined
+undefined
+undefined
+>>> 111: o
+undefined
+undefined
+undefined
+undefined
+>>> 112: p
+undefined
+undefined
+undefined
+undefined
+>>> 113: q
+undefined
+undefined
+undefined
+undefined
+>>> 114: r
+undefined
+undefined
+undefined
+undefined
+>>> 115: s
+undefined
+undefined
+undefined
+undefined
+>>> 116: t
+undefined
+undefined
+undefined
+undefined
+>>> 117: u
+undefined
+undefined
+undefined
+undefined
+>>> 118: v
+undefined
+undefined
+undefined
+undefined
+>>> 119: w
+undefined
+undefined
+undefined
+undefined
+>>> 120: x
+undefined
+undefined
+undefined
+undefined
+>>> 121: y
+undefined
+undefined
+undefined
+undefined
+>>> 122: z
+undefined
+undefined
+undefined
+undefined
+>>> 123: {
+undefined
+undefined
+undefined
+undefined
+>>> 124: |
+undefined
+undefined
+undefined
+undefined
+>>> 125: }
+undefined
+undefined
+undefined
+undefined
+>>> 126: ~
+undefined
+undefined
+undefined
+undefined
+>>> 127:
+undefined
+undefined
+undefined
+undefined
+>>> 128: ??
+undefined
+undefined
+undefined
+undefined
+>>> 129: ??
+undefined
+undefined
+undefined
+undefined
+>>> 130: ??
+undefined
+undefined
+undefined
+undefined
+>>> 131: ??
+undefined
+undefined
+undefined
+undefined
+>>> 132: ??
+undefined
+undefined
+undefined
+undefined
+>>> 133: ??
+undefined
+undefined
+undefined
+undefined
+>>> 134: ??
+undefined
+undefined
+undefined
+undefined
+>>> 135: ??
+undefined
+undefined
+undefined
+undefined
+>>> 136: ??
+undefined
+undefined
+undefined
+undefined
+>>> 137: ??
+undefined
+undefined
+undefined
+undefined
+>>> 138: ??
+undefined
+undefined
+undefined
+undefined
+>>> 139: ??
+undefined
+undefined
+undefined
+undefined
+>>> 140: ??
+undefined
+undefined
+undefined
+undefined
+>>> 141: ??
+undefined
+undefined
+undefined
+undefined
+>>> 142: ??
+undefined
+undefined
+undefined
+undefined
+>>> 143: ??
+undefined
+undefined
+undefined
+undefined
+>>> 144: ??
+undefined
+undefined
+undefined
+undefined
+>>> 145: ??
+undefined
+undefined
+undefined
+undefined
+>>> 146: ??
+undefined
+undefined
+undefined
+undefined
+>>> 147: ??
+undefined
+undefined
+undefined
+undefined
+>>> 148: ??
+undefined
+undefined
+undefined
+undefined
+>>> 149: ??
+undefined
+undefined
+undefined
+undefined
+>>> 150: ??
+undefined
+undefined
+undefined
+undefined
+>>> 151: ??
+undefined
+undefined
+undefined
+undefined
+>>> 152: ??
+undefined
+undefined
+undefined
+undefined
+>>> 153: ??
+undefined
+undefined
+undefined
+undefined
+>>> 154: ??
+undefined
+undefined
+undefined
+undefined
+>>> 155: ??
+undefined
+undefined
+undefined
+undefined
+>>> 156: ??
+undefined
+undefined
+undefined
+undefined
+>>> 157: ??
+undefined
+undefined
+undefined
+undefined
+>>> 158: ??
+undefined
+undefined
+undefined
+undefined
+>>> 159: ??
+undefined
+undefined
+undefined
+undefined
+>>> 160: ??
+undefined
+undefined
+undefined
+undefined
+>>> 161: ??
+undefined
+undefined
+undefined
+undefined
+>>> 162: ??
+undefined
+undefined
+undefined
+undefined
+>>> 163: ??
+undefined
+undefined
+undefined
+undefined
+>>> 164: ??
+undefined
+undefined
+undefined
+undefined
+>>> 165: ??
+undefined
+undefined
+undefined
+undefined
+>>> 166: ??
+undefined
+undefined
+undefined
+undefined
+>>> 167: ??
+undefined
+undefined
+undefined
+undefined
+>>> 168: ??
+undefined
+undefined
+undefined
+undefined
+>>> 169: ??
+undefined
+undefined
+undefined
+undefined
+>>> 170: ??
+undefined
+undefined
+undefined
+undefined
+>>> 171: ??
+undefined
+undefined
+undefined
+undefined
+>>> 172: ??
+undefined
+undefined
+undefined
+undefined
+>>> 173: ??
+undefined
+undefined
+undefined
+undefined
+>>> 174: ??
+undefined
+undefined
+undefined
+undefined
+>>> 175: ??
+undefined
+undefined
+undefined
+undefined
+>>> 176: ??
+undefined
+undefined
+undefined
+undefined
+>>> 177: ??
+undefined
+undefined
+undefined
+undefined
+>>> 178: ??
+undefined
+undefined
+undefined
+undefined
+>>> 179: ??
+undefined
+undefined
+undefined
+undefined
+>>> 180: ??
+undefined
+undefined
+undefined
+undefined
+>>> 181: ??
+undefined
+undefined
+undefined
+undefined
+>>> 182: ??
+undefined
+undefined
+undefined
+undefined
+>>> 183: ??
+undefined
+undefined
+undefined
+undefined
+>>> 184: ??
+undefined
+undefined
+undefined
+undefined
+>>> 185: ??
+undefined
+undefined
+undefined
+undefined
+>>> 186: ??
+undefined
+undefined
+undefined
+undefined
+>>> 187: ??
+undefined
+undefined
+undefined
+undefined
+>>> 188: ??
+undefined
+undefined
+undefined
+undefined
+>>> 189: ??
+undefined
+undefined
+undefined
+undefined
+>>> 190: ??
+undefined
+undefined
+undefined
+undefined
+>>> 191: ??
+undefined
+undefined
+undefined
+undefined
+>>> 192: ??
+undefined
+undefined
+undefined
+undefined
+>>> 193: ??
+undefined
+undefined
+undefined
+undefined
+>>> 194: ??
+undefined
+undefined
+undefined
+undefined
+>>> 195: ??
+undefined
+undefined
+undefined
+undefined
+>>> 196: ??
+undefined
+undefined
+undefined
+undefined
+>>> 197: ??
+undefined
+undefined
+undefined
+undefined
+>>> 198: ??
+undefined
+undefined
+undefined
+undefined
+>>> 199: ??
+undefined
+undefined
+undefined
+undefined
+>>> 200: ??
+undefined
+undefined
+undefined
+undefined
+>>> 201: ??
+undefined
+undefined
+undefined
+undefined
+>>> 202: ??
+undefined
+undefined
+undefined
+undefined
+>>> 203: ??
+undefined
+undefined
+undefined
+undefined
+>>> 204: ??
+undefined
+undefined
+undefined
+undefined
+>>> 205: ??
+undefined
+undefined
+undefined
+undefined
+>>> 206: ??
+undefined
+undefined
+undefined
+undefined
+>>> 207: ??
+undefined
+undefined
+undefined
+undefined
+>>> 208: ??
+undefined
+undefined
+undefined
+undefined
+>>> 209: ??
+undefined
+undefined
+undefined
+undefined
+>>> 210: ??
+undefined
+undefined
+undefined
+undefined
+>>> 211: ??
+undefined
+undefined
+undefined
+undefined
+>>> 212: ??
+undefined
+undefined
+undefined
+undefined
+>>> 213: ??
+undefined
+undefined
+undefined
+undefined
+>>> 214: ??
+undefined
+undefined
+undefined
+undefined
+>>> 215: ??
+undefined
+undefined
+undefined
+undefined
+>>> 216: ??
+undefined
+undefined
+undefined
+undefined
+>>> 217: ??
+undefined
+undefined
+undefined
+undefined
+>>> 218: ??
+undefined
+undefined
+undefined
+undefined
+>>> 219: ??
+undefined
+undefined
+undefined
+undefined
+>>> 220: ??
+undefined
+undefined
+undefined
+undefined
+>>> 221: ??
+undefined
+undefined
+undefined
+undefined
+>>> 222: ??
+undefined
+undefined
+undefined
+undefined
+>>> 223: ??
+undefined
+undefined
+undefined
+undefined
+>>> 224: ??
+undefined
+undefined
+undefined
+undefined
+>>> 225: ??
+undefined
+undefined
+undefined
+undefined
+>>> 226: ??
+undefined
+undefined
+undefined
+undefined
+>>> 227: ??
+undefined
+undefined
+undefined
+undefined
+>>> 228: ??
+undefined
+undefined
+undefined
+undefined
+>>> 229: ??
+undefined
+undefined
+undefined
+undefined
+>>> 230: ??
+undefined
+undefined
+undefined
+undefined
+>>> 231: ??
+undefined
+undefined
+undefined
+undefined
+>>> 232: ??
+undefined
+undefined
+undefined
+undefined
+>>> 233: ??
+undefined
+undefined
+undefined
+undefined
+>>> 234: ??
+undefined
+undefined
+undefined
+undefined
+>>> 235: ??
+undefined
+undefined
+undefined
+undefined
+>>> 236: ??
+undefined
+undefined
+undefined
+undefined
+>>> 237: ??
+undefined
+undefined
+undefined
+undefined
+>>> 238: ??
+undefined
+undefined
+undefined
+undefined
+>>> 239: ??
+undefined
+undefined
+undefined
+undefined
+>>> 240: ??
+undefined
+undefined
+undefined
+undefined
+>>> 241: ??
+undefined
+undefined
+undefined
+undefined
+>>> 242: ??
+undefined
+undefined
+undefined
+undefined
+>>> 243: ??
+undefined
+undefined
+undefined
+undefined
+>>> 244: ??
+undefined
+undefined
+undefined
+undefined
+>>> 245: ??
+undefined
+undefined
+undefined
+undefined
+>>> 246: ??
+undefined
+undefined
+undefined
+undefined
+>>> 247: ??
+undefined
+undefined
+undefined
+undefined
+>>> 248: ??
+undefined
+undefined
+undefined
+undefined
+>>> 249: ??
+undefined
+undefined
+undefined
+undefined
+>>> 250: ??
+undefined
+undefined
+undefined
+undefined
+>>> 251: ??
+undefined
+undefined
+undefined
+undefined
+>>> 252: ??
+undefined
+undefined
+undefined
+undefined
+>>> 253: ??
+undefined
+undefined
+undefined
+undefined
+>>> 254: ??
+undefined
+undefined
+undefined
+undefined
+>>> 255: ??
+undefined
+undefined
+undefined
+undefined
+>>> 256:
+undefined
+undefined
+undefined
+undefined
+>>> 257:
+undefined
+undefined
+undefined
+undefined
+>>> 258:
+undefined
+undefined
+undefined
+undefined
+>>> 259:
+undefined
+undefined
+undefined
+undefined
+>>> 260:
+undefined
+undefined
+undefined
+undefined
+>>> 261:
+undefined
+undefined
+undefined
+undefined
+>>> 262:
+undefined
+undefined
+undefined
+undefined
+>>> 263:
+undefined
+undefined
+undefined
+undefined
+>>> 264:
+undefined
+undefined
+undefined
+undefined
+>>> 265:
+undefined
+undefined
+undefined
+undefined
+>>> 266:
+
+undefined
+undefined
+undefined
+undefined
+>>> 267:
+undefined
+undefined
+undefined
+undefined
+>>> 268:
+undefined
+undefined
+undefined
+undefined
+>>> 269:
+undefined
+undefined
+undefined
+undefined
+>>> 270:
+undefined
+undefined
+undefined
+undefined
+>>> 271:
+undefined
+undefined
+undefined
+undefined
+>>> 272:
+undefined
+undefined
+undefined
+undefined
+>>> 273:
+undefined
+undefined
+undefined
+undefined
+>>> 274:
+undefined
+undefined
+undefined
+undefined
+>>> 275:
+undefined
+undefined
+undefined
+undefined
+>>> 276:
+undefined
+undefined
+undefined
+undefined
+>>> 277:
+undefined
+undefined
+undefined
+undefined
+>>> 278:
+undefined
+undefined
+undefined
+undefined
+>>> 279:
+undefined
+undefined
+undefined
+undefined
+>>> 280:
+undefined
+undefined
+undefined
+undefined
+>>> 281:
+undefined
+undefined
+undefined
+undefined
+>>> 282:
+undefined
+undefined
+undefined
+undefined
+>>> 283:
+undefined
+undefined
+undefined
+undefined
+>>> 284:
+undefined
+undefined
+undefined
+undefined
+>>> 285:
+undefined
+undefined
+undefined
+undefined
+>>> 286:
+undefined
+undefined
+undefined
+undefined
+>>> 287:
+undefined
+undefined
+undefined
+undefined
+>>> 288:
+undefined
+undefined
+undefined
+undefined
+>>> 289: !
+undefined
+undefined
+undefined
+undefined
+>>> 290: "
+undefined
+undefined
+undefined
+undefined
+>>> 291: #
+undefined
+undefined
+undefined
+undefined
+>>> 292: $
+undefined
+undefined
+undefined
+undefined
+>>> 293: %
+undefined
+undefined
+undefined
+undefined
+>>> 294: &
+undefined
+undefined
+undefined
+undefined
+>>> 295: '
+undefined
+undefined
+undefined
+undefined
+>>> 296: (
+undefined
+undefined
+undefined
+undefined
+>>> 297: )
+undefined
+undefined
+undefined
+undefined
+>>> 298: *
+undefined
+undefined
+undefined
+undefined
+>>> 299: +
+undefined
+undefined
+undefined
+undefined
+>>> 300:
+undefined
+undefined
+undefined
+undefined
+>>> 301: ""
+undefined
+undefined
+undefined
+undefined
+>>> 302: "
+undefined
+undefined
+undefined
+undefined
+>>> 303: '
+undefined
+undefined
+undefined
+undefined
+>>> 304:
+undefined
+undefined
+undefined
+undefined
+>>> 305: &
+undefined
+undefined
+undefined
+undefined
+>>> 306: &hi;
+undefined
+undefined
+undefined
+undefined
+>>> 307: &
+undefined
+undefined
+undefined
+undefined
+>>> 308: _root
+undefined
+undefined
+undefined
+undefined
+>>> 309: _level0
+undefined
+undefined
+undefined
+undefined
+>>> no args
+undefined
+undefined
+undefined
diff --git a/test/trace/externalinterface-escape-6.swf
b/test/trace/externalinterface-escape-6.swf
new file mode 100644
index 0000000..9acad30
Binary files /dev/null and b/test/trace/externalinterface-escape-6.swf differ
diff --git a/test/trace/externalinterface-escape-6.swf.trace
b/test/trace/externalinterface-escape-6.swf.trace
new file mode 100644
index 0000000..70647c3
--- /dev/null
+++ b/test/trace/externalinterface-escape-6.swf.trace
@@ -0,0 +1,1555 @@
+>>> 0:
+undefined
+undefined
+undefined
+undefined
+>>> 1:
+undefined
+undefined
+undefined
+undefined
+>>> 2:
+undefined
+undefined
+undefined
+undefined
+>>> 3:
+undefined
+undefined
+undefined
+undefined
+>>> 4:
+undefined
+undefined
+undefined
+undefined
+>>> 5:
+undefined
+undefined
+undefined
+undefined
+>>> 6:
+undefined
+undefined
+undefined
+undefined
+>>> 7:
+undefined
+undefined
+undefined
+undefined
+>>> 8:
+undefined
+undefined
+undefined
+undefined
+>>> 9:
+undefined
+undefined
+undefined
+undefined
+>>> 10:
+
+undefined
+undefined
+undefined
+undefined
+>>> 11:
+undefined
+undefined
+undefined
+undefined
+>>> 12:
+undefined
+undefined
+undefined
+undefined
+>>> 13:
+undefined
+undefined
+undefined
+undefined
+>>> 14:
+undefined
+undefined
+undefined
+undefined
+>>> 15:
+undefined
+undefined
+undefined
+undefined
+>>> 16:
+undefined
+undefined
+undefined
+undefined
+>>> 17:
+undefined
+undefined
+undefined
+undefined
+>>> 18:
+undefined
+undefined
+undefined
+undefined
+>>> 19:
+undefined
+undefined
+undefined
+undefined
+>>> 20:
+undefined
+undefined
+undefined
+undefined
+>>> 21:
+undefined
+undefined
+undefined
+undefined
+>>> 22:
+undefined
+undefined
+undefined
+undefined
+>>> 23:
+undefined
+undefined
+undefined
+undefined
+>>> 24:
+undefined
+undefined
+undefined
+undefined
+>>> 25:
+undefined
+undefined
+undefined
+undefined
+>>> 26:
+undefined
+undefined
+undefined
+undefined
+>>> 27:
+undefined
+undefined
+undefined
+undefined
+>>> 28:
+undefined
+undefined
+undefined
+undefined
+>>> 29:
+undefined
+undefined
+undefined
+undefined
+>>> 30:
+undefined
+undefined
+undefined
+undefined
+>>> 31:
+undefined
+undefined
+undefined
+undefined
+>>> 32:
+undefined
+undefined
+undefined
+undefined
+>>> 33: !
+undefined
+undefined
+undefined
+undefined
+>>> 34: "
+undefined
+undefined
+undefined
+undefined
+>>> 35: #
+undefined
+undefined
+undefined
+undefined
+>>> 36: $
+undefined
+undefined
+undefined
+undefined
+>>> 37: %
+undefined
+undefined
+undefined
+undefined
+>>> 38: &
+undefined
+undefined
+undefined
+undefined
+>>> 39: '
+undefined
+undefined
+undefined
+undefined
+>>> 40: (
+undefined
+undefined
+undefined
+undefined
+>>> 41: )
+undefined
+undefined
+undefined
+undefined
+>>> 42: *
+undefined
+undefined
+undefined
+undefined
+>>> 43: +
+undefined
+undefined
+undefined
+undefined
+>>> 44: ,
+undefined
+undefined
+undefined
+undefined
+>>> 45: -
+undefined
+undefined
+undefined
+undefined
+>>> 46: .
+undefined
+undefined
+undefined
+undefined
+>>> 47: /
+undefined
+undefined
+undefined
+undefined
+>>> 48: 0
+undefined
+undefined
+undefined
+undefined
+>>> 49: 1
+undefined
+undefined
+undefined
+undefined
+>>> 50: 2
+undefined
+undefined
+undefined
+undefined
+>>> 51: 3
+undefined
+undefined
+undefined
+undefined
+>>> 52: 4
+undefined
+undefined
+undefined
+undefined
+>>> 53: 5
+undefined
+undefined
+undefined
+undefined
+>>> 54: 6
+undefined
+undefined
+undefined
+undefined
+>>> 55: 7
+undefined
+undefined
+undefined
+undefined
+>>> 56: 8
+undefined
+undefined
+undefined
+undefined
+>>> 57: 9
+undefined
+undefined
+undefined
+undefined
+>>> 58: :
+undefined
+undefined
+undefined
+undefined
+>>> 59: ;
+undefined
+undefined
+undefined
+undefined
+>>> 60: <
+undefined
+undefined
+undefined
+undefined
+>>> 61: +undefined
+undefined
+undefined
+undefined
+>>> 62: >
+undefined
+undefined
+undefined
+undefined
+>>> 63: ?
+undefined
+undefined
+undefined
+undefined
+>>> 64: @
+undefined
+undefined
+undefined
+undefined
+>>> 65: A
+undefined
+undefined
+undefined
+undefined
+>>> 66: B
+undefined
+undefined
+undefined
+undefined
+>>> 67: C
+undefined
+undefined
+undefined
+undefined
+>>> 68: D
+undefined
+undefined
+undefined
+undefined
+>>> 69: E
+undefined
+undefined
+undefined
+undefined
+>>> 70: F
+undefined
+undefined
+undefined
+undefined
+>>> 71: G
+undefined
+undefined
+undefined
+undefined
+>>> 72: H
+undefined
+undefined
+undefined
+undefined
+>>> 73: I
+undefined
+undefined
+undefined
+undefined
+>>> 74: J
+undefined
+undefined
+undefined
+undefined
+>>> 75: K
+undefined
+undefined
+undefined
+undefined
+>>> 76: L
+undefined
+undefined
+undefined
+undefined
+>>> 77: M
+undefined
+undefined
+undefined
+undefined
+>>> 78: N
+undefined
+undefined
+undefined
+undefined
+>>> 79: O
+undefined
+undefined
+undefined
+undefined
+>>> 80: P
+undefined
+undefined
+undefined
+undefined
+>>> 81: Q
+undefined
+undefined
+undefined
+undefined
+>>> 82: R
+undefined
+undefined
+undefined
+undefined
+>>> 83: S
+undefined
+undefined
+undefined
+undefined
+>>> 84: T
+undefined
+undefined
+undefined
+undefined
+>>> 85: U
+undefined
+undefined
+undefined
+undefined
+>>> 86: V
+undefined
+undefined
+undefined
+undefined
+>>> 87: W
+undefined
+undefined
+undefined
+undefined
+>>> 88: X
+undefined
+undefined
+undefined
+undefined
+>>> 89: Y
+undefined
+undefined
+undefined
+undefined
+>>> 90: Z
+undefined
+undefined
+undefined
+undefined
+>>> 91: [
+undefined
+undefined
+undefined
+undefined
+>>> 92: \
+undefined
+undefined
+undefined
+undefined
+>>> 93: ]
+undefined
+undefined
+undefined
+undefined
+>>> 94: ^
+undefined
+undefined
+undefined
+undefined
+>>> 95: _
+undefined
+undefined
+undefined
+undefined
+>>> 96: `
+undefined
+undefined
+undefined
+undefined
+>>> 97: a
+undefined
+undefined
+undefined
+undefined
+>>> 98: b
+undefined
+undefined
+undefined
+undefined
+>>> 99: c
+undefined
+undefined
+undefined
+undefined
+>>> 100: d
+undefined
+undefined
+undefined
+undefined
+>>> 101: e
+undefined
+undefined
+undefined
+undefined
+>>> 102: f
+undefined
+undefined
+undefined
+undefined
+>>> 103: g
+undefined
+undefined
+undefined
+undefined
+>>> 104: h
+undefined
+undefined
+undefined
+undefined
+>>> 105: i
+undefined
+undefined
+undefined
+undefined
+>>> 106: j
+undefined
+undefined
+undefined
+undefined
+>>> 107: k
+undefined
+undefined
+undefined
+undefined
+>>> 108: l
+undefined
+undefined
+undefined
+undefined
+>>> 109: m
+undefined
+undefined
+undefined
+undefined
+>>> 110: n
+undefined
+undefined
+undefined
+undefined
+>>> 111: o
+undefined
+undefined
+undefined
+undefined
+>>> 112: p
+undefined
+undefined
+undefined
+undefined
+>>> 113: q
+undefined
+undefined
+undefined
+undefined
+>>> 114: r
+undefined
+undefined
+undefined
+undefined
+>>> 115: s
+undefined
+undefined
+undefined
+undefined
+>>> 116: t
+undefined
+undefined
+undefined
+undefined
+>>> 117: u
+undefined
+undefined
+undefined
+undefined
+>>> 118: v
+undefined
+undefined
+undefined
+undefined
+>>> 119: w
+undefined
+undefined
+undefined
+undefined
+>>> 120: x
+undefined
+undefined
+undefined
+undefined
+>>> 121: y
+undefined
+undefined
+undefined
+undefined
+>>> 122: z
+undefined
+undefined
+undefined
+undefined
+>>> 123: {
+undefined
+undefined
+undefined
+undefined
+>>> 124: |
+undefined
+undefined
+undefined
+undefined
+>>> 125: }
+undefined
+undefined
+undefined
+undefined
+>>> 126: ~
+undefined
+undefined
+undefined
+undefined
+>>> 127:
+undefined
+undefined
+undefined
+undefined
+>>> 128: ??
+undefined
+undefined
+undefined
+undefined
+>>> 129: ??
+undefined
+undefined
+undefined
+undefined
+>>> 130: ??
+undefined
+undefined
+undefined
+undefined
+>>> 131: ??
+undefined
+undefined
+undefined
+undefined
+>>> 132: ??
+undefined
+undefined
+undefined
+undefined
+>>> 133: ??
+undefined
+undefined
+undefined
+undefined
+>>> 134: ??
+undefined
+undefined
+undefined
+undefined
+>>> 135: ??
+undefined
+undefined
+undefined
+undefined
+>>> 136: ??
+undefined
+undefined
+undefined
+undefined
+>>> 137: ??
+undefined
+undefined
+undefined
+undefined
+>>> 138: ??
+undefined
+undefined
+undefined
+undefined
+>>> 139: ??
+undefined
+undefined
+undefined
+undefined
+>>> 140: ??
+undefined
+undefined
+undefined
+undefined
+>>> 141: ??
+undefined
+undefined
+undefined
+undefined
+>>> 142: ??
+undefined
+undefined
+undefined
+undefined
+>>> 143: ??
+undefined
+undefined
+undefined
+undefined
+>>> 144: ??
+undefined
+undefined
+undefined
+undefined
+>>> 145: ??
+undefined
+undefined
+undefined
+undefined
+>>> 146: ??
+undefined
+undefined
+undefined
+undefined
+>>> 147: ??
+undefined
+undefined
+undefined
+undefined
+>>> 148: ??
+undefined
+undefined
+undefined
+undefined
+>>> 149: ??
+undefined
+undefined
+undefined
+undefined
+>>> 150: ??
+undefined
+undefined
+undefined
+undefined
+>>> 151: ??
+undefined
+undefined
+undefined
+undefined
+>>> 152: ??
+undefined
+undefined
+undefined
+undefined
+>>> 153: ??
+undefined
+undefined
+undefined
+undefined
+>>> 154: ??
+undefined
+undefined
+undefined
+undefined
+>>> 155: ??
+undefined
+undefined
+undefined
+undefined
+>>> 156: ??
+undefined
+undefined
+undefined
+undefined
+>>> 157: ??
+undefined
+undefined
+undefined
+undefined
+>>> 158: ??
+undefined
+undefined
+undefined
+undefined
+>>> 159: ??
+undefined
+undefined
+undefined
+undefined
+>>> 160: ??
+undefined
+undefined
+undefined
+undefined
+>>> 161: ??
+undefined
+undefined
+undefined
+undefined
+>>> 162: ??
+undefined
+undefined
+undefined
+undefined
+>>> 163: ??
+undefined
+undefined
+undefined
+undefined
+>>> 164: ??
+undefined
+undefined
+undefined
+undefined
+>>> 165: ??
+undefined
+undefined
+undefined
+undefined
+>>> 166: ??
+undefined
+undefined
+undefined
+undefined
+>>> 167: ??
+undefined
+undefined
+undefined
+undefined
+>>> 168: ??
+undefined
+undefined
+undefined
+undefined
+>>> 169: ??
+undefined
+undefined
+undefined
+undefined
+>>> 170: ??
+undefined
+undefined
+undefined
+undefined
+>>> 171: ??
+undefined
+undefined
+undefined
+undefined
+>>> 172: ??
+undefined
+undefined
+undefined
+undefined
+>>> 173: ??
+undefined
+undefined
+undefined
+undefined
+>>> 174: ??
+undefined
+undefined
+undefined
+undefined
+>>> 175: ??
+undefined
+undefined
+undefined
+undefined
+>>> 176: ??
+undefined
+undefined
+undefined
+undefined
+>>> 177: ??
+undefined
+undefined
+undefined
+undefined
+>>> 178: ??
+undefined
+undefined
+undefined
+undefined
+>>> 179: ??
+undefined
+undefined
+undefined
+undefined
+>>> 180: ??
+undefined
+undefined
+undefined
+undefined
+>>> 181: ??
+undefined
+undefined
+undefined
+undefined
+>>> 182: ??
+undefined
+undefined
+undefined
+undefined
+>>> 183: ??
+undefined
+undefined
+undefined
+undefined
+>>> 184: ??
+undefined
+undefined
+undefined
+undefined
+>>> 185: ??
+undefined
+undefined
+undefined
+undefined
+>>> 186: ??
+undefined
+undefined
+undefined
+undefined
+>>> 187: ??
+undefined
+undefined
+undefined
+undefined
+>>> 188: ??
+undefined
+undefined
+undefined
+undefined
+>>> 189: ??
+undefined
+undefined
+undefined
+undefined
+>>> 190: ??
+undefined
+undefined
+undefined
+undefined
+>>> 191: ??
+undefined
+undefined
+undefined
+undefined
+>>> 192: ??
+undefined
+undefined
+undefined
+undefined
+>>> 193: ??
+undefined
+undefined
+undefined
+undefined
+>>> 194: ??
+undefined
+undefined
+undefined
+undefined
+>>> 195: ??
+undefined
+undefined
+undefined
+undefined
+>>> 196: ??
+undefined
+undefined
+undefined
+undefined
+>>> 197: ??
+undefined
+undefined
+undefined
+undefined
+>>> 198: ??
+undefined
+undefined
+undefined
+undefined
+>>> 199: ??
+undefined
+undefined
+undefined
+undefined
+>>> 200: ??
+undefined
+undefined
+undefined
+undefined
+>>> 201: ??
+undefined
+undefined
+undefined
+undefined
+>>> 202: ??
+undefined
+undefined
+undefined
+undefined
+>>> 203: ??
+undefined
+undefined
+undefined
+undefined
+>>> 204: ??
+undefined
+undefined
+undefined
+undefined
+>>> 205: ??
+undefined
+undefined
+undefined
+undefined
+>>> 206: ??
+undefined
+undefined
+undefined
+undefined
+>>> 207: ??
+undefined
+undefined
+undefined
+undefined
+>>> 208: ??
+undefined
+undefined
+undefined
+undefined
+>>> 209: ??
+undefined
+undefined
+undefined
+undefined
+>>> 210: ??
+undefined
+undefined
+undefined
+undefined
+>>> 211: ??
+undefined
+undefined
+undefined
+undefined
+>>> 212: ??
+undefined
+undefined
+undefined
+undefined
+>>> 213: ??
+undefined
+undefined
+undefined
+undefined
+>>> 214: ??
+undefined
+undefined
+undefined
+undefined
+>>> 215: ??
+undefined
+undefined
+undefined
+undefined
+>>> 216: ??
+undefined
+undefined
+undefined
+undefined
+>>> 217: ??
+undefined
+undefined
+undefined
+undefined
+>>> 218: ??
+undefined
+undefined
+undefined
+undefined
+>>> 219: ??
+undefined
+undefined
+undefined
+undefined
+>>> 220: ??
+undefined
+undefined
+undefined
+undefined
+>>> 221: ??
+undefined
+undefined
+undefined
+undefined
+>>> 222: ??
+undefined
+undefined
+undefined
+undefined
+>>> 223: ??
+undefined
+undefined
+undefined
+undefined
+>>> 224: ??
+undefined
+undefined
+undefined
+undefined
+>>> 225: ??
+undefined
+undefined
+undefined
+undefined
+>>> 226: ??
+undefined
+undefined
+undefined
+undefined
+>>> 227: ??
+undefined
+undefined
+undefined
+undefined
+>>> 228: ??
+undefined
+undefined
+undefined
+undefined
+>>> 229: ??
+undefined
+undefined
+undefined
+undefined
+>>> 230: ??
+undefined
+undefined
+undefined
+undefined
+>>> 231: ??
+undefined
+undefined
+undefined
+undefined
+>>> 232: ??
+undefined
+undefined
+undefined
+undefined
+>>> 233: ??
+undefined
+undefined
+undefined
+undefined
+>>> 234: ??
+undefined
+undefined
+undefined
+undefined
+>>> 235: ??
+undefined
+undefined
+undefined
+undefined
+>>> 236: ??
+undefined
+undefined
+undefined
+undefined
+>>> 237: ??
+undefined
+undefined
+undefined
+undefined
+>>> 238: ??
+undefined
+undefined
+undefined
+undefined
+>>> 239: ??
+undefined
+undefined
+undefined
+undefined
+>>> 240: ??
+undefined
+undefined
+undefined
+undefined
+>>> 241: ??
+undefined
+undefined
+undefined
+undefined
+>>> 242: ??
+undefined
+undefined
+undefined
+undefined
+>>> 243: ??
+undefined
+undefined
+undefined
+undefined
+>>> 244: ??
+undefined
+undefined
+undefined
+undefined
+>>> 245: ??
+undefined
+undefined
+undefined
+undefined
+>>> 246: ??
+undefined
+undefined
+undefined
+undefined
+>>> 247: ??
+undefined
+undefined
+undefined
+undefined
+>>> 248: ??
+undefined
+undefined
+undefined
+undefined
+>>> 249: ??
+undefined
+undefined
+undefined
+undefined
+>>> 250: ??
+undefined
+undefined
+undefined
+undefined
+>>> 251: ??
+undefined
+undefined
+undefined
+undefined
+>>> 252: ??
+undefined
+undefined
+undefined
+undefined
+>>> 253: ??
+undefined
+undefined
+undefined
+undefined
+>>> 254: ??
+undefined
+undefined
+undefined
+undefined
+>>> 255: ??
+undefined
+undefined
+undefined
+undefined
+>>> 256: ??
+undefined
+undefined
+undefined
+undefined
+>>> 257: ??
+undefined
+undefined
+undefined
+undefined
+>>> 258: ??
+undefined
+undefined
+undefined
+undefined
+>>> 259: ??
+undefined
+undefined
+undefined
+undefined
+>>> 260: ??
+undefined
+undefined
+undefined
+undefined
+>>> 261: ??
+undefined
+undefined
+undefined
+undefined
+>>> 262: ??
+undefined
+undefined
+undefined
+undefined
+>>> 263: ??
+undefined
+undefined
+undefined
+undefined
+>>> 264: ??
+undefined
+undefined
+undefined
+undefined
+>>> 265: ??
+undefined
+undefined
+undefined
+undefined
+>>> 266: ??
+undefined
+undefined
+undefined
+undefined
+>>> 267: ??
+undefined
+undefined
+undefined
+undefined
+>>> 268: ??
+undefined
+undefined
+undefined
+undefined
+>>> 269: ??
+undefined
+undefined
+undefined
+undefined
+>>> 270: ??
+undefined
+undefined
+undefined
+undefined
+>>> 271: ??
+undefined
+undefined
+undefined
+undefined
+>>> 272: ??
+undefined
+undefined
+undefined
+undefined
+>>> 273: ??
+undefined
+undefined
+undefined
+undefined
+>>> 274: ??
+undefined
+undefined
+undefined
+undefined
+>>> 275: ??
+undefined
+undefined
+undefined
+undefined
+>>> 276: ??
+undefined
+undefined
+undefined
+undefined
+>>> 277: ??
+undefined
+undefined
+undefined
+undefined
+>>> 278: ??
+undefined
+undefined
+undefined
+undefined
+>>> 279: ??
+undefined
+undefined
+undefined
+undefined
+>>> 280: ??
+undefined
+undefined
+undefined
+undefined
+>>> 281: ??
+undefined
+undefined
+undefined
+undefined
+>>> 282: ??
+undefined
+undefined
+undefined
+undefined
+>>> 283: ??
+undefined
+undefined
+undefined
+undefined
+>>> 284: ??
+undefined
+undefined
+undefined
+undefined
+>>> 285: ??
+undefined
+undefined
+undefined
+undefined
+>>> 286: ??
+undefined
+undefined
+undefined
+undefined
+>>> 287: ??
+undefined
+undefined
+undefined
+undefined
+>>> 288: ??
+undefined
+undefined
+undefined
+undefined
+>>> 289: ??
+undefined
+undefined
+undefined
+undefined
+>>> 290: ??
+undefined
+undefined
+undefined
+undefined
+>>> 291: ??
+undefined
+undefined
+undefined
+undefined
+>>> 292: ??
+undefined
+undefined
+undefined
+undefined
+>>> 293: ??
+undefined
+undefined
+undefined
+undefined
+>>> 294: ??
+undefined
+undefined
+undefined
+undefined
+>>> 295: ??
+undefined
+undefined
+undefined
+undefined
+>>> 296: ??
+undefined
+undefined
+undefined
+undefined
+>>> 297: ??
+undefined
+undefined
+undefined
+undefined
+>>> 298: ??
+undefined
+undefined
+undefined
+undefined
+>>> 299: ??
+undefined
+undefined
+undefined
+undefined
+>>> 300:
+undefined
+undefined
+undefined
+undefined
+>>> 301: ""
+undefined
+undefined
+undefined
+undefined
+>>> 302: "
+undefined
+undefined
+undefined
+undefined
+>>> 303: '
+undefined
+undefined
+undefined
+undefined
+>>> 304:
+undefined
+undefined
+undefined
+undefined
+>>> 305: &
+undefined
+undefined
+undefined
+undefined
+>>> 306: &hi;
+undefined
+undefined
+undefined
+undefined
+>>> 307: &
+undefined
+undefined
+undefined
+undefined
+>>> 308: _root
+undefined
+undefined
+undefined
+undefined
+>>> 309: _level0
+undefined
+undefined
+undefined
+undefined
+>>> no args
+undefined
+undefined
+undefined
diff --git a/test/trace/externalinterface-escape-7.swf
b/test/trace/externalinterface-escape-7.swf
new file mode 100644
index 0000000..fa8c270
Binary files /dev/null and b/test/trace/externalinterface-escape-7.swf differ
diff --git a/test/trace/externalinterface-escape-7.swf.trace
b/test/trace/externalinterface-escape-7.swf.trace
new file mode 100644
index 0000000..70647c3
--- /dev/null
+++ b/test/trace/externalinterface-escape-7.swf.trace
@@ -0,0 +1,1555 @@
+>>> 0:
+undefined
+undefined
+undefined
+undefined
+>>> 1:
+undefined
+undefined
+undefined
+undefined
+>>> 2:
+undefined
+undefined
+undefined
+undefined
+>>> 3:
+undefined
+undefined
+undefined
+undefined
+>>> 4:
+undefined
+undefined
+undefined
+undefined
+>>> 5:
+undefined
+undefined
+undefined
+undefined
+>>> 6:
+undefined
+undefined
+undefined
+undefined
+>>> 7:
+undefined
+undefined
+undefined
+undefined
+>>> 8:
+undefined
+undefined
+undefined
+undefined
+>>> 9:
+undefined
+undefined
+undefined
+undefined
+>>> 10:
+
+undefined
+undefined
+undefined
+undefined
+>>> 11:
+undefined
+undefined
+undefined
+undefined
+>>> 12:
+undefined
+undefined
+undefined
+undefined
+>>> 13:
+undefined
+undefined
+undefined
+undefined
+>>> 14:
+undefined
+undefined
+undefined
+undefined
+>>> 15:
+undefined
+undefined
+undefined
+undefined
+>>> 16:
+undefined
+undefined
+undefined
+undefined
+>>> 17:
+undefined
+undefined
+undefined
+undefined
+>>> 18:
+undefined
+undefined
+undefined
+undefined
+>>> 19:
+undefined
+undefined
+undefined
+undefined
+>>> 20:
+undefined
+undefined
+undefined
+undefined
+>>> 21:
+undefined
+undefined
+undefined
+undefined
+>>> 22:
+undefined
+undefined
+undefined
+undefined
+>>> 23:
+undefined
+undefined
+undefined
+undefined
+>>> 24:
+undefined
+undefined
+undefined
+undefined
+>>> 25:
+undefined
+undefined
+undefined
+undefined
+>>> 26:
+undefined
+undefined
+undefined
+undefined
+>>> 27:
+undefined
+undefined
+undefined
+undefined
+>>> 28:
+undefined
+undefined
+undefined
+undefined
+>>> 29:
+undefined
+undefined
+undefined
+undefined
+>>> 30:
+undefined
+undefined
+undefined
+undefined
+>>> 31:
+undefined
+undefined
+undefined
+undefined
+>>> 32:
+undefined
+undefined
+undefined
+undefined
+>>> 33: !
+undefined
+undefined
+undefined
+undefined
+>>> 34: "
+undefined
+undefined
+undefined
+undefined
+>>> 35: #
+undefined
+undefined
+undefined
+undefined
+>>> 36: $
+undefined
+undefined
+undefined
+undefined
+>>> 37: %
+undefined
+undefined
+undefined
+undefined
+>>> 38: &
+undefined
+undefined
+undefined
+undefined
+>>> 39: '
+undefined
+undefined
+undefined
+undefined
+>>> 40: (
+undefined
+undefined
+undefined
+undefined
+>>> 41: )
+undefined
+undefined
+undefined
+undefined
+>>> 42: *
+undefined
+undefined
+undefined
+undefined
+>>> 43: +
+undefined
+undefined
+undefined
+undefined
+>>> 44: ,
+undefined
+undefined
+undefined
+undefined
+>>> 45: -
+undefined
+undefined
+undefined
+undefined
+>>> 46: .
+undefined
+undefined
+undefined
+undefined
+>>> 47: /
+undefined
+undefined
+undefined
+undefined
+>>> 48: 0
+undefined
+undefined
+undefined
+undefined
+>>> 49: 1
+undefined
+undefined
+undefined
+undefined
+>>> 50: 2
+undefined
+undefined
+undefined
+undefined
+>>> 51: 3
+undefined
+undefined
+undefined
+undefined
+>>> 52: 4
+undefined
+undefined
+undefined
+undefined
+>>> 53: 5
+undefined
+undefined
+undefined
+undefined
+>>> 54: 6
+undefined
+undefined
+undefined
+undefined
+>>> 55: 7
+undefined
+undefined
+undefined
+undefined
+>>> 56: 8
+undefined
+undefined
+undefined
+undefined
+>>> 57: 9
+undefined
+undefined
+undefined
+undefined
+>>> 58: :
+undefined
+undefined
+undefined
+undefined
+>>> 59: ;
+undefined
+undefined
+undefined
+undefined
+>>> 60: <
+undefined
+undefined
+undefined
+undefined
+>>> 61: +undefined
+undefined
+undefined
+undefined
+>>> 62: >
+undefined
+undefined
+undefined
+undefined
+>>> 63: ?
+undefined
+undefined
+undefined
+undefined
+>>> 64: @
+undefined
+undefined
+undefined
+undefined
+>>> 65: A
+undefined
+undefined
+undefined
+undefined
+>>> 66: B
+undefined
+undefined
+undefined
+undefined
+>>> 67: C
+undefined
+undefined
+undefined
+undefined
+>>> 68: D
+undefined
+undefined
+undefined
+undefined
+>>> 69: E
+undefined
+undefined
+undefined
+undefined
+>>> 70: F
+undefined
+undefined
+undefined
+undefined
+>>> 71: G
+undefined
+undefined
+undefined
+undefined
+>>> 72: H
+undefined
+undefined
+undefined
+undefined
+>>> 73: I
+undefined
+undefined
+undefined
+undefined
+>>> 74: J
+undefined
+undefined
+undefined
+undefined
+>>> 75: K
+undefined
+undefined
+undefined
+undefined
+>>> 76: L
+undefined
+undefined
+undefined
+undefined
+>>> 77: M
+undefined
+undefined
+undefined
+undefined
+>>> 78: N
+undefined
+undefined
+undefined
+undefined
+>>> 79: O
+undefined
+undefined
+undefined
+undefined
+>>> 80: P
+undefined
+undefined
+undefined
+undefined
+>>> 81: Q
+undefined
+undefined
+undefined
+undefined
+>>> 82: R
+undefined
+undefined
+undefined
+undefined
+>>> 83: S
+undefined
+undefined
+undefined
+undefined
+>>> 84: T
+undefined
+undefined
+undefined
+undefined
+>>> 85: U
+undefined
+undefined
+undefined
+undefined
+>>> 86: V
+undefined
+undefined
+undefined
+undefined
+>>> 87: W
+undefined
+undefined
+undefined
+undefined
+>>> 88: X
+undefined
+undefined
+undefined
+undefined
+>>> 89: Y
+undefined
+undefined
+undefined
+undefined
+>>> 90: Z
+undefined
+undefined
+undefined
+undefined
+>>> 91: [
+undefined
+undefined
+undefined
+undefined
+>>> 92: \
+undefined
+undefined
+undefined
+undefined
+>>> 93: ]
+undefined
+undefined
+undefined
+undefined
+>>> 94: ^
+undefined
+undefined
+undefined
+undefined
+>>> 95: _
+undefined
+undefined
+undefined
+undefined
+>>> 96: `
+undefined
+undefined
+undefined
+undefined
+>>> 97: a
+undefined
+undefined
+undefined
+undefined
+>>> 98: b
+undefined
+undefined
+undefined
+undefined
+>>> 99: c
+undefined
+undefined
+undefined
+undefined
+>>> 100: d
+undefined
+undefined
+undefined
+undefined
+>>> 101: e
+undefined
+undefined
+undefined
+undefined
+>>> 102: f
+undefined
+undefined
+undefined
+undefined
+>>> 103: g
+undefined
+undefined
+undefined
+undefined
+>>> 104: h
+undefined
+undefined
+undefined
+undefined
+>>> 105: i
+undefined
+undefined
+undefined
+undefined
+>>> 106: j
+undefined
+undefined
+undefined
+undefined
+>>> 107: k
+undefined
+undefined
+undefined
+undefined
+>>> 108: l
+undefined
+undefined
+undefined
+undefined
+>>> 109: m
+undefined
+undefined
+undefined
+undefined
+>>> 110: n
+undefined
+undefined
+undefined
+undefined
+>>> 111: o
+undefined
+undefined
+undefined
+undefined
+>>> 112: p
+undefined
+undefined
+undefined
+undefined
+>>> 113: q
+undefined
+undefined
+undefined
+undefined
+>>> 114: r
+undefined
+undefined
+undefined
+undefined
+>>> 115: s
+undefined
+undefined
+undefined
+undefined
+>>> 116: t
+undefined
+undefined
+undefined
+undefined
+>>> 117: u
+undefined
+undefined
+undefined
+undefined
+>>> 118: v
+undefined
+undefined
+undefined
+undefined
+>>> 119: w
+undefined
+undefined
+undefined
+undefined
+>>> 120: x
+undefined
+undefined
+undefined
+undefined
+>>> 121: y
+undefined
+undefined
+undefined
+undefined
+>>> 122: z
+undefined
+undefined
+undefined
+undefined
+>>> 123: {
+undefined
+undefined
+undefined
+undefined
+>>> 124: |
+undefined
+undefined
+undefined
+undefined
+>>> 125: }
+undefined
+undefined
+undefined
+undefined
+>>> 126: ~
+undefined
+undefined
+undefined
+undefined
+>>> 127:
+undefined
+undefined
+undefined
+undefined
+>>> 128: ??
+undefined
+undefined
+undefined
+undefined
+>>> 129: ??
+undefined
+undefined
+undefined
+undefined
+>>> 130: ??
+undefined
+undefined
+undefined
+undefined
+>>> 131: ??
+undefined
+undefined
+undefined
+undefined
+>>> 132: ??
+undefined
+undefined
+undefined
+undefined
+>>> 133: ??
+undefined
+undefined
+undefined
+undefined
+>>> 134: ??
+undefined
+undefined
+undefined
+undefined
+>>> 135: ??
+undefined
+undefined
+undefined
+undefined
+>>> 136: ??
+undefined
+undefined
+undefined
+undefined
+>>> 137: ??
+undefined
+undefined
+undefined
+undefined
+>>> 138: ??
+undefined
+undefined
+undefined
+undefined
+>>> 139: ??
+undefined
+undefined
+undefined
+undefined
+>>> 140: ??
+undefined
+undefined
+undefined
+undefined
+>>> 141: ??
+undefined
+undefined
+undefined
+undefined
+>>> 142: ??
+undefined
+undefined
+undefined
+undefined
+>>> 143: ??
+undefined
+undefined
+undefined
+undefined
+>>> 144: ??
+undefined
+undefined
+undefined
+undefined
+>>> 145: ??
+undefined
+undefined
+undefined
+undefined
+>>> 146: ??
+undefined
+undefined
+undefined
+undefined
+>>> 147: ??
+undefined
+undefined
+undefined
+undefined
+>>> 148: ??
+undefined
+undefined
+undefined
+undefined
+>>> 149: ??
+undefined
+undefined
+undefined
+undefined
+>>> 150: ??
+undefined
+undefined
+undefined
+undefined
+>>> 151: ??
+undefined
+undefined
+undefined
+undefined
+>>> 152: ??
+undefined
+undefined
+undefined
+undefined
+>>> 153: ??
+undefined
+undefined
+undefined
+undefined
+>>> 154: ??
+undefined
+undefined
+undefined
+undefined
+>>> 155: ??
+undefined
+undefined
+undefined
+undefined
+>>> 156: ??
+undefined
+undefined
+undefined
+undefined
+>>> 157: ??
+undefined
+undefined
+undefined
+undefined
+>>> 158: ??
+undefined
+undefined
+undefined
+undefined
+>>> 159: ??
+undefined
+undefined
+undefined
+undefined
+>>> 160: ??
+undefined
+undefined
+undefined
+undefined
+>>> 161: ??
+undefined
+undefined
+undefined
+undefined
+>>> 162: ??
+undefined
+undefined
+undefined
+undefined
+>>> 163: ??
+undefined
+undefined
+undefined
+undefined
+>>> 164: ??
+undefined
+undefined
+undefined
+undefined
+>>> 165: ??
+undefined
+undefined
+undefined
+undefined
+>>> 166: ??
+undefined
+undefined
+undefined
+undefined
+>>> 167: ??
+undefined
+undefined
+undefined
+undefined
+>>> 168: ??
+undefined
+undefined
+undefined
+undefined
+>>> 169: ??
+undefined
+undefined
+undefined
+undefined
+>>> 170: ??
+undefined
+undefined
+undefined
+undefined
+>>> 171: ??
+undefined
+undefined
+undefined
+undefined
+>>> 172: ??
+undefined
+undefined
+undefined
+undefined
+>>> 173: ??
+undefined
+undefined
+undefined
+undefined
+>>> 174: ??
+undefined
+undefined
+undefined
+undefined
+>>> 175: ??
+undefined
+undefined
+undefined
+undefined
+>>> 176: ??
+undefined
+undefined
+undefined
+undefined
+>>> 177: ??
+undefined
+undefined
+undefined
+undefined
+>>> 178: ??
+undefined
+undefined
+undefined
+undefined
+>>> 179: ??
+undefined
+undefined
+undefined
+undefined
+>>> 180: ??
+undefined
+undefined
+undefined
+undefined
+>>> 181: ??
+undefined
+undefined
+undefined
+undefined
+>>> 182: ??
+undefined
+undefined
+undefined
+undefined
+>>> 183: ??
+undefined
+undefined
+undefined
+undefined
+>>> 184: ??
+undefined
+undefined
+undefined
+undefined
+>>> 185: ??
+undefined
+undefined
+undefined
+undefined
+>>> 186: ??
+undefined
+undefined
+undefined
+undefined
+>>> 187: ??
+undefined
+undefined
+undefined
+undefined
+>>> 188: ??
+undefined
+undefined
+undefined
+undefined
+>>> 189: ??
+undefined
+undefined
+undefined
+undefined
+>>> 190: ??
+undefined
+undefined
+undefined
+undefined
+>>> 191: ??
+undefined
+undefined
+undefined
+undefined
+>>> 192: ??
+undefined
+undefined
+undefined
+undefined
+>>> 193: ??
+undefined
+undefined
+undefined
+undefined
+>>> 194: ??
+undefined
+undefined
+undefined
+undefined
+>>> 195: ??
+undefined
+undefined
+undefined
+undefined
+>>> 196: ??
+undefined
+undefined
+undefined
+undefined
+>>> 197: ??
+undefined
+undefined
+undefined
+undefined
+>>> 198: ??
+undefined
+undefined
+undefined
+undefined
+>>> 199: ??
+undefined
+undefined
+undefined
+undefined
+>>> 200: ??
+undefined
+undefined
+undefined
+undefined
+>>> 201: ??
+undefined
+undefined
+undefined
+undefined
+>>> 202: ??
+undefined
+undefined
+undefined
+undefined
+>>> 203: ??
+undefined
+undefined
+undefined
+undefined
+>>> 204: ??
+undefined
+undefined
+undefined
+undefined
+>>> 205: ??
+undefined
+undefined
+undefined
+undefined
+>>> 206: ??
+undefined
+undefined
+undefined
+undefined
+>>> 207: ??
+undefined
+undefined
+undefined
+undefined
+>>> 208: ??
+undefined
+undefined
+undefined
+undefined
+>>> 209: ??
+undefined
+undefined
+undefined
+undefined
+>>> 210: ??
+undefined
+undefined
+undefined
+undefined
+>>> 211: ??
+undefined
+undefined
+undefined
+undefined
+>>> 212: ??
+undefined
+undefined
+undefined
+undefined
+>>> 213: ??
+undefined
+undefined
+undefined
+undefined
+>>> 214: ??
+undefined
+undefined
+undefined
+undefined
+>>> 215: ??
+undefined
+undefined
+undefined
+undefined
+>>> 216: ??
+undefined
+undefined
+undefined
+undefined
+>>> 217: ??
+undefined
+undefined
+undefined
+undefined
+>>> 218: ??
+undefined
+undefined
+undefined
+undefined
+>>> 219: ??
+undefined
+undefined
+undefined
+undefined
+>>> 220: ??
+undefined
+undefined
+undefined
+undefined
+>>> 221: ??
+undefined
+undefined
+undefined
+undefined
+>>> 222: ??
+undefined
+undefined
+undefined
+undefined
+>>> 223: ??
+undefined
+undefined
+undefined
+undefined
+>>> 224: ??
+undefined
+undefined
+undefined
+undefined
+>>> 225: ??
+undefined
+undefined
+undefined
+undefined
+>>> 226: ??
+undefined
+undefined
+undefined
+undefined
+>>> 227: ??
+undefined
+undefined
+undefined
+undefined
+>>> 228: ??
+undefined
+undefined
+undefined
+undefined
+>>> 229: ??
+undefined
+undefined
+undefined
+undefined
+>>> 230: ??
+undefined
+undefined
+undefined
+undefined
+>>> 231: ??
+undefined
+undefined
+undefined
+undefined
+>>> 232: ??
+undefined
+undefined
+undefined
+undefined
+>>> 233: ??
+undefined
+undefined
+undefined
+undefined
+>>> 234: ??
+undefined
+undefined
+undefined
+undefined
+>>> 235: ??
+undefined
+undefined
+undefined
+undefined
+>>> 236: ??
+undefined
+undefined
+undefined
+undefined
+>>> 237: ??
+undefined
+undefined
+undefined
+undefined
+>>> 238: ??
+undefined
+undefined
+undefined
+undefined
+>>> 239: ??
+undefined
+undefined
+undefined
+undefined
+>>> 240: ??
+undefined
+undefined
+undefined
+undefined
+>>> 241: ??
+undefined
+undefined
+undefined
+undefined
+>>> 242: ??
+undefined
+undefined
+undefined
+undefined
+>>> 243: ??
+undefined
+undefined
+undefined
+undefined
+>>> 244: ??
+undefined
+undefined
+undefined
+undefined
+>>> 245: ??
+undefined
+undefined
+undefined
+undefined
+>>> 246: ??
+undefined
+undefined
+undefined
+undefined
+>>> 247: ??
+undefined
+undefined
+undefined
+undefined
+>>> 248: ??
+undefined
+undefined
+undefined
+undefined
+>>> 249: ??
+undefined
+undefined
+undefined
+undefined
+>>> 250: ??
+undefined
+undefined
+undefined
+undefined
+>>> 251: ??
+undefined
+undefined
+undefined
+undefined
+>>> 252: ??
+undefined
+undefined
+undefined
+undefined
+>>> 253: ??
+undefined
+undefined
+undefined
+undefined
+>>> 254: ??
+undefined
+undefined
+undefined
+undefined
+>>> 255: ??
+undefined
+undefined
+undefined
+undefined
+>>> 256: ??
+undefined
+undefined
+undefined
+undefined
+>>> 257: ??
+undefined
+undefined
+undefined
+undefined
+>>> 258: ??
+undefined
+undefined
+undefined
+undefined
+>>> 259: ??
+undefined
+undefined
+undefined
+undefined
+>>> 260: ??
+undefined
+undefined
+undefined
+undefined
+>>> 261: ??
+undefined
+undefined
+undefined
+undefined
+>>> 262: ??
+undefined
+undefined
+undefined
+undefined
+>>> 263: ??
+undefined
+undefined
+undefined
+undefined
+>>> 264: ??
+undefined
+undefined
+undefined
+undefined
+>>> 265: ??
+undefined
+undefined
+undefined
+undefined
+>>> 266: ??
+undefined
+undefined
+undefined
+undefined
+>>> 267: ??
+undefined
+undefined
+undefined
+undefined
+>>> 268: ??
+undefined
+undefined
+undefined
+undefined
+>>> 269: ??
+undefined
+undefined
+undefined
+undefined
+>>> 270: ??
+undefined
+undefined
+undefined
+undefined
+>>> 271: ??
+undefined
+undefined
+undefined
+undefined
+>>> 272: ??
+undefined
+undefined
+undefined
+undefined
+>>> 273: ??
+undefined
+undefined
+undefined
+undefined
+>>> 274: ??
+undefined
+undefined
+undefined
+undefined
+>>> 275: ??
+undefined
+undefined
+undefined
+undefined
+>>> 276: ??
+undefined
+undefined
+undefined
+undefined
+>>> 277: ??
+undefined
+undefined
+undefined
+undefined
+>>> 278: ??
+undefined
+undefined
+undefined
+undefined
+>>> 279: ??
+undefined
+undefined
+undefined
+undefined
+>>> 280: ??
+undefined
+undefined
+undefined
+undefined
+>>> 281: ??
+undefined
+undefined
+undefined
+undefined
+>>> 282: ??
+undefined
+undefined
+undefined
+undefined
+>>> 283: ??
+undefined
+undefined
+undefined
+undefined
+>>> 284: ??
+undefined
+undefined
+undefined
+undefined
+>>> 285: ??
+undefined
+undefined
+undefined
+undefined
+>>> 286: ??
+undefined
+undefined
+undefined
+undefined
+>>> 287: ??
+undefined
+undefined
+undefined
+undefined
+>>> 288: ??
+undefined
+undefined
+undefined
+undefined
+>>> 289: ??
+undefined
+undefined
+undefined
+undefined
+>>> 290: ??
+undefined
+undefined
+undefined
+undefined
+>>> 291: ??
+undefined
+undefined
+undefined
+undefined
+>>> 292: ??
+undefined
+undefined
+undefined
+undefined
+>>> 293: ??
+undefined
+undefined
+undefined
+undefined
+>>> 294: ??
+undefined
+undefined
+undefined
+undefined
+>>> 295: ??
+undefined
+undefined
+undefined
+undefined
+>>> 296: ??
+undefined
+undefined
+undefined
+undefined
+>>> 297: ??
+undefined
+undefined
+undefined
+undefined
+>>> 298: ??
+undefined
+undefined
+undefined
+undefined
+>>> 299: ??
+undefined
+undefined
+undefined
+undefined
+>>> 300:
+undefined
+undefined
+undefined
+undefined
+>>> 301: ""
+undefined
+undefined
+undefined
+undefined
+>>> 302: "
+undefined
+undefined
+undefined
+undefined
+>>> 303: '
+undefined
+undefined
+undefined
+undefined
+>>> 304:
+undefined
+undefined
+undefined
+undefined
+>>> 305: &
+undefined
+undefined
+undefined
+undefined
+>>> 306: &hi;
+undefined
+undefined
+undefined
+undefined
+>>> 307: &
+undefined
+undefined
+undefined
+undefined
+>>> 308: _root
+undefined
+undefined
+undefined
+undefined
+>>> 309: _level0
+undefined
+undefined
+undefined
+undefined
+>>> no args
+undefined
+undefined
+undefined
diff --git a/test/trace/externalinterface-escape-8.swf
b/test/trace/externalinterface-escape-8.swf
new file mode 100644
index 0000000..c172a2d
Binary files /dev/null and b/test/trace/externalinterface-escape-8.swf differ
diff --git a/test/trace/externalinterface-escape-8.swf.trace
b/test/trace/externalinterface-escape-8.swf.trace
new file mode 100644
index 0000000..393a25f
--- /dev/null
+++ b/test/trace/externalinterface-escape-8.swf.trace
@@ -0,0 +1,1558 @@
+>>> 0:
+null
+null
+null
+null
+>>> 1:
+
+
+
+
+>>> 2:
+
+
+
+
+>>> 3:
+
+
+
+
+>>> 4:
+
+
+
+
+>>> 5:
+
+
+
+
+>>> 6:
+
+
+
+
+>>> 7:
+
+
+
+
+>>> 8:
+
+
+
+
+>>> 9:
+
+
+
+
+>>> 10:
+
+\n
+
+
+
+
+
+
+>>> 11:
+
+
+
+
+>>> 12:
+
+
+
+
+>>> 13:
+\r
+
+
+
+>>> 14:
+
+
+
+
+>>> 15:
+
+
+
+
+>>> 16:
+
+
+
+
+>>> 17:
+
+
+
+
+>>> 18:
+
+
+
+
+>>> 19:
+
+
+
+
+>>> 20:
+
+
+
+
+>>> 21:
+
+
+
+
+>>> 22:
+
+
+
+
+>>> 23:
+
+
+
+
+>>> 24:
+
+
+
+
+>>> 25:
+
+
+
+
+>>> 26:
+
+
+
+
+>>> 27:
+
+
+
+
+>>> 28:
+
+
+
+
+>>> 29:
+
+
+
+
+>>> 30:
+
+
+
+
+>>> 31:
+
+
+
+
+>>> 32:
+
+
+
+
+>>> 33: !
+!
+!
+!
+!
+>>> 34: "
+\"
+"
+"
+"
+>>> 35: #
+#
+#
+#
+#
+>>> 36: $
+$
+$
+$
+$
+>>> 37: %
+%
+%
+%
+%
+>>> 38: &
+&
+&
+&
+&
+>>> 39: '
+'
+'
+'
+'
+>>> 40: (
+(
+(
+(
+(
+>>> 41: )
+)
+)
+)
+)
+>>> 42: *
+*
+*
+*
+*
+>>> 43: +
++
++
++
++
+>>> 44: ,
+,
+,
+,
+,
+>>> 45: -
+-
+-
+-
+-
+>>> 46: .
+.
+.
+.
+.
+>>> 47: /
+/
+/
+/
+/
+>>> 48: 0
+0
+0
+0
+0
+>>> 49: 1
+1
+1
+1
+1
+>>> 50: 2
+2
+2
+2
+2
+>>> 51: 3
+3
+3
+3
+3
+>>> 52: 4
+4
+4
+4
+4
+>>> 53: 5
+5
+5
+5
+5
+>>> 54: 6
+6
+6
+6
+6
+>>> 55: 7
+7
+7
+7
+7
+>>> 56: 8
+8
+8
+8
+8
+>>> 57: 9
+9
+9
+9
+9
+>>> 58: :
+:
+:
+:
+:
+>>> 59: ;
+;
+;
+;
+;
+>>> 60: <
+<
+<
+<
+<
+>>> 61: +++++>>> 62: >
+>
+>
+>
+>
+>>> 63: ?
+?
+?
+?
+?
+>>> 64: @
+@
+@
+@
+@
+>>> 65: A
+A
+A
+A
+A
+>>> 66: B
+B
+B
+B
+B
+>>> 67: C
+C
+C
+C
+C
+>>> 68: D
+D
+D
+D
+D
+>>> 69: E
+E
+E
+E
+E
+>>> 70: F
+F
+F
+F
+F
+>>> 71: G
+G
+G
+G
+G
+>>> 72: H
+H
+H
+H
+H
+>>> 73: I
+I
+I
+I
+I
+>>> 74: J
+J
+J
+J
+J
+>>> 75: K
+K
+K
+K
+K
+>>> 76: L
+L
+L
+L
+L
+>>> 77: M
+M
+M
+M
+M
+>>> 78: N
+N
+N
+N
+N
+>>> 79: O
+O
+O
+O
+O
+>>> 80: P
+P
+P
+P
+P
+>>> 81: Q
+Q
+Q
+Q
+Q
+>>> 82: R
+R
+R
+R
+R
+>>> 83: S
+S
+S
+S
+S
+>>> 84: T
+T
+T
+T
+T
+>>> 85: U
+U
+U
+U
+U
+>>> 86: V
+V
+V
+V
+V
+>>> 87: W
+W
+W
+W
+W
+>>> 88: X
+X
+X
+X
+X
+>>> 89: Y
+Y
+Y
+Y
+Y
+>>> 90: Z
+Z
+Z
+Z
+Z
+>>> 91: [
+[
+[
+[
+[
+>>> 92: \
+\
+\
+\
+\
+>>> 93: ]
+]
+]
+]
+]
+>>> 94: ^
+^
+^
+^
+^
+>>> 95: _
+_
+_
+_
+_
+>>> 96: `
+`
+`
+`
+`
+>>> 97: a
+a
+a
+a
+a
+>>> 98: b
+b
+b
+b
+b
+>>> 99: c
+c
+c
+c
+c
+>>> 100: d
+d
+d
+d
+d
+>>> 101: e
+e
+e
+e
+e
+>>> 102: f
+f
+f
+f
+f
+>>> 103: g
+g
+g
+g
+g
+>>> 104: h
+h
+h
+h
+h
+>>> 105: i
+i
+i
+i
+i
+>>> 106: j
+j
+j
+j
+j
+>>> 107: k
+k
+k
+k
+k
+>>> 108: l
+l
+l
+l
+l
+>>> 109: m
+m
+m
+m
+m
+>>> 110: n
+n
+n
+n
+n
+>>> 111: o
+o
+o
+o
+o
+>>> 112: p
+p
+p
+p
+p
+>>> 113: q
+q
+q
+q
+q
+>>> 114: r
+r
+r
+r
+r
+>>> 115: s
+s
+s
+s
+s
+>>> 116: t
+t
+t
+t
+t
+>>> 117: u
+u
+u
+u
+u
+>>> 118: v
+v
+v
+v
+v
+>>> 119: w
+w
+w
+w
+w
+>>> 120: x
+x
+x
+x
+x
+>>> 121: y
+y
+y
+y
+y
+>>> 122: z
+z
+z
+z
+z
+>>> 123: {
+{
+{
+{
+{
+>>> 124: |
+|
+|
+|
+|
+>>> 125: }
+}
+}
+}
+}
+>>> 126: ~
+~
+~
+~
+~
+>>> 127:
+
+
+
+
+>>> 128: ??
+??
+??
+??
+??
+>>> 129: ??
+??
+??
+??
+??
+>>> 130: ??
+??
+??
+??
+??
+>>> 131: ??
+??
+??
+??
+??
+>>> 132: ??
+??
+??
+??
+??
+>>> 133: ??
+??
+??
+??
+??
+>>> 134: ??
+??
+??
+??
+??
+>>> 135: ??
+??
+??
+??
+??
+>>> 136: ??
+??
+??
+??
+??
+>>> 137: ??
+??
+??
+??
+??
+>>> 138: ??
+??
+??
+??
+??
+>>> 139: ??
+??
+??
+??
+??
+>>> 140: ??
+??
+??
+??
+??
+>>> 141: ??
+??
+??
+??
+??
+>>> 142: ??
+??
+??
+??
+??
+>>> 143: ??
+??
+??
+??
+??
+>>> 144: ??
+??
+??
+??
+??
+>>> 145: ??
+??
+??
+??
+??
+>>> 146: ??
+??
+??
+??
+??
+>>> 147: ??
+??
+??
+??
+??
+>>> 148: ??
+??
+??
+??
+??
+>>> 149: ??
+??
+??
+??
+??
+>>> 150: ??
+??
+??
+??
+??
+>>> 151: ??
+??
+??
+??
+??
+>>> 152: ??
+??
+??
+??
+??
+>>> 153: ??
+??
+??
+??
+??
+>>> 154: ??
+??
+??
+??
+??
+>>> 155: ??
+??
+??
+??
+??
+>>> 156: ??
+??
+??
+??
+??
+>>> 157: ??
+??
+??
+??
+??
+>>> 158: ??
+??
+??
+??
+??
+>>> 159: ??
+??
+??
+??
+??
+>>> 160: ??
+??
+??
+??
+??
+>>> 161: ??
+??
+??
+??
+??
+>>> 162: ??
+??
+??
+??
+??
+>>> 163: ??
+??
+??
+??
+??
+>>> 164: ??
+??
+??
+??
+??
+>>> 165: ??
+??
+??
+??
+??
+>>> 166: ??
+??
+??
+??
+??
+>>> 167: ??
+??
+??
+??
+??
+>>> 168: ??
+??
+??
+??
+??
+>>> 169: ??
+??
+??
+??
+??
+>>> 170: ??
+??
+??
+??
+??
+>>> 171: ??
+??
+??
+??
+??
+>>> 172: ??
+??
+??
+??
+??
+>>> 173: ??
+??
+??
+??
+??
+>>> 174: ??
+??
+??
+??
+??
+>>> 175: ??
+??
+??
+??
+??
+>>> 176: ??
+??
+??
+??
+??
+>>> 177: ??
+??
+??
+??
+??
+>>> 178: ??
+??
+??
+??
+??
+>>> 179: ??
+??
+??
+??
+??
+>>> 180: ??
+??
+??
+??
+??
+>>> 181: ??
+??
+??
+??
+??
+>>> 182: ??
+??
+??
+??
+??
+>>> 183: ??
+??
+??
+??
+??
+>>> 184: ??
+??
+??
+??
+??
+>>> 185: ??
+??
+??
+??
+??
+>>> 186: ??
+??
+??
+??
+??
+>>> 187: ??
+??
+??
+??
+??
+>>> 188: ??
+??
+??
+??
+??
+>>> 189: ??
+??
+??
+??
+??
+>>> 190: ??
+??
+??
+??
+??
+>>> 191: ??
+??
+??
+??
+??
+>>> 192: ??
+??
+??
+??
+??
+>>> 193: ??
+??
+??
+??
+??
+>>> 194: ??
+??
+??
+??
+??
+>>> 195: ??
+??
+??
+??
+??
+>>> 196: ??
+??
+??
+??
+??
+>>> 197: ??
+??
+??
+??
+??
+>>> 198: ??
+??
+??
+??
+??
+>>> 199: ??
+??
+??
+??
+??
+>>> 200: ??
+??
+??
+??
+??
+>>> 201: ??
+??
+??
+??
+??
+>>> 202: ??
+??
+??
+??
+??
+>>> 203: ??
+??
+??
+??
+??
+>>> 204: ??
+??
+??
+??
+??
+>>> 205: ??
+??
+??
+??
+??
+>>> 206: ??
+??
+??
+??
+??
+>>> 207: ??
+??
+??
+??
+??
+>>> 208: ??
+??
+??
+??
+??
+>>> 209: ??
+??
+??
+??
+??
+>>> 210: ??
+??
+??
+??
+??
+>>> 211: ??
+??
+??
+??
+??
+>>> 212: ??
+??
+??
+??
+??
+>>> 213: ??
+??
+??
+??
+??
+>>> 214: ??
+??
+??
+??
+??
+>>> 215: ??
+??
+??
+??
+??
+>>> 216: ??
+??
+??
+??
+??
+>>> 217: ??
+??
+??
+??
+??
+>>> 218: ??
+??
+??
+??
+??
+>>> 219: ??
+??
+??
+??
+??
+>>> 220: ??
+??
+??
+??
+??
+>>> 221: ??
+??
+??
+??
+??
+>>> 222: ??
+??
+??
+??
+??
+>>> 223: ??
+??
+??
+??
+??
+>>> 224: ??
+??
+??
+??
+??
+>>> 225: ??
+??
+??
+??
+??
+>>> 226: ??
+??
+??
+??
+??
+>>> 227: ??
+??
+??
+??
+??
+>>> 228: ??
+??
+??
+??
+??
+>>> 229: ??
+??
+??
+??
+??
+>>> 230: ??
+??
+??
+??
+??
+>>> 231: ??
+??
+??
+??
+??
+>>> 232: ??
+??
+??
+??
+??
+>>> 233: ??
+??
+??
+??
+??
+>>> 234: ??
+??
+??
+??
+??
+>>> 235: ??
+??
+??
+??
+??
+>>> 236: ??
+??
+??
+??
+??
+>>> 237: ??
+??
+??
+??
+??
+>>> 238: ??
+??
+??
+??
+??
+>>> 239: ??
+??
+??
+??
+??
+>>> 240: ??
+??
+??
+??
+??
+>>> 241: ??
+??
+??
+??
+??
+>>> 242: ??
+??
+??
+??
+??
+>>> 243: ??
+??
+??
+??
+??
+>>> 244: ??
+??
+??
+??
+??
+>>> 245: ??
+??
+??
+??
+??
+>>> 246: ??
+??
+??
+??
+??
+>>> 247: ??
+??
+??
+??
+??
+>>> 248: ??
+??
+??
+??
+??
+>>> 249: ??
+??
+??
+??
+??
+>>> 250: ??
+??
+??
+??
+??
+>>> 251: ??
+??
+??
+??
+??
+>>> 252: ??
+??
+??
+??
+??
+>>> 253: ??
+??
+??
+??
+??
+>>> 254: ??
+??
+??
+??
+??
+>>> 255: ??
+??
+??
+??
+??
+>>> 256: ??
+??
+??
+??
+??
+>>> 257: ??
+??
+??
+??
+??
+>>> 258: ??
+??
+??
+??
+??
+>>> 259: ??
+??
+??
+??
+??
+>>> 260: ??
+??
+??
+??
+??
+>>> 261: ??
+??
+??
+??
+??
+>>> 262: ??
+??
+??
+??
+??
+>>> 263: ??
+??
+??
+??
+??
+>>> 264: ??
+??
+??
+??
+??
+>>> 265: ??
+??
+??
+??
+??
+>>> 266: ??
+??
+??
+??
+??
+>>> 267: ??
+??
+??
+??
+??
+>>> 268: ??
+??
+??
+??
+??
+>>> 269: ??
+??
+??
+??
+??
+>>> 270: ??
+??
+??
+??
+??
+>>> 271: ??
+??
+??
+??
+??
+>>> 272: ??
+??
+??
+??
+??
+>>> 273: ??
+??
+??
+??
+??
+>>> 274: ??
+??
+??
+??
+??
+>>> 275: ??
+??
+??
+??
+??
+>>> 276: ??
+??
+??
+??
+??
+>>> 277: ??
+??
+??
+??
+??
+>>> 278: ??
+??
+??
+??
+??
+>>> 279: ??
+??
+??
+??
+??
+>>> 280: ??
+??
+??
+??
+??
+>>> 281: ??
+??
+??
+??
+??
+>>> 282: ??
+??
+??
+??
+??
+>>> 283: ??
+??
+??
+??
+??
+>>> 284: ??
+??
+??
+??
+??
+>>> 285: ??
+??
+??
+??
+??
+>>> 286: ??
+??
+??
+??
+??
+>>> 287: ??
+??
+??
+??
+??
+>>> 288: ??
+??
+??
+??
+??
+>>> 289: ??
+??
+??
+??
+??
+>>> 290: ??
+??
+??
+??
+??
+>>> 291: ??
+??
+??
+??
+??
+>>> 292: ??
+??
+??
+??
+??
+>>> 293: ??
+??
+??
+??
+??
+>>> 294: ??
+??
+??
+??
+??
+>>> 295: ??
+??
+??
+??
+??
+>>> 296: ??
+??
+??
+??
+??
+>>> 297: ??
+??
+??
+??
+??
+>>> 298: ??
+??
+??
+??
+??
+>>> 299: ??
+??
+??
+??
+??
+>>> 300:
+null
+null
+null
+null
+>>> 301: ""
+\"\"
+""
+""
+""
+>>> 302: "
+\"
+"
+"
+"
+>>> 303: '
+'
+'
+'
+'
+>>> 304:
+
+&nbsp;
+
+
+>>> 305: &
+&
+&amp;
+&
+&
+>>> 306: &hi;
+&hi;
+&hi;
+&hi;
+&hi;
+>>> 307: &
+&
+&
+&
+&
+>>> 308: _root
+_root
+_root
+_root
+_root
+>>> 309: _level0
+_level0
+_level0
+_level0
+_level0
+>>> no args
+null
+null
+null
diff --git a/test/trace/externalinterface-escape.as
b/test/trace/externalinterface-escape.as
new file mode 100644
index 0000000..def51c9
--- /dev/null
+++ b/test/trace/externalinterface-escape.as
@@ -0,0 +1,25 @@
+// makeswf -v 7 -s 200x150 -r 1 -o externalinterface-escape.swf
externalinterface-escape.as
+
+strings = [];
+for (i = 0; i < 300; i++) {
+ strings.push (String.fromCharCode (i));
+}
+strings = strings.concat ([ "", "\"\"",
"\"", "'",
+ " ", "&", "&hi;",
"&",
+ "_root", "_level0"
+]);
+
+for (i = 0; i < strings.length; i++) {
+ trace (">>> " + i + ": " + strings[i]);
+ trace (flash.external.ExternalInterface._jsQuoteString (strings[i]));
+ t = flash.external.ExternalInterface._escapeXML (strings[i]);
+ trace (t);
+ trace (flash.external.ExternalInterface._unescapeXML (t));
+ trace (flash.external.ExternalInterface._unescapeXML (strings[i]));
+}
+trace (">>> no args");
+trace (flash.external.ExternalInterface._jsQuoteString ());
+trace (flash.external.ExternalInterface._escapeXML ());
+trace (flash.external.ExternalInterface._unescapeXML ());
+
+loadMovie ("fscommand:quit", "");
commit a928f0f061f44fb0eea0cd55969c9ba4c629e86c
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Dec 21 14:11:54 2007 +0100
initial stubs for ExternalInterface
The SwfdecPlayer class got a new sparkling "scipting" property of
type
SwfdecPlayerScripting which is a GObject that is public and the user is
supposed
to implement it if he wants to implement ExternalInterface.
By default this is set to NULL which means ExternalInterface is not
available.
Also implement the _escapeXML, _unescapeXML and _jsQuoteString functions
diff --git a/libswfdec/Makefile.am b/libswfdec/Makefile.am
index 471f2c6..322529c 100644
--- a/libswfdec/Makefile.am
+++ b/libswfdec/Makefile.am
@@ -110,6 +110,7 @@ libswfdec_source_files = \
swfdec_pattern.c \
swfdec_player.c \
swfdec_player_as.c \
+ swfdec_player_scripting.c \
swfdec_print_job.c \
swfdec_policy_loader.c \
swfdec_rect.c \
@@ -189,6 +190,7 @@ public_headers = \
swfdec_keys.h \
swfdec_loader.h \
swfdec_player.h \
+ swfdec_player_scripting.h \
swfdec_rectangle.h \
swfdec_script.h \
swfdec_system.h \
diff --git a/libswfdec/swfdec.h b/libswfdec/swfdec.h
index 9d13242..1a9a4ca 100644
--- a/libswfdec/swfdec.h
+++ b/libswfdec/swfdec.h
@@ -38,6 +38,7 @@
#include <libswfdec/swfdec_keys.h>
#include <libswfdec/swfdec_loader.h>
#include <libswfdec/swfdec_player.h>
+#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rectangle.h>
#include <libswfdec/swfdec_system.h>
#include <libswfdec/swfdec_url.h>
diff --git a/libswfdec/swfdec_external_interface.c
b/libswfdec/swfdec_external_interface.c
index d59d143..f0d3421 100644
--- a/libswfdec/swfdec_external_interface.c
+++ b/libswfdec/swfdec_external_interface.c
@@ -21,16 +21,21 @@
#include "config.h"
#endif
+#include <string.h>
+
#include "swfdec_as_internal.h"
+#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
+#include "swfdec_player_internal.h"
+#include "swfdec_player_scripting.h"
+#include "swfdec_xml.h"
-// static
SWFDEC_AS_NATIVE (14, 0, swfdec_external_interface__initJS)
void
swfdec_external_interface__initJS (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface._initJS (static)");
+ /* FIXME: call an init vfunc here? */
}
SWFDEC_AS_NATIVE (14, 1, swfdec_external_interface__objectID)
@@ -39,7 +44,21 @@ swfdec_external_interface__objectID (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface._objectID (static)");
+ SwfdecPlayer *player = SWFDEC_PLAYER (cx);
+ SwfdecPlayerScripting *scripting = player->priv->scripting;
+ SwfdecPlayerScriptingClass *klass;
+
+ if (scripting == NULL) {
+ SWFDEC_AS_VALUE_SET_NULL (ret);
+ return;
+ }
+ klass = SWFDEC_PLAYER_SCRIPTING_GET_CLASS (scripting);
+ if (klass->get_id) {
+ char *s = klass->get_id (scripting, player);
+ SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_give_string (cx, s));
+ } else {
+ SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STR_EMPTY);
+ }
}
SWFDEC_AS_NATIVE (14, 2, swfdec_external_interface__addCallback)
@@ -59,13 +78,13 @@ swfdec_external_interface__evalJS (SwfdecAsContext *cx,
SwfdecAsObject *object,
SWFDEC_STUB ("ExternalInterface._evalJS (static)");
}
-SWFDEC_AS_NATIVE (14, 4, swfdec_external_interface__callout)
+SWFDEC_AS_NATIVE (14, 4, swfdec_external_interface__callOut)
void
-swfdec_external_interface__callout (SwfdecAsContext *cx,
+swfdec_external_interface__callOut (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface._callout (static)");
+ SWFDEC_STUB ("ExternalInterface._callOut (static)");
}
SWFDEC_AS_NATIVE (14, 5, swfdec_external_interface__escapeXML)
@@ -74,7 +93,15 @@ swfdec_external_interface__escapeXML (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface._escapeXML (static)");
+ const char *s;
+
+ if (argc == 0 ||
+ (s = swfdec_as_value_to_string (cx, &argv[0])) ==
SWFDEC_AS_STR_EMPTY) {
+ SWFDEC_AS_VALUE_SET_NULL (ret);
+ return;
+ }
+
+ SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_give_string (cx,
swfdec_xml_escape (s)));
}
SWFDEC_AS_NATIVE (14, 6, swfdec_external_interface__unescapeXML)
@@ -83,7 +110,16 @@ swfdec_external_interface__unescapeXML (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface._unescapeXML (static)");
+ const char *s;
+
+ if (argc == 0 ||
+ (s = swfdec_as_value_to_string (cx, &argv[0])) ==
SWFDEC_AS_STR_EMPTY) {
+ SWFDEC_AS_VALUE_SET_NULL (ret);
+ return;
+ }
+
+ SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_give_string (cx,
+ swfdec_xml_unescape_len (cx, s, strlen (s), FALSE)));
}
SWFDEC_AS_NATIVE (14, 7, swfdec_external_interface__jsQuoteString)
@@ -92,17 +128,51 @@ swfdec_external_interface__jsQuoteString (SwfdecAsContext
*cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface._jsQuoteString (static)");
+ const char *s;
+ GString *str;
+ size_t len;
+
+ if (argc == 0 ||
+ (s = swfdec_as_value_to_string (cx, &argv[0])) ==
SWFDEC_AS_STR_EMPTY) {
+ SWFDEC_AS_VALUE_SET_NULL (ret);
+ return;
+ }
+
+ str = g_string_new ("");
+ do {
+ /* Yay, we don't escape backslashes! */
+ len = strcspn (s, "\n\r\"");
+ g_string_append_len (str, s, len);
+ s += len;
+ if (*s == '\0')
+ break;
+ g_string_append_c (str, '\\');
+ switch (*s) {
+ case '\n':
+ g_string_append_c (str, 'n');
+ break;
+ case '\r':
+ g_string_append_c (str, 'r');
+ break;
+ case '"':
+ g_string_append_c (str, '"');
+ break;
+ default:
+ g_assert_not_reached ();
+ break;
+ };
+ s++;
+ } while (TRUE);
+ SWFDEC_AS_VALUE_SET_STRING (ret, swfdec_as_context_give_string (cx,
g_string_free (str, FALSE)));
}
-// properties
SWFDEC_AS_NATIVE (14, 100, swfdec_external_interface_get_available)
void
swfdec_external_interface_get_available (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface.available (static, get)");
+ SWFDEC_AS_VALUE_SET_BOOLEAN (ret, SWFDEC_PLAYER (cx)->priv->scripting
!= NULL);
}
SWFDEC_AS_NATIVE (14, 101, swfdec_external_interface_set_available)
@@ -111,5 +181,5 @@ swfdec_external_interface_set_available (SwfdecAsContext
*cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
SwfdecAsValue *ret)
{
- SWFDEC_STUB ("ExternalInterface.available (static, set)");
+ /* read-only property */
}
diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c
index 8191f6a..297de8a 100644
--- a/libswfdec/swfdec_player.c
+++ b/libswfdec/swfdec_player.c
@@ -619,6 +619,7 @@ enum {
PROP_HEIGHT,
PROP_ALIGNMENT,
PROP_SCALE,
+ PROP_SCRIPTING,
PROP_SYSTEM,
PROP_MAX_RUNTIME
};
@@ -725,6 +726,9 @@ swfdec_player_get_property (GObject *object, guint param_id,
GValue *value,
case PROP_SCALE:
g_value_set_enum (value, priv->scale_mode);
break;
+ case PROP_SCRIPTING:
+ g_value_set_object (value, priv->scripting);
+ break;
case PROP_SYSTEM:
g_value_set_object (value, priv->system);
break;
@@ -834,6 +838,9 @@ swfdec_player_set_property (GObject *object, guint param_id,
const GValue *value
case PROP_SCALE:
swfdec_player_set_scale_mode (player, g_value_get_enum (value));
break;
+ case PROP_SCRIPTING:
+ swfdec_player_set_scripting (player, g_value_get_object (value));
+ break;
case PROP_SYSTEM:
g_object_unref (priv->system);
if (g_value_get_object (value)) {
@@ -1593,6 +1600,9 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
g_object_class_install_property (object_class, PROP_SCALE,
g_param_spec_enum ("scale-mode", "scale mode",
"method used to scale the movie",
SWFDEC_TYPE_SCALE_MODE, SWFDEC_SCALE_SHOW_ALL, G_PARAM_READWRITE));
+ g_object_class_install_property (object_class, PROP_SCRIPTING,
+ g_param_spec_object ("scripting", "scripting",
"external scripting implementation",
+ SWFDEC_TYPE_PLAYER_SCRIPTING, G_PARAM_READWRITE));
g_object_class_install_property (object_class, PROP_SCALE,
g_param_spec_object ("system", "system", "object
holding system information",
SWFDEC_TYPE_SYSTEM, G_PARAM_READWRITE));
@@ -2832,3 +2842,46 @@ swfdec_player_set_maximum_runtime (SwfdecPlayer *player,
gulong msecs)
g_object_notify (G_OBJECT (player), "max-runtime");
}
+/**
+ * swfdec_player_get_scripting:
+ * @player: a #SwfdecPlayer
+ *
+ * Gets the current scripting implementation in use. If no implementation is in
+ * use (the default), %NULL is returned.
+ *
+ * Returns: the current scripting implementation used or %NULL if none
+ **/
+SwfdecPlayerScripting *
+swfdec_player_get_scripting (SwfdecPlayer *player)
+{
+ g_return_val_if_fail (SWFDEC_IS_PLAYER (player), NULL);
+
+ return player->priv->scripting;
+}
+
+/**
+ * swfdec_player_set_scripting:
+ * @player: a #SwfdecPlayer
+ * @scripting: the scripting implementation to use or %NULL to disable
scripting
+ *
+ * Sets the implementation to use for external scripting in the given @player.
+ * Note that this is different from the internal script engine. See the
+ * #SwfdecPlayerScripting paragraph for details about external scripting.
+ **/
+void
+swfdec_player_set_scripting (SwfdecPlayer *player, SwfdecPlayerScripting
*scripting)
+{
+ SwfdecPlayerPrivate *priv;
+
+ g_return_if_fail (SWFDEC_IS_PLAYER (player));
+ g_return_if_fail (scripting == NULL || SWFDEC_IS_PLAYER_SCRIPTING
(scripting));
+
+ priv = player->priv;
+ if (priv->scripting == scripting)
+ return;
+
+ if (priv->scripting)
+ g_object_unref (priv->scripting);
+ priv->scripting = g_object_ref (scripting);
+ g_object_notify (G_OBJECT (player), "scripting");
+}
diff --git a/libswfdec/swfdec_player.h b/libswfdec/swfdec_player.h
index 16ec52d..2dd1f27 100644
--- a/libswfdec/swfdec_player.h
+++ b/libswfdec/swfdec_player.h
@@ -54,6 +54,9 @@ typedef enum {
SWFDEC_SCALE_NONE
} SwfdecScaleMode;
+/* forward declarations */
+typedef struct _SwfdecPlayerScripting SwfdecPlayerScripting;
+
typedef struct _SwfdecPlayer SwfdecPlayer;
typedef struct _SwfdecPlayerPrivate SwfdecPlayerPrivate;
typedef struct _SwfdecPlayerClass SwfdecPlayerClass;
@@ -129,6 +132,10 @@ gulong swfdec_player_get_maximum_runtime
void swfdec_player_set_maximum_runtime
(SwfdecPlayer * player,
gulong msecs);
+SwfdecPlayerScripting *
+ swfdec_player_get_scripting (SwfdecPlayer * player);
+void swfdec_player_set_scripting (SwfdecPlayer * player,
+ SwfdecPlayerScripting *scripting);
void swfdec_player_render (SwfdecPlayer * player,
cairo_t * cr,
diff --git a/libswfdec/swfdec_player_internal.h
b/libswfdec/swfdec_player_internal.h
index 07d3fa8..f8c6119 100644
--- a/libswfdec/swfdec_player_internal.h
+++ b/libswfdec/swfdec_player_internal.h
@@ -23,6 +23,7 @@
#include <libswfdec/swfdec_player.h>
#include <libswfdec/swfdec_audio.h>
#include <libswfdec/swfdec_event.h>
+#include <libswfdec/swfdec_player_scripting.h>
#include <libswfdec/swfdec_rect.h>
#include <libswfdec/swfdec_ringbuffer.h>
#include <libswfdec/swfdec_security.h>
@@ -66,6 +67,7 @@ struct _SwfdecPlayerPrivate
gboolean bgcolor_set; /* TRUE if the background color has been set */
SwfdecColor bgcolor; /* background color */
SwfdecResource * resource; /* initial resource loaded */
+ SwfdecPlayerScripting *scripting; /* scripting object */
/* stage properties */
guint internal_width; /* width used by the scripting engine */
guint internal_height; /* height used by the scripting engine */
diff --git a/libswfdec/swfdec_player_scripting.c
b/libswfdec/swfdec_player_scripting.c
new file mode 100644
index 0000000..0063a62
--- /dev/null
+++ b/libswfdec/swfdec_player_scripting.c
@@ -0,0 +1,39 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_player_scripting.h"
+#include "swfdec_debug.h"
+
+
+G_DEFINE_ABSTRACT_TYPE (SwfdecPlayerScripting, swfdec_player_scripting,
G_TYPE_OBJECT)
+
+static void
+swfdec_player_scripting_class_init (SwfdecPlayerScriptingClass *klass)
+{
+}
+
+static void
+swfdec_player_scripting_init (SwfdecPlayerScripting *player_scripting)
+{
+}
+
diff --git a/libswfdec/swfdec_player_scripting.h
b/libswfdec/swfdec_player_scripting.h
new file mode 100644
index 0000000..4b6d9fc
--- /dev/null
+++ b/libswfdec/swfdec_player_scripting.h
@@ -0,0 +1,62 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_PLAYER_SCRIPTING_H_
+#define _SWFDEC_PLAYER_SCRIPTING_H_
+
+#include <glib-object.h>
+#include <libswfdec/swfdec_player.h>
+
+G_BEGIN_DECLS
+
+/* forward-declared in swfdec-player.h */
+/* typedef struct _SwfdecPlayerScripting SwfdecPlayerScripting; */
+typedef struct _SwfdecPlayerScriptingClass SwfdecPlayerScriptingClass;
+
+#define SWFDEC_TYPE_PLAYER_SCRIPTING
(swfdec_player_scripting_get_type())
+#define SWFDEC_IS_PLAYER_SCRIPTING(obj)
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_PLAYER_SCRIPTING))
+#define SWFDEC_IS_PLAYER_SCRIPTING_CLASS(klass)
(G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_PLAYER_SCRIPTING))
+#define SWFDEC_PLAYER_SCRIPTING(obj)
(G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_PLAYER_SCRIPTING,
SwfdecPlayerScripting))
+#define SWFDEC_PLAYER_SCRIPTING_CLASS(klass)
(G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_PLAYER_SCRIPTING,
SwfdecPlayerScriptingClass))
+#define SWFDEC_PLAYER_SCRIPTING_GET_CLASS(obj)
(G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_PLAYER_SCRIPTING,
SwfdecPlayerScriptingClass))
+
+struct _SwfdecPlayerScripting
+{
+ GObject object;
+};
+
+struct _SwfdecPlayerScriptingClass
+{
+ GObjectClass object_class;
+
+ char * (* get_id) (SwfdecPlayerScripting *scripting,
+ SwfdecPlayer * player);
+ char * (* call_js) (SwfdecPlayerScripting *scripting,
+ SwfdecPlayer * player,
+ const char * code);
+ char * (* call_xml) (SwfdecPlayerScripting *scripting,
+ SwfdecPlayer * player,
+ const char * xml);
+};
+
+GType swfdec_player_scripting_get_type (void);
+
+
+G_END_DECLS
+#endif
commit 701c1678c541e2cb18c6161cc13c1ab1ba71121c
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Dec 21 14:04:31 2007 +0100
add a boolean unescape_nbsp flag to swfdec_xml_unescape_len
ExternalInterface._unescapeXML does not unescape and I wasn't
stupid
enough to write my own function (Hi Jeff!)
diff --git a/libswfdec/swfdec_text_field_movie_html.c
b/libswfdec/swfdec_text_field_movie_html.c
index d3907ff..0fc6897 100644
--- a/libswfdec/swfdec_text_field_movie_html.c
+++ b/libswfdec/swfdec_text_field_movie_html.c
@@ -428,7 +428,7 @@ swfdec_text_field_movie_html_parse_text (ParserData *data,
const char *p)
end = strchr (p, '\0');
}
- unescaped = swfdec_xml_unescape_len (data->cx, p, end - p);
+ unescaped = swfdec_xml_unescape_len (data->cx, p, end - p, TRUE);
data->text = g_string_append (data->text, unescaped);
g_free (unescaped);
diff --git a/libswfdec/swfdec_xml.c b/libswfdec/swfdec_xml.c
index cbecf86..70b3924 100644
--- a/libswfdec/swfdec_xml.c
+++ b/libswfdec/swfdec_xml.c
@@ -118,7 +118,7 @@ swfdec_xml_escape (const char *orginal)
char *
swfdec_xml_unescape_len (SwfdecAsContext *cx, const char *orginal,
- gssize length)
+ gssize length, gboolean unescape_nbsp)
{
int i;
const char *p, *start;
@@ -134,8 +134,12 @@ swfdec_xml_unescape_len (SwfdecAsContext *cx, const char
*orginal,
if (!g_ascii_strncasecmp (p, xml_entities[i].escaped,
strlen (xml_entities[i].escaped))) {
// FIXME: Do this cleaner
- if (xml_entities[i].character == '\xa0')
- string = g_string_append_c (string, '\xc2');
+ if (xml_entities[i].character == '\xa0') {
+ if (unescape_nbsp)
+ string = g_string_append_c (string, '\xc2');
+ else
+ continue;
+ }
string = g_string_append_c (string, xml_entities[i].character);
p += strlen (xml_entities[i].escaped);
break;
@@ -156,7 +160,7 @@ swfdec_xml_unescape_len (SwfdecAsContext *cx, const char
*orginal,
char *
swfdec_xml_unescape (SwfdecAsContext *cx, const char *orginal)
{
- return swfdec_xml_unescape_len (cx, orginal, strlen (orginal));
+ return swfdec_xml_unescape_len (cx, orginal, strlen (orginal), TRUE);
}
// this is never declared, only available as ASnative (100, 5)
@@ -502,7 +506,7 @@ swfdec_xml_parse_attribute (SwfdecXml *xml, SwfdecXmlNode
*node, const char *p)
}
unescaped = swfdec_xml_unescape_len (SWFDEC_AS_OBJECT (xml)->context, p +
1,
- end - (p + 1));
+ end - (p + 1), TRUE);
value = swfdec_as_context_give_string (SWFDEC_AS_OBJECT (node)->context,
unescaped);
SWFDEC_AS_VALUE_SET_STRING (&val, value);
diff --git a/libswfdec/swfdec_xml.h b/libswfdec/swfdec_xml.h
index f8b094d..6d5235f 100644
--- a/libswfdec/swfdec_xml.h
+++ b/libswfdec/swfdec_xml.h
@@ -76,7 +76,8 @@ char * swfdec_xml_unescape (SwfdecAsContext * cx,
const char * orginal);
char * swfdec_xml_unescape_len (SwfdecAsContext * cx,
const char * orginal,
- gssize length);
+ gssize length,
+ gboolean unescape_nbsp);
SwfdecXml * swfdec_xml_new (SwfdecAsContext * context,
const char * str,
commit 3dcc41ba52cf94ecc747c16ce5bf73c5f4d0ad53
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Dec 21 11:00:00 2007 +0100
no need to include string.h here
diff --git a/libswfdec/swfdec_character.c b/libswfdec/swfdec_character.c
index b31b3cf..db1aff5 100644
--- a/libswfdec/swfdec_character.c
+++ b/libswfdec/swfdec_character.c
@@ -23,7 +23,6 @@
#include "config.h"
#endif
-#include <string.h>
#include "swfdec_character.h"
#include "swfdec_debug.h"
#include "swfdec_decoder.h"
Possibly Parallel Threads
- 12 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_strings.c libswfdec/swfdec_loader.c libswfdec/swfdec_loader_internal.h libswfdec/swfdec_load_object_as.c libswfdec/swfdec_load_object.c libswfdec/swfdec_load_object.h
- 11 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_sprite_movie_as.c libswfdec/swfdec_xml.c libswfdec/swfdec_xml.h libswfdec/swfdec_xml_node.c libswfdec/swfdec_xml_node.h test/image test/swfdec_test.c test/swfdec_test_image.c test/trace
- Branch 'as' - 6 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_movie_asprops.c libswfdec/swfdec_movie.c libswfdec/swfdec_movie.h libswfdec/swfdec_sprite.c libswfdec/swfdec_sprite.h libswfdec/swfdec_sprite_movie_as.c
- 6 commits - libswfdec/Makefile.am libswfdec/swfdec_as_interpret.c libswfdec/swfdec_color_as.c libswfdec/swfdec_graphic_movie.c libswfdec/swfdec_image_decoder.c libswfdec/swfdec_morph_movie.c libswfdec/swfdec_movie_as_drawing.c
- 17 commits - doc/swfdec-sections.txt libswfdec/compiler.c libswfdec/.gitignore libswfdec/Makefile.am libswfdec/swfdec_asbroadcaster.c libswfdec/swfdec_as_context.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_strings.c
