| // 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 VM_RESOLVER_H_ |
| #define VM_RESOLVER_H_ |
| |
| #include "vm/allocation.h" |
| |
| namespace dart { |
| |
| // Forward declarations. |
| class Array; |
| class Class; |
| class Instance; |
| class Library; |
| class RawFunction; |
| class String; |
| |
| |
| // Resolver abstracts functionality needed to resolve dart functions at |
| // invocations. |
| class Resolver : public AllStatic { |
| public: |
| // Resolve specified dart instance function. |
| static RawFunction* ResolveDynamic(const Instance& receiver, |
| const String& function_name, |
| int num_arguments, |
| int num_named_arguments); |
| |
| static RawFunction* ResolveDynamicForReceiverClass( |
| const Class& receiver_class, |
| const String& function_name, |
| int num_arguments, |
| int num_named_arguments); |
| |
| static RawFunction* ResolveDynamicAnyArgs( |
| const Class& receiver_class, |
| const String& function_name); |
| |
| enum StaticResolveType { |
| kIsQualified, |
| kNotQualified |
| }; |
| |
| // Resolve specified dart static function. If library.IsNull, use |
| // either application library or core library if no application library |
| // exists. Passing negative num_arguments means that the function |
| // will be resolved by name only. |
| // Otherwise null is returned if the number or names of arguments are not |
| // valid for the resolved function. |
| static RawFunction* ResolveStatic(const Library& library, |
| const String& cls_name, |
| const String& function_name, |
| int num_arguments, |
| const Array& argument_names, |
| StaticResolveType resolve_type); |
| |
| // Resolve specified dart static function. |
| static RawFunction* ResolveStaticByName(const Class& cls, |
| const String& function_name, |
| StaticResolveType resolve_type); |
| |
| // Resolve specified dart static function with specified arity. |
| static RawFunction* ResolveStatic(const Class& cls, |
| const String& function_name, |
| int num_arguments, |
| const Array& argument_names, |
| StaticResolveType resolve_type); |
| }; |
| |
| } // namespace dart |
| |
| #endif // VM_RESOLVER_H_ |