// Copyright (c) 2013, 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 LIB_INVOCATION_MIRROR_H_ #define LIB_INVOCATION_MIRROR_H_ #include "vm/allocation.h" namespace dart { class InvocationMirror : public AllStatic { public: // These enum correspond to the constants in invocation_mirror_patch.dart. // It is used to communicate the reason for statically thrown // NoSuchMethodErrors by the compiler. enum Type { // Constants describing the invocation type. // kField cannot be generated by regular invocation mirrors. kMethod = 0, kGetter = 1, kSetter = 2, kField = 3, kTypeShift = 0, kTypeBits = 2, kTypeMask = (1 << kTypeBits) - 1 }; enum Call { // These values, except kDynamic and kSuper, are only used when throwing // NoSuchMethodError for compile-time resolution failures. kDynamic = 0, kSuper = 1, kStatic = 2, kConstructor = 3, kTopLevel = 4, kCallShift = kTypeBits, kCallBits = 3, kCallMask = (1 << kCallBits) - 1 }; static int EncodeType(Call call, Type type) { return (call << kCallShift) | type; } }; } // namespace dart #endif // LIB_INVOCATION_MIRROR_H_