6195ea86bc
In the VM, factory constructors always had an extra "type arguments" parameter, even if class is not generic. Factory constructor bodies were using class type parameters instead of function type parameters. This results in extra code when calling non-generic factories which is slightly inefficient in terms of code size and performance. Also, it creates an additional complexity throughout the system as factories should be special cased in many places. This change removes artificial "type arguments" parameter, treating factory constructors basically as static methods. This matches kernel AST representation. TEST=ci Change-Id: I957583cb2ce9a3c408699880a04036e06b01dd31 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/501762 Reviewed-by: Slava Egorov <vegorov@google.com> Commit-Queue: Alexander Markov <alexmarkov@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
734 lines
23 KiB
Plaintext
734 lines
23 KiB
Plaintext
Bytecode
|
|
Dynamic Module Entry Point: DART_SDK/pkg/dart2bytecode/testcases/literals.dart::main
|
|
Library 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
name '#lib'
|
|
script 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
|
|
Class '', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
|
|
Field 'c1', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A, getter = 'get:c1', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 2, dart:core::_Enum::_name (field): 'elem3'}
|
|
}
|
|
|
|
|
|
Field 'c2', type = dart:core::String, reflectable, static, const, final, is-late, has-initializer
|
|
value = 'hello!'
|
|
|
|
Field 'c3', type = dart:core::int, reflectable, static, const, final, is-late, has-initializer
|
|
value = const 6
|
|
|
|
Field 'c4', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C, getter = 'get:c4', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C::j (field): const 3, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field): const 15}
|
|
}
|
|
|
|
|
|
Field 'c5', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D, getter = 'get:c5', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::x (field): const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field): const 4}, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::y (field): null}
|
|
}
|
|
|
|
|
|
Field 'fieldWithDoubleLiteralInitializer', type = dart:core::double, reflectable, static, is-late, has-initializer
|
|
value = const 1.0
|
|
|
|
Function 'testConstants1', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushInt 6
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#4
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#5
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 2, dart:core::_Enum::_name (field): 'elem3'}
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = ObjectRef 'hello!'
|
|
[4] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C::j (field): const 3, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field): const 15}
|
|
[5] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::x (field): const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field): const 4}, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::y (field): null}
|
|
}
|
|
|
|
|
|
Function 'testConstants2', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushInt 42
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#2
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#3
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#4
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#5
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushConstant CP#6
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = ObjectRef 'foo'
|
|
[3] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 1, dart:core::_Enum::_name (field): 'elem2'}
|
|
[4] = ObjectRef const List<dart:core::Object> [const 42, 'foo', dart:core::int]
|
|
[5] = ObjectRef const Map<dart:core::Map < dart:core::String, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A >> ['E2', const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 1, dart:core::_Enum::_name (field): 'elem2'}, 'E4', const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 3, dart:core::_Enum::_name (field): 'elem4'}]
|
|
[6] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::x (field): const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C::j (field): const 9, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field): const 30}, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::y (field): const Map<dart:core::Map < dart:core::String, dart:core::Object >> ['foo', const 42, 'bar', const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B {DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field): const 6}]}
|
|
}
|
|
|
|
|
|
Function 'testListLiteral', static, reflectable, debuggable
|
|
parameters [dart:core::int 'a'] (required: 1)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
PushInt 1
|
|
Push FP[-5]
|
|
PushInt 3
|
|
DirectCall CP#1, 4
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
PushConstant CP#5
|
|
PushConstant CP#6
|
|
Push FP[-5]
|
|
InterfaceCall CP#7, 1
|
|
PushConstant CP#9
|
|
DirectCall CP#1, 4
|
|
DirectCall CP#3, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int >
|
|
[1] = DirectCall 'dart:core::_GrowableList::_literal3 (constructor)', ArgDesc num-args 3, num-type-args 1, names []
|
|
[2] = Reserved
|
|
[3] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[4] = Reserved
|
|
[5] = ObjectRef < dart:core::String >
|
|
[6] = ObjectRef 'a'
|
|
[7] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
|
|
[8] = Reserved
|
|
[9] = ObjectRef 'b'
|
|
}
|
|
|
|
|
|
Function 'testMapLiteral', static, reflectable, debuggable
|
|
type-params <'T' extends dart:core::Object? (default dynamic)>
|
|
parameters [dart:core::int 'a', dart:core::int 'b', DART_SDK/pkg/dart2bytecode/testcases/literals.dart::testMapLiteral::TypeParam/0 'c'] (required: 3)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckFunctionTypeArgs 1, r0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
PushConstant CP#1
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r1
|
|
Push r1
|
|
PushInt 0
|
|
PushInt 1
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 1
|
|
Push FP[-7]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 2
|
|
Push FP[-6]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 3
|
|
PushInt 2
|
|
StoreIndexedTOS
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushConstant CP#6
|
|
PushConstant CP#1
|
|
PushInt 4
|
|
CreateArrayTOS
|
|
StoreLocal r1
|
|
Push r1
|
|
PushInt 0
|
|
PushConstant CP#7
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 1
|
|
Push FP[-7]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 2
|
|
Push FP[-6]
|
|
InterfaceCall CP#8, 1
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 3
|
|
PushInt 3
|
|
StoreIndexedTOS
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
Push r0
|
|
InstantiateTypeArgumentsTOS 0, CP#10
|
|
PushConstant CP#11
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
Push r0
|
|
InstantiateTypeArgumentsTOS 0, CP#12
|
|
PushConstant CP#1
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r1
|
|
Push r1
|
|
PushInt 0
|
|
Push FP[-5]
|
|
StoreIndexedTOS
|
|
Push r1
|
|
PushInt 1
|
|
PushInt 4
|
|
StoreIndexedTOS
|
|
DirectCall CP#2, 2
|
|
DirectCall CP#4, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef < dart:core::int, dart:core::int >
|
|
[1] = ObjectRef < dynamic >
|
|
[2] = DirectCall 'dart:core::Map::_fromLiteral (constructor)', ArgDesc num-args 1, num-type-args 2, names []
|
|
[3] = Reserved
|
|
[4] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = ObjectRef < dart:core::String, dart:core::int >
|
|
[7] = ObjectRef 'foo'
|
|
[8] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
|
|
[9] = Reserved
|
|
[10] = ObjectRef < dart:core::String, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::testMapLiteral::TypeParam/0 >
|
|
[11] = ObjectRef const List<dynamic> []
|
|
[12] = ObjectRef < DART_SDK/pkg/dart2bytecode/testcases/literals.dart::testMapLiteral::TypeParam/0, dart:core::int >
|
|
}
|
|
|
|
|
|
Function 'testSetLiteral', static, reflectable, debuggable
|
|
type-params <'T' extends dart:core::Object? (default dynamic)>
|
|
parameters [dart:core::int 'a', dart:core::int 'b'] (required: 2)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 3
|
|
CheckFunctionTypeArgs 1, r0
|
|
CheckStack 0
|
|
PushConstant CP#1
|
|
PushConstant CP#0
|
|
AllocateT
|
|
StoreLocal r2
|
|
Push r2
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
PopLocal r1
|
|
Push r1
|
|
PushInt 1
|
|
UncheckedInterfaceCall CP#4, 2
|
|
Drop1
|
|
Push r1
|
|
PushInt 2
|
|
UncheckedInterfaceCall CP#4, 2
|
|
Drop1
|
|
Push r1
|
|
Push FP[-6]
|
|
UncheckedInterfaceCall CP#4, 2
|
|
Drop1
|
|
Push r1
|
|
DirectCall CP#6, 1
|
|
Drop1
|
|
PushConstant CP#8
|
|
PushConstant CP#0
|
|
AllocateT
|
|
StoreLocal r2
|
|
Push r2
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
PopLocal r1
|
|
Push r1
|
|
PushConstant CP#9
|
|
UncheckedInterfaceCall CP#4, 2
|
|
Drop1
|
|
Push r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#10, 1
|
|
UncheckedInterfaceCall CP#4, 2
|
|
Drop1
|
|
Push r1
|
|
DirectCall CP#6, 1
|
|
Drop1
|
|
Push r0
|
|
PushConstant CP#0
|
|
AllocateT
|
|
StoreLocal r2
|
|
Push r2
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
PopLocal r1
|
|
Push r1
|
|
DirectCall CP#6, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = Class dart:_compact_hash::_Set
|
|
[1] = ObjectRef < dart:core::int >
|
|
[2] = DirectCall 'dart:_compact_hash::_Set:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
[4] = InterfaceCall 'dart:core::Set::add', ArgDesc num-args 2, num-type-args 0, names []
|
|
[5] = Reserved
|
|
[6] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[7] = Reserved
|
|
[8] = ObjectRef < dart:core::String >
|
|
[9] = ObjectRef 'foo'
|
|
[10] = InterfaceCall 'dart:core::int::toString', ArgDesc num-args 1, num-type-args 0, names []
|
|
[11] = Reserved
|
|
}
|
|
|
|
|
|
Function 'testSymbol', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushConstant CP#3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const 'test_symbol'
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = ObjectRef const '_private_symbol'
|
|
}
|
|
|
|
|
|
Function 'testTypeLiteral', static, reflectable, debuggable
|
|
type-params <'T' extends dart:core::Object? (default dynamic)>
|
|
parameters [] (required: 0)
|
|
return-type void
|
|
|
|
Bytecode {
|
|
Entry 1
|
|
CheckFunctionTypeArgs 1, r0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
Push r0
|
|
InstantiateType CP#3
|
|
DirectCall CP#1, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef dart:core::String
|
|
[1] = DirectCall 'dart:core::print', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = Type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::testTypeLiteral::TypeParam/0
|
|
}
|
|
|
|
|
|
Function 'testGenericConstInstance', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::F < dart:core::int, dart:core::String > {}
|
|
}
|
|
|
|
|
|
Function 'testGenericFunctionTypeLiteral', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef FunctionType <'X' extends dart:core::Object? (default dynamic)> (null::TypeParam/0) -> null::TypeParam/0
|
|
}
|
|
|
|
|
|
Function 'testFieldWithDoubleLiteralInitializer', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
LoadStatic CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = StaticField DART_SDK/pkg/dart2bytecode/testcases/literals.dart::fieldWithDoubleLiteralInitializer (field)
|
|
}
|
|
|
|
|
|
Function 'main', static, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dynamic
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
}
|
|
|
|
Class 'A', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart', enum
|
|
extends dart:core::_Enum
|
|
|
|
Field 'elem1', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A, getter = 'get:elem1', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 0, dart:core::_Enum::_name (field): 'elem1'}
|
|
}
|
|
|
|
|
|
Field 'elem2', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A, getter = 'get:elem2', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 1, dart:core::_Enum::_name (field): 'elem2'}
|
|
}
|
|
|
|
|
|
Field 'elem3', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A, getter = 'get:elem3', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 2, dart:core::_Enum::_name (field): 'elem3'}
|
|
}
|
|
|
|
|
|
Field 'elem4', type = DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A, getter = 'get:elem4', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 3, dart:core::_Enum::_name (field): 'elem4'}
|
|
}
|
|
|
|
|
|
Field 'values', type = dart:core::List < DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A >, getter = 'get:values', reflectable, static, const, final, is-late, has-initializer
|
|
initializer
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
PushConstant CP#0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef const List<DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A> [const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 0, dart:core::_Enum::_name (field): 'elem1'}, const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 1, dart:core::_Enum::_name (field): 'elem2'}, const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 2, dart:core::_Enum::_name (field): 'elem3'}, const DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A {dart:core::_Enum::index (field): const 3, dart:core::_Enum::_name (field): 'elem4'}]
|
|
}
|
|
|
|
|
|
Function '', constructor, const, reflectable
|
|
parameters [dart:core::int '#index', dart:core::String '#name'] (required: 2)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::A
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-7]
|
|
Push FP[-6]
|
|
Push FP[-5]
|
|
DirectCall CP#0, 3
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'dart:core::_Enum:: (constructor)', ArgDesc num-args 3, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|
|
|
|
Function '_enumToString', reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type dart:core::String
|
|
|
|
Bytecode {
|
|
Entry 1
|
|
CheckStack 0
|
|
PushNull
|
|
PushInt 2
|
|
CreateArrayTOS
|
|
StoreLocal r0
|
|
Push r0
|
|
PushInt 0
|
|
PushConstant CP#0
|
|
StoreIndexedTOS
|
|
Push r0
|
|
PushInt 1
|
|
Push FP[-5]
|
|
InterfaceCall CP#1, 1
|
|
StoreIndexedTOS
|
|
DirectCall CP#3, 1
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef 'A.'
|
|
[1] = InterfaceCall 'dart:core::_Enum::get:_name', ArgDesc num-args 1, num-type-args 0, names []
|
|
[2] = Reserved
|
|
[3] = DirectCall 'dart:core::_StringBase::_interpolate', ArgDesc num-args 1, num-type-args 0, names []
|
|
[4] = Reserved
|
|
}
|
|
|
|
Class 'B', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
extends dart:core::Object
|
|
|
|
Field 'i', type = dart:core::int, getter = 'get:i', reflectable, final
|
|
value = null
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [dart:core::int 'i'] (required: 1)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-6]
|
|
Push FP[-5]
|
|
StoreFieldTOS CP#0
|
|
Push FP[-6]
|
|
DirectCall CP#2, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InstanceField DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B::i (field)
|
|
[1] = Reserved
|
|
[2] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
Class 'C', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
extends DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B
|
|
|
|
Field 'j', type = dart:core::int, getter = 'get:j', reflectable, final
|
|
value = null
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [dart:core::int 'a', dart:core::int 'b', dart:core::int 'c'] (required: 3)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-8]
|
|
Push FP[-7]
|
|
Push FP[-6]
|
|
AddInt
|
|
StoreFieldTOS CP#0
|
|
Push FP[-8]
|
|
Push FP[-5]
|
|
PushInt 5
|
|
MulInt
|
|
DirectCall CP#2, 2
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InstanceField DART_SDK/pkg/dart2bytecode/testcases/literals.dart::C::j (field)
|
|
[1] = Reserved
|
|
[2] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart::B:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
Class 'D', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
extends dart:core::Object
|
|
|
|
Field 'x', type = dart:core::Object?, getter = 'get:x', reflectable, final
|
|
value = null
|
|
|
|
Field 'y', type = dart:core::Object?, getter = 'get:y', reflectable, final
|
|
value = null
|
|
|
|
Function '', constructor, const, has-optional-positional-params, reflectable, debuggable
|
|
parameters [dart:core::Object? 'x', dart:core::Object? 'y'] (required: 1)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D
|
|
|
|
Bytecode {
|
|
EntryOptional 2, 1, 0
|
|
LoadConstant r2, CP#0
|
|
Frame 0
|
|
CheckStack 0
|
|
Push r0
|
|
Push r1
|
|
StoreFieldTOS CP#1
|
|
Push r0
|
|
Push r2
|
|
StoreFieldTOS CP#3
|
|
Push r0
|
|
DirectCall CP#5, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = ObjectRef null
|
|
[1] = InstanceField DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::x (field)
|
|
[2] = Reserved
|
|
[3] = InstanceField DART_SDK/pkg/dart2bytecode/testcases/literals.dart::D::y (field)
|
|
[4] = Reserved
|
|
[5] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[6] = Reserved
|
|
}
|
|
|
|
Class 'E', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
type-params <'T' extends dart:core::Object? (default dynamic)> (args: 1)
|
|
extends dart:core::Object
|
|
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::E < DART_SDK/pkg/dart2bytecode/testcases/literals.dart::E::TypeParam/0 >
|
|
|
|
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 'F', script = 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart'
|
|
type-params <'P' extends dart:core::Object? (default dynamic), 'Q' extends dart:core::Object? (default dynamic)> (args: 3)
|
|
extends DART_SDK/pkg/dart2bytecode/testcases/literals.dart::E < dart:core::Map < DART_SDK/pkg/dart2bytecode/testcases/literals.dart::F::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::F::TypeParam/1 > >
|
|
|
|
|
|
Function '', constructor, const, reflectable, debuggable
|
|
parameters [] (required: 0)
|
|
return-type DART_SDK/pkg/dart2bytecode/testcases/literals.dart::F < DART_SDK/pkg/dart2bytecode/testcases/literals.dart::F::TypeParam/0, DART_SDK/pkg/dart2bytecode/testcases/literals.dart::F::TypeParam/1 >
|
|
|
|
Bytecode {
|
|
Entry 0
|
|
CheckStack 0
|
|
Push FP[-5]
|
|
DirectCall CP#0, 1
|
|
Drop1
|
|
PushNull
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = DirectCall 'DART_SDK/pkg/dart2bytecode/testcases/literals.dart::E:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
}
|
|
|