main = #lib::main;
 [@vm.bytecode=
BytecodeMetadata {
Bytecode (version: stable)
Main library: #lib
Library '#lib'
    name '#lib'
    script '#lib'

Class '', script = '#lib'


Function 'main', static, reflectable, debuggable
    parameters [] (required: 0)
    return-type dynamic

Bytecode {
  Entry                0
  CheckStack           0
  PushNull
  ReturnTOS
}
ConstantPool {
}

Class 'A', script = '#lib'
    extends dart:core::Object

Field 'foo1', type = dart:core::int, getter = 'get:foo1', setter = 'set:foo1', reflectable
    value = null

Field 'foo2', type = dart:core::int, getter = 'get:foo2', setter = 'set:foo2', reflectable
    value = null

Field 'foo3', type = dart:core::int, getter = 'get:foo3', setter = 'set:foo3', reflectable
    value = const 42

Field 'foo4', type = dart:core::int, getter = 'get:foo4', setter = 'set:foo4', reflectable
    value = null

Field 'foo5', type = dart:core::int, getter = 'get:foo5', setter = 'set:foo5', reflectable
    value = const 43

Function '', constructor, reflectable, debuggable
    parameters [dart:core::int 'foo4'] (required: 1)
    return-type #lib::A

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-6]
  PushInt              42
  StoreFieldTOS        CP#0
  Push                 FP[-6]
  PushInt              43
  StoreFieldTOS        CP#2
  Push                 FP[-6]
  Push                 FP[-5]
  StoreFieldTOS        CP#4
  Push                 FP[-6]
  PushInt              44
  StoreFieldTOS        CP#2
  Push                 FP[-6]
  DirectCall           CP#6, 1
  Drop1
  PushNull
  ReturnTOS
}
Nullable fields: [#lib::A::foo1 (field), #lib::A::foo2 (field)]
ConstantPool {
  [0] = InstanceField #lib::A::foo3 (field)
  [1] = Reserved
  [2] = InstanceField #lib::A::foo5 (field)
  [3] = Reserved
  [4] = InstanceField #lib::A::foo4 (field)
  [5] = Reserved
  [6] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [7] = Reserved
}


Function 'constr2', constructor, reflectable, debuggable
    parameters [dart:core::int 'x', dart:core::int 'y'] (required: 2)
    return-type #lib::A

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-7]
  PushInt              42
  StoreFieldTOS        CP#0
  Push                 FP[-7]
  PushInt              43
  StoreFieldTOS        CP#2
  Push                 FP[-7]
  Push                 FP[-6]
  StoreFieldTOS        CP#4
  Push                 FP[-7]
  Push                 FP[-5]
  PushInt              1
  AddInt
  StoreFieldTOS        CP#2
  Push                 FP[-7]
  DirectCall           CP#6, 1
  Drop1
  PushNull
  ReturnTOS
}
Nullable fields: [#lib::A::foo2 (field), #lib::A::foo4 (field)]
ConstantPool {
  [0] = InstanceField #lib::A::foo3 (field)
  [1] = Reserved
  [2] = InstanceField #lib::A::foo5 (field)
  [3] = Reserved
  [4] = InstanceField #lib::A::foo1 (field)
  [5] = Reserved
  [6] = DirectCall 'dart:core::Object:: (constructor)', ArgDesc num-args 1, num-type-args 0, names []
  [7] = Reserved
}


Function 'redirecting1', constructor, reflectable, debuggable
    parameters [] (required: 0)
    return-type #lib::A

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  PushInt              45
  DirectCall           CP#0, 2
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [1] = Reserved
}


Function 'redirecting2', constructor, reflectable, debuggable
    parameters [dart:core::int 'a', dart:core::int 'b', dart:core::int 'c'] (required: 3)
    return-type #lib::A

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-8]
  Push                 FP[-7]
  Push                 FP[-6]
  Push                 FP[-5]
  MulInt
  DirectCall           CP#0, 3
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = DirectCall '#lib::A::constr2 (constructor)', ArgDesc num-args 3, num-type-args 0, names []
  [1] = Reserved
}

Class 'B', script = '#lib'
    extends #lib::A

Field 'foo6', type = dart:core::int, getter = 'get:foo6', setter = 'set:foo6', reflectable
    value = const 46

Field 'foo7', type = dart:core::int, reflectable, static
    value = const 47

Field 'foo8', type = dart:core::int, reflectable, static, const, final
    value = const 48

Function '', constructor, reflectable, debuggable
    parameters [] (required: 0)
    return-type #lib::B

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-5]
  PushInt              46
  StoreFieldTOS        CP#0
  Push                 FP[-5]
  PushInt              49
  DirectCall           CP#2, 2
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = InstanceField #lib::B::foo6 (field)
  [1] = Reserved
  [2] = DirectCall '#lib::A:: (constructor)', ArgDesc num-args 2, num-type-args 0, names []
  [3] = Reserved
}


Function 'c2', constructor, reflectable, debuggable
    parameters [dart:core::int 'i', dart:core::int 'j'] (required: 2)
    return-type #lib::B

Bytecode {
  Entry                0
  CheckStack           0
  Push                 FP[-7]
  PushInt              46
  StoreFieldTOS        CP#0
  Push                 FP[-7]
  PushInt              50
  StoreFieldTOS        CP#0
  Push                 FP[-7]
  Push                 FP[-6]
  Push                 FP[-5]
  PushInt              51
  DirectCall           CP#2, 4
  Drop1
  PushNull
  ReturnTOS
}
ConstantPool {
  [0] = InstanceField #lib::B::foo6 (field)
  [1] = Reserved
  [2] = DirectCall '#lib::A::redirecting2 (constructor)', ArgDesc num-args 4, num-type-args 0, names []
  [3] = Reserved
}


}
]library #lib from "#lib" as #lib {

  class A extends dart.core::Object {
    field dart.core::int foo1;
    field dart.core::int foo2 = null;
    field dart.core::int foo3 = 42;
    field dart.core::int foo4;
    field dart.core::int foo5 = 43;
    constructor •(dart.core::int foo4) → #lib::A
      : #lib::A::foo1 = null, #lib::A::foo4 = foo4, #lib::A::foo5 = 44, super dart.core::Object::•()
      ;
    constructor constr2(dart.core::int x, dart.core::int y) → #lib::A
      : #lib::A::foo4 = null, #lib::A::foo1 = x, #lib::A::foo5 = y.{dart.core::num::+}(1), super dart.core::Object::•()
      ;
    constructor redirecting1() → #lib::A
      : this #lib::A::•(45)
      ;
    constructor redirecting2(dart.core::int a, dart.core::int b, dart.core::int c) → #lib::A
      : this #lib::A::constr2(a, b.{dart.core::num::*}(c))
      ;
  }
  class B extends #lib::A {
    field dart.core::int foo6 = 46;
    static field dart.core::int foo7 = 47;
    static const field dart.core::int foo8 = 48;
    constructor •() → #lib::B
      : super #lib::A::•(49)
      ;
    constructor c2(dart.core::int i, dart.core::int j) → #lib::B
      : #lib::B::foo6 = 50, super #lib::A::redirecting2(i, j, 51)
      ;
  }
  static method main() → dynamic {}
}
