da8cb470cc
Size of a large application:
Before: 26628600
After: 21480120 (-19.3%)
Size of snapshots:
isolate_snapshot_framework.bin
Before: 9322496
After: 6782976 (-27.2%)
isolate_snapshot_product_framework.bin
Before: 9166848
After: 6602752 (-27.9%)
Regressions in tests:
1) Test language_2/type_alias_equality_test/04 fails similarly to default mode, as VM
does not implement comparison of function types according to the specification.
Previously this test was passing as function types were canonicalized in bytecode,
which was not always correct. This CL fixes the problem with canonicalization of
function types in bytecode and the test starts failing again.
2) Tests standalone_2/entrypoints_verification_test, standalone_2/io/test_extension_test,
standalone_2/io/test_extension_fail_test fail as native extensions are not supported
in bytecode yet. These tests start passing after df5e7aac17,
which switched bytecode tests to kernel service (on x64), because kernel service doesn't
drop ASTs. This CL switches from reading AST library declarations to bytecode even if
AST is not removed, so tests fail again.
Change-Id: I8b7ba44bfa49d0b1599b2509553ff7c831a4e244
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/104700
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
401 lines
10 KiB
Plaintext
401 lines
10 KiB
Plaintext
main = #lib::main;
|
|
[@vm.bytecode=
|
|
BytecodeMetadata {
|
|
Bytecode (version: stable)
|
|
Main library: #lib
|
|
Library '#lib'
|
|
name '#lib'
|
|
script '#lib'
|
|
|
|
Class '', script = '#lib'
|
|
|
|
|
|
Function 'test_for', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
PushInt 0
|
|
PopLocal r1
|
|
L2:
|
|
CheckStack 1
|
|
Push r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
CompareIntLt
|
|
JumpIfFalse L1
|
|
Push r0
|
|
Push FP[-5]
|
|
Push r1
|
|
InterfaceCall CP#2, 2
|
|
AddInt
|
|
PopLocal r0
|
|
Push r1
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r1
|
|
Drop1
|
|
Jump L2
|
|
L1:
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
|
|
Function 'test_for_break', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
PushInt 0
|
|
PopLocal r1
|
|
L3:
|
|
CheckStack 1
|
|
Push r1
|
|
PushInt 0
|
|
CompareIntGe
|
|
JumpIfFalse L1
|
|
Push r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
CompareIntGe
|
|
JumpIfFalse L2
|
|
Jump L1
|
|
L2:
|
|
Push r0
|
|
Push FP[-5]
|
|
Push r1
|
|
InterfaceCall CP#2, 2
|
|
AddInt
|
|
PopLocal r0
|
|
Push r1
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r1
|
|
Drop1
|
|
Jump L3
|
|
L1:
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
|
|
Function 'test_for_continue', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
PushInt 100
|
|
NegateInt
|
|
PopLocal r1
|
|
L4:
|
|
CheckStack 1
|
|
Push r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
CompareIntLt
|
|
JumpIfFalse L1
|
|
Push r1
|
|
PushInt 0
|
|
CompareIntLt
|
|
JumpIfFalse L2
|
|
Jump L3
|
|
L2:
|
|
Push r0
|
|
Push FP[-5]
|
|
Push r1
|
|
InterfaceCall CP#2, 2
|
|
AddInt
|
|
PopLocal r0
|
|
L3:
|
|
Push r1
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r1
|
|
Drop1
|
|
Jump L4
|
|
L1:
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
|
|
Function 'test_while', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
PushInt 0
|
|
PopLocal r1
|
|
L2:
|
|
CheckStack 1
|
|
Push r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
CompareIntLt
|
|
JumpIfFalse L1
|
|
Push r0
|
|
Push FP[-5]
|
|
Push r1
|
|
PopLocal r2
|
|
Push r2
|
|
PushInt 1
|
|
AddInt
|
|
StoreLocal r1
|
|
PopLocal r3
|
|
Push r2
|
|
InterfaceCall CP#2, 2
|
|
AddInt
|
|
PopLocal r0
|
|
Jump L2
|
|
L1:
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
|
|
Function 'test_do_while', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 2
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
PushInt 0
|
|
PopLocal r1
|
|
L1:
|
|
CheckStack 1
|
|
Push r0
|
|
Push FP[-5]
|
|
Push r1
|
|
InterfaceCall CP#0, 2
|
|
AddInt
|
|
PopLocal r0
|
|
Push r1
|
|
PushInt 1
|
|
AddInt
|
|
PopLocal r1
|
|
Push r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#2, 1
|
|
CompareIntLt
|
|
JumpIfTrue L1
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::List::[]', ArgDesc num-args 2, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::List::get:length', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
}
|
|
|
|
|
|
Function 'test_for_in', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 3
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
PopLocal r1
|
|
L2:
|
|
CheckStack 1
|
|
Push r1
|
|
InterfaceCall CP#2, 1
|
|
JumpIfFalse L1
|
|
Push r1
|
|
InterfaceCall CP#4, 1
|
|
PopLocal r2
|
|
Push r0
|
|
Push r2
|
|
AddInt
|
|
PopLocal r0
|
|
Jump L2
|
|
L1:
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
[4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = Reserved
|
|
}
|
|
|
|
|
|
Function 'test_for_in_with_outer_var', static, reflectable, debuggable
|
|
parameters [dart:core::List < dart:core::int > 'list'] (required: 1)
|
|
return-type dart:core::int
|
|
|
|
Bytecode {
|
|
Entry 4
|
|
CheckStack 0
|
|
PushInt 0
|
|
PopLocal r0
|
|
PushInt 42
|
|
PopLocal r1
|
|
Push FP[-5]
|
|
InterfaceCall CP#0, 1
|
|
PopLocal r2
|
|
L2:
|
|
CheckStack 1
|
|
Push r2
|
|
InterfaceCall CP#2, 1
|
|
JumpIfFalse L1
|
|
Push r2
|
|
InterfaceCall CP#4, 1
|
|
PopLocal r3
|
|
Push r3
|
|
PopLocal r1
|
|
Push r0
|
|
Push r1
|
|
AddInt
|
|
PopLocal r0
|
|
Jump L2
|
|
L1:
|
|
Push r0
|
|
ReturnTOS
|
|
}
|
|
ConstantPool {
|
|
[0] = InterfaceCall 'dart:core::Iterable::get:iterator', ArgDesc num-args 1, num-type-args 0, names []
|
|
[1] = Reserved
|
|
[2] = InterfaceCall 'dart:core::Iterator::moveNext', ArgDesc num-args 1, num-type-args 0, names []
|
|
[3] = Reserved
|
|
[4] = InterfaceCall 'dart:core::Iterator::get:current', ArgDesc num-args 1, num-type-args 0, names []
|
|
[5] = 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 {
|
|
|
|
static method test_for(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
for (dart.core::int i = 0; i.{dart.core::num::<}(list.{dart.core::List::length}); i = i.{dart.core::num::+}(1)) {
|
|
sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
|
|
}
|
|
return sum;
|
|
}
|
|
static method test_for_break(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
#L1:
|
|
for (dart.core::int i = 0; i.{dart.core::num::>=}(0); i = i.{dart.core::num::+}(1)) {
|
|
if(i.{dart.core::num::>=}(list.{dart.core::List::length})) {
|
|
break #L1;
|
|
}
|
|
sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
|
|
}
|
|
return sum;
|
|
}
|
|
static method test_for_continue(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
for (dart.core::int i = 100.{dart.core::int::unary-}(); i.{dart.core::num::<}(list.{dart.core::List::length}); i = i.{dart.core::num::+}(1))
|
|
#L2:
|
|
{
|
|
if(i.{dart.core::num::<}(0)) {
|
|
break #L2;
|
|
}
|
|
sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
|
|
}
|
|
return sum;
|
|
}
|
|
static method test_while(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
dart.core::int i = 0;
|
|
while (i.{dart.core::num::<}(list.{dart.core::List::length})) {
|
|
sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(let final dart.core::int #t1 = i in let final dart.core::int #t2 = i = #t1.{dart.core::num::+}(1) in #t1));
|
|
}
|
|
return sum;
|
|
}
|
|
static method test_do_while(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
dart.core::int i = 0;
|
|
do {
|
|
sum = sum.{dart.core::num::+}(list.{dart.core::List::[]}(i));
|
|
i = i.{dart.core::num::+}(1);
|
|
}
|
|
while (i.{dart.core::num::<}(list.{dart.core::List::length}))
|
|
return sum;
|
|
}
|
|
static method test_for_in(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
for (dart.core::int e in list) {
|
|
sum = sum.{dart.core::num::+}(e);
|
|
}
|
|
return sum;
|
|
}
|
|
static method test_for_in_with_outer_var(dart.core::List<dart.core::int> list) → dart.core::int {
|
|
dart.core::int sum = 0;
|
|
dart.core::int e = 42;
|
|
for (final dart.core::int #t3 in list) {
|
|
e = #t3;
|
|
sum = sum.{dart.core::num::+}(e);
|
|
}
|
|
return sum;
|
|
}
|
|
static method main() → dynamic {}
|
|
}
|