Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
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 39 of file kernel_loader.cc.

Constructor & Destructor Documentation

◆ SimpleExpressionConverter()

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

Definition at line 41 of file kernel_loader.cc.

43 : translation_helper_(*translation_helper),
44 zone_(translation_helper_.zone()),
45 simple_value_(nullptr),
46 helper_(reader_helper) {}

Member Function Documentation

◆ IsSimple()

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

Definition at line 48 of file kernel_loader.cc.

48 {
49 AlternativeReadingScope alt(&helper_->reader_, kernel_offset);
50 uint8_t payload = 0;
51 Tag tag = helper_->ReadTag(&payload); // read tag.
52 switch (tag) {
53 case kBigIntLiteral: {
54 helper_->ReadPosition();
55 const String& literal_str =
56 H.DartString(helper_->ReadStringReference(),
57 Heap::kOld); // read index into string table.
58 simple_value_ = &Integer::ZoneHandle(Z, Integer::New(literal_str));
59 if (simple_value_->IsNull()) {
60 H.ReportError("Integer literal %s is out of range",
61 literal_str.ToCString());
63 }
64 *simple_value_ = H.Canonicalize(*simple_value_);
65 return true;
66 }
67 case kStringLiteral:
68 helper_->ReadPosition();
69 simple_value_ = &H.DartSymbolPlain(
70 helper_->ReadStringReference()); // read index into string table.
71 return true;
72 case kSpecializedIntLiteral:
73 helper_->ReadPosition();
74 simple_value_ =
75 &Integer::ZoneHandle(Z, Integer::New(static_cast<int32_t>(payload) -
77 Heap::kOld));
78 *simple_value_ = H.Canonicalize(*simple_value_);
79 return true;
80 case kNegativeIntLiteral:
81 helper_->ReadPosition();
82 simple_value_ = &Integer::ZoneHandle(
83 Z, Integer::New(-static_cast<int64_t>(helper_->ReadUInt()),
84 Heap::kOld)); // read value.
85 *simple_value_ = H.Canonicalize(*simple_value_);
86 return true;
87 case kPositiveIntLiteral:
88 helper_->ReadPosition();
89 simple_value_ = &Integer::ZoneHandle(
90 Z, Integer::New(static_cast<int64_t>(helper_->ReadUInt()),
91 Heap::kOld)); // read value.
92 *simple_value_ = H.Canonicalize(*simple_value_);
93 return true;
94 case kDoubleLiteral:
95 helper_->ReadPosition();
96 simple_value_ = &Double::ZoneHandle(
97 Z, Double::New(helper_->ReadDouble(), Heap::kOld)); // read value.
98 *simple_value_ = H.Canonicalize(*simple_value_);
99 return true;
100 case kTrueLiteral:
101 helper_->ReadPosition();
102 simple_value_ = &Bool::Handle(Z, Bool::Get(true).ptr());
103 return true;
104 case kFalseLiteral:
105 helper_->ReadPosition();
106 simple_value_ = &Bool::Handle(Z, Bool::Get(false).ptr());
107 return true;
108 case kNullLiteral:
109 helper_->ReadPosition();
110 simple_value_ = &Instance::ZoneHandle(Z, Instance::null());
111 return true;
112 default:
113 return false;
114 }
115 }
#define UNREACHABLE()
Definition assert.h:248
#define Z
static const Bool & Get(bool value)
Definition object.h:10780
static DoublePtr New(double d, Heap::Space space=Heap::kNew)
Definition object.cc:23481
@ kOld
Definition heap.h:39
static IntegerPtr New(const String &str, Heap::Space space=Heap::kNew)
Definition object.cc:23063
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)
static constexpr int SpecializedIntLiteralBias
Definition SkMD5.cpp:130

◆ SimpleValue()

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

Definition at line 117 of file kernel_loader.cc.

117{ return *simple_value_; }

◆ zone()

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

Definition at line 118 of file kernel_loader.cc.

118{ return zone_; }

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