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, has-initializer
    value = null

Field 'foo3', type = dart:core::int*, getter = 'get:foo3', setter = 'set:foo3', reflectable, has-initializer
    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, has-initializer
    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
  PushInt              43
  Drop1
  Push                 FP[-6]
  Push                 FP[-5]
  StoreFieldTOS        CP#2
  Push                 FP[-6]
  PushInt              44
  StoreFieldTOS        CP#4
  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::foo4 (field)
  [3] = Reserved
  [4] = InstanceField #lib::A::foo5 (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
  PushInt              43
  Drop1
  Push                 FP[-7]
  Push                 FP[-6]
  StoreFieldTOS        CP#2
  Push                 FP[-7]
  Push                 FP[-5]
  PushInt              1
  AddInt
  StoreFieldTOS        CP#4
  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::foo1 (field)
  [3] = Reserved
  [4] = InstanceField #lib::A::foo5 (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
}


Function 'get:_identityHashCode', getter, abstract, debuggable
    parameters [] (required: 0)
    return-type dart:core::int*

Function '_instanceOf', abstract, debuggable
    parameters [dynamic 'instantiatorTypeArguments', dynamic 'functionTypeArguments', dynamic 'type'] (required: 3)
    return-type dart:core::bool*

Function '_simpleInstanceOf', abstract, debuggable
    parameters [dynamic 'type'] (required: 1)
    return-type dart:core::bool*

Function '_simpleInstanceOfTrue', abstract, debuggable
    parameters [dynamic 'type'] (required: 1)
    return-type dart:core::bool*

Function '_simpleInstanceOfFalse', abstract, debuggable
    parameters [dynamic 'type'] (required: 1)
    return-type dart:core::bool*

Function '==', abstract, debuggable
    parameters [dynamic 'other'] (required: 1)
    return-type dart:core::bool*

Function 'get:hashCode', getter, abstract, debuggable
    parameters [] (required: 0)
    return-type dart:core::int*

Function 'toString', abstract, debuggable
    parameters [] (required: 0)
    return-type dart:core::String*

Function 'noSuchMethod', abstract, debuggable
    parameters [dart:core::Invocation* 'invocation'] (required: 1)
    return-type dynamic

Function 'get:runtimeType', getter, abstract, debuggable
    parameters [] (required: 0)
    return-type dart:core::Type*
Class 'B', script = '#lib'
    extends #lib::A*

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

Field 'foo7', type = dart:core::int*, reflectable, static, has-initializer
    value = const 47

Field 'foo8', type = dart:core::int*, reflectable, static, const, final, has-initializer
    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
  PushInt              46
  Drop1
  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))
      ;
    abstract member-signature get _identityHashCode() → dart.core::int*; -> dart.core::Object::_identityHashCode
    abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → dart.core::bool*; -> dart.core::Object::_instanceOf
    abstract member-signature method _simpleInstanceOf(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOf
    abstract member-signature method _simpleInstanceOfTrue(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfTrue
    abstract member-signature method _simpleInstanceOfFalse(dynamic type) → dart.core::bool*; -> dart.core::Object::_simpleInstanceOfFalse
    abstract member-signature operator ==(dynamic other) → dart.core::bool*; -> dart.core::Object::==
    abstract member-signature get hashCode() → dart.core::int*; -> dart.core::Object::hashCode
    abstract member-signature method toString() → dart.core::String*; -> dart.core::Object::toString
    abstract member-signature method noSuchMethod(dart.core::Invocation* invocation) → dynamic; -> dart.core::Object::noSuchMethod
    abstract member-signature get runtimeType() → dart.core::Type*; -> dart.core::Object::runtimeType
  }
  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 = #C1;
    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 {}
}
constants  {
  #C1 = 48
}
