3abf78212c
Add dart2bytecode tool which takes Dart sources and produces Dart bytecode. The tool uses common front-end (CFE) to parse Dart source code and contains bytecode generator which translates kernel AST to bytecode. Change-Id: I90bd6e72c619cf0edc556da0640760b30e81091d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/378560 Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Slava Egorov <vegorov@google.com>
559 lines
17 KiB
Plaintext
559 lines
17 KiB
Plaintext
Bytecode
|
|
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::main
|
|
Library 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
name '#lib'
|
|
script 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
|
|
Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
|
|
Field '_stdin', type = DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::Stdin, getter = 'get:_stdin', reflectable, static, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
LoadStatic CP#0
|
|
DirectCall CP#1, 1
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_stdinFD (field)
|
|
[1] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_StdIOUtils::_getStdioInputStream', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
}
|
|
|
|
|
|
Field '_stdinFD', type = dart:core::int, reflectable, static, is-late, has-initializer
|
|
value = const 0
|
|
|
|
Field '_stdoutFD', type = dart:core::int, reflectable, static, is-late, has-initializer
|
|
value = const 1
|
|
|
|
Field '_stderrFD', type = dart:core::int, reflectable, static, is-late, has-initializer
|
|
value = const 2
|
|
|
|
Function '_printString', static, reflectable, debuggable, external
|
|
parameters [dart:core::String 's'] (required: 1)
|
|
return-type void
|
|
|
|
Function '_print', static, reflectable, debuggable
|
|
parameters [dynamic 'arg'] (required: 1)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::Object::toString', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_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 DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_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 DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_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 DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_stdinFD (field)
|
|
[1] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_stdoutFD (field)
|
|
[2] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_stderrFD (field)
|
|
}
|
|
|
|
|
|
Function 'main', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
}
|
|
|
|
Class '_ScheduleImmediate', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
Field '_closure', type = FunctionType (FunctionType () -> void)? -> void, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_ScheduleImmediate
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
Class '_NamespaceImpl', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
implements [DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_Namespace]
|
|
|
|
Field '_cachedNamespace', type = DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl?, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Function '_', constructor, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
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, external
|
|
parameters [DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl 'namespace', dynamic 'n'] (required: 2)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl
|
|
|
|
Function '_getPointer', static, reflectable, debuggable, external
|
|
parameters [DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl 'namespace'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Function '_getDefault', static, reflectable, debuggable, external
|
|
parameters [] (required: 0)
|
|
return-type dart:core::int
|
|
|
|
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 CP#1, 1
|
|
Drop1
|
|
Push FP[-5]
|
|
DirectCall CP#3, 2
|
|
StoreStaticTOS CP#5
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = Class DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl
|
|
[1] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_create', ArgDesc num-args 2, num-type-args 0, names []
|
|
[4] = Reserved
|
|
[5] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_cachedNamespace (field)
|
|
}
|
|
|
|
|
|
Function 'get:_namespace', getter, static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckStack 0
|
|
LoadStatic CP#0
|
|
JumpIfNotNull L1
|
|
Allocate CP#1
|
|
StoreLocal r1
|
|
Push r1
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
DirectCall CP#4, 0
|
|
DirectCall CP#6, 2
|
|
StoreStaticTOS CP#0
|
|
L1:
|
|
LoadStatic CP#0
|
|
StoreLocal r0
|
|
Push r0
|
|
NullCheck CP#8
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_cachedNamespace (field)
|
|
[1] = Class DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl
|
|
[2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_ (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
[4] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_getDefault', ArgDesc num-args 0, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_create', ArgDesc num-args 2, num-type-args 0, names []
|
|
[7] = Reserved
|
|
[8] = ObjectRef null
|
|
}
|
|
|
|
|
|
Function 'get:_namespacePointer', getter, static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
DirectCall CP#0, 0
|
|
DirectCall CP#2, 1
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::get:_namespace', ArgDesc num-args 0, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::_getPointer', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
Class '_Namespace', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_Namespace
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
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 CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_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 DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_Namespace
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
DirectCall CP#0, 0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_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 CP#0, 0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_NamespaceImpl::get:_namespacePointer', ArgDesc num-args 0, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
Class 'Stdin', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::Stdin
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
Class '_StdIOUtils', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::_StdIOUtils
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
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, external
|
|
parameters [dart:core::int 'fd'] (required: 1)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::Stdin
|
|
Class 'Timer', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::Timer
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
Class 'SendPort', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::SendPort
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
Class 'VMLibraryHooks', script = 'DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart'
|
|
extends dart:core::Object
|
|
|
|
Field 'timerFactory', type = FunctionType (dart:core::int, FunctionType (DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::Timer) -> void, dart:core::bool)? -> DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::Timer, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Field 'eventHandlerSendData', type = FunctionType (dart:core::Object?, DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::SendPort, dart:core::int) -> void, getter = 'get:eventHandlerSendData', reflectable, static, is-late
|
|
value = null
|
|
|
|
Field 'timerMillisecondClock', type = FunctionType () -> dart:core::int, getter = 'get:timerMillisecondClock', reflectable, static, is-late
|
|
value = null
|
|
|
|
Field 'packageRootString', type = dart:core::String?, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Field 'packageConfigString', type = dart:core::String?, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Field 'packageConfigUriSync', type = FunctionType ()? -> dart:core::Uri?, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Field 'resolvePackageUriSync', type = FunctionType (dart:core::Uri)? -> dart:core::Uri?, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Field '_computeScriptUri', type = FunctionType ()? -> dart:core::Uri, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Field '_cachedScript', type = dart:core::Uri?, reflectable, static, is-late, has-initializer
|
|
value = null
|
|
|
|
Function '', constructor, reflectable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::VMLibraryHooks
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
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 [dart:core::Object? 'f'] (required: 1)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 1
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
PushConstant CP#0
|
|
PushNull
|
|
PushNull
|
|
PushConstant CP#1
|
|
AssertAssignable 0, CP#2
|
|
StoreStaticTOS CP#3
|
|
PushNull
|
|
StoreStaticTOS CP#4
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = Type FunctionType ()? -> dart:core::Uri
|
|
[1] = ObjectRef ' in type cast'
|
|
[2] = SubtypeTestCache
|
|
[3] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::VMLibraryHooks::_computeScriptUri (field)
|
|
[4] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::VMLibraryHooks::_cachedScript (field)
|
|
}
|
|
|
|
|
|
Function 'get:platformScript', getter, static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dart:core::Uri?
|
|
|
|
Bytecode {
|
|
Entry 6
|
|
CheckStack 0
|
|
LoadStatic CP#0
|
|
PopLocal r0
|
|
Push r0
|
|
JumpIfNotNull L1
|
|
LoadStatic CP#1
|
|
PopLocal r3
|
|
Push r3
|
|
JumpIfNotNull L2
|
|
PushNull
|
|
PopLocal r4
|
|
Jump L3
|
|
L2:
|
|
Push r3
|
|
StoreLocal r5
|
|
Push r5
|
|
UncheckedClosureCall CP#2, 1
|
|
PopLocal r4
|
|
L3:
|
|
Push r4
|
|
StoreLocal r2
|
|
Push r2
|
|
StoreStaticTOS CP#0
|
|
PopLocal r1
|
|
Jump L4
|
|
L1:
|
|
Push r0
|
|
PopLocal r1
|
|
L4:
|
|
Push r1
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::VMLibraryHooks::_cachedScript (field)
|
|
[1] = StaticField DART_SDK/pkg/dart2bytecode/testcases/bootstrapping.dart::VMLibraryHooks::_computeScriptUri (field)
|
|
[2] = ObjectRef ArgDesc num-args 1, num-type-args 0, names []
|
|
}
|
|
|