Mercurial > MadButterfly
annotate tools/gen_v8_binding.m4 @ 1209:41d13feeecc4
Doc MBScene
author | Thinker K.F. Li <thinker@codemud.net> |
---|---|
date | Tue, 04 Jan 2011 10:53:59 +0800 |
parents | e21ccbc4afb1 |
children | 67282421b0ac |
rev | line source |
---|---|
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
1 dnl |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
2 dnl Developers should provide SET, WRAP, UNWRAP, and THROW C macros. |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
3 dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
4 changequote(`[', `]')dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
5 include([foreach.m4])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
6 divert([-1])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
7 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
8 define([UNQUOTE], [$*]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
9 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
10 define([QUOTE], [[[$*]]]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
11 |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
12 define([VARFRAME], [dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
13 pushdef([_FRAME_VARS], [])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
14 ]) |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
15 |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
16 define([UNVARFRAME], [dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
17 EXPAND(_FRAME_VARS)dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
18 popdef([_FRAME_VARS])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
19 ]) |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
20 |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
21 define([fdefine], [dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
22 pushdef([$1], [$2])dnl |
678
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
23 define([_FRAME_VARS], QUOTE(_FRAME_VARS[popdef([$1])]))dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
24 ]) |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
25 |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
26 define([COUNT],[ifelse([$*],[],0,[$#])]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
27 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
28 define([IMPORT],[define([$1],[$2$1(]$[]@[)])]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
29 |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
30 define([EXPAND], [$1]) |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
31 |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
32 define([PROJ_PREFIX], [xnjsmb_]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
33 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
34 define([START_ACCESSOR], [dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
35 divert([-1])dnl |
678
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
36 VARFRAME[]dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
37 fdefine([INT], [ |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
38 static Handle<Value> |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
39 ]PROJ_PREFIX[]STRUCT_NAME[_get_$][1(Local<String> property, const AccessorInfo &info) { |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
40 Handle<Object> self = info.This(); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
41 STRUCT_TYPE *data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
42 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
43 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
44 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
45 THROW("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
46 return Integer::New(data->$][1); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
47 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
48 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
49 static void |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
50 ]PROJ_PREFIX[]STRUCT_NAME[_set_$][1(Local<String> property, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
51 Local<Value> value, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
52 const AccessorInfo &info) { |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
53 Handle<Object> self = info.This(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
54 STRUCT_TYPE *data; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
55 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
56 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
57 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
58 THROW_noret("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
59 data->$][1 = value->Int32Value(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
60 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
61 ]) |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
62 fdefine([NUMBER], [ |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
63 static Handle<Value> |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
64 ]PROJ_PREFIX[]STRUCT_NAME[_get_$][1(Local<String> property, const AccessorInfo &info) { |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
65 Handle<Object> self = info.This(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
66 STRUCT_TYPE *data; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
67 |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
68 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
69 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
70 THROW("Invalid object"); |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
71 return Number::New(data->$][1); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
72 } |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
73 |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
74 static void |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
75 ]PROJ_PREFIX[]STRUCT_NAME[_set_$][1(Local<String> property, |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
76 Local<Value> value, |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
77 const AccessorInfo &info) { |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
78 Handle<Object> self = info.This(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
79 STRUCT_TYPE *data; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
80 |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
81 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
82 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
83 THROW_noret("Invalid object"); |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
84 data->$][1 = value->NumberValue(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
85 } |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
86 ]) |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
87 fdefine([OBJ], [ |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
88 static Handle<Value> |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
89 ]PROJ_PREFIX[]STRUCT_NAME[_get_$][1(Local<String> property, const AccessorInfo &info) { |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
90 Handle<Object> self = info.This(); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
91 STRUCT_TYPE *data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
92 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
93 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
94 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
95 THROW("Invalid object"); |
657
32d0eef1ee46
Force type-casting for member variables.
Thinker K.F. Li <thinker@branda.to>
parents:
651
diff
changeset
|
96 return ]PROJ_PREFIX[$][2_new(($][3 *)data->$][1); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
97 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
98 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
99 static void |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
100 ]PROJ_PREFIX[]STRUCT_NAME[_set_$][1(Local<String> property, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
101 Local<Value> value, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
102 const AccessorInfo &info) { |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
103 Handle<Object> self = info.This(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
104 Handle<Object> obj; |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
105 $][3 *v; |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
106 STRUCT_TYPE *data; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
107 |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
108 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
109 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
110 THROW_noret("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
111 obj = value->ToObject(); |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
112 v = ($][3 *)UNWRAP(obj); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
113 if(v == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
114 THROW_noret("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
115 data->$][1 = v; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
116 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
117 ]) |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
118 fdefine([ARRAY], [ |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
119 static Handle<Value> |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
120 ]PROJ_PREFIX[]STRUCT_NAME[_get_$][1(Local<String> property, const AccessorInfo &info) { |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
121 Handle<Object> self = info.This(); |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
122 STRUCT_TYPE *data; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
123 |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
124 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
125 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
126 THROW("Invalid object"); |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
127 return data->$][1; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
128 } |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
129 |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
130 static void |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
131 ]PROJ_PREFIX[]STRUCT_NAME[_set_$][1(Local<String> property, |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
132 Local<Value> value, |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
133 const AccessorInfo &info) { |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
134 Handle<Object> self = info.This(); |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
135 Handle<Object> obj; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
136 STRUCT_TYPE *data; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
137 |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
138 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
139 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
140 THROW_noret("Invalid object"); |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
141 data->$][1 = value; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
142 } |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
143 ]) |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
144 fdefine([STR], [ |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
145 static Handle<Value> |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
146 ]PROJ_PREFIX[]STRUCT_NAME[_get_$][1(Local<String> property, const AccessorInfo &info) { |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
147 Handle<Object> self = info.This(); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
148 STRUCT_TYPE *data; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
149 |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
150 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
151 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
152 THROW("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
153 return String::New(data->$][1); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
154 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
155 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
156 static void |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
157 ]PROJ_PREFIX[]STRUCT_NAME[_set_$][1(Local<String> property, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
158 Local<Value> value, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
159 const AccessorInfo &info) { |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
160 Handle<Object> self = info.This(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
161 STRUCT_TYPE *data; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
162 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
163 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
164 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
165 THROW_noret("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
166 String::Utf8Value utf8(value->ToString()); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
167 free(data->$][1); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
168 data->$][1 = strdup(*utf8); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
169 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
170 ]) |
674
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
171 dnl |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
172 dnl ACCESSOR(name, getter, setter) |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
173 dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
174 fdefine([ACCESSOR], [ |
674
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
175 static Handle<Value> |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
176 ]PROJ_PREFIX[]STRUCT_NAME[_get_$][1(Local<String> property, const AccessorInfo &info) { |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
177 Handle<Object> self = info.This(); |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
178 Handle<Value> _ret; |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
179 STRUCT_TYPE *data; |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
180 const char *err = NULL; |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
181 |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
182 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
183 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
184 THROW("Invalid object"); |
674
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
185 _ret = $][2(self, data, &err); |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
186 if(err) |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
187 THROW(err); |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
188 return _ret; |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
189 } |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
190 |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
191 static void |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
192 ]PROJ_PREFIX[]STRUCT_NAME[_set_$][1(Local<String> property, |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
193 Local<Value> value, |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
194 const AccessorInfo &info) { |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
195 Handle<Object> self = info.This(); |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
196 STRUCT_TYPE *data; |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
197 const char *err = NULL; |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
198 |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
199 data = (STRUCT_TYPE *)UNWRAP(self); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
200 if(data == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
201 THROW_noret("Invalid object"); |
674
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
202 $][3(self, data, value, &err); |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
203 if(err) |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
204 THROW_noret(err); |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
205 } |
5c8387fd123e
Support user defined accessors on binding generated
Thinker K.F. Li <thinker@branda.to>
parents:
670
diff
changeset
|
206 ]) |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
207 divert([])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
208 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
209 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
210 define([STOP_ACCESSOR], [dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
211 divert([-1])dnl |
678
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
212 UNVARFRAME[]dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
213 divert([])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
214 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
215 |
809 | 216 define([SET_ACCESSOR], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
217 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
218 fdefine([INT], [$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
219 fdefine([NUMBER], [$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
220 fdefine([OBJ], [$][1])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
221 fdefine([ARRAY], [$][1])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
222 fdefine([STR], [$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
223 fdefine([ACCESSOR], [$][1])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
224 inst_temp->SetAccessor(String::New("$1"), |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
225 PROJ_PREFIX[]STRUCT_NAME[]_get_[]$1, |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
226 PROJ_PREFIX[]STRUCT_NAME[]_set_[]$1); |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
227 UNVARFRAME[]dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
228 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
229 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
230 define([START_METHOD_ARG_VAR], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
231 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
232 fdefine([INT], [dnl |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
233 int arg_$][1; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
234 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
235 fdefine([NUMBER], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
236 double arg_$][1; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
237 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
238 fdefine([OBJ], [dnl |
663
974d98233eab
Fix mis-using of arguments of OBJ() argument type
Thinker K.F. Li <thinker@branda.to>
parents:
660
diff
changeset
|
239 $][3 *arg_$][1; |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
240 ])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
241 fdefine([ARRAY], [dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
242 Handle<Value> arg_$][1; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
243 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
244 fdefine([STR], [dnl |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
245 char *arg_$][1; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
246 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
247 fdefine([FUNC], [dnl |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
248 Handle<Function> arg_$][1; |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
249 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
250 fdefine([SELF], [])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
251 fdefine([ERR], [])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
252 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
253 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
254 define([START_METHOD_ARG_TYPE_CHK], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
255 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
256 fdefine([INT], [ || |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
257 !args[[i++]]->IsInt32()])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
258 fdefine([NUMBER], [ || |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
259 !args[[i++]]->IsNumber()])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
260 fdefine([OBJ], [ || |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
261 !args[[i++]]->IsObject()])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
262 fdefine([ARRAY], [ || |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
263 !args[[i++]]->IsArray()])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
264 fdefine([STR], [ || |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
265 !args[[i++]]->IsString()])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
266 fdefine([FUNC], [ || |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
267 !args[[i++]]->IsFunction()])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
268 fdefine([SELF], [])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
269 fdefine([ERR], [])dnl |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
270 ]) |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
271 |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
272 define([START_TYPE_CHK], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
273 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
274 fdefine([INT], [$1->IsInt32()])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
275 fdefine([NUMBER], [$1->IsNumber()])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
276 fdefine([OBJ], [$1->IsObject()])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
277 fdefine([ARRAY], [$1->IsArray()])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
278 fdefine([STR], [$1->IsString()])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
279 fdefine([FUNC], [$1->IsFunction()])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
280 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
281 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
282 define([START_METHOD_ARG_ASSIGN], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
283 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
284 fdefine([INT], [dnl |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
285 arg_$][1 = args[[i++]]->Int32Value(); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
286 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
287 fdefine([NUMBER], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
288 arg_$][1 = args[[i++]]->NumberValue(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
289 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
290 fdefine([OBJ], [dnl |
663
974d98233eab
Fix mis-using of arguments of OBJ() argument type
Thinker K.F. Li <thinker@branda.to>
parents:
660
diff
changeset
|
291 arg_$][1 = ($][3 *)UNWRAP(args[[i++]]->ToObject()); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
292 if(arg_$][1 == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
293 THROW("Invalid argument"); |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
294 ])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
295 fdefine([ARRAY], [dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
296 arg_$][1 = args[[i++]]; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
297 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
298 fdefine([STR], [dnl |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
299 arg_$][1 = strdup(*String::Utf8Value(args[[i++]]->ToString())); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
300 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
301 fdefine([FUNC], [dnl |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
302 arg_$][1 = args[[i++]].As<Function>(); |
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
303 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
304 fdefine([SELF], [])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
305 fdefine([ERR], [])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
306 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
307 |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
308 define([START_VALUE_ASSIGN], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
309 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
310 fdefine([INT], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
311 $1 = $2->Int32Value(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
312 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
313 fdefine([NUMBER], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
314 $1 = $2->NumberValue(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
315 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
316 fdefine([OBJ], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
317 $1 = ($][2 *)UNWRAP($2->ToObject()); |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
318 if($1 == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
319 THROW("Invalid argument"); |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
320 ])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
321 fdefine([ARRAY], [dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
322 $1 = $2; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
323 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
324 fdefine([STR], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
325 $1 = strdup(*String::Utf8Value($2->ToString())); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
326 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
327 fdefine([FUNC], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
328 $1 = $2.As<Function>(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
329 ])dnl |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
330 ]) |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
331 |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
332 define([START_METHOD_ARG_PASS], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
333 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
334 fdefine([INT], [arg_$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
335 fdefine([NUMBER], [arg_$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
336 fdefine([OBJ], [arg_$][1])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
337 fdefine([ARRAY], [arg_$][1])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
338 fdefine([STR], [arg_$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
339 fdefine([FUNC], [arg_$][1])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
340 fdefine([SELF], [self])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
341 fdefine([ERR], [&_err])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
342 fdefine([VAL], [&_err])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
343 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
344 |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
345 define([START_METHOD_RET_VAL], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
346 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
347 fdefine([INT], [dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
348 int _ret; |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
349 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
350 fdefine([NUMBER], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
351 double _ret; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
352 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
353 fdefine([OBJ], [dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
354 $][2 *_ret; |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
355 ])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
356 fdefine([ARRAY], [dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
357 Handle<Value> _ret; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
358 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
359 fdefine([STR], [dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
360 char *_ret; |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
361 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
362 fdefine([FUNC], [dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
363 Handle<Function> _ret; |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
364 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
365 fdefine([VAL], [dnl |
670
f0b4fbcd1c51
Support encapsulated method & function return Handle<Value> directly
Thinker K.F. Li <thinker@branda.to>
parents:
669
diff
changeset
|
366 Handle<Value> _ret; |
f0b4fbcd1c51
Support encapsulated method & function return Handle<Value> directly
Thinker K.F. Li <thinker@branda.to>
parents:
669
diff
changeset
|
367 ])dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
368 ]) |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
369 |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
370 define([START_VAR], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
371 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
372 fdefine([INT], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
373 int $1; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
374 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
375 fdefine([NUMBER], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
376 double $1; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
377 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
378 fdefine([OBJ], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
379 $][2 *$1; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
380 ])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
381 fdefine([ARRAY], [dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
382 Handle<Value> *$1; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
383 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
384 fdefine([STR], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
385 char *$1; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
386 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
387 fdefine([FUNC], [dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
388 Handle<Function> $1; |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
389 ])dnl |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
390 ]) |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
391 |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
392 define([START_METHOD_RET_ASSIGN], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
393 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
394 fdefine([INT], [_ret = (int)])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
395 fdefine([NUMBER], [_ret = (double)])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
396 fdefine([OBJ], [_ret = ($][2 *)])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
397 fdefine([ARRAY], [_ret = ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
398 fdefine([STR], [_ret = (char *)])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
399 fdefine([FUNC], [_ret = ])dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
400 fdefine([VAL], [_ret = ])dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
401 ]) |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
402 |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
403 define([START_METHOD_RET], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
404 VARFRAME[]dnl |
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
405 fdefine([INT], [ |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
406 _ret_val = Integer::New(_ret); |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
407 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
408 fdefine([NUMBER], [ |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
409 _ret_val = Number::New(_ret); |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
410 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
411 fdefine([OBJ], [ |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
412 _ret_val = PROJ_PREFIX[]$][1[]_new(_ret); |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
413 ])dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
414 fdefine([ARRAY], [ |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
415 _ret_val = _ret; |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
416 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
417 fdefine([STR], [ |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
418 _ret_val = String::New(_ret); |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
419 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
420 fdefine([FUNC], [ |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
421 _rt_val = _ret; |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
422 ])dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
423 fdefine([VAL], [ |
670
f0b4fbcd1c51
Support encapsulated method & function return Handle<Value> directly
Thinker K.F. Li <thinker@branda.to>
parents:
669
diff
changeset
|
424 _rt_val = _ret; |
f0b4fbcd1c51
Support encapsulated method & function return Handle<Value> directly
Thinker K.F. Li <thinker@branda.to>
parents:
669
diff
changeset
|
425 ])dnl |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
426 ]) |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
427 |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
428 define([STOP_METHOD_ARG], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
429 UNVARFRAME[]dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
430 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
431 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
432 define([START_METHOD], [dnl |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
433 dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
434 dnl METHOD(name, func, arguments, cnt, ret_type, options) |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
435 dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
436 define([METHOD], [ |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
437 VARFRAME[]dnl |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
438 dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
439 ifelse($][6, [], [], [dnl |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
440 foreach([ITER], ]$][6[, [EXPAND([fdefine]ITER)])dnl |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
441 ])dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
442 dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
443 static Handle<Value> |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
444 PROJ_PREFIX[]STRUCT_NAME[]_$][1(const Arguments &args) { |
669
eeea1b593a2f
Add handle scope for function and method generated
Thinker K.F. Li <thinker@branda.to>
parents:
668
diff
changeset
|
445 HandleScope scope; |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
446 int i; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
447 int argc = args.Length(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
448 Handle<Object> self = args.This(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
449 STRUCT_TYPE *_self = (STRUCT_TYPE *)UNWRAP(self); |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
450 const char *_err = NULL; |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
451 foreach([ITER], $][3, [START_METHOD_ARG_VAR[]ITER[]STOP_METHOD_ARG])dnl |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
452 START_METHOD_RET_VAL[]$][5[]STOP_METHOD_ARG |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
453 Handle<Value> _ret_val; |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
454 |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
455 if(_self == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
456 THROW("Invalid object"); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
457 if(argc != $][4) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
458 THROW("Invalid number of arguments (!=$][4)"); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
459 i = 0; |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
460 if(0[]dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
461 foreach([ITER], $][3, [START_METHOD_ARG_TYPE_CHK[]ITER[]STOP_METHOD_ARG])) |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
462 THROW("Invalid argument type"); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
463 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
464 i = 0; |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
465 foreach([ITER], $][3, [START_METHOD_ARG_ASSIGN[]ITER[]STOP_METHOD_ARG])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
466 |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
467 START_METHOD_RET_ASSIGN[]$][5[]STOP_METHOD_ARG[]$][2(_self[]foreach([ITER], $][3, [START_METHOD_ARG_PASS[], ITER[]STOP_METHOD_ARG])); |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
468 if(_err) |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
469 THROW(_err); |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
470 START_METHOD_RET[]$][5[]STOP_METHOD_ARG[]dnl |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
471 ifelse($][5, [], [ |
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
472 return Null(); |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
473 ], [dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
474 dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
475 dnl Modify returned object |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
476 dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
477 ifdef([MOD], [ |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
478 MOD[](self, _ret_val); |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
479 ])dnl |
669
eeea1b593a2f
Add handle scope for function and method generated
Thinker K.F. Li <thinker@branda.to>
parents:
668
diff
changeset
|
480 scope.Close(_ret_val); |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
481 return _ret_val; |
649
2030e5d9f7f7
Support return value for methodes of JS binding
Thinker K.F. Li <thinker@branda.to>
parents:
648
diff
changeset
|
482 ])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
483 } |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
484 UNVARFRAME[]dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
485 ])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
486 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
487 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
488 define([STOP_METHOD], [undefine([METHOD])]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
489 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
490 define([SET_METHOD], [dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
491 define([METHOD], [dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
492 SET(proto_temp, "$][1", |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
493 FunctionTemplate::New(PROJ_PREFIX[]STRUCT_NAME[]_$][1)); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
494 ])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
495 $1[]dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
496 undefine([METHOD])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
497 ]) |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
498 |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
499 define([DEF_GET_INDEX], [ |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
500 static Handle<Value> |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
501 PROJ_PREFIX[]STRUCT_NAME[]_get_index(uint32_t index, const AccessorInfo &info) { |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
502 Handle<Object> self = info.This(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
503 STRUCT_TYPE *obj = (STRUCT_TYPE *)UNWRAP(self); |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
504 const char *_err = NULL; |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
505 START_METHOD_RET_VAL[]$2[]STOP_METHOD_ARG[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
506 Handle<Value> _ret_val; |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
507 |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
508 if(obj == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
509 THROW("Invalid object"); |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
510 _ret = $1(obj, self, index, &_err); |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
511 if(_err) |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
512 THROW(_err); |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
513 START_METHOD_RET[]$2[]STOP_METHOD_ARG[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
514 return _ret_val; |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
515 } |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
516 ]) |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
517 |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
518 define([DEF_SET_INDEX], [ |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
519 static Handle<Value> |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
520 PROJ_PREFIX[]STRUCT_NAME[]_set_index(uint32_t index, Local<Value> value, |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
521 const AccessorInfo &info) { |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
522 Handle<Object> self = info.This(); |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
523 STRUCT_TYPE *obj = (STRUCT_TYPE *)UNWRAP(self); |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
524 const char *_err = NULL; |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
525 START_VAR([in_value])[]$2[]STOP_METHOD_ARG[]dnl |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
526 START_METHOD_RET_VAL[]$2[]STOP_METHOD_ARG[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
527 Handle<Value> _ret_val; |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
528 |
740
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
529 if(obj == NULL) |
00a8c8a9e157
Check if an object valid in gen_v8_binding.m4
Thinker K.F. Li <thinker@codemud.net>
parents:
682
diff
changeset
|
530 THROW("Invalid object"); |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
531 if(START_TYPE_CHK(value)[]![]$2[]STOP_METHOD_ARG) |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
532 THROW("Invalid value type"); |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
533 |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
534 START_VALUE_ASSIGN(in_value, value)[]$2[]STOP_METHOD_ARG[]dnl |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
535 _ret = $1(obj, self, index, in_value, &_err); |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
536 if(_err) THROW(_err); |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
537 START_METHOD_RET[]$2[]STOP_METHOD_ARG[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
538 return _ret_val; |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
539 } |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
540 ]) |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
541 |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
542 define([INSTALL_INDEX_FUNCTIONS],[dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
543 define([FIRST], [$][1])dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
544 ifdef([GET_INDEX], [ifdef([SET_INDEX], [dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
545 inst_temp->SetIndexedPropertyHandler(PROJ_PREFIX[]STRUCT_NAME[]_get_index, |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
546 PROJ_PREFIX[]STRUCT_NAME[]_set_index); |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
547 ], [dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
548 inst_temp->SetIndexedPropertyHandler(PROJ_PREFIX[]STRUCT_NAME[]_get_index); |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
549 ])])dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
550 undefine([FIRST])dnl |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
551 ]) |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
552 |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
553 define([CTOR_INTERNAL], [dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
554 int argc = args.Length(); |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
555 Handle<Object> self = args.This(); |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
556 $4 *obj; |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
557 foreach([ITER], $2, [START_METHOD_ARG_VAR[]ITER[]STOP_METHOD_ARG])dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
558 int i; |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
559 |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
560 if(argc != $3) |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
561 THROW("Invalid number of arguments (!=$][4)"); |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
562 i = 0; |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
563 if(0]dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
564 [foreach([ITER], $2, [START_METHOD_ARG_TYPE_CHK[]ITER[]STOP_METHOD_ARG])) |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
565 THROW("Invalid argument type"); |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
566 |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
567 i = 0; |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
568 foreach([ITER], $2, [START_METHOD_ARG_ASSIGN[]ITER[]STOP_METHOD_ARG])dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
569 |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
570 define([SEP], [])dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
571 obj = ($4 *)$1(foreach([ITER], $2, [START_METHOD_ARG_PASS[]SEP[]ITER[]STOP_METHOD_ARG[]define([SEP], [, ])]));[]undefine([SEP]) |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
572 |
678
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
573 WRAP(self, obj);] |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
574 ifdef([STMOD], [ |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
575 STMOD(self, obj); |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
576 ])dnl |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
577 ) |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
578 |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
579 dnl |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
580 dnl STRUCT(struct_name, struct_type, member_vars, methods, options) |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
581 dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
582 define([STRUCT], [dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
583 define([STRUCT_NAME], [$1])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
584 define([STRUCT_TYPE], [$2])dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
585 dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
586 VARFRAME[]dnl |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
587 ifelse([$5], [], [], [dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
588 foreach([ITER], $5, [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
589 EXPAND([fdefine]ITER)[]dnl |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
590 ])dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
591 ])dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
592 dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
593 [ |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
594 /* ************************************************** |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
595 * STRUCT: $1 |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
596 * Generated by gen_v8_binding.m4 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
597 */ |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
598 static Handle<Value> |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
599 ]PROJ_PREFIX[$1(const Arguments &args) { |
664
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
600 ]ifdef([CTOR], [EXPAND([CTOR_INTERNAL](EXPAND([UNQUOTE]CTOR), [$2]))])dnl |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
601 return Null(); |
08fd45d119c9
Binding generator supports self-init constructor function
Thinker K.F. Li <thinker@branda.to>
parents:
663
diff
changeset
|
602 [} |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
603 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
604 static Persistent<FunctionTemplate> ]PROJ_PREFIX[$1][_temp; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
605 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
606 static Handle<Value> |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
607 ]PROJ_PREFIX[$1][_new($2 *data) { |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
608 Handle<Object> obj; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
609 Handle<Function> func; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
610 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
611 func = ]PROJ_PREFIX[$1][_temp->GetFunction(); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
612 obj = func->NewInstance(); |
678
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
613 WRAP(obj, data);] |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
614 ifdef([STMOD], [ |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
615 STMOD[(obj, data)]; |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
616 ])dnl |
40ba8915edc7
Support modifier function after creating a new object
Thinker K.F. Li <thinker@branda.to>
parents:
677
diff
changeset
|
617 [ return obj; |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
618 } |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
619 ]dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
620 foreach([ITER], ($3), [START_ACCESSOR ITER STOP_ACCESSOR])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
621 foreach([ITER], ($4), [START_METHOD ITER STOP_METHOD])dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
622 ifdef([GET_INDEX], [EXPAND([DEF_GET_INDEX]GET_INDEX)])dnl |
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
623 ifdef([SET_INDEX], [EXPAND([DEF_SET_INDEX]SET_INDEX)])dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
624 [ |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
625 static void |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
626 ]PROJ_PREFIX[$1][_init(void) { |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
627 Handle<FunctionTemplate> func_temp; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
628 Handle<ObjectTemplate> inst_temp; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
629 Handle<ObjectTemplate> proto_temp; |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
630 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
631 func_temp = FunctionTemplate::New(]PROJ_PREFIX[$1); |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
632 func_temp->SetClassName(String::New("]STRUCT_NAME[")); |
682
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
633 ]ifdef([INHERIT], [dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
634 func_temp->Inherit(]PROJ_PREFIX[]INHERIT[_temp); |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
635 ])dnl |
4a38e571cfce
Add ARRAY argument type and INHERIT supporting for STRUCT
Thinker K.F. Li <thinker@branda.to>
parents:
678
diff
changeset
|
636 [ inst_temp = func_temp->InstanceTemplate(); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
637 inst_temp->SetInternalFieldCount(1); |
809 | 638 ]foreach([ITER], ($3), [SET_ACCESSOR(ITER)])dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
639 INSTALL_INDEX_FUNCTIONS[]dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
640 |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
641 proto_temp = func_temp->PrototypeTemplate(); |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
642 foreach([ITER], ($4), [SET_METHOD(ITER)])dnl |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
643 |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
644 PROJ_PREFIX[$1][_temp = Persistent<FunctionTemplate>::New(func_temp); |
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
645 }]dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
646 dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
647 UNVARFRAME[]dnl |
659
d4aa1cce0af7
Supporting setter/Getter of index of objects for JS
Thinker K.F. Li <thinker@branda.to>
parents:
657
diff
changeset
|
648 dnl |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
649 ]) |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
650 |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
651 dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
652 dnl FUNCTION(func_name, real_func, arguments, arguement_count, |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
653 dnl return_type, options) |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
654 dnl |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
655 define([FUNCTION], [dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
656 dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
657 VARFRAME[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
658 ifelse($6, [], [], [dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
659 foreach([ITER], $6, [EXPAND([fdefine]ITER)])dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
660 ])dnl |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
661 dnl |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
662 /* ************************************************** |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
663 * [FUNCTION]: $1 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
664 * Generated by gen_v8_binding.m4 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
665 */ |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
666 static Handle<Value> |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
667 PROJ_PREFIX[]$1(const Arguments &args) { |
669
eeea1b593a2f
Add handle scope for function and method generated
Thinker K.F. Li <thinker@branda.to>
parents:
668
diff
changeset
|
668 HandleScope scope; |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
669 int argc = args.Length(); |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
670 int i; |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
671 const char *_err = NULL; |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
672 foreach([ITER], ($3), [START_METHOD_ARG_VAR[]ITER[]STOP_METHOD_ARG])dnl |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
673 START_METHOD_RET_VAL[]$5[]STOP_METHOD_ARG[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
674 Handle<Value> _ret_val; |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
675 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
676 if(argc != $4) |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
677 THROW("Invalid number of arguments (!=$][4)"); |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
678 i = 0; |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
679 if(0]dnl |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
680 [foreach([ITER], ($3), [START_METHOD_ARG_TYPE_CHK[]ITER[]STOP_METHOD_ARG])) |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
681 THROW("Invalid argument type"); |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
682 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
683 i = 0; |
651
aa52883534fc
Code generated by generator can be built
Thinker K.F. Li <thinker@branda.to>
parents:
650
diff
changeset
|
684 foreach([ITER], ($3), [START_METHOD_ARG_ASSIGN[]ITER[]STOP_METHOD_ARG])dnl |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
685 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
686 define([SEP], [])dnl |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
687 START_METHOD_RET_ASSIGN[]$5[]STOP_METHOD_ARG[]$2(foreach([ITER], ($3), [START_METHOD_ARG_PASS[]SEP[]ITER[]STOP_METHOD_ARG[]define([SEP], [, ])]));[]undefine([SEP]) |
660
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
688 if(_err) |
dde4e3cc9529
Enabling error handling on binding
Thinker K.F. Li <thinker@branda.to>
parents:
659
diff
changeset
|
689 THROW(_err); |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
690 START_METHOD_RET[]$][5[]STOP_METHOD_ARG[]dnl |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
691 ifelse($][5, [], [ |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
692 return Null(); |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
693 ], [dnl |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
694 dnl |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
695 dnl Modify returned object |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
696 dnl |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
697 ifdef([MOD], [ |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
698 MOD[](self, _ret_val); |
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
699 ])dnl |
669
eeea1b593a2f
Add handle scope for function and method generated
Thinker K.F. Li <thinker@branda.to>
parents:
668
diff
changeset
|
700 scope.Close(_ret_val); |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
701 return _ret_val; |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
702 ])dnl |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
703 } |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
704 static Persistent<FunctionTemplate> PROJ_PREFIX[]$1[]_temp; |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
705 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
706 static void |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
707 PROJ_PREFIX[]$1[]_init(void) { |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
708 Handle<FunctionTemplate> func_temp; |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
709 |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
710 func_temp = FunctionTemplate::New(PROJ_PREFIX[]$1); |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
711 PROJ_PREFIX[]$1[]_temp = Persistent<FunctionTemplate>::New(func_temp); |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
712 } |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
713 dnl |
677
efa666d118e5
Use variable frame to maintain macros
Thinker K.F. Li <thinker@branda.to>
parents:
674
diff
changeset
|
714 UNVARFRAME[]dnl |
668
916dc9723086
Fix issue of return value of code generated
Thinker K.F. Li <thinker@branda.to>
parents:
664
diff
changeset
|
715 dnl |
650
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
716 ]) |
123e7eeff10c
Generate JS binding for a function
Thinker K.F. Li <thinker@branda.to>
parents:
649
diff
changeset
|
717 |
648
e13dbfd37eab
JS binding generator and observer definition with the generator
Thinker K.F. Li <thinker@branda.to>
parents:
diff
changeset
|
718 divert([])dnl |