// File: /workspace/github_c_makefile_star2_O0/GregorR[P]lstg/ImageBuilder/imageBuilder.c
// Function: bigBang
void bigBang(void)
{
  struct object  *ObjectClass,
                 *MetaObjectClass,
                 *ClassClass,
                 *NilClass,
                 *TrueClass,
                 *FalseClass,
                 *TreeClass,
                 *DictionaryClass,
                 *OrderedArrayClass,
                 *MetaClassClass,
                 *ByteArrayClass;

  /*
   * First, make the nil (undefined) object;
   * notice its class is wrong
   */
  nilObject = gcalloc(0);

  /*
   * Second, make class for Symbol;
   * this will allow newClass to work correctly
   */
  SymbolClass = gcalloc(MetaSymbolSize);
  addGlobalName("Symbol", SymbolClass);
  SymbolClass->data[nameInClass] = newSymbol("Symbol");

  /*
     now we can fix up nil's class 
   */
  NilClass = newClass("Undefined");
  addGlobalName("Undefined", NilClass);
  nilObject->class = NilClass;
  addGlobalName("nil", nilObject);

  /*
     make up the object / metaobject mess 
   */
  ObjectClass = newClass("Object");
  addGlobalName("Object", ObjectClass);
  MetaObjectClass = newClass("MetaObject");
  addGlobalName("MetaObject", MetaObjectClass);
  ObjectClass->class = MetaObjectClass;
  ObjectClass->data[parentClassInClass] = nilObject;

  /*
     And the Class/MetaClass mess 
   */
  ClassClass = newClass("Class");
  addGlobalName("Class", ClassClass);
  MetaClassClass = newClass("MetaClass");
  addGlobalName("MetaClass", MetaClassClass);
  ClassClass->class = MetaClassClass;

  /*
     now make up a bunch of other classes 
   */
  BlockClass = newClass("Block");
  addGlobalName("Block", BlockClass);

  /*
     create Char with extra slot for instance var 
   */
  CharClass = gcalloc(MetaCharSize);
  addGlobalName("Char", CharClass);
  CharClass->data[nameInClass] = newSymbol("Char");

  /*
     SmallInt has an extra class variable, just like Symbol and Char 
   */
  SmallIntClass = gcalloc(MetaSmallIntSize);
  addGlobalName("SmallInt", SmallIntClass);
  SmallIntClass->data[nameInClass] = newSymbol("SmallInt");

  IntegerClass = newClass("Integer");
  addGlobalName("Integer", IntegerClass);

  TrueClass = newClass("True");
  addGlobalName("True", TrueClass);
  trueObject = gcalloc(0);
  trueObject->class = TrueClass;
  addGlobalName("true", trueObject);

  FalseClass = newClass("False");
  addGlobalName("False", FalseClass);
  falseObject = gcalloc(0);
  falseObject->class = FalseClass;
  addGlobalName("false", falseObject);

  ArrayClass = newClass("Array");
  addGlobalName("Array", ArrayClass);
  ByteArrayClass = newClass("ByteArray");
  addGlobalName("ByteArray", ByteArrayClass);

  OrderedArrayClass = newClass("OrderedArray");
  addGlobalName("OrderedArray", OrderedArrayClass);

  StringClass = newClass("String");
  addGlobalName("String", StringClass);

  TreeClass = newClass("Tree");
  addGlobalName("Tree", TreeClass);

  DictionaryClass = newClass("Dictionary");
  addGlobalName("Dictionary", DictionaryClass);

  /*
     finally, we can fill in the fields in class Object 
   */
  ObjectClass->data[methodsInClass] = newDictionary();
  ObjectClass->data[instanceSizeInClass] = newInteger(0);
  ClassClass->data[instanceSizeInClass] = newInteger(0);

  /*
     can make global name, but can't fill it in 
   */
  globalValues = gcalloc(2);
  addGlobalName("globals", globalValues);
}

// Assembly:
subq $0x58, %rsp
xorl %edi, %edi
callq 0x1280
movq %rax, 0x6f0e(%rip)      # 0x9130
movl $0x7, %edi
callq 0x1280
movq %rax, 0x3a2a5(%rip)     # 0x3c4d8
movq 0x3a29e(%rip), %rsi     # 0x3c4d8
leaq 0x3f82(%rip), %rdi      # 0x61c3
callq 0x13f0
leaq 0x3f76(%rip), %rdi      # 0x61c3
callq 0x1b40
movq %rax, %rcx
movq 0x3a27c(%rip), %rax     # 0x3c4d8
movq %rcx, 0x10(%rax)
leaq 0x3fde(%rip), %rdi      # 0x6245
callq 0x1ca0
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rsi
leaq 0x3fc8(%rip), %rdi      # 0x6245
callq 0x13f0
movq 0x38(%rsp), %rcx
movq 0x6ea2(%rip), %rax      # 0x9130
movq %rcx, 0x8(%rax)
movq 0x6e97(%rip), %rsi      # 0x9130
leaq 0x3faf(%rip), %rdi      # 0x624f
callq 0x13f0
leaq 0x3fab(%rip), %rdi      # 0x6257
callq 0x1ca0
movq %rax, 0x50(%rsp)
movq 0x50(%rsp), %rsi
leaq 0x3f95(%rip), %rdi      # 0x6257
callq 0x13f0
leaq 0x3f85(%rip), %rdi      # 0x6253
callq 0x1ca0
movq %rax, 0x48(%rsp)
movq 0x48(%rsp), %rsi
leaq 0x3f6f(%rip), %rdi      # 0x6253
callq 0x13f0
movq 0x48(%rsp), %rcx
movq 0x50(%rsp), %rax
movq %rcx, 0x8(%rax)
movq 0x6e32(%rip), %rcx      # 0x9130
movq 0x50(%rsp), %rax
movq %rcx, 0x18(%rax)
leaq 0x3f54(%rip), %rdi      # 0x6262
callq 0x1ca0
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rsi
leaq 0x3f3e(%rip), %rdi      # 0x6262
callq 0x13f0
leaq 0x3f2e(%rip), %rdi      # 0x625e
callq 0x1ca0
movq %rax, 0x8(%rsp)
movq 0x8(%rsp), %rsi
leaq 0x3f18(%rip), %rdi      # 0x625e
callq 0x13f0
movq 0x8(%rsp), %rcx
movq 0x40(%rsp), %rax
movq %rcx, 0x8(%rax)
leaq 0x3f08(%rip), %rdi      # 0x6268
callq 0x1ca0
movq %rax, 0x3a174(%rip)     # 0x3c4e0
movq 0x3a16d(%rip), %rsi     # 0x3c4e0
leaq 0x3eee(%rip), %rdi      # 0x6268
callq 0x13f0
movl $0x7, %edi
callq 0x1280
movq %rax, 0x3a158(%rip)     # 0x3c4e8
movq 0x3a151(%rip), %rsi     # 0x3c4e8
leaq 0x3ed0(%rip), %rdi      # 0x626e
callq 0x13f0
leaq 0x3ec4(%rip), %rdi      # 0x626e
callq 0x1b40
movq %rax, %rcx
movq 0x3a12f(%rip), %rax     # 0x3c4e8
movq %rcx, 0x10(%rax)
movl $0x7, %edi
callq 0x1280
movq %rax, 0x3a122(%rip)     # 0x3c4f0
movq 0x3a11b(%rip), %rsi     # 0x3c4f0
leaq 0x3e97(%rip), %rdi      # 0x6273
callq 0x13f0
leaq 0x3e8b(%rip), %rdi      # 0x6273
callq 0x1b40
movq %rax, %rcx
movq 0x3a0f9(%rip), %rax     # 0x3c4f0
movq %rcx, 0x10(%rax)
leaq 0x3e7a(%rip), %rdi      # 0x627c
callq 0x1ca0
movq %rax, 0x3a0ea(%rip)     # 0x3c4f8
movq 0x3a0e3(%rip), %rsi     # 0x3c4f8
leaq 0x3e60(%rip), %rdi      # 0x627c
callq 0x13f0
leaq 0x3e5c(%rip), %rdi      # 0x6284
callq 0x1ca0
movq %rax, 0x30(%rsp)
movq 0x30(%rsp), %rsi
leaq 0x3e46(%rip), %rdi      # 0x6284
callq 0x13f0
xorl %edi, %edi
callq 0x1280
movq %rax, 0x3a0af(%rip)     # 0x3c500
movq 0x30(%rsp), %rcx
movq 0x3a0a3(%rip), %rax     # 0x3c500
movq %rcx, 0x8(%rax)
movq 0x3a098(%rip), %rsi     # 0x3c500
leaq 0x3e1a(%rip), %rdi      # 0x6289
callq 0x13f0
leaq 0x3e13(%rip), %rdi      # 0x628e
callq 0x1ca0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rsi
leaq 0x3dfd(%rip), %rdi      # 0x628e
callq 0x13f0
xorl %edi, %edi
callq 0x1280
movq %rax, 0x3a064(%rip)     # 0x3c508
movq 0x28(%rsp), %rcx
movq 0x3a058(%rip), %rax     # 0x3c508
movq %rcx, 0x8(%rax)
movq 0x3a04d(%rip), %rsi     # 0x3c508
leaq 0x3dd2(%rip), %rdi      # 0x6294
callq 0x13f0
leaq 0x3dd3(%rip), %rdi      # 0x62a1
callq 0x1ca0
movq %rax, 0x3a036(%rip)     # 0x3c510
movq 0x3a02f(%rip), %rsi     # 0x3c510
leaq 0x3db9(%rip), %rdi      # 0x62a1
callq 0x13f0
leaq 0x3d0c(%rip), %rdi      # 0x6200
callq 0x1ca0
movq %rax, (%rsp)
movq (%rsp), %rsi
leaq 0x3cf8(%rip), %rdi      # 0x6200
callq 0x13f0
leaq 0x3d86(%rip), %rdi      # 0x629a
callq 0x1ca0
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rsi
leaq 0x3d70(%rip), %rdi      # 0x629a
callq 0x13f0
leaq 0x3d71(%rip), %rdi      # 0x62a7
callq 0x1ca0
movq %rax, 0x39fd6(%rip)     # 0x3c518
movq 0x39fcf(%rip), %rsi     # 0x3c518
leaq 0x3d57(%rip), %rdi      # 0x62a7
callq 0x13f0
leaq 0x3c73(%rip), %rdi      # 0x61cf
callq 0x1ca0
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rsi
leaq 0x3c5d(%rip), %rdi      # 0x61cf
callq 0x13f0
leaq 0x3c56(%rip), %rdi      # 0x61d4
callq 0x1ca0
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rsi
leaq 0x3c40(%rip), %rdi      # 0x61d4
callq 0x13f0
callq 0x1d80
movq %rax, %rcx
movq 0x50(%rsp), %rax
movq %rcx, 0x20(%rax)
movq 0x50(%rsp), %rax
movl $0x1, %ecx
movq %rcx, 0x28(%rax)
movq 0x40(%rsp), %rax
movl $0x1, %ecx
movq %rcx, 0x28(%rax)
movl $0x2, %edi
callq 0x1280
movq %rax, 0x39f49(%rip)     # 0x3c520
movq 0x39f42(%rip), %rsi     # 0x3c520
leaq 0x3cc9(%rip), %rdi      # 0x62ae
callq 0x13f0
addq $0x58, %rsp
retq
nop