Flutter Engine
The Flutter Engine
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Member Functions | List of all members
dart::kernel::SimpleExpressionConverter Class Reference

Public Member Functions

 SimpleExpressionConverter (TranslationHelper *translation_helper, KernelReaderHelper *reader_helper)
 
bool IsSimple (intptr_t kernel_offset)
 
const InstanceSimpleValue ()
 
Zonezone () const
 

Detailed Description

Definition at line 58 of file kernel_loader.cc.

Constructor & Destructor Documentation

◆ SimpleExpressionConverter()

dart::kernel::SimpleExpressionConverter::SimpleExpressionConverter ( TranslationHelper translation_helper,
KernelReaderHelper reader_helper 
)
inline

Definition at line 60 of file kernel_loader.cc.

62 : translation_helper_(*translation_helper),
63 zone_(translation_helper_.zone()),
64 simple_value_(nullptr),
65 helper_(reader_helper) {}

Member Function Documentation

◆ IsSimple()

bool dart::kernel::SimpleExpressionConverter::IsSimple ( intptr_t  kernel_offset)
inline

Definition at line 67 of file kernel_loader.cc.

67 {
68 AlternativeReadingScope alt(&helper_->reader_, kernel_offset);
69 uint8_t payload = 0;
70 Tag tag = helper_->ReadTag(&payload); // read tag.
71 switch (tag) {
72 case kBigIntLiteral: {
73 helper_->ReadPosition();
74 const String& literal_str =
75 H.DartString(helper_->ReadStringReference(),
76 Heap::kOld); // read index into string table.
77 simple_value_ = &Integer::ZoneHandle(Z, Integer::New(literal_str));
78 if (simple_value_->IsNull()) {
79 H.ReportError("Integer literal %s is out of range",
80 literal_str.ToCString());
82 }
83 *simple_value_ = H.Canonicalize(*simple_value_);
84 return true;
85 }
86 case kStringLiteral:
87 helper_->ReadPosition();
88 simple_value_ = &H.DartSymbolPlain(
89 helper_->ReadStringReference()); // read index into string table.
90 return true;
91 case kSpecializedIntLiteral:
92 helper_->ReadPosition();
93 simple_value_ =
94 &Integer::ZoneHandle(Z, Integer::New(static_cast<int32_t>(payload) -
96 Heap::kOld));
97 *simple_value_ = H.Canonicalize(*simple_value_);
98 return true;
99 case kNegativeIntLiteral:
100 helper_->ReadPosition();
101 simple_value_ = &Integer::ZoneHandle(
102 Z, Integer::New(-static_cast<int64_t>(helper_->ReadUInt()),
103 Heap::kOld)); // read value.
104 *simple_value_ = H.Canonicalize(*simple_value_);
105 return true;
106 case kPositiveIntLiteral:
107 helper_->ReadPosition();
108 simple_value_ = &Integer::ZoneHandle(
109 Z, Integer::New(static_cast<int64_t>(helper_->ReadUInt()),
110 Heap::kOld)); // read value.
111 *simple_value_ = H.Canonicalize(*simple_value_);
112 return true;
113 case kDoubleLiteral:
114 helper_->ReadPosition();
115 simple_value_ = &Double::ZoneHandle(
116 Z, Double::New(helper_->ReadDouble(), Heap::kOld)); // read value.
117 *simple_value_ = H.Canonicalize(*simple_value_);
118 return true;
119 case kTrueLiteral:
120 helper_->ReadPosition();
121 simple_value_ = &Bool::Handle(Z, Bool::Get(true).ptr());
122 return true;
123 case kFalseLiteral:
124 helper_->ReadPosition();
125 simple_value_ = &Bool::Handle(Z, Bool::Get(false).ptr());
126 return true;
127 case kNullLiteral:
128 helper_->ReadPosition();
129 simple_value_ = &Instance::ZoneHandle(Z, Instance::null());
130 return true;
131 default:
132 return false;
133 }
134 }
#define UNREACHABLE()
Definition: assert.h:248
static const Bool & Get(bool value)
Definition: object.h:10801
static DoublePtr New(double d, Heap::Space space=Heap::kNew)
Definition: object.cc:23402
@ kOld
Definition: heap.h:39
static IntegerPtr New(const String &str, Heap::Space space=Heap::kNew)
Definition: object.cc:22984
static ObjectPtr null()
Definition: object.h:433
bool IsNull() const
Definition: object.h:363
static Object & Handle()
Definition: object.h:407
static Object & ZoneHandle()
Definition: object.h:419
Tag ReadTag(uint8_t *payload=nullptr)
#define Z
static constexpr int SpecializedIntLiteralBias
Definition: SkMD5.cpp:130

◆ SimpleValue()

const Instance & dart::kernel::SimpleExpressionConverter::SimpleValue ( )
inline

Definition at line 136 of file kernel_loader.cc.

136{ return *simple_value_; }

◆ zone()

Zone * dart::kernel::SimpleExpressionConverter::zone ( ) const
inline

Definition at line 137 of file kernel_loader.cc.

137{ return zone_; }

The documentation for this class was generated from the following file: