Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1797)

Unified Diff: runtime/vm/kernel_binary_flowgraph.cc

Issue 2940283002: [kernel] Fix assert message. (Closed)
Patch Set: Address comments Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/kernel_binary.cc ('k') | tests/language/language_kernel.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_binary_flowgraph.cc
diff --git a/runtime/vm/kernel_binary_flowgraph.cc b/runtime/vm/kernel_binary_flowgraph.cc
index 33c85883c08dca768e4f896411db799a63c561f3..37f596c4fa2535ec5c15ee3e6198bac1a1ef6388 100644
--- a/runtime/vm/kernel_binary_flowgraph.cc
+++ b/runtime/vm/kernel_binary_flowgraph.cc
@@ -728,12 +728,16 @@ void StreamingScopeBuilder::VisitStatement() {
case kAssertStatement: {
if (I->asserts()) {
VisitExpression(); // Read condition.
+ builder_->ReadPosition(); // read condition start offset.
+ builder_->ReadPosition(); // read condition end offset.
Tag tag = builder_->ReadTag(); // read (first part of) message.
if (tag == kSomething) {
VisitExpression(); // read (rest of) message.
}
} else {
builder_->SkipExpression(); // Read condition.
+ builder_->ReadPosition(); // read condition start offset.
+ builder_->ReadPosition(); // read condition end offset.
Tag tag = builder_->ReadTag(); // read (first part of) message.
if (tag == kSomething) {
builder_->SkipExpression(); // read (rest of) message.
@@ -4146,6 +4150,8 @@ void StreamingFlowGraphBuilder::SkipStatement() {
return;
case kAssertStatement: {
SkipExpression(); // Read condition.
+ ReadPosition(); // read condition start offset.
+ ReadPosition(); // read condition end offset.
Tag tag = ReadTag(); // read (first part of) message.
if (tag == kSomething) {
SkipExpression(); // read (rest of) message.
@@ -5904,53 +5910,33 @@ Fragment StreamingFlowGraphBuilder::BuildAssertStatement() {
instructions += Constant(Bool::True());
instructions += BranchIfEqual(&then, &otherwise, false);
+ TokenPosition condition_start_offset =
+ ReadPosition(); // read condition start offset.
+ TokenPosition condition_end_offset =
+ ReadPosition(); // read condition end offset.
+
const dart::Class& klass = dart::Class::ZoneHandle(
Z, dart::Library::LookupCoreClass(Symbols::AssertionError()));
ASSERT(!klass.IsNull());
- const dart::Function& constructor = dart::Function::ZoneHandle(
- Z, klass.LookupConstructorAllowPrivate(
- H.DartSymbol("_AssertionError._create")));
- ASSERT(!constructor.IsNull());
-
- const dart::String& url = H.DartString(
- parsed_function()->function().ToLibNamePrefixedQualifiedCString(),
- Heap::kOld);
+ const dart::Function& target = dart::Function::ZoneHandle(
+ Z, klass.LookupStaticFunctionAllowPrivate(Symbols::ThrowNew()));
+ ASSERT(!target.IsNull());
- // Create instance of _AssertionError
+ // Build call to _AsertionError._throwNew(start, end, message)
Fragment otherwise_fragment(otherwise);
- otherwise_fragment += AllocateObject(klass, 0);
- LocalVariable* instance = MakeTemporary();
-
- // Call _AssertionError._create constructor.
- otherwise_fragment += LoadLocal(instance);
- otherwise_fragment += PushArgument(); // this
-
- otherwise_fragment += Constant(H.DartString("<no message>", Heap::kOld));
- otherwise_fragment += PushArgument(); // failedAssertion
-
- otherwise_fragment += Constant(url);
- otherwise_fragment += PushArgument(); // url
-
- otherwise_fragment += IntConstant(0);
- otherwise_fragment += PushArgument(); // line
-
- otherwise_fragment += IntConstant(0);
- otherwise_fragment += PushArgument(); // column
-
+ otherwise_fragment += IntConstant(condition_start_offset.Pos());
+ otherwise_fragment += PushArgument(); // start
+ otherwise_fragment += IntConstant(condition_end_offset.Pos());
+ otherwise_fragment += PushArgument(); // end
Tag tag = ReadTag(); // read (first part of) message.
if (tag == kSomething) {
otherwise_fragment += BuildExpression(); // read (rest of) message.
} else {
- otherwise_fragment += Constant(H.DartString("<no message>", Heap::kOld));
+ otherwise_fragment += Constant(Instance::ZoneHandle(Z)); // null.
}
otherwise_fragment += PushArgument(); // message
- otherwise_fragment += StaticCall(TokenPosition::kNoSource, constructor, 6);
- otherwise_fragment += Drop();
-
- // Throw _AssertionError exception.
- otherwise_fragment += PushArgument();
- otherwise_fragment += ThrowException(TokenPosition::kNoSource);
+ otherwise_fragment += StaticCall(TokenPosition::kNoSource, target, 3);
otherwise_fragment += Drop();
return Fragment(instructions.entry, then);
« no previous file with comments | « runtime/vm/kernel_binary.cc ('k') | tests/language/language_kernel.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698