bump libtool version
[swfdec.git] / libswfdec / swfdec_as_types.h
blob3501fac8ae1beae65bbdcefc3247f65e205cd641
1 /* Swfdec
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.
8 *
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>
25 G_BEGIN_DECLS
27 /* fundamental types */
28 typedef enum {
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,
34 SWFDEC_AS_TYPE_NULL,
35 SWFDEC_AS_TYPE_OBJECT
36 } SwfdecAsValueType;
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,
49 guint argc,
50 SwfdecAsValue * argv,
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;
58 /*< private >*/
59 union {
60 gboolean boolean;
61 double number;
62 const char * string;
63 SwfdecAsObject * object;
64 } value;
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; \
80 } G_STMT_END
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; \
88 } G_STMT_END
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; \
98 } G_STMT_END
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; \
111 } G_STMT_END
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,
129 double d);
130 const char * swfdec_as_str_concat (SwfdecAsContext * cx,
131 const char * s1,
132 const char * s2);
135 G_END_DECLS
136 #endif