@@ -57,7 +57,15 @@ static const char* mirrorModuleSource =
57
57
" methodNames { _methodNames ||\n "
58
58
" (_methodNames = ClassMirror.methodNames(reflectee)) }\n "
59
59
" \n "
60
- " methodMirrors { _methodMirrors }\n "
60
+ " methodMirrors {\n "
61
+ " if (_methodMirrors) return _methodMirrors\n "
62
+ " \n "
63
+ " _methodMirrors = {}\n "
64
+ " for (methodName in methodNames) {\n "
65
+ " _methodMirrors[methodName] = MethodMirror.new_(this, methodName, 0)\n "
66
+ " }\n "
67
+ " return _methodMirrors\n "
68
+ " }\n "
61
69
" \n "
62
70
" hasMethod(signature) { ClassMirror.hasMethod(reflectee, signature) }\n "
63
71
" }\n "
@@ -108,8 +116,9 @@ static const char* mirrorModuleSource =
108
116
" class MethodMirror is Mirror {\n "
109
117
" foreign static signature_(signatureIndex)\n "
110
118
" \n "
111
- " construct new_(boundToClassMirror, signatureIndex) {\n "
119
+ " construct new_(boundToClassMirror, signature, signatureIndex) {\n "
112
120
" _boundToClassMirror = boundToClassMirror\n "
121
+ " _signature = signature\n "
113
122
" _signatureIndex = signatureIndex\n "
114
123
" }\n "
115
124
" \n "
@@ -120,7 +129,64 @@ static const char* mirrorModuleSource =
120
129
" // arity { MethodMirror.arity_(_method) }\n "
121
130
" // maxSlots { MethodMirror.maxSlots_(_method) }\n "
122
131
" // numUpvalues { MethodMirror.maxSlots_(_numUpvalues) }\n "
123
- " signature { MethodMirror.signature_(_method) }\n "
132
+ " signature { _signature }\n "
133
+ " \n "
134
+ " toString { _signature.toString }\n "
135
+ " \n "
136
+ " validate_(self, arity) {\n "
137
+ " if (ObjectMirror.typeOf(self) != _boundToClassMirror.reflectee) Fiber.abort()\n "
138
+ " //if (arity != this.arity) Fiber.abort()\n "
139
+ " return self\n "
140
+ " }\n "
141
+ " \n "
142
+ " call(self) {\n "
143
+ " return validate_(self, 0).@\" %(signature)\" ()\n "
144
+ " }\n "
145
+ " call(self, arg0) {\n "
146
+ " return validate_(self, 1).@\" %(signature)\" (arg0)\n "
147
+ " }\n "
148
+ " call(self, arg0, arg1) {\n "
149
+ " return validate_(self, 2).@\" %(signature)\" (arg0, arg1)\n "
150
+ " }\n "
151
+ " call(self, arg0, arg1, arg2) {\n "
152
+ " return validate_(self, 3).@\" %(signature)\" (arg0, arg1, arg2)\n "
153
+ " }\n "
154
+ " call(self, arg0, arg1, arg2, arg3) {\n "
155
+ " return validate_(self, 4).@\" %(signature)\" (arg0, arg1, arg2, arg3)\n "
156
+ " }\n "
157
+ " call(self, arg0, arg1, arg2, arg3, arg4) {\n "
158
+ " return validate_(self, 5).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4)\n "
159
+ " }\n "
160
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5) {\n "
161
+ " return validate_(self, 6).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5)\n "
162
+ " }\n "
163
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6) {\n "
164
+ " return validate_(self, 7).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6)\n "
165
+ " }\n "
166
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n "
167
+ " return validate_(self, 8).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7)\n "
168
+ " }\n "
169
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) {\n "
170
+ " return validate_(self, 9).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8)\n "
171
+ " }\n "
172
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {\n "
173
+ " return validate_(self, 10).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)\n "
174
+ " }\n "
175
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n "
176
+ " return validate_(self, 11).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10)\n "
177
+ " }\n "
178
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11) {\n "
179
+ " return validate_(self, 12).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11)\n "
180
+ " }\n "
181
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12) {\n "
182
+ " return validate_(self, 13).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12)\n "
183
+ " }\n "
184
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13) {\n "
185
+ " return validate_(self, 14).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13)\n "
186
+ " }\n "
187
+ " call(self, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14) {\n "
188
+ " return validate_(self, 15).@\" %(signature)\" (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14)\n "
189
+ " }\n "
124
190
" }\n "
125
191
" \n "
126
192
" class ModuleMirror is Mirror {\n "
0 commit comments