Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
invocation_mirror.h
Go to the documentation of this file.
1// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
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.
4
5#ifndef RUNTIME_LIB_INVOCATION_MIRROR_H_
6#define RUNTIME_LIB_INVOCATION_MIRROR_H_
7
8#include "vm/allocation.h"
9
10namespace dart {
11
13 public:
14 // These enum correspond to the constants in invocation_mirror_patch.dart.
15 // It is used to communicate the reason for statically thrown
16 // NoSuchMethodErrors by the compiler.
17 enum Kind {
18 // Constants describing the invocation type.
19 // kField cannot be generated by regular invocation mirrors.
23 kField = 3,
27 kKindMask = (1 << kKindBits) - 1
28 };
29
30 enum Level {
31 // These values, except kDynamic and kSuper, are only used when throwing
32 // NoSuchMethodError for compile-time resolution failures.
34 kSuper = 1,
40 kLevelMask = (1 << kLevelBits) - 1
41 };
42
43 static int EncodeType(Level level, Kind kind) {
44 return (level << kLevelShift) | kind;
45 }
46
47 static void DecodeType(int type, Level* level, Kind* kind) {
48 *level = static_cast<Level>(type >> kLevelShift);
49 *kind = static_cast<Kind>(type & kKindMask);
50 }
51};
52
53} // namespace dart
54
55#endif // RUNTIME_LIB_INVOCATION_MIRROR_H_
static void DecodeType(int type, Level *level, Kind *kind)
static int EncodeType(Level level, Kind kind)