Mercurial > MadButterfly
annotate tools/gen_v8_binding.m4 @ 1396:a5672125e515
Copy the transformation matrix when we clone it. It looks like the MB do not copy the matrix automatically.
Support isuse attribute to decide how to generate the tweened matrix.
author | wycc |
---|---|
date | Sat, 02 Apr 2011 05:39:26 +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 |