[vm,dyn_modules] Support reachabilityFence and _nativeEffect from dart:_internal in bytecode
TEST=ci Change-Id: I68c7b74b6ccc75139b5690f3216c47ab843cc544 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/+/442245 Reviewed-by: Tess Strickland <sstrickl@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com>
This commit is contained in:
committed by
Commit Queue
parent
63082bebbb
commit
c7bf13176f
@@ -969,6 +969,12 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
late Procedure unsafeCast =
|
||||
libraryIndex.getTopLevelProcedure('dart:_internal', 'unsafeCast');
|
||||
|
||||
late Procedure reachabilityFence =
|
||||
libraryIndex.getTopLevelProcedure('dart:_internal', 'reachabilityFence');
|
||||
|
||||
late Procedure nativeEffect =
|
||||
libraryIndex.getTopLevelProcedure('dart:_internal', '_nativeEffect');
|
||||
|
||||
late Procedure iterableIterator =
|
||||
libraryIndex.getProcedure('dart:core', 'Iterable', 'get:iterator');
|
||||
|
||||
@@ -3454,12 +3460,16 @@ class BytecodeGenerator extends RecursiveVisitor {
|
||||
}
|
||||
Arguments args = node.arguments;
|
||||
final target = node.target;
|
||||
if (target == unsafeCast) {
|
||||
// The result of the unsafeCast() intrinsic method is its sole argument,
|
||||
// without any additional checks or type casts.
|
||||
// Handle built-in methods with special semantics.
|
||||
if (target == unsafeCast || target == reachabilityFence) {
|
||||
// Just evaluate argument.
|
||||
assert(args.named.isEmpty);
|
||||
_generateNode(args.positional.single);
|
||||
return;
|
||||
} else if (target == nativeEffect) {
|
||||
// Skip over AST of the argument, return null.
|
||||
asm.emitPushNull();
|
||||
return;
|
||||
}
|
||||
if (target.isFactory) {
|
||||
final constructedClass = target.enclosingClass!;
|
||||
|
||||
Reference in New Issue
Block a user