Files
sdk/pkg/vm/testcases/bytecode/bootstrapping.dart.expect
T
Alexander Markov 61f0f5bc43 [vm/bytecode] Declare members in bytecode
This change replaces kernel AST declarations of fields and functions
with bytecode declarations.

Size of dilp files is reduced by 11-12%.

Startup latency:
Time to the first full frame: 1.945s -> 1.687s
FinalizeClass: 554ms -> 277ms
FinishClassLoading: 296ms -> 156ms

There are following regressions in bytecode mode, which will be fixed
in future:

* dart:mirrors are not supported yet (implementation of mirrors relies
  on reading kernel AST in certain cases).

  As the result, lib_2/mirrors/* tests fail.

* native extensions are not supported yet (annotations on libraries
  and classes in AST are cleaned up as they could reference members
  which are now removed from AST).

  As the result, standalone_2/entrypoints_verification_test test fails.

* language_2/spread_collections/const_error_test/* tests fail
  due to https://github.com/dart-lang/sdk/issues/36286.

Change-Id: I5130f401fd7b84038b136136e7ccc1a6e51b6cea
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97561
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-03-26 21:40:10 +00:00

858 lines
22 KiB
Plaintext

main = #lib::main;
[@vm.bytecode=
ComponentBytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
}
] [@vm.bytecode=
MembersBytecodeMetadata {
Members {
Field '_stdinFD', type = dart:core::int, reflectable, static
value = const 0
Field '_stdoutFD', type = dart:core::int, reflectable, static
value = const 1
Field '_stderrFD', type = dart:core::int, reflectable, static
value = const 2
Field '_rawScript', type = dart:core::String, reflectable, static
value = null
Field '_stdin', type = #lib::Stdin, reflectable, static
value = null
Function '_printString', static, reflectable, debuggable, native 'Builtin_PrintString'
parameters [dart:core::String 's'] (required: 1)
return-type void
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
NativeCall CP#0
ReturnTOS
}
ConstantPool {
[0] = NativeEntry Builtin_PrintString
}
Function '_print', static, reflectable, debuggable
parameters [dynamic 'arg'] (required: 1)
return-type void
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
InterfaceCall 1, CP#0
DirectCall 1, CP#2
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = InterfaceCall 'dart:core::Object::toString', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
[2] = DirectCall '#lib::_printString', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
Function '_getPrintClosure', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushConstant CP#0
ReturnTOS
}
ConstantPool {
[0] = ObjectRef const tear-off #lib::_print
}
Function '_setScheduleImmediateClosure', static, reflectable, debuggable
parameters [FunctionType (FunctionType () -> void) -> void 'closure'] (required: 1)
return-type void
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
StoreStaticTOS CP#0
PushNull
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::_ScheduleImmediate::_closure (field)
}
Function '_setStdioFDs', static, reflectable, debuggable
parameters [dart:core::int 'stdin', dart:core::int 'stdout', dart:core::int 'stderr'] (required: 3)
return-type void
Bytecode {
Entry 1
CheckStack 0
Push FP[-7]
StoreStaticTOS CP#0
Push FP[-6]
StoreStaticTOS CP#1
Push FP[-5]
StoreStaticTOS CP#2
PushNull
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::_stdinFD (field)
[1] = StaticField #lib::_stdoutFD (field)
[2] = StaticField #lib::_stderrFD (field)
}
Function '_scriptUri', static, reflectable, debuggable
parameters [] (required: 0)
return-type dart:core::Uri
Bytecode {
Entry 2
CheckStack 0
PushConstant CP#0
PushStatic CP#0
PushConstant CP#1
InterfaceCall 2, CP#2
AssertBoolean 0
JumpIfTrue L1
PushConstant CP#0
PushStatic CP#0
PushConstant CP#4
InterfaceCall 2, CP#2
AssertBoolean 0
PopLocal r1
Jump L2
L1:
PushTrue
PopLocal r1
L2:
Push r1
JumpIfTrue L3
PushConstant CP#0
PushStatic CP#0
PushConstant CP#5
InterfaceCall 2, CP#2
AssertBoolean 0
PopLocal r0
Jump L4
L3:
PushTrue
PopLocal r0
L4:
Push r0
JumpIfFalse L5
PushConstant CP#0
PushStatic CP#0
DirectCall 1, CP#6
ReturnTOS
L5:
DirectCall 0, CP#8
PushNull
PushConstant CP#0
PushStatic CP#0
DirectCall 2, CP#10
InterfaceCall 2, CP#12
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::_rawScript (field)
[1] = ObjectRef 'http:'
[2] = InterfaceCall 'dart:core::String::startsWith', ArgDesc num-args 2, num-type-args 0, names []
[3] = Reserved
[4] = ObjectRef 'https:'
[5] = ObjectRef 'file:'
[6] = DirectCall 'dart:core::Uri::parse', ArgDesc num-args 1, num-type-args 0, names []
[7] = Reserved
[8] = DirectCall 'dart:core::Uri::get:base', ArgDesc num-args 0, num-type-args 0, names []
[9] = Reserved
[10] = DirectCall 'dart:core::_Uri::file (constructor)', ArgDesc num-args 2, num-type-args 0, names []
[11] = Reserved
[12] = InterfaceCall 'dart:core::Uri::resolveUri', ArgDesc num-args 2, num-type-args 0, names []
[13] = Reserved
}
Function '_setupHooks', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
DirectCall 1, CP#1
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = ObjectRef const tear-off #lib::_scriptUri
[1] = DirectCall '#lib::VMLibraryHooks::set:platformScript', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
}
Function 'get:stdin', getter, static, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::Stdin
Bytecode {
Entry 2
CheckStack 0
PushConstant CP#0
PushStatic CP#0
EqualsNull
JumpIfFalse L1
PushConstant CP#1
PushStatic CP#1
DirectCall 1, CP#2
StoreLocal r1
Push r1
StoreStaticTOS CP#0
PopLocal r0
Jump L2
L1:
PushNull
PopLocal r0
L2:
Push r0
Drop1
PushConstant CP#0
PushStatic CP#0
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::_stdin (field)
[1] = StaticField #lib::_stdinFD (field)
[2] = DirectCall '#lib::_StdIOUtils::_getStdioInputStream', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
Function 'main', static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 0
CheckStack 0
PushNull
ReturnTOS
}
ConstantPool {
}
}
}
]library #lib from "#lib" as #lib {
typedef _ScheduleImmediateClosure = (() → void) → void;
[@vm.bytecode=
MembersBytecodeMetadata {
Members {
Field '_closure', type = FunctionType (FunctionType () -> void) -> void, reflectable, static
value = null
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::_ScheduleImmediate
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
}
}
] class _ScheduleImmediate extends dart.core::Object {
static field (() → void) → void _closure = null;
synthetic constructor •() → #lib::_ScheduleImmediate
: super dart.core::Object::•()
;
}
[@vm.bytecode=
MembersBytecodeMetadata {
Members {
Field '_cachedNamespace', type = #lib::_NamespaceImpl, reflectable, static
value = null
Function '_', constructor, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::_NamespaceImpl
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function '_create', static, reflectable, debuggable, native 'Namespace_Create'
parameters [#lib::_NamespaceImpl 'namespace', dynamic 'n'] (required: 2)
return-type #lib::_NamespaceImpl
Bytecode {
Entry 0
CheckStack 0
Push FP[-6]
Push FP[-5]
NativeCall CP#0
ReturnTOS
}
ConstantPool {
[0] = NativeEntry Namespace_Create
}
Function '_getPointer', static, reflectable, debuggable, native 'Namespace_GetPointer'
parameters [#lib::_NamespaceImpl 'namespace'] (required: 1)
return-type dart:core::int
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
NativeCall CP#0
ReturnTOS
}
ConstantPool {
[0] = NativeEntry Namespace_GetPointer
}
Function '_getDefault', static, reflectable, debuggable, native 'Namespace_GetDefault'
parameters [] (required: 0)
return-type dart:core::int
Bytecode {
Entry 0
CheckStack 0
NativeCall CP#0
ReturnTOS
}
ConstantPool {
[0] = NativeEntry Namespace_GetDefault
}
Function '_setupNamespace', static, reflectable, debuggable
parameters [dynamic 'namespace'] (required: 1)
return-type void
Bytecode {
Entry 2
CheckStack 0
Allocate CP#0
StoreLocal r1
Push r1
DirectCall 1, CP#1
Drop1
Push FP[-5]
DirectCall 2, CP#3
StoreStaticTOS CP#5
PushNull
ReturnTOS
}
ConstantPool {
[0] = Class #lib::_NamespaceImpl
[1] = DirectCall '#lib::_NamespaceImpl::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[2] = Reserved
[3] = DirectCall '#lib::_NamespaceImpl::_create', ArgDesc num-args 2, num-type-args 0, names []
[4] = Reserved
[5] = StaticField #lib::_NamespaceImpl::_cachedNamespace (field)
}
Function 'get:_namespace', getter, static, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::_NamespaceImpl
Bytecode {
Entry 2
CheckStack 0
PushConstant CP#0
PushStatic CP#0
EqualsNull
JumpIfFalse L1
Allocate CP#1
StoreLocal r1
Push r1
DirectCall 1, CP#2
Drop1
DirectCall 0, CP#4
DirectCall 2, CP#6
StoreStaticTOS CP#0
L1:
PushConstant CP#0
PushStatic CP#0
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::_NamespaceImpl::_cachedNamespace (field)
[1] = Class #lib::_NamespaceImpl
[2] = DirectCall '#lib::_NamespaceImpl::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
[4] = DirectCall '#lib::_NamespaceImpl::_getDefault', ArgDesc num-args 0, num-type-args 0, names []
[5] = Reserved
[6] = DirectCall '#lib::_NamespaceImpl::_create', ArgDesc num-args 2, num-type-args 0, names []
[7] = Reserved
}
Function 'get:_namespacePointer', getter, static, reflectable, debuggable
parameters [] (required: 0)
return-type dart:core::int
Bytecode {
Entry 0
CheckStack 0
DirectCall 0, CP#0
DirectCall 1, CP#2
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::_NamespaceImpl::get:_namespace', ArgDesc num-args 0, num-type-args 0, names []
[1] = Reserved
[2] = DirectCall '#lib::_NamespaceImpl::_getPointer', ArgDesc num-args 1, num-type-args 0, names []
[3] = Reserved
}
}
}
] class _NamespaceImpl extends dart.core::Object implements #lib::_Namespace {
static field #lib::_NamespaceImpl _cachedNamespace = null;
constructor _() → #lib::_NamespaceImpl
: super dart.core::Object::•()
;
@dart._internal::ExternalName::•("Namespace_Create")
external static method _create(#lib::_NamespaceImpl namespace, dynamic n) → #lib::_NamespaceImpl;
@dart._internal::ExternalName::•("Namespace_GetPointer")
external static method _getPointer(#lib::_NamespaceImpl namespace) → dart.core::int;
@dart._internal::ExternalName::•("Namespace_GetDefault")
external static method _getDefault() → dart.core::int;
static method _setupNamespace(dynamic namespace) → void {
#lib::_NamespaceImpl::_cachedNamespace = #lib::_NamespaceImpl::_create(new #lib::_NamespaceImpl::_(), namespace);
}
static get _namespace() → #lib::_NamespaceImpl {
if(#lib::_NamespaceImpl::_cachedNamespace.{dart.core::Object::==}(null)) {
#lib::_NamespaceImpl::_cachedNamespace = #lib::_NamespaceImpl::_create(new #lib::_NamespaceImpl::_(), #lib::_NamespaceImpl::_getDefault());
}
return #lib::_NamespaceImpl::_cachedNamespace;
}
static get _namespacePointer() → dart.core::int
return #lib::_NamespaceImpl::_getPointer(#lib::_NamespaceImpl::_namespace);
}
[@vm.bytecode=
MembersBytecodeMetadata {
Members {
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::_Namespace
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function '_setupNamespace', static, reflectable, debuggable
parameters [dynamic 'namespace'] (required: 1)
return-type void
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::_NamespaceImpl::_setupNamespace', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'get:_namespace', getter, static, reflectable, debuggable
parameters [] (required: 0)
return-type #lib::_Namespace
Bytecode {
Entry 0
CheckStack 0
DirectCall 0, CP#0
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::_NamespaceImpl::get:_namespace', ArgDesc num-args 0, num-type-args 0, names []
[1] = Reserved
}
Function 'get:_namespacePointer', getter, static, reflectable, debuggable
parameters [] (required: 0)
return-type dart:core::int
Bytecode {
Entry 0
CheckStack 0
DirectCall 0, CP#0
ReturnTOS
}
ConstantPool {
[0] = DirectCall '#lib::_NamespaceImpl::get:_namespacePointer', ArgDesc num-args 0, num-type-args 0, names []
[1] = Reserved
}
}
}
] class _Namespace extends dart.core::Object {
synthetic constructor •() → #lib::_Namespace
: super dart.core::Object::•()
;
static method _setupNamespace(dynamic namespace) → void {
#lib::_NamespaceImpl::_setupNamespace(namespace);
}
static get _namespace() → #lib::_Namespace
return #lib::_NamespaceImpl::_namespace;
static get _namespacePointer() → dart.core::int
return #lib::_NamespaceImpl::_namespacePointer;
}
[@vm.bytecode=
MembersBytecodeMetadata {
Members {
Field 'timerFactory', type = dynamic, reflectable, static
value = null
Field 'eventHandlerSendData', type = dynamic, reflectable, static
value = null
Field 'timerMillisecondClock', type = dynamic, reflectable, static
value = null
Field 'resourceReadAsBytes', type = dynamic, reflectable, static
value = null
Field 'packageRootString', type = dynamic, reflectable, static
value = null
Field 'packageConfigString', type = dynamic, reflectable, static
value = null
Field 'packageRootUriFuture', type = dynamic, reflectable, static
value = null
Field 'packageConfigUriFuture', type = dynamic, reflectable, static
value = null
Field 'resolvePackageUriFuture', type = dynamic, reflectable, static
value = null
Field '_computeScriptUri', type = dynamic, reflectable, static
value = null
Field '_cachedScript', type = dynamic, reflectable, static
value = null
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::VMLibraryHooks
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function 'set:platformScript', setter, static, reflectable, debuggable
parameters [dynamic 'f'] (required: 1)
return-type void
Bytecode {
Entry 1
CheckStack 0
Push FP[-5]
StoreStaticTOS CP#0
PushNull
StoreStaticTOS CP#1
PushNull
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::VMLibraryHooks::_computeScriptUri (field)
[1] = StaticField #lib::VMLibraryHooks::_cachedScript (field)
}
Function 'get:platformScript', getter, static, reflectable, debuggable
parameters [] (required: 0)
return-type dynamic
Bytecode {
Entry 1
CheckStack 0
PushConstant CP#0
PushStatic CP#0
EqualsNull
JumpIfFalse L1
PushConstant CP#1
PushStatic CP#1
EqualsNull
BooleanNegateTOS
PopLocal r0
Jump L2
L1:
PushFalse
PopLocal r0
L2:
Push r0
JumpIfFalse L3
PushConstant CP#1
PushStatic CP#1
DynamicCall 1, CP#3
StoreStaticTOS CP#0
L3:
PushConstant CP#0
PushStatic CP#0
ReturnTOS
}
ConstantPool {
[0] = StaticField #lib::VMLibraryHooks::_cachedScript (field)
[1] = StaticField #lib::VMLibraryHooks::_computeScriptUri (field)
[2] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
[3] = ICData dynamic target-name 'call', arg-desc CP#2
}
}
}
] class VMLibraryHooks extends dart.core::Object {
static field dynamic timerFactory = null;
static field dynamic eventHandlerSendData = null;
static field dynamic timerMillisecondClock = null;
static field dynamic resourceReadAsBytes = null;
static field dynamic packageRootString = null;
static field dynamic packageConfigString = null;
static field dynamic packageRootUriFuture = null;
static field dynamic packageConfigUriFuture = null;
static field dynamic resolvePackageUriFuture = null;
static field dynamic _computeScriptUri = null;
static field dynamic _cachedScript = null;
synthetic constructor •() → #lib::VMLibraryHooks
: super dart.core::Object::•()
;
static set platformScript(dynamic f) → void {
#lib::VMLibraryHooks::_computeScriptUri = f;
#lib::VMLibraryHooks::_cachedScript = null;
}
static get platformScript() → dynamic {
if(#lib::VMLibraryHooks::_cachedScript.{dart.core::Object::==}(null) && !#lib::VMLibraryHooks::_computeScriptUri.{dart.core::Object::==}(null)) {
#lib::VMLibraryHooks::_cachedScript = [@vm.call-site-attributes.metadata=receiverType:dynamic] #lib::VMLibraryHooks::_computeScriptUri.call();
}
return #lib::VMLibraryHooks::_cachedScript;
}
}
[@vm.bytecode=
MembersBytecodeMetadata {
Members {
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::Stdin
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
}
}
] class Stdin extends dart.core::Object {
synthetic constructor •() → #lib::Stdin
: super dart.core::Object::•()
;
}
[@vm.bytecode=
MembersBytecodeMetadata {
Members {
Function '', constructor, reflectable
parameters [] (required: 0)
return-type #lib::_StdIOUtils
Bytecode {
Entry 0
CheckStack 0
Push FP[-5]
DirectCall 1, CP#0
Drop1
PushNull
ReturnTOS
}
ConstantPool {
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
[1] = Reserved
}
Function '_getStdioInputStream', static, reflectable, debuggable
parameters [dart:core::int 'fd'] (required: 1)
return-type #lib::Stdin
Bytecode {
Entry 0
CheckStack 0
PushNull
ReturnTOS
}
ConstantPool {
}
}
}
] class _StdIOUtils extends dart.core::Object {
synthetic constructor •() → #lib::_StdIOUtils
: super dart.core::Object::•()
;
static method _getStdioInputStream(dart.core::int fd) → #lib::Stdin
return null;
}
static field dart.core::int _stdinFD = 0;
static field dart.core::int _stdoutFD = 1;
static field dart.core::int _stderrFD = 2;
static field dart.core::String _rawScript;
static field #lib::Stdin _stdin;
@dart._internal::ExternalName::•("Builtin_PrintString")
external static method _printString(dart.core::String s) → void;
static method _print(dynamic arg) → void {
#lib::_printString(arg.{dart.core::Object::toString}());
}
static method _getPrintClosure() → dynamic
return #lib::_print;
static method _setScheduleImmediateClosure((() → void) → void closure) → void {
#lib::_ScheduleImmediate::_closure = closure;
}
static method _setStdioFDs(dart.core::int stdin, dart.core::int stdout, dart.core::int stderr) → void {
#lib::_stdinFD = stdin;
#lib::_stdoutFD = stdout;
#lib::_stderrFD = stderr;
}
static method _scriptUri() → dart.core::Uri {
if(#lib::_rawScript.{dart.core::String::startsWith}("http:") || #lib::_rawScript.{dart.core::String::startsWith}("https:") || #lib::_rawScript.{dart.core::String::startsWith}("file:")) {
return dart.core::Uri::parse(#lib::_rawScript);
}
else {
return dart.core::Uri::base.{dart.core::Uri::resolveUri}(dart.core::_Uri::file(#lib::_rawScript));
}
}
static method _setupHooks() → dynamic {
#lib::VMLibraryHooks::platformScript = #lib::_scriptUri;
}
static get stdin() → #lib::Stdin {
#lib::_stdin.{dart.core::Object::==}(null) ?{#lib::Stdin} #lib::_stdin = #lib::_StdIOUtils::_getStdioInputStream(#lib::_stdinFD) : null;
return #lib::_stdin;
}
static method main() → dynamic {}
}