OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/resolver.h" | 5 #include "vm/resolver.h" |
6 | 6 |
7 #include "vm/dart_entry.h" | 7 #include "vm/dart_entry.h" |
8 #include "vm/flags.h" | 8 #include "vm/flags.h" |
9 #include "vm/isolate.h" | 9 #include "vm/isolate.h" |
10 #include "vm/log.h" | 10 #include "vm/log.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 // arguments. The dynamic resolver actually checks that a valid number of named | 23 // arguments. The dynamic resolver actually checks that a valid number of named |
24 // arguments is passed in. | 24 // arguments is passed in. |
25 RawFunction* Resolver::ResolveDynamic(const Instance& receiver, | 25 RawFunction* Resolver::ResolveDynamic(const Instance& receiver, |
26 const String& function_name, | 26 const String& function_name, |
27 const ArgumentsDescriptor& args_desc) { | 27 const ArgumentsDescriptor& args_desc) { |
28 // Figure out type of receiver first. | 28 // Figure out type of receiver first. |
29 const Class& cls = Class::Handle(receiver.clazz()); | 29 const Class& cls = Class::Handle(receiver.clazz()); |
30 return ResolveDynamicForReceiverClass(cls, function_name, args_desc); | 30 return ResolveDynamicForReceiverClass(cls, function_name, args_desc); |
31 } | 31 } |
32 | 32 |
33 | |
34 RawFunction* Resolver::ResolveDynamicForReceiverClass( | 33 RawFunction* Resolver::ResolveDynamicForReceiverClass( |
35 const Class& receiver_class, | 34 const Class& receiver_class, |
36 const String& function_name, | 35 const String& function_name, |
37 const ArgumentsDescriptor& args_desc, | 36 const ArgumentsDescriptor& args_desc, |
38 bool allow_add) { | 37 bool allow_add) { |
39 Thread* thread = Thread::Current(); | 38 Thread* thread = Thread::Current(); |
40 Zone* zone = thread->zone(); | 39 Zone* zone = thread->zone(); |
41 | 40 |
42 Function& function = Function::Handle( | 41 Function& function = Function::Handle( |
43 zone, | 42 zone, |
(...skipping 10 matching lines...) Expand all Loading... |
54 function.AreValidArguments(args_desc, &error_message); | 53 function.AreValidArguments(args_desc, &error_message); |
55 } | 54 } |
56 THR_Print("ResolveDynamic error '%s': %s.\n", function_name.ToCString(), | 55 THR_Print("ResolveDynamic error '%s': %s.\n", function_name.ToCString(), |
57 error_message.ToCString()); | 56 error_message.ToCString()); |
58 } | 57 } |
59 return Function::null(); | 58 return Function::null(); |
60 } | 59 } |
61 return function.raw(); | 60 return function.raw(); |
62 } | 61 } |
63 | 62 |
64 | |
65 RawFunction* Resolver::ResolveDynamicAnyArgs(Zone* zone, | 63 RawFunction* Resolver::ResolveDynamicAnyArgs(Zone* zone, |
66 const Class& receiver_class, | 64 const Class& receiver_class, |
67 const String& function_name, | 65 const String& function_name, |
68 bool allow_add) { | 66 bool allow_add) { |
69 Class& cls = Class::Handle(zone, receiver_class.raw()); | 67 Class& cls = Class::Handle(zone, receiver_class.raw()); |
70 if (FLAG_trace_resolving) { | 68 if (FLAG_trace_resolving) { |
71 THR_Print("ResolveDynamic '%s' for class %s\n", function_name.ToCString(), | 69 THR_Print("ResolveDynamic '%s' for class %s\n", function_name.ToCString(), |
72 String::Handle(zone, cls.Name()).ToCString()); | 70 String::Handle(zone, cls.Name()).ToCString()); |
73 } | 71 } |
74 | 72 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 function ^= function.CreateMethodExtractor(function_name); | 133 function ^= function.CreateMethodExtractor(function_name); |
136 return function.raw(); | 134 return function.raw(); |
137 } | 135 } |
138 } | 136 } |
139 } | 137 } |
140 cls = cls.SuperClass(); | 138 cls = cls.SuperClass(); |
141 } | 139 } |
142 return function.raw(); | 140 return function.raw(); |
143 } | 141 } |
144 | 142 |
145 | |
146 RawFunction* Resolver::ResolveStatic(const Library& library, | 143 RawFunction* Resolver::ResolveStatic(const Library& library, |
147 const String& class_name, | 144 const String& class_name, |
148 const String& function_name, | 145 const String& function_name, |
149 intptr_t type_args_len, | 146 intptr_t type_args_len, |
150 intptr_t num_arguments, | 147 intptr_t num_arguments, |
151 const Array& argument_names) { | 148 const Array& argument_names) { |
152 ASSERT(!library.IsNull()); | 149 ASSERT(!library.IsNull()); |
153 Function& function = Function::Handle(); | 150 Function& function = Function::Handle(); |
154 if (class_name.IsNull() || (class_name.Length() == 0)) { | 151 if (class_name.IsNull() || (class_name.Length() == 0)) { |
155 // Check if we are referring to a top level function. | 152 // Check if we are referring to a top level function. |
(...skipping 28 matching lines...) Expand all Loading... |
184 argument_names); | 181 argument_names); |
185 } | 182 } |
186 if (FLAG_trace_resolving && function.IsNull()) { | 183 if (FLAG_trace_resolving && function.IsNull()) { |
187 THR_Print("ResolveStatic error: function '%s.%s' not found.\n", | 184 THR_Print("ResolveStatic error: function '%s.%s' not found.\n", |
188 class_name.ToCString(), function_name.ToCString()); | 185 class_name.ToCString(), function_name.ToCString()); |
189 } | 186 } |
190 } | 187 } |
191 return function.raw(); | 188 return function.raw(); |
192 } | 189 } |
193 | 190 |
194 | |
195 RawFunction* Resolver::ResolveStatic(const Class& cls, | 191 RawFunction* Resolver::ResolveStatic(const Class& cls, |
196 const String& function_name, | 192 const String& function_name, |
197 intptr_t type_args_len, | 193 intptr_t type_args_len, |
198 intptr_t num_arguments, | 194 intptr_t num_arguments, |
199 const Array& argument_names) { | 195 const Array& argument_names) { |
200 ASSERT(!cls.IsNull()); | 196 ASSERT(!cls.IsNull()); |
201 if (FLAG_trace_resolving) { | 197 if (FLAG_trace_resolving) { |
202 THR_Print("ResolveStatic '%s'\n", function_name.ToCString()); | 198 THR_Print("ResolveStatic '%s'\n", function_name.ToCString()); |
203 } | 199 } |
204 const Function& function = | 200 const Function& function = |
(...skipping 11 matching lines...) Expand all Loading... |
216 &error_message); | 212 &error_message); |
217 } | 213 } |
218 THR_Print("ResolveStatic error '%s': %s.\n", function_name.ToCString(), | 214 THR_Print("ResolveStatic error '%s': %s.\n", function_name.ToCString(), |
219 error_message.ToCString()); | 215 error_message.ToCString()); |
220 } | 216 } |
221 return Function::null(); | 217 return Function::null(); |
222 } | 218 } |
223 return function.raw(); | 219 return function.raw(); |
224 } | 220 } |
225 | 221 |
226 | |
227 RawFunction* Resolver::ResolveStaticAllowPrivate(const Class& cls, | 222 RawFunction* Resolver::ResolveStaticAllowPrivate(const Class& cls, |
228 const String& function_name, | 223 const String& function_name, |
229 intptr_t type_args_len, | 224 intptr_t type_args_len, |
230 intptr_t num_arguments, | 225 intptr_t num_arguments, |
231 const Array& argument_names) { | 226 const Array& argument_names) { |
232 ASSERT(!cls.IsNull()); | 227 ASSERT(!cls.IsNull()); |
233 if (FLAG_trace_resolving) { | 228 if (FLAG_trace_resolving) { |
234 THR_Print("ResolveStaticAllowPrivate '%s'\n", function_name.ToCString()); | 229 THR_Print("ResolveStaticAllowPrivate '%s'\n", function_name.ToCString()); |
235 } | 230 } |
236 const Function& function = | 231 const Function& function = |
(...skipping 12 matching lines...) Expand all Loading... |
249 } | 244 } |
250 THR_Print("ResolveStaticAllowPrivate error '%s': %s.\n", | 245 THR_Print("ResolveStaticAllowPrivate error '%s': %s.\n", |
251 function_name.ToCString(), error_message.ToCString()); | 246 function_name.ToCString(), error_message.ToCString()); |
252 } | 247 } |
253 return Function::null(); | 248 return Function::null(); |
254 } | 249 } |
255 return function.raw(); | 250 return function.raw(); |
256 } | 251 } |
257 | 252 |
258 } // namespace dart | 253 } // namespace dart |
OLD | NEW |