| --- A. |
| B0 = EntryBlock() |
| v4 = Constant(null) |
| v1 = Parameter(this) |
| DirectCall Object.(v1) |
| Return(v4) |
| |
| --- B. |
| B0 = EntryBlock() |
| v5 = Constant(42) |
| v9 = Constant(null) |
| v1 = Parameter(this) |
| v2 = Parameter(x) |
| DirectCall C.(v1, v2, v5) |
| DirectCall print(v2) |
| Return(v9) |
| |
| --- B.superCalls |
| B0 = EntryBlock() |
| v9 = Constant(42) |
| v12 = Constant(null) |
| v1 = Parameter(this) |
| v2 = Parameter(arg) |
| DirectCall C.m1(v1, v2) |
| v8 = DirectCall getter C.m2(v1) |
| v10 = BinaryIntOp +(v8, v9) |
| DirectCall setter C.m3(v1, v10) |
| Return(v12) |
| |
| --- B.m1 |
| B0 = EntryBlock() |
| v4 = Constant(1) |
| v7 = Constant(null) |
| Parameter(this) |
| v2 = Parameter(a) |
| v5 = BinaryIntOp +(v2, v4) |
| DirectCall print(v5) |
| Return(v7) |
| |
| --- getter B.m2 |
| B0 = EntryBlock() |
| v4 = Constant(1) |
| v1 = Parameter(this) |
| v3 = InterfaceCall getter C.x(v1) |
| v5 = BinaryIntOp +(v3, v4) |
| Return(v5) |
| |
| --- setter B.m3 |
| B0 = EntryBlock() |
| v5 = Constant(1) |
| v8 = Constant(null) |
| v1 = Parameter(this) |
| v2 = Parameter(b) |
| v6 = BinaryIntOp +(v2, v5) |
| InterfaceCall setter C.y(v1, v6) |
| Return(v8) |
| |
| --- C. |
| B0 = EntryBlock() |
| Constant(1) |
| v14 = Constant(null) |
| Constant(-1) |
| v1 = Parameter(this) |
| v2 = Parameter(x) |
| v3 = Parameter(y) |
| StoreInstanceField(C.x, v1, v2) |
| StoreInstanceField(C.y, v1, v3) |
| DirectCall Object.(v1) |
| Return(v14) |
| |
| --- C.m1 |
| B0 = EntryBlock() |
| v4 = Constant(2) |
| v7 = Constant(null) |
| Parameter(this) |
| v2 = Parameter(a) |
| v5 = BinaryIntOp +(v2, v4) |
| DirectCall print(v5) |
| Return(v7) |
| |
| --- getter C.m2 |
| B0 = EntryBlock() |
| v4 = Constant(2) |
| v1 = Parameter(this) |
| v3 = InterfaceCall getter C.x(v1) |
| v5 = BinaryIntOp +(v3, v4) |
| Return(v5) |
| |
| --- setter C.m3 |
| B0 = EntryBlock() |
| v5 = Constant(2) |
| v8 = Constant(null) |
| v1 = Parameter(this) |
| v2 = Parameter(b) |
| v6 = BinaryIntOp +(v2, v5) |
| InterfaceCall setter C.y(v1, v6) |
| Return(v8) |
| |
| --- getter C.x |
| B0 = EntryBlock() |
| v1 = Parameter(this) |
| v3 = LoadInstanceField(C.x, v1) |
| Return(v3) |
| |
| --- getter C.y |
| B0 = EntryBlock() |
| v1 = Parameter(this) |
| v3 = LoadInstanceField(C.y, v1) |
| Return(v3) |
| |
| --- setter C.y |
| B0 = EntryBlock() |
| v6 = Constant(null) |
| v1 = Parameter(this) |
| v2 = Parameter(#value) |
| StoreInstanceField(C.y, v1, v2) |
| Return(v6) |
| |
| --- instanceCalls |
| B0 = EntryBlock() dominates:(B20, B22, B19) |
| v17 = Constant(null) |
| v1 = Parameter(obj) |
| v2 = Parameter(obj2) |
| v3 = Parameter(a) |
| v4 = Parameter(b) |
| v5 = Parameter(c) |
| InterfaceCall A.foo1(v1, v3) |
| InterfaceCall A.foo1(v1, v3, v4) |
| v14 = InterfaceCall getter A.foo2(v1) |
| v18 = Comparison ==(v2, v17) |
| Branch(v18, true: B19, false: B20) |
| B19 = TargetBlock() idom:B0 |
| Goto(B22) |
| B20 = TargetBlock() idom:B0 dominates:(B29, B31, B28) |
| v26 = TypeCast(v2, A, unchecked) |
| v27 = InterfaceCall Object.==(v1, v26) |
| Branch(v27, true: B28, false: B29) |
| B28 = TargetBlock() idom:B20 |
| v36 = UnaryIntOp toDouble(v14) |
| v37 = BinaryDoubleOp +(v5, v36) |
| InterfaceCall setter A.foo3(v1, v37) |
| Goto(B31) |
| B29 = TargetBlock() idom:B20 |
| Goto(B31) |
| B31 = JoinBlock(B29, B28) idom:B20 |
| Goto(B22) |
| B22 = JoinBlock(B31, B19) idom:B0 |
| v42 = InterfaceCall tear-off A.foo1(v1) |
| DirectCall print(v42) |
| Return(v17) |
| |
| --- staticCalls |
| B0 = EntryBlock() dominates:(B7, B9, B6) |
| v4 = Constant(0) |
| v12 = Constant(1) |
| v20 = Constant(null) |
| v22 = Constant(-1) |
| v1 = Parameter(a) |
| v2 = Parameter(b) |
| v5 = Comparison int >(v1, v4) |
| Branch(v5, true: B6, false: B7) |
| B6 = TargetBlock() idom:B0 |
| v23 = BinaryIntOp +(v1, v22) |
| DirectCall staticCalls(v23, v2) |
| Goto(B9) |
| B7 = TargetBlock() idom:B0 |
| Goto(B9) |
| B9 = JoinBlock(B7, B6) idom:B0 |
| v17 = LoadStaticField(sField) |
| v18 = BinaryIntOp +(v17, v12) |
| StoreStaticField(sField, v18) |
| Return(v20) |
| |
| --- dynamicCalls |
| B0 = EntryBlock() |
| v13 = Constant(1) |
| v16 = Constant(null) |
| v1 = Parameter(x) |
| v2 = Parameter(y) |
| v3 = Parameter(z) |
| DynamicCall foo1(v1, v2, v3) |
| v9 = DynamicCall get bar(v2) |
| v14 = DynamicCall +(v9, v13) |
| DynamicCall set baz(v3, v14) |
| Return(v16) |
| |
| --- closureCalls |
| B0 = EntryBlock() |
| v4 = Constant(1) |
| v5 = Constant("a") |
| v7 = Constant(<int>) |
| v9 = Constant(2) |
| v10 = Constant("b") |
| v15 = Constant(42) |
| v19 = Constant(<String>) |
| v21 = Constant("abc") |
| v25 = Constant(null) |
| v1 = Parameter(func1) |
| v2 = Parameter(func2) |
| DynamicCall call(v1, v4, v5) |
| ClosureCall(v7, v2, v9, v10) |
| v12 = AllocateClosure() |
| DirectCall closure FunctionDeclarationImpl(void func3(int x) => print(x);) at closureCalls(v12, v15) |
| v17 = AllocateClosure() |
| DirectCall closure FunctionDeclarationImpl(void func4<T extends Object?>(T% x) => print(x);) at closureCalls(v19, v17, v21) |
| v23 = AllocateClosure() |
| DirectCall closure FunctionExpression(Null () { |
| print("hey"); |
| }) at closureCalls(v23) |
| Return(v25) |
| |
| --- objectAllocation |
| B0 = EntryBlock() |
| v13 = Constant(null) |
| v1 = Parameter(a) |
| v2 = AllocateObject B() |
| DirectCall B.(v2, v1) |
| v8 = InterfaceCall getter C.y(v2) |
| v10 = InterfaceCall getter C.x(v2) |
| v11 = BinaryIntOp +(v8, v10) |
| InterfaceCall setter C.y(v2, v11) |
| Return(v13) |
| |
| --- main |
| B0 = EntryBlock() |
| v1 = Constant(null) |
| Return(v1) |
| |
| --- field-init sField |
| B0 = EntryBlock() |
| v1 = Constant(42) |
| Return(v1) |
| |