61f0f5bc43
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>
858 lines
22 KiB
Plaintext
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 {}
|
|
}
|