Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(300)

Side by Side Diff: runtime/vm/resolver.cc

Issue 1709603002: Cleanups (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | runtime/vm/reusable_handles.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/object.h" 11 #include "vm/object.h"
11 #include "vm/object_store.h" 12 #include "vm/object_store.h"
12 #include "vm/symbols.h" 13 #include "vm/symbols.h"
13 14
14 namespace dart { 15 namespace dart {
15 16
16 DEFINE_FLAG(bool, trace_resolving, false, "Trace resolving."); 17 DEFINE_FLAG(bool, trace_resolving, false, "Trace resolving.");
17 DECLARE_FLAG(bool, lazy_dispatchers); 18 DECLARE_FLAG(bool, lazy_dispatchers);
18 19
19 // The actual names of named arguments are not checked by the dynamic resolver, 20 // The actual names of named arguments are not checked by the dynamic resolver,
(...skipping 17 matching lines...) Expand all
37 const ArgumentsDescriptor& args_desc) { 38 const ArgumentsDescriptor& args_desc) {
38 39
39 Function& function = 40 Function& function =
40 Function::Handle(ResolveDynamicAnyArgs(receiver_class, function_name)); 41 Function::Handle(ResolveDynamicAnyArgs(receiver_class, function_name));
41 42
42 if (function.IsNull() || 43 if (function.IsNull() ||
43 !function.AreValidArguments(args_desc, NULL)) { 44 !function.AreValidArguments(args_desc, NULL)) {
44 // Return a null function to signal to the upper levels to dispatch to 45 // Return a null function to signal to the upper levels to dispatch to
45 // "noSuchMethod" function. 46 // "noSuchMethod" function.
46 if (FLAG_trace_resolving) { 47 if (FLAG_trace_resolving) {
47 String& error_message = String::Handle(String::New("function not found")); 48 String& error_message =
49 String::Handle(Symbols::New("function not found"));
48 if (!function.IsNull()) { 50 if (!function.IsNull()) {
49 // Obtain more detailed error message. 51 // Obtain more detailed error message.
50 function.AreValidArguments(args_desc, &error_message); 52 function.AreValidArguments(args_desc, &error_message);
51 } 53 }
52 OS::Print("ResolveDynamic error '%s': %s.\n", 54 THR_Print("ResolveDynamic error '%s': %s.\n",
53 function_name.ToCString(), 55 function_name.ToCString(),
54 error_message.ToCString()); 56 error_message.ToCString());
55 } 57 }
56 return Function::null(); 58 return Function::null();
57 } 59 }
58 return function.raw(); 60 return function.raw();
59 } 61 }
60 62
61 63
62 RawFunction* Resolver::ResolveDynamicAnyArgs( 64 RawFunction* Resolver::ResolveDynamicAnyArgs(
63 const Class& receiver_class, 65 const Class& receiver_class,
64 const String& function_name) { 66 const String& function_name) {
65 Class& cls = Class::Handle(receiver_class.raw()); 67 Class& cls = Class::Handle(receiver_class.raw());
66 if (FLAG_trace_resolving) { 68 if (FLAG_trace_resolving) {
67 OS::Print("ResolveDynamic '%s' for class %s\n", 69 THR_Print("ResolveDynamic '%s' for class %s\n",
68 function_name.ToCString(), 70 function_name.ToCString(),
69 String::Handle(cls.Name()).ToCString()); 71 String::Handle(cls.Name()).ToCString());
70 } 72 }
71 73
72 const bool is_getter = Field::IsGetterName(function_name); 74 const bool is_getter = Field::IsGetterName(function_name);
73 String& field_name = String::Handle(); 75 String& field_name = String::Handle();
74 if (is_getter) { 76 if (is_getter) {
75 field_name ^= Field::NameFromGetter(function_name); 77 field_name ^= Field::NameFromGetter(function_name);
76 78
77 if (field_name.CharAt(0) == '#') { 79 if (field_name.CharAt(0) == '#') {
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 const Object& object = Object::Handle(library.ResolveName(function_name)); 154 const Object& object = Object::Handle(library.ResolveName(function_name));
153 if (!object.IsNull() && object.IsFunction()) { 155 if (!object.IsNull() && object.IsFunction()) {
154 function ^= object.raw(); 156 function ^= object.raw();
155 if (!function.AreValidArguments(num_arguments, argument_names, NULL)) { 157 if (!function.AreValidArguments(num_arguments, argument_names, NULL)) {
156 if (FLAG_trace_resolving) { 158 if (FLAG_trace_resolving) {
157 String& error_message = String::Handle(); 159 String& error_message = String::Handle();
158 // Obtain more detailed error message. 160 // Obtain more detailed error message.
159 function.AreValidArguments(num_arguments, 161 function.AreValidArguments(num_arguments,
160 argument_names, 162 argument_names,
161 &error_message); 163 &error_message);
162 OS::Print("ResolveStatic error '%s': %s.\n", 164 THR_Print("ResolveStatic error '%s': %s.\n",
163 function_name.ToCString(), 165 function_name.ToCString(),
164 error_message.ToCString()); 166 error_message.ToCString());
165 } 167 }
166 function = Function::null(); 168 function = Function::null();
167 } 169 }
168 } else { 170 } else {
169 if (FLAG_trace_resolving) { 171 if (FLAG_trace_resolving) {
170 OS::Print("ResolveStatic error: function '%s' not found.\n", 172 THR_Print("ResolveStatic error: function '%s' not found.\n",
171 function_name.ToCString()); 173 function_name.ToCString());
172 } 174 }
173 } 175 }
174 } else { 176 } else {
175 // Lookup class_name in the library's class dictionary to get at 177 // Lookup class_name in the library's class dictionary to get at
176 // the dart class object. If class_name is not found in the dictionary 178 // the dart class object. If class_name is not found in the dictionary
177 // ResolveStatic will return a NULL function object. 179 // ResolveStatic will return a NULL function object.
178 const Class& cls = Class::Handle(library.LookupClass(class_name)); 180 const Class& cls = Class::Handle(library.LookupClass(class_name));
179 if (!cls.IsNull()) { 181 if (!cls.IsNull()) {
180 function = ResolveStatic(cls, 182 function = ResolveStatic(cls,
181 function_name, 183 function_name,
182 num_arguments, 184 num_arguments,
183 argument_names); 185 argument_names);
184 } 186 }
185 if (FLAG_trace_resolving && function.IsNull()) { 187 if (FLAG_trace_resolving && function.IsNull()) {
186 OS::Print("ResolveStatic error: function '%s.%s' not found.\n", 188 THR_Print("ResolveStatic error: function '%s.%s' not found.\n",
187 class_name.ToCString(), 189 class_name.ToCString(),
188 function_name.ToCString()); 190 function_name.ToCString());
189 } 191 }
190 } 192 }
191 return function.raw(); 193 return function.raw();
192 } 194 }
193 195
194 196
195 RawFunction* Resolver::ResolveStatic(const Class& cls, 197 RawFunction* Resolver::ResolveStatic(const Class& cls,
196 const String& function_name, 198 const String& function_name,
197 intptr_t num_arguments, 199 intptr_t num_arguments,
198 const Array& argument_names) { 200 const Array& argument_names) {
199 ASSERT(!cls.IsNull()); 201 ASSERT(!cls.IsNull());
200 if (FLAG_trace_resolving) { 202 if (FLAG_trace_resolving) {
201 OS::Print("ResolveStatic '%s'\n", function_name.ToCString()); 203 THR_Print("ResolveStatic '%s'\n", function_name.ToCString());
202 } 204 }
203 const Function& function = 205 const Function& function =
204 Function::Handle(cls.LookupStaticFunction(function_name)); 206 Function::Handle(cls.LookupStaticFunction(function_name));
205 if (function.IsNull() || 207 if (function.IsNull() ||
206 !function.AreValidArguments(num_arguments, argument_names, NULL)) { 208 !function.AreValidArguments(num_arguments, argument_names, NULL)) {
207 // Return a null function to signal to the upper levels to throw a 209 // Return a null function to signal to the upper levels to throw a
208 // resolution error or maybe throw the error right here. 210 // resolution error or maybe throw the error right here.
209 if (FLAG_trace_resolving) { 211 if (FLAG_trace_resolving) {
210 String& error_message = String::Handle(String::New("function not found")); 212 String& error_message = String::Handle(String::New("function not found"));
211 if (!function.IsNull()) { 213 if (!function.IsNull()) {
212 // Obtain more detailed error message. 214 // Obtain more detailed error message.
213 function.AreValidArguments(num_arguments, 215 function.AreValidArguments(num_arguments,
214 argument_names, 216 argument_names,
215 &error_message); 217 &error_message);
216 } 218 }
217 OS::Print("ResolveStatic error '%s': %s.\n", 219 THR_Print("ResolveStatic error '%s': %s.\n",
218 function_name.ToCString(), 220 function_name.ToCString(),
219 error_message.ToCString()); 221 error_message.ToCString());
220 } 222 }
221 return Function::null(); 223 return Function::null();
222 } 224 }
223 return function.raw(); 225 return function.raw();
224 } 226 }
225 227
226 228
227 RawFunction* Resolver::ResolveStaticAllowPrivate(const Class& cls, 229 RawFunction* Resolver::ResolveStaticAllowPrivate(const Class& cls,
228 const String& function_name, 230 const String& function_name,
229 intptr_t num_arguments, 231 intptr_t num_arguments,
230 const Array& argument_names) { 232 const Array& argument_names) {
231 ASSERT(!cls.IsNull()); 233 ASSERT(!cls.IsNull());
232 if (FLAG_trace_resolving) { 234 if (FLAG_trace_resolving) {
233 OS::Print("ResolveStaticAllowPrivate '%s'\n", function_name.ToCString()); 235 THR_Print("ResolveStaticAllowPrivate '%s'\n", function_name.ToCString());
234 } 236 }
235 const Function& function = 237 const Function& function =
236 Function::Handle(cls.LookupStaticFunctionAllowPrivate(function_name)); 238 Function::Handle(cls.LookupStaticFunctionAllowPrivate(function_name));
237 if (function.IsNull() || 239 if (function.IsNull() ||
238 !function.AreValidArguments(num_arguments, argument_names, NULL)) { 240 !function.AreValidArguments(num_arguments, argument_names, NULL)) {
239 // Return a null function to signal to the upper levels to throw a 241 // Return a null function to signal to the upper levels to throw a
240 // resolution error or maybe throw the error right here. 242 // resolution error or maybe throw the error right here.
241 if (FLAG_trace_resolving) { 243 if (FLAG_trace_resolving) {
242 String& error_message = String::Handle(String::New("function not found")); 244 String& error_message = String::Handle(String::New("function not found"));
243 if (!function.IsNull()) { 245 if (!function.IsNull()) {
244 // Obtain more detailed error message. 246 // Obtain more detailed error message.
245 function.AreValidArguments(num_arguments, 247 function.AreValidArguments(num_arguments,
246 argument_names, 248 argument_names,
247 &error_message); 249 &error_message);
248 } 250 }
249 OS::Print("ResolveStaticAllowPrivate error '%s': %s.\n", 251 THR_Print("ResolveStaticAllowPrivate error '%s': %s.\n",
250 function_name.ToCString(), 252 function_name.ToCString(),
251 error_message.ToCString()); 253 error_message.ToCString());
252 } 254 }
253 return Function::null(); 255 return Function::null();
254 } 256 }
255 return function.raw(); 257 return function.raw();
256 } 258 }
257 259
258 } // namespace dart 260 } // namespace dart
OLDNEW
« no previous file with comments | « no previous file | runtime/vm/reusable_handles.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698