Skip to content

Commit 644d0d4

Browse files
alexmarkovCommit Queue
authored andcommitted
[vm,dyn_modules] Include assertion text into bytecode
Extract the text of assert condition and put it into bytecode instead of relying on runtime to find the source text (which is most likely unavailable for a dynamic module). TEST=ci (language/vm/regress_27671_test, vm/dart/asserts_test) Change-Id: Id6643333164b37c5046fa1dfecdbe9338f53c93d Cq-Include-Trybots: luci.dart.try:vm-aot-dyn-linux-debug-x64-try,vm-aot-dyn-linux-product-x64-try,vm-dyn-linux-debug-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442244 Reviewed-by: Tess Strickland <[email protected]> Commit-Queue: Alexander Markov <[email protected]>
1 parent 9e9951a commit 644d0d4

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

pkg/dart2bytecode/lib/bytecode_generator.dart

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -957,8 +957,8 @@ class BytecodeGenerator extends RecursiveVisitor {
957957
libraryIndex.getProcedure('dart:_internal', 'LateError',
958958
'_throwLocalAssignedDuringInitialization');
959959

960-
late Procedure throwNewAssertionError =
961-
libraryIndex.getProcedure('dart:core', '_AssertionError', '_throwNew');
960+
late Procedure throwNewSourceAssertionError = libraryIndex.getProcedure(
961+
'dart:core', '_AssertionError', '_throwNewSource');
962962

963963
late Procedure throwNewNoSuchMethodError =
964964
libraryIndex.getProcedure('dart:core', 'NoSuchMethodError', '_throwNew');
@@ -3717,18 +3717,24 @@ class BytecodeGenerator extends RecursiveVisitor {
37173717

37183718
_genConditionAndJumpIf(node.condition, true, done);
37193719

3720-
_genPushInt(
3721-
options.omitAssertSourcePositions ? 0 : node.conditionStartOffset);
3722-
_genPushInt(
3723-
options.omitAssertSourcePositions ? 0 : node.conditionEndOffset);
3720+
final fileUri = node.location!.file;
3721+
final source = node.enclosingComponent!.uriToSource[fileUri]!;
3722+
final conditionSource = source.text
3723+
.substring(node.conditionStartOffset, node.conditionEndOffset);
3724+
final location = source.getLocation(fileUri, node.conditionStartOffset);
3725+
asm.emitPushConstant(cp.addString(conditionSource));
3726+
asm.emitPushConstant(cp.addString(fileUri.toString()));
3727+
_genPushInt(options.omitAssertSourcePositions ? 0 : location.line);
3728+
_genPushInt(options.omitAssertSourcePositions ? 0 : location.column);
37243729

37253730
if (node.message != null) {
37263731
_generateNode(node.message);
37273732
} else {
37283733
asm.emitPushNull();
37293734
}
37303735

3731-
_genDirectCall(throwNewAssertionError, objectTable.getArgDescHandle(3), 3);
3736+
_genDirectCall(
3737+
throwNewSourceAssertionError, objectTable.getArgDescHandle(5), 5);
37323738
asm.emitDrop1();
37333739

37343740
asm.bind(done);

0 commit comments

Comments
 (0)