2 * Copyright (C) 2007 Benjamin Otte <otte@gnome.org>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301 USA
20 #ifndef _SWFDEC_AS_TYPES_H_
21 #define _SWFDEC_AS_TYPES_H_
23 #include <glib-object.h>
27 /* fundamental types */
29 SWFDEC_AS_TYPE_UNDEFINED
= 0,
30 SWFDEC_AS_TYPE_BOOLEAN
,
31 SWFDEC_AS_TYPE_INT
, /* unimplemented, but reserved if someone wants it */
32 SWFDEC_AS_TYPE_NUMBER
,
33 SWFDEC_AS_TYPE_STRING
,
38 typedef struct _SwfdecAsArray SwfdecAsArray
;
39 typedef struct _SwfdecAsContext SwfdecAsContext
;
40 typedef struct _SwfdecAsDebugger SwfdecAsDebugger
;
41 typedef struct _SwfdecAsFrame SwfdecAsFrame
;
42 typedef struct _SwfdecAsFunction SwfdecAsFunction
;
43 typedef struct _SwfdecAsObject SwfdecAsObject
;
44 typedef struct _SwfdecAsScope SwfdecAsScope
;
45 typedef struct _SwfdecAsStack SwfdecAsStack
;
46 typedef struct _SwfdecAsValue SwfdecAsValue
;
47 typedef void (* SwfdecAsNative
) (SwfdecAsContext
* context
,
48 SwfdecAsObject
* thisp
,
51 SwfdecAsValue
* retval
);
52 typedef struct _SwfdecScript SwfdecScript
;
55 /* IMPORTANT: a SwfdecAsValue memset to 0 is a valid undefined value */
56 struct _SwfdecAsValue
{
57 SwfdecAsValueType type
;
63 SwfdecAsObject
* object
;
67 #define SWFDEC_IS_AS_VALUE(val) ((val) != NULL && (val)->type <= SWFDEC_TYPE_AS_OBJECT)
69 #define SWFDEC_AS_VALUE_IS_UNDEFINED(val) ((val)->type == SWFDEC_AS_TYPE_UNDEFINED)
70 #define SWFDEC_AS_VALUE_SET_UNDEFINED(val) (val)->type = SWFDEC_AS_TYPE_UNDEFINED
72 #define SWFDEC_AS_VALUE_IS_BOOLEAN(val) ((val)->type == SWFDEC_AS_TYPE_BOOLEAN)
73 #define SWFDEC_AS_VALUE_GET_BOOLEAN(val) ((val)->value.boolean)
74 #define SWFDEC_AS_VALUE_SET_BOOLEAN(val,b) G_STMT_START { \
75 SwfdecAsValue *__val = (val); \
76 gboolean __tmp = (b); \
77 g_assert (__tmp == TRUE || __tmp == FALSE); \
78 (__val)->value.boolean = __tmp; \
79 (__val)->type = SWFDEC_AS_TYPE_BOOLEAN; \
82 #define SWFDEC_AS_VALUE_IS_NUMBER(val) ((val)->type == SWFDEC_AS_TYPE_NUMBER)
83 #define SWFDEC_AS_VALUE_GET_NUMBER(val) ((val)->value.number)
84 #define SWFDEC_AS_VALUE_SET_NUMBER(val,d) G_STMT_START { \
85 SwfdecAsValue *__val = (val); \
86 (__val)->value.number = (d); \
87 (__val)->type = SWFDEC_AS_TYPE_NUMBER; \
90 #define SWFDEC_AS_VALUE_SET_INT(val,d) SWFDEC_AS_VALUE_SET_NUMBER(val,(int) (d))
92 #define SWFDEC_AS_VALUE_IS_STRING(val) ((val)->type == SWFDEC_AS_TYPE_STRING)
93 #define SWFDEC_AS_VALUE_GET_STRING(val) ((val)->value.string)
94 #define SWFDEC_AS_VALUE_SET_STRING(val,s) G_STMT_START { \
95 SwfdecAsValue *__val = (val); \
96 (__val)->value.string = s; \
97 (__val)->type = SWFDEC_AS_TYPE_STRING; \
100 #define SWFDEC_AS_VALUE_IS_NULL(val) ((val)->type == SWFDEC_AS_TYPE_NULL)
101 #define SWFDEC_AS_VALUE_SET_NULL(val) (val)->type = SWFDEC_AS_TYPE_NULL
103 #define SWFDEC_AS_VALUE_IS_OBJECT(val) ((val)->type == SWFDEC_AS_TYPE_OBJECT)
104 #define SWFDEC_AS_VALUE_GET_OBJECT(val) ((val)->value.object)
105 #define SWFDEC_AS_VALUE_SET_OBJECT(val,o) G_STMT_START { \
106 SwfdecAsValue *__val = (val); \
107 SwfdecAsObject *__o = (o); \
108 g_assert (__o != NULL); \
109 (__val)->type = SWFDEC_AS_TYPE_OBJECT; \
110 (__val)->value.object = __o; \
113 /* value conversion functions */
114 gboolean
swfdec_as_value_to_boolean (SwfdecAsContext
* context
,
115 const SwfdecAsValue
* value
);
116 int swfdec_as_value_to_integer (SwfdecAsContext
* context
,
117 const SwfdecAsValue
* value
);
118 double swfdec_as_value_to_number (SwfdecAsContext
* context
,
119 const SwfdecAsValue
* value
);
120 SwfdecAsObject
*swfdec_as_value_to_object (SwfdecAsContext
* context
,
121 const SwfdecAsValue
* value
);
122 void swfdec_as_value_to_primitive (SwfdecAsValue
* value
);
123 const char * swfdec_as_value_to_string (SwfdecAsContext
* context
,
124 const SwfdecAsValue
* value
);
125 char * swfdec_as_value_to_debug (const SwfdecAsValue
* value
);
127 /* special conversion functions */
128 const char * swfdec_as_double_to_string (SwfdecAsContext
* context
,
130 const char * swfdec_as_str_concat (SwfdecAsContext
* cx
,