[Swfdec] Branch 'as' - 4 commits - doc/Makefile.am doc/swfdec-docs.sgml doc/swfdec-sections.txt libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_types.c libswfdec/swfdec_as_types.h

Benjamin Otte company at kemper.freedesktop.org
Thu Jun 28 10:00:01 PDT 2007


 doc/Makefile.am                 |   12 ++++
 doc/swfdec-docs.sgml            |    4 +
 doc/swfdec-sections.txt         |   13 +++++
 libswfdec/swfdec_as_interpret.c |   11 +++-
 libswfdec/swfdec_as_types.c     |   98 ++++++++++++++++++++++++++++++----------
 libswfdec/swfdec_as_types.h     |    7 +-
 6 files changed, 113 insertions(+), 32 deletions(-)

New commits:
diff-tree afacd9f6211b9b43e2ea1ef808fc612ba92b3cce (from 54d9e25821ca4303c7182c626343ee08c84b1ea2)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jun 28 18:59:47 2007 +0200

    improve documentation, add first chunk of script-engine related docs.

diff --git a/doc/Makefile.am b/doc/Makefile.am
index 5ce6db0..f43e706 100644
--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -55,6 +55,12 @@ IGNORE_HFILES= \
 	js \
 	jpeg \
 	swfdec_amf.h \
+	swfdec_as_interpret.h \
+	swfdec_as_number.h \
+	swfdec_as_string.h \
+	swfdec_as_strings.h \
+	swfdec_as_super.h \
+	swfdec_as_with.h \
 	swfdec_audio_internal.h \
 	swfdec_audio_event.h \
 	swfdec_audio_flv.h \
@@ -68,7 +74,7 @@ IGNORE_HFILES= \
 	swfdec_codec_audio.h \
 	swfdec_codec_video.h \
 	swfdec_color.h \
-	swfdec_connection.h \
+	swfdec_color_as.h \
 	swfdec_debug.h \
 	swfdec_debugger.h \
 	swfdec_decoder.h \
@@ -80,6 +86,7 @@ IGNORE_HFILES= \
 	swfdec_graphic.h \
 	swfdec_graphic_movie.h \
 	swfdec_image.h \
+	swfdec_interval.h \
 	swfdec_js.h \
 	swfdec_listener.h \
 	swfdec_loader_internal.h \
@@ -88,6 +95,7 @@ IGNORE_HFILES= \
 	swfdec_morph_movie.h \
 	swfdec_morphshape.h \
 	swfdec_movie.h \
+	swfdec_net_connection.h \
 	swfdec_net_stream.h \
 	swfdec_pattern.h \
 	swfdec_player_internal.h \
@@ -103,9 +111,11 @@ IGNORE_HFILES= \
 	swfdec_sprite_movie.h \
 	swfdec_stroke.h \
 	swfdec_swf_decoder.h \
+	swfdec_swf_instance.h \
 	swfdec_tag.h \
 	swfdec_text.h \
 	swfdec_types.h \
+	swfdec_utils.h \
 	swfdec_video.h \
 	swfdec_video_movie.h \
 	swfdec_xml.h
diff --git a/doc/swfdec-docs.sgml b/doc/swfdec-docs.sgml
index aa1c339..07c7ee4 100644
--- a/doc/swfdec-docs.sgml
+++ b/doc/swfdec-docs.sgml
@@ -20,4 +20,8 @@
     <xi:include href="xml/SwfdecBuffer.xml"/>
     <xi:include href="xml/SwfdecLoader.xml"/>
   </chapter>
+  <chapter>
+    <title>Actionscript interpreter</title>
+    <xi:include href="xml/SwfdecAsValue.xml"/>
+  </chapter>
 </book>
diff --git a/doc/swfdec-sections.txt b/doc/swfdec-sections.txt
index e0454c7..30ac93b 100644
--- a/doc/swfdec-sections.txt
+++ b/doc/swfdec-sections.txt
@@ -178,3 +178,16 @@ SWFDEC_IS_GTK_LOADER
 SWFDEC_IS_GTK_LOADER_CLASS
 SWFDEC_TYPE_GTK_LOADER
 </SECTION>
+
+<SECTION>
+<FILE>SwfdecAsValue</FILE>
+<TITLE>SwfdecAsValue</TITLE>
+SwfdecAsValueType
+SwfdecAsValue
+swfdec_as_value_to_boolean
+swfdec_as_value_to_integer
+swfdec_as_value_to_number
+swfdec_as_value_to_object
+swfdec_as_value_to_primitive
+swfdec_as_value_to_string
+</SECTION>
diff-tree 54d9e25821ca4303c7182c626343ee08c84b1ea2 (from 35053a70dfbdc472fecadb29b21e38dd9e055410)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jun 28 18:59:21 2007 +0200

    add documentation

diff --git a/libswfdec/swfdec_as_types.c b/libswfdec/swfdec_as_types.c
index 873a921..6b8f3a5 100644
--- a/libswfdec/swfdec_as_types.c
+++ b/libswfdec/swfdec_as_types.c
@@ -32,6 +32,67 @@
 #include "swfdec_debug.h"
 #include "swfdec_movie.h"
 
+/*** GTK-DOC ***/
+
+/**
+ * SECTION:SwfdecAsValue
+ * @title: SwfdecAsValue
+ * @short_description: exchanging values with the Actionscript engine
+ *
+ * This section describes how values are handled inside the Actionscript 
+ * engine. Sice Actionscript is a dynamically typed language, the variable type 
+ * has to be carried with every value. #SwfdecAsValue accomplishes that. Swfdec
+ * allows two possible ways of accessing these values: The common method is to
+ * use the provided functions to explicitly convert the values to a given type
+ * with a function such as swfdec_as_value_to_string (). This is convenient, 
+ * but can be very slow as it can call back into the Actionscript engine when
+ * converting various objects. So it can be unsuitable in some cases.
+ * A different possibiltiy is accessing the values directly using the accessor
+ * macros. You must check the type before doing so though. For setting values,
+ * there only exist macros, since type conversion is not necessary.
+ */
+
+/**
+ * SwfdecAsValueType:
+ * @SWFDEC_AS_TYPE_UNDEFINED: the special undefined value
+ * @SWFDEC_AS_TYPE_BOOLEAN: a boolean value - true or false
+ * @SWFDEC_AS_TYPE_INT: reserved value for integers. Should the need arise for
+ *                      performance enhancements - especially on embedded 
+ *                      devices - it might be useful to implement this type.
+ *                      For now, this type will never appear in Swfdec. Using 
+ *                      it will cause Swfdec to crash.
+ * @SWFDEC_AS_TYPE_NUMBER: a double value - also used for integer numbers
+ * @SWFDEC_AS_TYPE_STRING: a string. Strings are garbage-collected and unique.
+ * @SWFDEC_AS_TYPE_NULL: the spaecial null value
+ * @SWFDEC_AS_TYPE_OBJECT: an object - must be of type #SwfdecAsObject
+ *
+ * These are the possible values the Swfdec Actionscript engine knows about.
+ */
+
+/**
+ * SwfdecAsValue:
+ * @type: the type of this value.
+ *
+ * This is the type used to present an opaque value in the Actionscript 
+ * engine. See #SwfdecAsValueType for possible types. It's similar in 
+ * spirit to #GValue. The value held is garbage-collected. Apart from the type 
+ * member, use the provided macros to access this structure.
+ * <note>If you memset a SwfdecAsValue to 0, it is a valid undefined value.</note>
+ */
+
+/*** actual code ***/
+
+/**
+ * swfdec_as_str_concat:
+ * @cx: a #SwfdecAsContext
+ * @s1: first string
+ * @s2: second string
+ *
+ * Convenience function to concatenate two garbage-collected strings. This
+ * function is equivalent to g_strconcat ().
+ *
+ * Returns: A new garbage-collected string
+ **/
 const char *
 swfdec_as_str_concat (SwfdecAsContext *cx, const char * s1, const char *s2)
 {
@@ -174,10 +235,13 @@ swfdec_as_double_to_string (SwfdecAsCont
  * @context: a #SwfdecAsContext
  * @value: value to be expressed as string
  *
- * Converts @value to a string.
- * <warning>This function may run the garbage collector.</warning>
+ * Converts @value to a string according to the rules of Flash. This might 
+ * cause calling back into the script engine if the @value is an object. In
+ * that case, the object's valueOf function is called. 
+ * <warning>Never use this function for debugging purposes.</warning>
  *
- * Returns: a garbage-collected string representing @value
+ * Returns: a garbage-collected string representing @value. The value will 
+ *          never be %NULL.
  **/
 const char *
 swfdec_as_value_to_string (SwfdecAsContext *context, const SwfdecAsValue *value)
@@ -224,6 +288,18 @@ swfdec_as_value_to_string (SwfdecAsConte
   }
 }
 
+/**
+ * swfdec_as_value_to_number:
+ * @context: a #SwfdecAsContext
+ * @value: a #SwfdecAsValue used by context
+ *
+ * Converts the value to a number according to Flash's conversion routines and
+ * the current Flash version. This conversion routine is similar, but not equal
+ * to ECMAScript. For objects, it can call back into the script engine by 
+ * calling the object's valueOf function.
+ *
+ * Returns: a double value. It can be NaN or +-Infinity. It will not be -0.0.
+ **/
 double
 swfdec_as_value_to_number (SwfdecAsContext *context, const SwfdecAsValue *value)
 {
diff --git a/libswfdec/swfdec_as_types.h b/libswfdec/swfdec_as_types.h
index 531cf52..757958f 100644
--- a/libswfdec/swfdec_as_types.h
+++ b/libswfdec/swfdec_as_types.h
@@ -54,6 +54,7 @@ typedef void (* SwfdecAsNative) (SwfdecA
 /* IMPORTANT: a SwfdecAsValue memset to 0 is a valid undefined value */
 struct _SwfdecAsValue {
   SwfdecAsValueType	type;
+  /*< private >*/
   union {
     gboolean		boolean;
     double		number;
diff-tree 35053a70dfbdc472fecadb29b21e38dd9e055410 (from 180173af2a16e939d54a0bb01eb37c7eff877333)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jun 28 17:34:24 2007 +0200

    rename SwfdecAsType to SwfdecAsValueType
    
    It's the type of the value after all.

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index f006486..5f5838e 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -1011,7 +1011,7 @@ swfdec_action_equals2_5 (SwfdecAsContext
 {
   SwfdecAsValue *rval, *lval;
   SwfdecAsValue rtmp, ltmp;
-  SwfdecAsType ltype, rtype;
+  SwfdecAsValueType ltype, rtype;
   double l, r;
   gboolean cond;
 
@@ -1100,7 +1100,7 @@ static void
 swfdec_action_equals2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
 {
   SwfdecAsValue *rval, *lval;
-  SwfdecAsType ltype, rtype;
+  SwfdecAsValueType ltype, rtype;
   double l, r;
   gboolean cond;
 
diff --git a/libswfdec/swfdec_as_types.h b/libswfdec/swfdec_as_types.h
index 23502d9..531cf52 100644
--- a/libswfdec/swfdec_as_types.h
+++ b/libswfdec/swfdec_as_types.h
@@ -35,7 +35,7 @@ typedef enum {
   SWFDEC_AS_TYPE_STRING,
   SWFDEC_AS_TYPE_NULL,
   SWFDEC_AS_TYPE_OBJECT
-} SwfdecAsType;
+} SwfdecAsValueType;
 
 typedef struct _SwfdecAsArray SwfdecAsArray;
 typedef struct _SwfdecAsContext SwfdecAsContext;
@@ -53,7 +53,7 @@ typedef void (* SwfdecAsNative) (SwfdecA
 
 /* IMPORTANT: a SwfdecAsValue memset to 0 is a valid undefined value */
 struct _SwfdecAsValue {
-  SwfdecAsType		type;
+  SwfdecAsValueType	type;
   union {
     gboolean		boolean;
     double		number;
diff-tree 180173af2a16e939d54a0bb01eb37c7eff877333 (from 0a6d54d5df44db6ef9d1d81b2dc8add873f20787)
Author: Benjamin Otte <otte at gnome.org>
Date:   Thu Jun 28 17:29:37 2007 +0200

    remove swfdec_as_value_to_printable ()
    
    It was only used by the trace action, and that code can do it itself

diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index e6f6c78..f006486 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -544,9 +544,14 @@ swfdec_action_set_member (SwfdecAsContex
 static void
 swfdec_action_trace (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
 {
+  SwfdecAsValue *val;
   const char *s;
 
-  s = swfdec_as_value_to_printable (cx, swfdec_as_stack_pop (cx->frame->stack));
+  val = swfdec_as_stack_pop (cx->frame->stack);
+  if (val->type == SWFDEC_AS_TYPE_UNDEFINED)
+    s = SWFDEC_AS_STR_undefined;
+  else
+    s = swfdec_as_value_to_string (cx, val);
   swfdec_as_context_trace (cx, s);
 }
 
diff --git a/libswfdec/swfdec_as_types.c b/libswfdec/swfdec_as_types.c
index 1d61c51..873a921 100644
--- a/libswfdec/swfdec_as_types.c
+++ b/libswfdec/swfdec_as_types.c
@@ -224,32 +224,6 @@ swfdec_as_value_to_string (SwfdecAsConte
   }
 }
 
-/**
- * swfdec_as_value_to_printable:
- * @context: a #SwfdecAsContext
- * @value: value to be converted to a printable string
- *
- * Converts @value to a string. This function is used by the trace signal. It 
- * uses a slightly different conversion then swfdec_as_value_to_string(). Don't
- * use this function if you can avoid it.
- *
- * Returns: a garbage collected string representing @value.
- **/
-const char *
-swfdec_as_value_to_printable (SwfdecAsContext *context, const SwfdecAsValue *value)
-{
-  g_return_val_if_fail (SWFDEC_IS_AS_CONTEXT (context), SWFDEC_AS_STR_EMPTY);
-  g_return_val_if_fail (SWFDEC_IS_AS_VALUE (value), SWFDEC_AS_STR_EMPTY);
-
-  switch (value->type) {
-    case SWFDEC_AS_TYPE_UNDEFINED:
-      return SWFDEC_AS_STR_undefined;
-    default:
-      break;
-  }
-  return swfdec_as_value_to_string (context, value);
-}
-
 double
 swfdec_as_value_to_number (SwfdecAsContext *context, const SwfdecAsValue *value)
 {
diff --git a/libswfdec/swfdec_as_types.h b/libswfdec/swfdec_as_types.h
index 0dc580f..23502d9 100644
--- a/libswfdec/swfdec_as_types.h
+++ b/libswfdec/swfdec_as_types.h
@@ -220,8 +220,6 @@ double		swfdec_as_value_to_number	(Swfde
 SwfdecAsObject *swfdec_as_value_to_object	(SwfdecAsContext *	context,
 						 const SwfdecAsValue *	value);
 void		swfdec_as_value_to_primitive	(SwfdecAsValue *	value);
-const char *	swfdec_as_value_to_printable	(SwfdecAsContext *	context,
-						 const SwfdecAsValue *	value);
 const char *	swfdec_as_value_to_string	(SwfdecAsContext *	context,
 						 const SwfdecAsValue *	value);
 


More information about the Swfdec mailing list