|  | // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | #ifndef RUNTIME_VM_RESOLVER_H_ | 
|  | #define RUNTIME_VM_RESOLVER_H_ | 
|  |  | 
|  | #include "vm/allocation.h" | 
|  | #include "vm/tagged_pointer.h" | 
|  |  | 
|  | namespace dart { | 
|  |  | 
|  | // Forward declarations. | 
|  | class Array; | 
|  | class Class; | 
|  | class Instance; | 
|  | class Library; | 
|  | class String; | 
|  | class ArgumentsDescriptor; | 
|  |  | 
|  | // Resolver abstracts functionality needed to resolve dart functions at | 
|  | // invocations. | 
|  | class Resolver : public AllStatic { | 
|  | public: | 
|  | // If 'allow_add' is true we may add a function to the class during lookup. | 
|  | static FunctionPtr ResolveDynamicForReceiverClass( | 
|  | const Class& receiver_class, | 
|  | const String& function_name, | 
|  | const ArgumentsDescriptor& args_desc, | 
|  | bool allow_add); | 
|  |  | 
|  | static FunctionPtr ResolveDynamicForReceiverClassAllowPrivate( | 
|  | const Class& receiver_class, | 
|  | const String& function_name, | 
|  | const ArgumentsDescriptor& args_desc); | 
|  |  | 
|  | // If 'allow_add' is true we may add a function to the class during lookup. | 
|  | static FunctionPtr ResolveDynamicAnyArgs(Zone* zone, | 
|  | const Class& receiver_class, | 
|  | const String& function_name, | 
|  | bool allow_add); | 
|  |  | 
|  | // Resolve instance function [function_name] with any args, it doesn't | 
|  | // allow adding methods during resolution: [allow_add] is [false]. | 
|  | static FunctionPtr ResolveDynamicFunction(Zone* zone, | 
|  | const Class& receiver_class, | 
|  | const String& function_name); | 
|  | // Resolve static or instance function [function_name] with any args, it | 
|  | // doesn't allow adding methods during resolution: [allow_add] is [false]. | 
|  | static FunctionPtr ResolveFunction(Zone* zone, | 
|  | const Class& receiver_class, | 
|  | const String& function_name); | 
|  | }; | 
|  |  | 
|  | }  // namespace dart | 
|  |  | 
|  | #endif  // RUNTIME_VM_RESOLVER_H_ |