blob: 6061c8403635b6d16b4bf4516858b5f7e9485bf2 [file] [log] [blame]
// 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 RUNTIME_LIB_INVOCATION_MIRROR_H_
#define RUNTIME_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,
kLocalVar = 4,
kTypeShift = 0,
kTypeBits = 3,
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 // RUNTIME_LIB_INVOCATION_MIRROR_H_