#include <OOC/SymbolTable.d>
#include <__oo2c.h>
#include <setjmp.h>

void OOC_SymbolTable__WriterDesc_INIT(OOC_SymbolTable__Writer w, IO__ByteChannel ch, IO__ByteChannel chDoc) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)chDoc;
  _assert((i0!=(OOC_INT64)0), 127, 43703);
  i1 = (OOC_INT64)w;
  i2 = (OOC_INT64)ch;
  ADT_Object_Storage__InitWriter((ADT_Object_Storage__Writer)i1, (IO__ByteChannel)i2);
  i0 = (OOC_INT64)ADT_Object_Storage__ConnectWriter((IO__ByteChannel)i0);
  *(OOC_INT64*)((_check_pointer(i1, 43760))+304) = i0;
  return;
  ;
}

void OOC_SymbolTable__ReaderDesc_INIT(OOC_SymbolTable__Reader r, IO__ByteChannel ch, IO__ByteChannel chDoc) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)r;
  i1 = (OOC_INT64)ch;
  ADT_Object_Storage__InitReader((ADT_Object_Storage__Reader)i0, (IO__ByteChannel)i1);
  i1 = (OOC_INT64)chDoc;
  i2 = i1==(OOC_INT64)0;
  if (i2) goto l3;
  i1 = (OOC_INT64)ADT_Object_Storage__ConnectReader((IO__ByteChannel)i1);
  *(OOC_INT64*)((_check_pointer(i0, 43980))+304) = i1;
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 43945))+304) = (OOC_INT64)0;
l4:
  return;
  ;
}

void OOC_SymbolTable__InitNamespace(OOC_SymbolTable__Namespace ns) {

  return;
  ;
}

OOC_SymbolTable__Declaration OOC_SymbolTable__NamespaceDesc_IdentifyLocal2(OOC_SymbolTable__Namespace ns, OOC_SymbolTable__Item sourceContext, OOC_SymbolTable__Name name, OOC_CHAR8 ignorePosition, OOC_CHAR8 *baseNotExported) {

  _failed_function(44156); return 0;
  ;
}

OOC_SymbolTable__Declaration OOC_SymbolTable__NamespaceDesc_IdentifyLocal(OOC_SymbolTable__Namespace ns, OOC_SymbolTable__Item sourceContext, OOC_SymbolTable__Name name, OOC_CHAR8 ignorePosition) {
  register OOC_INT64 i0,i1,i2,i3;
  OOC_CHAR8 baseNotExported;

  baseNotExported = 0u;
  i0 = (OOC_INT64)ns;
  i1 = (OOC_INT64)sourceContext;
  i2 = (OOC_INT64)name;
  i3 = ignorePosition;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 46058)))), OOC_SymbolTable__NamespaceDesc_IdentifyLocal2)),OOC_SymbolTable__NamespaceDesc_IdentifyLocal2)((OOC_SymbolTable__Namespace)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, (void*)(OOC_INT64)&baseNotExported);
  return (OOC_SymbolTable__Declaration)i0;
  ;
}

OOC_SymbolTable__Declaration OOC_SymbolTable__NamespaceDesc_Identify2(OOC_SymbolTable__Namespace ns, OOC_SymbolTable__Item sourceContext, OOC_SymbolTable__Name name, OOC_CHAR8 ignorePosition, OOC_CHAR8 *baseNotExported) {

  _failed_function(46188); return 0;
  ;
}

OOC_SymbolTable__Declaration OOC_SymbolTable__NamespaceDesc_Identify(OOC_SymbolTable__Namespace ns, OOC_SymbolTable__Item sourceContext, OOC_SymbolTable__Name name, OOC_CHAR8 ignorePosition) {
  register OOC_INT64 i0,i1,i2,i3;
  OOC_CHAR8 baseNotExported;

  baseNotExported = 0u;
  i0 = (OOC_INT64)ns;
  i1 = (OOC_INT64)sourceContext;
  i2 = (OOC_INT64)name;
  i3 = ignorePosition;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 47112)))), OOC_SymbolTable__NamespaceDesc_Identify2)),OOC_SymbolTable__NamespaceDesc_Identify2)((OOC_SymbolTable__Namespace)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, (void*)(OOC_INT64)&baseNotExported);
  return (OOC_SymbolTable__Declaration)i0;
  ;
}

OOC_SymbolTable__ProcDecl OOC_SymbolTable__NamespaceDesc_GetSuperProcByIndex(OOC_SymbolTable__Namespace ns, OOC_INT32 index) {

  _assert(0u, 127, 47380);
  _failed_function(47221); return 0;
  ;
}

static void OOC_SymbolTable__WriteType(ADT_Storable__Writer w, OOC_SymbolTable__Type type, OOC_SymbolTable__Type srcCodeType) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)w;
  i1 = (OOC_INT64)srcCodeType;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 47519)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i0, (Object__Object)i1);
  return;
  ;
}

static void OOC_SymbolTable__ReadType(ADT_Storable__Reader r, OOC_SymbolTable__Type *type, OOC_SymbolTable__Type *srcCodeType) {
  register OOC_INT64 i0,i1;
  Object__Object obj;

  i0 = (OOC_INT64)r;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 47692)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i0, (void*)(OOC_INT64)&obj);
  i0 = (OOC_INT64)obj;
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l3;
  i0 = _type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 47813)))), &_td_OOC_SymbolTable__TypeDesc, 47813);
  *srcCodeType = (OOC_SymbolTable__Type)i0;
  *type = (OOC_SymbolTable__Type)i0;
  goto l4;
l3:
  *srcCodeType = (OOC_SymbolTable__Type)(OOC_INT64)0;
  *type = (OOC_SymbolTable__Type)(OOC_INT64)0;
l4:
  return;
  ;
}

void OOC_SymbolTable__InitPosition(OOC_SymbolTable__Position position, OOC_INT32 pos, OOC_INT32 line, OOC_INT32 column) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)position;
  i1 = pos;
  *(OOC_INT32*)(_check_pointer(i0, 48020)) = i1;
  i1 = line;
  *(OOC_INT32*)((_check_pointer(i0, 48046))+4) = i1;
  i1 = column;
  *(OOC_INT32*)((_check_pointer(i0, 48074))+8) = i1;
  return;
  ;
}

void OOC_SymbolTable__PositionDesc_Store(OOC_SymbolTable__Position position, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)w;
  i1 = (OOC_INT64)position;
  i2 = *(OOC_INT32*)(_check_pointer(i1, 48279));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 48259)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i0, i2);
  i2 = *(OOC_INT32*)((_check_pointer(i1, 48312))+4);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 48292)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i0, i2);
  i1 = *(OOC_INT32*)((_check_pointer(i1, 48346))+8);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 48326)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i0, i1);
  return;
  ;
}

void OOC_SymbolTable__PositionDesc_Load(OOC_SymbolTable__Position position, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)r;
  i1 = (OOC_INT64)position;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 48514)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i0, (void*)(_check_pointer(i1, 48533)));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 48546)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i0, (void*)((_check_pointer(i1, 48565))+4));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 48579)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i0, (void*)((_check_pointer(i1, 48598))+8));
  return;
  ;
}

void OOC_SymbolTable__InitName(OOC_SymbolTable__Name name, OOC_Scanner_InputBuffer__CharArray str, OOC_INT32 pos, OOC_INT32 line, OOC_INT32 column) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)name;
  i1 = pos;
  i2 = line;
  i3 = column;
  OOC_SymbolTable__InitPosition((OOC_SymbolTable__Position)i0, i1, i2, i3);
  i1 = (OOC_INT64)str;
  *(OOC_INT64*)((_check_pointer(i0, 48811))+16) = i1;
  return;
  ;
}

void OOC_SymbolTable__NameDesc_Store(OOC_SymbolTable__Name name, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;
  OOC_INT32 len;

  i0 = (OOC_INT64)name;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 49035))+16);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 49035))+16);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 49040)), 0);
  i1 = Strings__Length((void*)(_check_pointer(i1, 49040)), i2);
  len = i1;
  i2 = (OOC_INT64)w;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 49049)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i2, i1);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 49090))+16);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 49072)))), IO_BinaryRider__WriterDesc_WriteBytes)),IO_BinaryRider__WriterDesc_WriteBytes)((IO_BinaryRider__Writer)i2, (void*)(_check_pointer(i0, 49095)), (-1), 0, i1);
  return;
  ;
}

void OOC_SymbolTable__NameDesc_Load(OOC_SymbolTable__Name name, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;
  OOC_INT32 len;
  OOC_Scanner_InputBuffer__CharArray str;

  i0 = (OOC_INT64)name;
  OOC_SymbolTable__InitPosition((OOC_SymbolTable__Position)i0, (-2), (-1), (-1));
  i1 = (OOC_INT64)r;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49363)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&len);
  i2 = len;
  i3 = (OOC_INT64)RT0__NewObject(_td_OOC_Scanner_InputBuffer__CharArray.baseTypes[0], (i2+1));
  str = (OOC_Scanner_InputBuffer__CharArray)i3;
  i4 = _check_pointer(i3, 49409);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  *(OOC_UINT8*)(i4+(_check_index(i2, i5, OOC_UINT32, 49409))) = 0u;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49427)))), IO_BinaryRider__ReaderDesc_ReadBytes)),IO_BinaryRider__ReaderDesc_ReadBytes)((IO_BinaryRider__Reader)i1, (void*)(_check_pointer(i3, 49443)), (-1), 0, i2);
  *(OOC_INT64*)((_check_pointer(i0, 49463))+16) = i3;
  return;
  ;
}

void OOC_SymbolTable__InitItem(OOC_SymbolTable__Item item, OOC_SymbolTable__Item parent) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)item;
  *(OOC_INT64*)(_check_pointer(i0, 49555)) = 0;
  *(OOC_INT64*)((_check_pointer(i0, 49584))+16) = 0;
  *(OOC_INT64*)((_check_pointer(i0, 49614))+24) = 0;
  i1 = (OOC_INT64)parent;
  *(OOC_INT64*)((_check_pointer(i0, 49648))+8) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 49676))+32) = 0;
  i2 = i1!=0;
  if (!i2) goto l23;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49745)))), &_td_OOC_SymbolTable__ModuleDesc);
  if (i2) goto l5;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49782)))), &_td_OOC_SymbolTable__ProcDeclDesc);
  
  goto l7;
l5:
  i2=1u;
l7:
  if (i2) goto l9;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49821)))), &_td_OOC_SymbolTable__RecordDesc);
  
  goto l11;
l9:
  i2=1u;
l11:
  if (i2) goto l13;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49858)))), &_td_OOC_SymbolTable__FormalParsDesc);
  
  goto l15;
l13:
  i2=1u;
l15:
  if (i2) goto l17;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 49899)))), &_td_OOC_SymbolTable__TypeParsDesc);
  
  goto l18;
l17:
  i2=1u;
l18:
  _assert(i2, 127, 49728);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 49930))+16);
  i2 = i2==0;
  if (i2) goto l21;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 50015))+24);
  *(OOC_INT64*)(_check_pointer(i2, 50031)) = i0;
  goto l22;
l21:
  *(OOC_INT64*)((_check_pointer(i1, 49968))+16) = i0;
l22:
  *(OOC_INT64*)((_check_pointer(i1, 50075))+24) = i0;
l23:
  return;
  ;
}

static void OOC_SymbolTable__WriteItemList(ADT_Storable__Writer w, OOC_SymbolTable__Item item) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)item;
  i1 = (OOC_INT64)w;
  i2 = i0!=(OOC_INT64)0;
  if (!i2) goto l8;
  
l3_loop:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 50238)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i0);
  i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 50277));
  item = (OOC_SymbolTable__Item)i0;
  i2 = i0!=(OOC_INT64)0;
  if (i2) goto l3_loop;
l8:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 50304)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)(OOC_INT64)0);
  return;
  ;
}

static void OOC_SymbolTable__ReadItemList(ADT_Storable__Reader r, OOC_SymbolTable__Item *list, OOC_SymbolTable__Item *last) {
  register OOC_INT64 i0,i1,i2,i3;
  Object__Object obj;

  *list = (OOC_SymbolTable__Item)(OOC_INT64)0;
  *last = (OOC_SymbolTable__Item)(OOC_INT64)0;
  i0 = (OOC_INT64)r;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 50526)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i0, (void*)(OOC_INT64)&obj);
  i1 = (OOC_INT64)obj;
  i2 = i1!=(OOC_INT64)0;
  if (!i2) goto l16;
  i2=(OOC_INT64)0;
l3_loop:
  i3 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 50583)))), &_td_OOC_SymbolTable__ItemDesc);
  if (i3) goto l6;
  _failed_with(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 50574)))), 50574);
  i1=i2;
  goto l11;
l6:
  i3 = i2!=(OOC_INT64)0;
  if (i3) goto l9;
  *list = (OOC_SymbolTable__Item)i1;
  goto l10;
l9:
  *(OOC_INT64*)(_check_pointer(i2, 50634)) = i1;
l10:
  *last = (OOC_SymbolTable__Item)i1;
  
l11:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 50739)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i0, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2!=(OOC_INT64)0;
  if (!i3) goto l16;
  {register OOC_INT64 h0=i1;i1=i2;i2=h0;}
  goto l3_loop;
l16:
  return;
  ;
}

void OOC_SymbolTable__ItemDesc_Store(OOC_SymbolTable__Item item, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)item;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 50887))+16);
  i2 = (OOC_INT64)w;
  OOC_SymbolTable__WriteItemList((ADT_Storable__Writer)i2, (OOC_SymbolTable__Item)i1);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 50926))+8);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 50907)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i2, (Object__Object)i0);
  return;
  ;
}

void OOC_SymbolTable__ItemDesc_Load(OOC_SymbolTable__Item item, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2;
  Object__Object obj;

  i0 = (OOC_INT64)item;
  *(OOC_INT64*)(_check_pointer(i0, 51102)) = 0;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__ReadItemList((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 51147))+16), (void*)((_check_pointer(i0, 51166))+24));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 51191)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i1 = (OOC_INT64)obj;
  i2 = i1==0;
  if (i2) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 51280))+8) = (_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 51296)))), &_td_OOC_SymbolTable__ItemDesc, 51296));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 51245))+8) = 0;
l4:
  *(OOC_INT64*)((_check_pointer(i0, 51319))+32) = 0;
  return;
  ;
}

OOC_SymbolTable__Module OOC_SymbolTable__ItemDesc_Module(OOC_SymbolTable__Item item) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)item;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 51651))+8);
  i1 = i1==(OOC_INT64)0;
  if (i1) goto l3;
  i1=0u;
  goto l5;
l3:
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51674)))), &_td_OOC_SymbolTable__TypeDesc);
  
l5:
  if (!i1) goto l8;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51707)))), &_td_OOC_SymbolTable__TypeDesc, 51707)), 51712)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51707)))), &_td_OOC_SymbolTable__TypeDesc, 51707)));
  item = (OOC_SymbolTable__Item)i0;
  
l8:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 51786))+8);
  i1 = i1!=(OOC_INT64)0;
  if (!i1) goto l25;
l12_loop:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 51822))+8);
  item = (OOC_SymbolTable__Item)i0;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 51845))+8);
  i1 = i1==(OOC_INT64)0;
  if (i1) goto l15;
  i1=0u;
  goto l17;
l15:
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51868)))), &_td_OOC_SymbolTable__TypeDesc);
  
l17:
  if (!i1) goto l20;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51903)))), &_td_OOC_SymbolTable__TypeDesc, 51903)), 51908)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51903)))), &_td_OOC_SymbolTable__TypeDesc, 51903)));
  item = (OOC_SymbolTable__Item)i0;
  
l20:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 51786))+8);
  i1 = i1!=(OOC_INT64)0;
  if (i1) goto l12_loop;
l25:
  return (OOC_SymbolTable__Module)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 51995)))), &_td_OOC_SymbolTable__ModuleDesc, 51995));
  ;
}

OOC_SymbolTable__ProcDecl OOC_SymbolTable__ItemDesc_Procedure(OOC_SymbolTable__Item item) {
  register OOC_INT64 i0,i1,i2;

l1_loop:
  i0 = (OOC_INT64)item;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 52245))+8);
  item = (OOC_SymbolTable__Item)i0;
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l4;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 52286)))), &_td_OOC_SymbolTable__ProcDeclDesc);
  
  goto l6;
l4:
  i2=1u;
l6:
  if (!i2) goto l1_loop;
l10:
  if (i1) goto l12;
  return (OOC_SymbolTable__ProcDecl)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 52369)))), &_td_OOC_SymbolTable__ProcDeclDesc, 52369));
  goto l13;
l12:
  return (OOC_SymbolTable__ProcDecl)(OOC_INT64)0;
l13:
  _failed_function(52041); return 0;
  ;
}

void OOC_SymbolTable__ItemDesc_AddFlag(OOC_SymbolTable__Item item, OOC_SymbolTable__Name name) {
  register OOC_INT64 i0,i1,i2;
  OOC_INT16 id;
  OOC_SymbolTable__Flag fl;
  auto void OOC_SymbolTable__ItemDesc_AddFlag_Append(OOC_SymbolTable__Flag *list);
    
    void OOC_SymbolTable__ItemDesc_AddFlag_Append(OOC_SymbolTable__Flag *list) {
      register OOC_INT64 i0,i1;

      i0 = (OOC_INT64)*list;
      i1 = i0==(OOC_INT64)0;
      if (i1) goto l3;
      OOC_SymbolTable__ItemDesc_AddFlag_Append((void*)(_check_pointer(i0, 52808)));
      goto l4;
l3:
      i0 = (OOC_INT64)fl;
      *(OOC_INT64*)(_check_pointer(i0, 52740)) = (OOC_INT64)0;
      *list = (OOC_SymbolTable__Flag)i0;
l4:
      return;
      ;
    }


  i0 = (OOC_INT64)name;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 52870))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 52874)),(const void*)"NO_COPY"))==0;
  if (i1) goto l63;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 52933))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 52937)),(const void*)"ABSTRACT"))==0;
  if (i1) goto l61;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 52999))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53003)),(const void*)"NO_LENGTH_INFO"))==0;
  if (i1) goto l59;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53075))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53079)),(const void*)"NO_DESCRIPTOR"))==0;
  if (i1) goto l57;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53150))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53154)),(const void*)"NOT_EXTENSIBLE"))==0;
  if (i1) goto l55;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53301))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53305)),(const void*)"CSTRING"))==0;
  if (i1) goto l53;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53365))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53369)),(const void*)"NIL_COMPAT"))==0;
  if (i1) goto l51;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53434))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53438)),(const void*)"UNION"))==0;
  if (i1) goto l49;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53494))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53498)),(const void*)"READ_ONLY"))==0;
  if (i1) goto l47;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53561))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53565)),(const void*)"NO_RETURN"))==0;
  if (i1) goto l45;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53628))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53632)),(const void*)"DEPRECATED"))==0;
  if (i1) goto l43;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53698))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53702)),(const void*)"OOC_EXTENSIONS"))==0;
  if (i1) goto l41;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53775))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53779)),(const void*)"ALIGN1"))==0;
  if (i1) goto l39;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53837))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53841)),(const void*)"ALIGN2"))==0;
  if (i1) goto l37;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53899))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53903)),(const void*)"ALIGN4"))==0;
  if (i1) goto l35;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 53961))+16);
  i1 = (
  _cmp8((const void*)(_check_pointer(i1, 53965)),(const void*)"ALIGN8"))==0;
  if (i1) goto l33;
  id = (-1);
  i1=(-1);
  goto l64;
l33:
  id = 16;
  i1=16;
  goto l64;
l35:
  id = 15;
  i1=15;
  goto l64;
l37:
  id = 14;
  i1=14;
  goto l64;
l39:
  id = 13;
  i1=13;
  goto l64;
l41:
  id = 11;
  i1=11;
  goto l64;
l43:
  id = 10;
  i1=10;
  goto l64;
l45:
  id = 9;
  i1=9;
  goto l64;
l47:
  id = 8;
  i1=8;
  goto l64;
l49:
  id = 7;
  i1=7;
  goto l64;
l51:
  id = 6;
  i1=6;
  goto l64;
l53:
  id = 5;
  i1=5;
  goto l64;
l55:
  id = 4;
  i1=4;
  goto l64;
l57:
  id = 3;
  i1=3;
  goto l64;
l59:
  id = 2;
  i1=2;
  goto l64;
l61:
  id = 1;
  i1=1;
  goto l64;
l63:
  id = 0;
  i1=0;
l64:
  i2 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__Flag.baseTypes[0]);
  fl = (OOC_SymbolTable__Flag)i2;
  *(OOC_INT16*)((_check_pointer(i2, 54075))+8) = i1;
  *(OOC_INT64*)((_check_pointer(i2, 54092))+16) = i0;
  i0 = (OOC_INT64)item;
  OOC_SymbolTable__ItemDesc_AddFlag_Append((void*)((_check_pointer(i0, 54121))+32));
  return;
  ;
}

void OOC_SymbolTable__InitDeclaration(OOC_SymbolTable__Declaration decl, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_INT8 exportMark, OOC_Doc__Document docString) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)decl;
  i1 = (OOC_INT64)parent;
  OOC_SymbolTable__InitItem((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
  i1 = (OOC_INT64)name;
  *(OOC_INT64*)((_check_pointer(i0, 54397))+40) = i1;
  i1 = visibleFrom;
  *(OOC_INT32*)((_check_pointer(i0, 54421))+48) = i1;
  i1 = exportMark;
  *(OOC_INT8*)((_check_pointer(i0, 54459))+52) = i1;
  i1 = (OOC_INT64)docString;
  *(OOC_INT64*)((_check_pointer(i0, 54495))+56) = i1;
  *(OOC_UINT8*)((_check_pointer(i0, 54529))+64) = 0u;
  *(OOC_INT64*)((_check_pointer(i0, 54560))+72) = (OOC_INT64)0;
  *(OOC_INT32*)((_check_pointer(i0, 54587))+80) = 0;
  return;
  ;
}

void OOC_SymbolTable__DeclarationDesc_Store(OOC_SymbolTable__Declaration decl, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3,i4;

  i0 = (OOC_INT64)decl;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__ItemDesc_Store((OOC_SymbolTable__Item)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 54759))+40);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 54740)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i2 = *(OOC_INT8*)((_check_pointer(i0, 54830))+52);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 54814)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_INT8*)((_check_pointer(i0, 54857))+52);
  i2 = i2!=0;
  if (i2) goto l3;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 54968)))), &_td_OOC_SymbolTable__WriterDesc, 54968)), 54975))+304);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 54968)))), &_td_OOC_SymbolTable__WriterDesc, 54968)), 54975))+304);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 54985)))), ADT_Object_Storage__WriterDesc_WriteObject)),ADT_Object_Storage__WriterDesc_WriteObject)((ADT_Object_Storage__Writer)i3, (Object__Object)(OOC_INT64)0);
  goto l4;
l3:
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 54902)))), &_td_OOC_SymbolTable__WriterDesc, 54902)), 54909))+304);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 54936))+56);
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 54902)))), &_td_OOC_SymbolTable__WriterDesc, 54902)), 54909))+304);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 54919)))), ADT_Object_Storage__WriterDesc_WriteObject)),ADT_Object_Storage__WriterDesc_WriteObject)((ADT_Object_Storage__Writer)i4, (Object__Object)i3);
l4:
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 55035))+64);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 55018)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__DeclarationDesc_Load(OOC_SymbolTable__Declaration decl, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3;
  Object__Object obj;
  OOC_INT32 i;

  i0 = (OOC_INT64)decl;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__ItemDesc_Load((OOC_SymbolTable__Item)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 55217)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  *(OOC_INT64*)((_check_pointer(i0, 55245))+40) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 55259)))), &_td_OOC_SymbolTable__NameDesc, 55259));
  *(OOC_INT32*)((_check_pointer(i0, 55428))+48) = (-3);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 55642)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&i);
  i2 = i;
  *(OOC_INT8*)((_check_pointer(i0, 55661))+52) = i2;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 55784)))), &_td_OOC_SymbolTable__ReaderDesc, 55784)), 55791))+304);
  i2 = i2!=(OOC_INT64)0;
  if (i2) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 56004))+56) = (OOC_INT64)0;
  goto l8;
l3:
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 55822)))), &_td_OOC_SymbolTable__ReaderDesc, 55822)), 55829))+304);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 55822)))), &_td_OOC_SymbolTable__ReaderDesc, 55822)), 55829))+304);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 55839)))), ADT_Object_Storage__ReaderDesc_ReadObject)),ADT_Object_Storage__ReaderDesc_ReadObject)((ADT_Object_Storage__Reader)i3, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l6;
  *(OOC_INT64*)((_check_pointer(i0, 55941))+56) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 55963)))), &_td_OOC_Doc__DocumentDesc, 55963));
  goto l8;
l6:
  *(OOC_INT64*)((_check_pointer(i0, 55897))+56) = (OOC_INT64)0;
l8:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 56042)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 56058))+64));
  *(OOC_INT64*)((_check_pointer(i0, 56080))+72) = (OOC_INT64)0;
  *(OOC_INT32*)((_check_pointer(i0, 56107))+80) = 0;
  return;
  ;
}

void OOC_SymbolTable__DeclarationDesc_IncrUsageCounter(OOC_SymbolTable__Declaration decl) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)decl;
  i1 = *(OOC_INT32*)((_check_pointer(i0, 56208))+80);
  *(OOC_INT32*)((_check_pointer(i0, 56208))+80) = (i1+1);
  return;
  ;
}

static OOC_CHAR8 OOC_SymbolTable__ExportTypePosition(OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)type;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 56628)))), &_td_OOC_SymbolTable__PointerDesc);
  if (i1) goto l3;
  i0=0u;
  goto l4;
l3:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 56647))+48);
  i0 = i0==(OOC_INT64)0;
  
l4:
  return i0;
  ;
}

void OOC_SymbolTable__InitType(OOC_SymbolTable__Type type, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)type;
  i1 = (OOC_INT64)parent;
  OOC_SymbolTable__InitItem((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
  i1 = (OOC_INT64)position;
  *(OOC_INT64*)((_check_pointer(i0, 56808))+40) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 56840))+48) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 56869))+56) = (OOC_INT64)0;
  *(OOC_INT32*)((_check_pointer(i0, 56896))+64) = (-2);
  *(OOC_INT16*)((_check_pointer(i0, 56927))+68) = 1;
  *(OOC_UINT8*)((_check_pointer(i0, 56949))+70) = 1u;
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__TypeDesc_PreciousTypePars(OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)type;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 57307))+56);
  i1 = i1!=(OOC_INT64)0;
  if (i1) goto l3;
  i0=0u;
  goto l4;
l3:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 57331))+56);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 57340))+16);
  i0 = i0!=(OOC_INT64)0;
  
l4:
  return i0;
  ;
}

void OOC_SymbolTable__TypeDesc_Store(OOC_SymbolTable__Type type, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)type;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__ItemDesc_Store((OOC_SymbolTable__Item)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 57508))+48);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57489)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i2 = OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 57534)))), OOC_SymbolTable__TypeDesc_PreciousTypePars)),OOC_SymbolTable__TypeDesc_PreciousTypePars)((OOC_SymbolTable__Type)i0);
  if (i2) goto l3;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57611)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)(OOC_INT64)0);
  goto l4;
l3:
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 57583))+56);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57566)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
l4:
  i2 = OOC_SymbolTable__ExportTypePosition((OOC_SymbolTable__Type)i0);
  if (!i2) goto l7;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 57703))+40);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57684)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
l7:
  i2 = *(OOC_INT32*)((_check_pointer(i0, 57746))+64);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57730)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_INT16*)((_check_pointer(i0, 57776))+68);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57760)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 57808))+70);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57791)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__TypeDesc_Load(OOC_SymbolTable__Type type, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3;
  Object__Object obj;
  OOC_INT32 i;

  i0 = (OOC_INT64)type;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__ItemDesc_Load((OOC_SymbolTable__Item)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 57987)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 58080))+48) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 58100)))), &_td_OOC_SymbolTable__TypeDeclDesc, 58100));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 58041))+48) = (OOC_INT64)0;
l4:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 58124)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l7;
  *(OOC_INT64*)((_check_pointer(i0, 58215))+56) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 58233)))), &_td_OOC_SymbolTable__TypeParsDesc, 58233));
  goto l8;
l7:
  *(OOC_INT64*)((_check_pointer(i0, 58178))+56) = (OOC_INT64)0;
l8:
  i2 = OOC_SymbolTable__ExportTypePosition((OOC_SymbolTable__Type)i0);
  if (i2) goto l11;
  i2 = (OOC_INT64)OOC_SymbolTable__importPosition;
  *(OOC_INT64*)((_check_pointer(i0, 58375))+40) = i2;
  goto l12;
l11:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 58297)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  *(OOC_INT64*)((_check_pointer(i0, 58327))+40) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 58345)))), &_td_OOC_SymbolTable__PositionDesc, 58345));
l12:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 58419)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 58434))+64));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 58448)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&i);
  i2 = i;
  *(OOC_INT16*)((_check_pointer(i0, 58471))+68) = i2;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 58498)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 58514))+70));
  return;
  ;
}

void OOC_SymbolTable__TypeDesc_SetNamingDecl(OOC_SymbolTable__Type type, OOC_SymbolTable__TypeDecl namingDecl) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)type;
  i1 = (OOC_INT64)namingDecl;
  *(OOC_INT64*)((_check_pointer(i0, 58711))+48) = i1;
  return;
  ;
}

void OOC_SymbolTable__TypeDesc_SetTypePars(OOC_SymbolTable__Type type, OOC_SymbolTable__TypePars typePars) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)type;
  i1 = (OOC_INT64)typePars;
  *(OOC_INT64*)((_check_pointer(i0, 58901))+56) = i1;
  return;
  ;
}

void OOC_SymbolTable__TypeDesc_SetSize(OOC_SymbolTable__Type type, OOC_INT32 size, OOC_INT16 align) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)type;
  i1 = size;
  *(OOC_INT32*)((_check_pointer(i0, 59026))+64) = i1;
  i1 = align;
  *(OOC_INT16*)((_check_pointer(i0, 59050))+68) = i1;
  return;
  ;
}

OOC_INT32 OOC_SymbolTable__TypeDesc_ArrayDimensions(OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1,i2;
  OOC_INT32 dim;

  dim = 0;
  i0 = (OOC_INT64)type;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 59314)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i1) goto l3;
  i0=0;
  goto l9;
l3:
  i1=i0;i0=0;
l4_loop:
  i0 = i0+1;
  dim = i0;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 59363)))), &_td_OOC_SymbolTable__ArrayDesc, 59363)), 59369))+80);
  type = (OOC_SymbolTable__Type)i1;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 59314)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i2) goto l4_loop;
l9:
  return i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeDesc_Deparam(OOC_SymbolTable__Type type) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)type;
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeDesc_Bound(OOC_SymbolTable__Type type) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)type;
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeDesc_Closure(OOC_SymbolTable__Type type, OOC_SymbolTable__Type subType) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)subType;
  i0 = (OOC_INT64)OOC_SymbolTable__Expand((OOC_SymbolTable__Type)i0);
  return (OOC_SymbolTable__Type)i0;
  ;
}

static void OOC_SymbolTable__InitLinkDirective(OOC_SymbolTable__LinkDirective l) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)l;
  *(OOC_INT64*)(_check_pointer(i0, 60401)) = 0;
  return;
  ;
}

void OOC_SymbolTable__LinkDirectiveDesc_Store(OOC_SymbolTable__LinkDirective l, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)w;
  i1 = (OOC_INT64)l;
  i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 60545));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 60529)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i0, (Object__Object)i1);
  return;
  ;
}

void OOC_SymbolTable__LinkDirectiveDesc_Load(OOC_SymbolTable__LinkDirective l, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;
  Object__Object obj;

  i0 = (OOC_INT64)r;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 60683)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i0, (void*)(OOC_INT64)&obj);
  i0 = (OOC_INT64)obj;
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l3;
  i1 = (OOC_INT64)l;
  *(OOC_INT64*)(_check_pointer(i1, 60764)) = (_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 60778)))), &_td_OOC_SymbolTable__LinkDirectiveDesc, 60778));
  goto l4;
l3:
  i0 = (OOC_INT64)l;
  *(OOC_INT64*)(_check_pointer(i0, 60734)) = (OOC_INT64)0;
l4:
  return;
  ;
}

void OOC_SymbolTable__LinkFileDesc_Store(OOC_SymbolTable__LinkFile l, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;
  auto void OOC_SymbolTable__LinkFileDesc_Store_WriteURI(ADT_Storable__Writer w, URI__HierarchicalURI uri);
    
    void OOC_SymbolTable__LinkFileDesc_Store_WriteURI(ADT_Storable__Writer w, URI__HierarchicalURI uri) {
      register OOC_INT64 i0,i1,i2;
      Object__String8 str8;
      Object__CharsLatin1 chars;

      i0 = (OOC_INT64)uri;
      i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 61066)))), URI__URIDesc_ToString)),URI__URIDesc_ToString)((URI__URI)i0);
      str8 = (Object__String8)i0;
      i0 = (OOC_INT64)Object__String8Desc_CharsLatin1((Object__String8)i0);
      chars = (Object__CharsLatin1)i0;
      i1 = (OOC_INT64)w;
      i2 = OOC_ARRAY_LENGTH((_check_pointer(i0, 61139)), 0);
      OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 61121)))), IO_BinaryRider__WriterDesc_WriteString)),IO_BinaryRider__WriterDesc_WriteString)((IO_BinaryRider__Writer)i1, (void*)(_check_pointer(i0, 61139)), i2);
      return;
      ;
    }


  i0 = (OOC_INT64)l;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__LinkDirectiveDesc_Store((OOC_SymbolTable__LinkDirective)i0, (ADT_Storable__Writer)i1);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 61209))+8);
  OOC_SymbolTable__LinkFileDesc_Store_WriteURI((ADT_Storable__Writer)i1, (URI__HierarchicalURI)i0);
  i0 = (OOC_INT64)w;
  i1 = (OOC_INT64)l;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 61236))+16);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 61223)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i0, (Object__String)i2);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 61271))+24);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 61258)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i0, (Object__String)i1);
  return;
  ;
}

static Object__String OOC_SymbolTable__ReadString8(ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;
  Object__String str;

  i0 = (OOC_INT64)r;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 61405)))), IO_BinaryRider__ReaderDesc_ReadStr)),IO_BinaryRider__ReaderDesc_ReadStr)((IO_BinaryRider__Reader)i0, (void*)(OOC_INT64)&str);
  i0 = (OOC_INT64)str;
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l3;
  return (Object__String)i0;
  goto l4;
l3:
  return (Object__String)(OOC_INT64)0;
l4:
  _failed_function(61312); return 0;
  ;
}

void OOC_SymbolTable__LinkFileDesc_Load(OOC_SymbolTable__LinkFile l, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2;
  auto void OOC_SymbolTable__LinkFileDesc_Load_ReadURI(volatile ADT_Storable__Reader r, volatile URI__HierarchicalURI *uri);
    
    void OOC_SymbolTable__LinkFileDesc_Load_ReadURI(volatile ADT_Storable__Reader r, volatile URI__HierarchicalURI *uri) {
      register OOC_INT64 i0,i1;
      volatile OOC_CHAR8 b[1024];
      volatile URI__URI u;
      jmp_buf _target0;
      Exception__Context _context0;

      i0 = (OOC_INT64)r;
      OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 61748)))), IO_BinaryRider__ReaderDesc_ReadString)),IO_BinaryRider__ReaderDesc_ReadString)((IO_BinaryRider__Reader)i0, (void*)(OOC_INT64)b, 1024);
      {
        Exception__PushContext(&_context0, &_target0);
        if (!setjmp(_target0)) goto l7;
        Exception__PopContext(1);
        i0 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG(((OOC_INT64)Exception__Current()))), &_td_Exception__ParseErrorDesc);
        if (i0) goto l5;
        Exception__ActivateContext();
        goto l6;
l5:
        _assert(0u, 127, 61979);
l6:
        Exception__Clear();
        goto l8;
l7:
        i0 = (OOC_INT64)OOC_SymbolTable__emptyBaseURI;
        i0 = (OOC_INT64)URI_Parser__NewURILatin1((void*)(OOC_INT64)b, 1024, (URI__HierarchicalURI)i0);
        u = (URI__URI)i0;
        Exception__PopContext(1);
l8:;
      }
      i0 = (OOC_INT64)u;
      i1 = (OOC_INT64)OOC_SymbolTable__emptyBaseURI;
      i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 62101)))), &_td_URI__HierarchicalURIDesc, 62101)), 62117)))), URI__HierarchicalURIDesc_MakeRelative)),URI__HierarchicalURIDesc_MakeRelative)((URI__HierarchicalURI)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 62101)))), &_td_URI__HierarchicalURIDesc, 62101)), (URI__HierarchicalURI)i1);
      u = (URI__URI)i0;
      *uri = (URI__HierarchicalURI)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 62167)))), &_td_URI__HierarchicalURIDesc, 62167));
      return;
      ;
    }


  i0 = (OOC_INT64)l;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__LinkDirectiveDesc_Load((OOC_SymbolTable__LinkDirective)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__LinkFileDesc_Load_ReadURI((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 62248))+8));
  i0 = (OOC_INT64)l;
  i1 = (OOC_INT64)r;
  i2 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 62262))+16) = i2;
  i1 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 62300))+24) = i1;
  return;
  ;
}

void OOC_SymbolTable__LinkLibDesc_Store(OOC_SymbolTable__LinkLib l, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;
  OOC_INT32 i;

  i0 = (OOC_INT64)l;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__LinkDirectiveDesc_Store((OOC_SymbolTable__LinkDirective)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 62482))+8);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62469)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i1, (Object__String)i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 62516))+24);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62503)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i1, (Object__String)i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 62551))+32);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62538)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i1, (Object__String)i2);
  i2 = *(OOC_INT32*)((_check_pointer(i0, 62586))+40);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62573)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 62618))+16);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 62632)), 0);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62600)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 62661))+16);
  i = 0;
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 62675)), 0);
  i3 = 0<i2;
  if (!i3) goto l8;
  i3=0;
l3_loop:
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 62703))+16);
  i4 = _check_pointer(i4, 62717);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  i4 = (OOC_INT64)*(OOC_INT64*)(i4+(_check_index(i3, i5, OOC_UINT32, 62717))*8);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62690)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i1, (Object__String)i4);
  i3 = i3+1;
  i = i3;
  i4 = i3<i2;
  if (i4) goto l3_loop;
l8:
  return;
  ;
}

void OOC_SymbolTable__LinkLibDesc_Load(OOC_SymbolTable__LinkLib l, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6;
  OOC_INT32 len;
  OOC_INT32 i;

  i0 = (OOC_INT64)l;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__LinkDirectiveDesc_Load((OOC_SymbolTable__LinkDirective)i0, (ADT_Storable__Reader)i1);
  i2 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 62869))+8) = i2;
  i2 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 62906))+24) = i2;
  i2 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 62944))+32) = i2;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 62982)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 62994))+40));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 63007)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&len);
  i2 = len;
  *(OOC_INT64*)((_check_pointer(i0, 63034))+16) = ((OOC_INT64)RT0__NewObject(_td_Object__StringArrayPtr.baseTypes[0], i2));
  i = 0;
  i3 = 0<i2;
  if (!i3) goto l8;
  i3=0;
l3_loop:
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 63090))+16);
  i4 = _check_pointer(i4, 63104);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  i6 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)(i4+(_check_index(i3, i5, OOC_UINT32, 63104))*8) = i6;
  i3 = i3+1;
  i = i3;
  i4 = i3<i2;
  if (i4) goto l3_loop;
l8:
  return;
  ;
}

void OOC_SymbolTable__InitModule(OOC_SymbolTable__Module mod, OOC_SymbolTable__Name name, OOC_Doc__Document docString, OOC_INT8 _class, OOC_INT8 callConv, OOC_AST__Node moduleAST, OOC_SymbolTable__ProcDecl bodyDecl) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)mod;
  i1 = (OOC_INT64)name;
  i2 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)(OOC_INT64)0, (OOC_SymbolTable__Name)i1, 0, 1, (OOC_Doc__Document)i2);
  *(OOC_INT64*)((_check_pointer(i0, 63432))+88) = (OOC_INT64)0;
  i1 = _class;
  *(OOC_INT8*)((_check_pointer(i0, 63452))+96) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 63477))+104) = (OOC_INT64)0;
  i1 = callConv;
  *(OOC_INT8*)((_check_pointer(i0, 63506))+112) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 63537))+120) = (OOC_INT64)0;
  *(OOC_INT32*)((_check_pointer(i0, 63569))+128) = 0;
  *(OOC_INT64*)((_check_pointer(i0, 63596))+136) = (OOC_INT64)0;
  i1 = (OOC_INT64)moduleAST;
  *(OOC_INT64*)((_check_pointer(i0, 63627))+144) = i1;
  i1 = (OOC_INT64)bodyDecl;
  *(OOC_INT64*)((_check_pointer(i0, 63660))+152) = i1;
  return;
  ;
}

void OOC_SymbolTable__ModuleDesc_Store(OOC_SymbolTable__Module mod, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)mod;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = *(OOC_INT8*)((_check_pointer(i0, 63850))+96);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 63834)))), IO_BinaryRider__WriterDesc_WriteSInt)),IO_BinaryRider__WriterDesc_WriteSInt)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 63880))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 63865)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i1, (Object__String)i2);
  i2 = *(OOC_INT8*)((_check_pointer(i0, 63916))+112);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 63900)))), IO_BinaryRider__WriterDesc_WriteSInt)),IO_BinaryRider__WriterDesc_WriteSInt)((IO_BinaryRider__Writer)i1, i2);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 63952))+120);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 63934)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i0);
  return;
  ;
}

void OOC_SymbolTable__ModuleDesc_Load(OOC_SymbolTable__Module mod, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2;
  Object__Object obj;

  i0 = (OOC_INT64)mod;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 64117))+88) = (OOC_INT64)0;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 64135)))), IO_BinaryRider__ReaderDesc_ReadSInt)),IO_BinaryRider__ReaderDesc_ReadSInt)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 64150))+96));
  i2 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 64167))+104) = i2;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 64204)))), IO_BinaryRider__ReaderDesc_ReadSInt)),IO_BinaryRider__ReaderDesc_ReadSInt)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 64219))+112));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 64237)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i1 = (OOC_INT64)obj;
  i2 = i1==(OOC_INT64)0;
  if (i2) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 64332))+120) = (_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 64356)))), &_td_OOC_SymbolTable__LinkDirectiveDesc, 64356));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 64290))+120) = (OOC_INT64)0;
l4:
  *(OOC_INT64*)((_check_pointer(i0, 64387))+136) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 64418))+144) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__ModuleDesc_SetNamespace(OOC_SymbolTable__Module mod, OOC_SymbolTable__Namespace ns) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)mod;
  i1 = (OOC_INT64)ns;
  *(OOC_INT64*)((_check_pointer(i0, 64594))+88) = i1;
  return;
  ;
}

void OOC_SymbolTable__ModuleDesc_SetLibraryName(OOC_SymbolTable__Module mod, Object__String name) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)mod;
  i1 = (OOC_INT64)name;
  *(OOC_INT64*)((_check_pointer(i0, 64698))+104) = i1;
  return;
  ;
}

Object__String OOC_SymbolTable__ModuleDesc_ClassToString(OOC_SymbolTable__Module mod) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)mod;
  i0 = *(OOC_INT8*)((_check_pointer(i0, 64813))+96);
  switch (i0) {
  case 0:
    return (Object__String)((OOC_INT64)_c0);
    goto l7;
  case 1:
    return (Object__String)((OOC_INT64)_c1);
    goto l7;
  case 2:
    return (Object__String)((OOC_INT64)_c2);
    goto l7;
  case 3:
    return (Object__String)((OOC_INT64)_c3);
    goto l7;
  default:
    _failed_case(i0, 64805);
    goto l7;
  }
l7:
  _failed_function(64767); return 0;
  ;
}

Object__String OOC_SymbolTable__ModuleDesc_CallConvToString(OOC_SymbolTable__Module mod) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)mod;
  i0 = *(OOC_INT8*)((_check_pointer(i0, 65075))+112);
  switch (i0) {
  case (-1):
    return (Object__String)((OOC_INT64)_c4);
    goto l8;
  case 0:
    return (Object__String)((OOC_INT64)_c5);
    goto l8;
  case 1:
    return (Object__String)((OOC_INT64)_c6);
    goto l8;
  case 2:
    return (Object__String)((OOC_INT64)_c7);
    goto l8;
  case 3:
    return (Object__String)((OOC_INT64)_c8);
    goto l8;
  default:
    _failed_case(i0, 65067);
    goto l8;
  }
l8:
  _failed_function(65026); return 0;
  ;
}

static OOC_SymbolTable__LinkFile OOC_SymbolTable__NewLinkFile(URI__HierarchicalURI file, Object__String prefixOption, Object__String suffixOption) {
  register OOC_INT64 i0,i1;
  OOC_SymbolTable__LinkFile l;

  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__LinkFile.baseTypes[0]);
  l = (OOC_SymbolTable__LinkFile)i0;
  OOC_SymbolTable__InitLinkDirective((OOC_SymbolTable__LinkDirective)i0);
  i1 = (OOC_INT64)file;
  *(OOC_INT64*)((_check_pointer(i0, 65521))+8) = i1;
  i1 = (OOC_INT64)prefixOption;
  *(OOC_INT64*)((_check_pointer(i0, 65542))+16) = i1;
  i1 = (OOC_INT64)suffixOption;
  *(OOC_INT64*)((_check_pointer(i0, 65579))+24) = i1;
  return (OOC_SymbolTable__LinkFile)i0;
  ;
}

static OOC_SymbolTable__LinkLib OOC_SymbolTable__NewLinkLib(Object__String libraryName, Object__StringArrayPtr dependencies, Object__String prefixOption, Object__String suffixOption, OOC_INT32 type) {
  register OOC_INT64 i0,i1;
  OOC_SymbolTable__LinkLib l;

  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__LinkLib.baseTypes[0]);
  l = (OOC_SymbolTable__LinkLib)i0;
  OOC_SymbolTable__InitLinkDirective((OOC_SymbolTable__LinkDirective)i0);
  i1 = (OOC_INT64)libraryName;
  *(OOC_INT64*)((_check_pointer(i0, 65926))+8) = i1;
  i1 = (OOC_INT64)dependencies;
  *(OOC_INT64*)((_check_pointer(i0, 65961))+16) = i1;
  i1 = (OOC_INT64)prefixOption;
  *(OOC_INT64*)((_check_pointer(i0, 65998))+24) = i1;
  i1 = (OOC_INT64)suffixOption;
  *(OOC_INT64*)((_check_pointer(i0, 66035))+32) = i1;
  i1 = type;
  *(OOC_INT32*)((_check_pointer(i0, 66072))+40) = i1;
  return (OOC_SymbolTable__LinkLib)i0;
  ;
}

static void OOC_SymbolTable__AddLinkDirective(OOC_SymbolTable__LinkDirective *list, OOC_SymbolTable__LinkDirective l) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)*list;
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l3;
  i1 = (OOC_INT64)l;
  OOC_SymbolTable__AddLinkDirective((void*)(_check_pointer(i0, 66300)), (OOC_SymbolTable__LinkDirective)i1);
  goto l4;
l3:
  i0 = (OOC_INT64)l;
  *(OOC_INT64*)(_check_pointer(i0, 66232)) = (OOC_INT64)0;
  *list = (OOC_SymbolTable__LinkDirective)i0;
l4:
  return;
  ;
}

void OOC_SymbolTable__ModuleDesc_AddLinkFile(OOC_SymbolTable__Module mod, URI__HierarchicalURI file, Object__String prefixOption, Object__String suffixOption) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)file;
  _assert((i0!=(OOC_INT64)0), 127, 66494);
  i1 = (OOC_INT64)mod;
  i2 = (OOC_INT64)prefixOption;
  i3 = (OOC_INT64)suffixOption;
  i0 = (OOC_INT64)OOC_SymbolTable__NewLinkFile((URI__HierarchicalURI)i0, (Object__String)i2, (Object__String)i3);
  OOC_SymbolTable__AddLinkDirective((void*)((_check_pointer(i1, 66540))+120), (OOC_SymbolTable__LinkDirective)i0);
  return;
  ;
}

void OOC_SymbolTable__ModuleDesc_AddLinkLib(OOC_SymbolTable__Module mod, Object__String libraryName, Object__StringArrayPtr dependencies, Object__String prefixOption, Object__String suffixOption, OOC_INT32 type) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;

  i0 = (OOC_INT64)libraryName;
  _assert((i0!=(OOC_INT64)0), 127, 66918);
  i1 = (OOC_INT64)mod;
  i2 = (OOC_INT64)dependencies;
  i3 = (OOC_INT64)prefixOption;
  i4 = (OOC_INT64)suffixOption;
  i5 = type;
  i0 = (OOC_INT64)OOC_SymbolTable__NewLinkLib((Object__String)i0, (Object__StringArrayPtr)i2, (Object__String)i3, (Object__String)i4, i5);
  OOC_SymbolTable__AddLinkDirective((void*)((_check_pointer(i1, 66971))+120), (OOC_SymbolTable__LinkDirective)i0);
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__ModuleDesc_NoObjectFile(OOC_SymbolTable__Module mod) {
  register OOC_INT64 i0,i1;
  OOC_SymbolTable__LinkDirective l;

  i0 = (OOC_INT64)mod;
  i1 = *(OOC_INT8*)((_check_pointer(i0, 67630))+96);
  i1 = i1==3;
  if (i1) goto l3;
  i1 = *(OOC_INT8*)((_check_pointer(i0, 67659))+96);
  i1 = i1==2;
  
  goto l5;
l3:
  i1=1u;
l5:
  if (i1) goto l7;
  return 0u;
  goto l25;
l7:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 67698))+120);
  l = (OOC_SymbolTable__LinkDirective)i0;
  i1 = i0!=(OOC_INT64)0;
  if (i1) goto l10;
  i1=0u;
  goto l12;
l10:
  i1 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 67743)))), &_td_OOC_SymbolTable__LinkFileDesc));
  
l12:
  if (!i1) goto l24;
l15_loop:
  i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 67773));
  l = (OOC_SymbolTable__LinkDirective)i0;
  i1 = i0!=(OOC_INT64)0;
  if (i1) goto l18;
  i1=0u;
  goto l20;
l18:
  i1 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 67743)))), &_td_OOC_SymbolTable__LinkFileDesc));
  
l20:
  if (i1) goto l15_loop;
l24:
  return (i0==(OOC_INT64)0);
l25:
  _failed_function(67162); return 0;
  ;
}

URI__HierarchicalURI OOC_SymbolTable__ModuleDesc_GetExternalSource(OOC_SymbolTable__Module mod, URI__HierarchicalURI rootURI) {
  register OOC_INT64 i0,i1,i2,i3;
  OOC_SymbolTable__LinkDirective l;

  i0 = (OOC_INT64)mod;
  i1 = *(OOC_INT8*)((_check_pointer(i0, 68303))+96);
  i1 = i1==2;
  if (i1) goto l3;
  i1 = *(OOC_INT8*)((_check_pointer(i0, 68331))+96);
  i1 = i1==3;
  
  goto l4;
l3:
  i1=1u;
l4:
  _assert(i1, 127, 68291);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 68368))+120);
  l = (OOC_SymbolTable__LinkDirective)i0;
  i1 = i0!=(OOC_INT64)0;
  if (i1) goto l7;
  i1=0u;
  goto l9;
l7:
  i1 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68412)))), &_td_OOC_SymbolTable__LinkFileDesc));
  
l9:
  if (!i1) goto l21;
l12_loop:
  i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 68440));
  l = (OOC_SymbolTable__LinkDirective)i0;
  i1 = i0!=(OOC_INT64)0;
  if (i1) goto l15;
  i1=0u;
  goto l17;
l15:
  i1 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68412)))), &_td_OOC_SymbolTable__LinkFileDesc));
  
l17:
  if (i1) goto l12_loop;
l21:
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l24;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68521)))), &_td_OOC_SymbolTable__LinkFileDesc, 68521)), 68530))+8);
  _assert((i1!=(OOC_INT64)0), 127, 68511);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68553)))), &_td_OOC_SymbolTable__LinkFileDesc, 68553)), 68562))+8);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68553)))), &_td_OOC_SymbolTable__LinkFileDesc, 68553)), 68562))+8);
  i3 = (OOC_INT64)rootURI;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 68568)))), URI__HierarchicalURIDesc_ResolveRelative)),URI__HierarchicalURIDesc_ResolveRelative)((URI__HierarchicalURI)i2, (URI__HierarchicalURI)i3);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68612)))), &_td_OOC_SymbolTable__LinkFileDesc, 68612)), 68621))+8);
  return (URI__HierarchicalURI)i0;
  goto l25;
l24:
  return (URI__HierarchicalURI)(OOC_INT64)0;
l25:
  _failed_function(67897); return 0;
  ;
}

OOC_INT8 OOC_SymbolTable__StringToCallConv(Object__String str) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)str;
  i1 = OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68734)))), Object__StringDesc_Equals)),Object__StringDesc_Equals)((Object__String)i0, (Object__Object)((OOC_INT64)_c9));
  if (i1) goto l7;
  i0 = OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 68788)))), Object__StringDesc_Equals)),Object__StringDesc_Equals)((Object__String)i0, (Object__Object)((OOC_INT64)_c10));
  if (i0) goto l5;
  return (-1);
  goto l8;
l5:
  return 3;
  goto l8;
l7:
  return 2;
l8:
  _failed_function(68674); return 0;
  ;
}

void OOC_SymbolTable__InitImport(OOC_SymbolTable__Import import, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_Doc__Document docString, OOC_SymbolTable__Name moduleName) {
  register OOC_INT64 i0,i1,i2,i3,i4;

  i0 = (OOC_INT64)import;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  i3 = visibleFrom;
  i4 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, 0, (OOC_Doc__Document)i4);
  i1 = (OOC_INT64)moduleName;
  *(OOC_INT64*)((_check_pointer(i0, 69195))+88) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 69233))+96) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__ImportDesc_SetExternalSymTab(OOC_SymbolTable__Import import, OOC_SymbolTable__Module symTab) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)import;
  i1 = (OOC_INT64)symTab;
  *(OOC_INT64*)((_check_pointer(i0, 69359))+96) = i1;
  i1 = *(OOC_INT32*)((_check_pointer(i1, 69420))+128);
  *(OOC_INT32*)((_check_pointer(i0, 69397))+104) = i1;
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__ImportDesc_IsInternalImport(OOC_SymbolTable__Import import) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)import;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 69685))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 69697))+16);
  return ((
  _cmp8((const void*)(_check_pointer(i0, 69702)),(const void*)"SYSTEM"))==0);
  ;
}

void OOC_SymbolTable__ImportDesc_Store(OOC_SymbolTable__Import import, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)import;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 69873))+88);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 69852)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i0 = *(OOC_INT32*)((_check_pointer(i0, 69912))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 69893)))), IO_BinaryRider__WriterDesc_WriteLInt)),IO_BinaryRider__WriterDesc_WriteLInt)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__ImportDesc_Load(OOC_SymbolTable__Import import, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2;
  Object__Object obj;

  i0 = (OOC_INT64)import;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 70079)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  *(OOC_INT64*)((_check_pointer(i0, 70109))+88) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 70129)))), &_td_OOC_SymbolTable__NameDesc, 70129));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 70141)))), IO_BinaryRider__ReaderDesc_ReadLInt)),IO_BinaryRider__ReaderDesc_ReadLInt)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 70159))+104));
  return;
  ;
}

void OOC_SymbolTable__InitConstDecl(OOC_SymbolTable__ConstDecl constDecl, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_INT8 exportMark, OOC_Doc__Document docString, Object_Boxed__Object value, OOC_SymbolTable__PredefType type, OOC_AST__Node constExpr) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;

  i0 = (OOC_INT64)constDecl;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  i3 = visibleFrom;
  i4 = exportMark;
  i5 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, i4, (OOC_Doc__Document)i5);
  i1 = (OOC_INT64)value;
  *(OOC_INT64*)((_check_pointer(i0, 70626))+88) = i1;
  i1 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 70657))+96) = i1;
  i1 = (OOC_INT64)constExpr;
  *(OOC_INT64*)((_check_pointer(i0, 70686))+104) = i1;
  return;
  ;
}

void OOC_SymbolTable__ConstDeclDesc_SetValueType(OOC_SymbolTable__ConstDecl constDecl, Object_Boxed__Object value, OOC_SymbolTable__PredefType type) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)constDecl;
  i1 = (OOC_INT64)value;
  *(OOC_INT64*)((_check_pointer(i0, 70845))+88) = i1;
  i1 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 70875))+96) = i1;
  return;
  ;
}

void OOC_SymbolTable__ConstDeclDesc_Store(OOC_SymbolTable__ConstDecl constDecl, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)constDecl;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 71053))+88);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 71029)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 71080))+96);
  i2 = i2==(OOC_INT64)0;
  if (i2) goto l3;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 71312))+96);
  i0 = *(OOC_INT16*)((_check_pointer(i0, 71318))+72);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 71291)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i0);
  goto l4;
l3:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 71259)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, (-1));
l4:
  return;
  ;
}

void OOC_SymbolTable__ConstDeclDesc_Load(OOC_SymbolTable__ConstDecl constDecl, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3;
  Object__Object obj;
  OOC_INT32 id;

  i0 = (OOC_INT64)constDecl;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 71509)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 71607))+88) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 71628)))), &_td_Object_Boxed__ObjectDesc, 71628));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 71568))+88) = (OOC_INT64)0;
l4:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 71650)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&id);
  i1 = id;
  i2 = i1==(-1);
  if (i2) goto l7;
  i2 = (OOC_INT64)OOC_SymbolTable__predefIdToType;
  i2 = _check_pointer(i2, 71820);
  i3 = OOC_ARRAY_LENGTH(i2, 0);
  i1 = (OOC_INT64)*(OOC_INT64*)(i2+(_check_index(i1, i3, OOC_UINT32, 71820))*8);
  *(OOC_INT64*)((_check_pointer(i0, 71796))+96) = i1;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 71849))+96);
  _assert((i1!=(OOC_INT64)0), 127, 71832);
  goto l8;
l7:
  *(OOC_INT64*)((_check_pointer(i0, 71757))+96) = (OOC_INT64)0;
l8:
  *(OOC_INT64*)((_check_pointer(i0, 71885))+104) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__InitExceptionName(OOC_SymbolTable__ExceptionName exceptionName, OOC_SymbolTable__Item parent, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)exceptionName;
  i1 = (OOC_INT64)parent;
  OOC_SymbolTable__InitItem((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
  i1 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 72098))+48) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 72138))+40) = i1;
  return;
  ;
}

void OOC_SymbolTable__ExceptionNameDesc_Store(OOC_SymbolTable__ExceptionName exceptionName, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)exceptionName;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__ItemDesc_Store((OOC_SymbolTable__Item)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 72381))+40);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 72401))+48);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i0);
  return;
  ;
}

void OOC_SymbolTable__ExceptionNameDesc_Load(OOC_SymbolTable__ExceptionName exceptionName, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)exceptionName;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__ItemDesc_Load((OOC_SymbolTable__Item)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 72582))+40), (void*)((_check_pointer(i0, 72602))+48));
  return;
  ;
}

void OOC_SymbolTable__VarDeclDesc_SetType(OOC_SymbolTable__VarDecl varDecl, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1,i2,i3;
  auto OOC_CHAR8 OOC_SymbolTable__VarDeclDesc_SetType_PassPerReference(OOC_SymbolTable__Type type);
    
    OOC_CHAR8 OOC_SymbolTable__VarDeclDesc_SetType_PassPerReference(OOC_SymbolTable__Type type) {
      register OOC_INT64 i0,i1;

      i0 = (OOC_INT64)type;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 72764)))), &_td_OOC_SymbolTable__ArrayDesc);
      if (i1) goto l3;
      i0 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 72783)))), &_td_OOC_SymbolTable__RecordDesc);
      
      goto l4;
l3:
      i0=1u;
l4:
      return i0;
      ;
    }


  i0 = (OOC_INT64)varDecl;
  i1 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 72842))+88) = i1;
  i2 = _check_pointer(i0, 72869);
  i3 = *(OOC_UINT8*)((_check_pointer(i0, 72908))+104);
  if (i3) goto l3;
  i3=0u;
  goto l8;
l3:
  i3 = *(OOC_UINT8*)((_check_pointer(i0, 72940))+107);
  if (i3) goto l6;
  i3 = OOC_SymbolTable__VarDeclDesc_SetType_PassPerReference((OOC_SymbolTable__Type)i1);
  
  goto l8;
l6:
  i3=1u;
l8:
  *(OOC_UINT8*)(i2+108) = i3;
  i2 = _check_pointer(i0, 72993);
  i3 = *(OOC_UINT8*)((_check_pointer(i0, 73026))+104);
  if (i3) goto l11;
  i3=0u;
  goto l13;
l11:
  i3 = *(OOC_UINT8*)((_check_pointer(i0, 73058))+107);
  i3 = !i3;
  
l13:
  if (i3) goto l15;
  i1=0u;
  goto l16;
l15:
  i1 = OOC_SymbolTable__VarDeclDesc_SetType_PassPerReference((OOC_SymbolTable__Type)i1);
  
l16:
  *(OOC_UINT8*)(i2+109) = i1;
  i1 = _check_pointer(i0, 73117);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 73148))+108);
  if (i2) goto l19;
  i2=0u;
  goto l21;
l19:
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 73187))+107);
  i2 = !i2;
  
l21:
  if (i2) goto l23;
  i0=0u;
  goto l24;
l23:
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 73218))+109);
  i0 = !i0;
  
l24:
  *(OOC_UINT8*)(i1+110) = i0;
  return;
  ;
}

void OOC_SymbolTable__InitVarDecl(OOC_SymbolTable__VarDecl varDecl, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_INT8 exportMark, OOC_Doc__Document docString, OOC_CHAR8 isParameter, OOC_CHAR8 isReceiver, OOC_CHAR8 isVarParam, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;

  i0 = (OOC_INT64)varDecl;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  i3 = visibleFrom;
  i4 = exportMark;
  i5 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, i4, (OOC_Doc__Document)i5);
  i2 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 73646))+96) = i2;
  i3 = isParameter;
  *(OOC_UINT8*)((_check_pointer(i0, 73680))+104) = i3;
  i3 = isReceiver;
  *(OOC_UINT8*)((_check_pointer(i0, 73721))+105) = i3;
  *(OOC_UINT8*)((_check_pointer(i0, 73760))+106) = 0u;
  i4 = isVarParam;
  *(OOC_UINT8*)((_check_pointer(i0, 73796))+107) = i4;
  *(OOC_UINT8*)((_check_pointer(i0, 73835))+111) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 73876))+112) = 1u;
  if (!i3) goto l3;
  *(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 73938)))), &_td_OOC_SymbolTable__FormalParsDesc, 73938)), 73949))+72) = i0;
l3:
  OOC_SymbolTable__VarDeclDesc_SetType((OOC_SymbolTable__VarDecl)i0, (OOC_SymbolTable__Type)i2);
  return;
  ;
}

void OOC_SymbolTable__VarDeclDesc_Store(OOC_SymbolTable__VarDecl varDecl, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)varDecl;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 74160))+88);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 74174))+96);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74214))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74194)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74255))+105);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74235)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74295))+106);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74275)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74337))+107);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74317)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74377))+108);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74357)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74425))+109);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74405)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74467))+110);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74447)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 74507))+111);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74487)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 74554))+112);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74534)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__VarDeclDesc_Load(OOC_SymbolTable__VarDecl varDecl, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)varDecl;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 74715))+88), (void*)((_check_pointer(i0, 74729))+96));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74749)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 74768))+104));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74789)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 74808))+105));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74828)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 74847))+106));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74869)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 74888))+107));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74908)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 74927))+108));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74955)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 74974))+109));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 74996)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 75015))+110));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 75035)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 75054))+111));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 75081)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 75100))+112));
  i1 = *(OOC_UINT8*)((_check_pointer(i0, 75138))+104);
  if (!i1) goto l4;
  *(OOC_INT32*)((_check_pointer(i0, 75250))+48) = (-1);
l4:
  return;
  ;
}

void OOC_SymbolTable__InitTypeDecl(OOC_SymbolTable__TypeDecl typeDecl, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_INT8 exportMark, OOC_Doc__Document docString, OOC_SymbolTable__Type type, OOC_CHAR8 isTypeParameter) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;

  i0 = (OOC_INT64)typeDecl;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  i3 = visibleFrom;
  i4 = exportMark;
  i5 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, i4, (OOC_Doc__Document)i5);
  i1 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 75679))+88) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 75707))+96) = i1;
  i1 = isTypeParameter;
  *(OOC_UINT8*)((_check_pointer(i0, 75742))+104) = i1;
  return;
  ;
}

void OOC_SymbolTable__TypeDeclDesc_Store(OOC_SymbolTable__TypeDecl typeDecl, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)typeDecl;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 75936))+88);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 75951))+96);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 75992))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 75971)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__TypeDeclDesc_Load(OOC_SymbolTable__TypeDecl typeDecl, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)typeDecl;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 76158))+88), (void*)((_check_pointer(i0, 76173))+96));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 76193)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 76213))+104));
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__TypeDeclDesc_HasTypeParameters(OOC_SymbolTable__TypeDecl typeDecl) {
  register OOC_INT64 i0,i1,i2;
  OOC_SymbolTable__TypePars typePars;

  i0 = (OOC_INT64)typeDecl;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76370))+88);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 76375))+56);
  typePars = (OOC_SymbolTable__TypePars)i1;
  i2 = i1!=(OOC_INT64)0;
  if (i2) goto l3;
  i0=0u;
  goto l4;
l3:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76425))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76430))+8);
  i0 = i0==i1;
  
l4:
  return i0;
  ;
}

OOC_CHAR8 OOC_SymbolTable__TypeDeclDesc_IsTypeParameter(OOC_SymbolTable__TypeDecl typeDecl) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)typeDecl;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76565))+8);
  return (OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 76573)))), &_td_OOC_SymbolTable__TypeParsDesc));
  ;
}

OOC_SymbolTable__TypeDecl OOC_SymbolTable__TypeDeclDesc_ParametricType(OOC_SymbolTable__TypeDecl typeDecl) {
  register OOC_INT64 i0,i1,i2,i3;
  OOC_SymbolTable__Item ptr;

  i0 = (OOC_INT64)typeDecl;
  i1 = OOC_SymbolTable__TypeDeclDesc_IsTypeParameter((OOC_SymbolTable__TypeDecl)i0);
  _assert(i1, 127, 76796);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76851))+8);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 76858))+8);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 76865))+16);
  ptr = (OOC_SymbolTable__Item)i1;
  i2 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 76895)))), &_td_OOC_SymbolTable__TypeDeclDesc));
  if (i2) goto l3;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 76926)))), &_td_OOC_SymbolTable__TypeDeclDesc, 76926)), 76935))+88);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 76940))+8);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76958))+8);
  i2 = i2!=i3;
  
  goto l5;
l3:
  i2=1u;
l5:
  if (i2) goto l8_loop;
  i0=i1;
  goto l17;
l8_loop:
  i1 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 76986));
  ptr = (OOC_SymbolTable__Item)i1;
  i2 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 76895)))), &_td_OOC_SymbolTable__TypeDeclDesc));
  if (i2) goto l11;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 76926)))), &_td_OOC_SymbolTable__TypeDeclDesc, 76926)), 76935))+88);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 76940))+8);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 76958))+8);
  i2 = i2!=i3;
  
  goto l13;
l11:
  i2=1u;
l13:
  if (i2) goto l8_loop;
l16:
  i0=i1;
l17:
  return (OOC_SymbolTable__TypeDecl)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 77023)))), &_td_OOC_SymbolTable__TypeDeclDesc, 77023));
  ;
}

void OOC_SymbolTable__InitRedirect(OOC_SymbolTable__Redirect redir, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_SymbolTable__Name module, OOC_SymbolTable__Name ident) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)redir;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, 0, 1, (OOC_Doc__Document)(OOC_INT64)0);
  i1 = (OOC_INT64)module;
  *(OOC_INT64*)((_check_pointer(i0, 77255))+88) = i1;
  i1 = (OOC_INT64)ident;
  *(OOC_INT64*)((_check_pointer(i0, 77284))+96) = i1;
  return;
  ;
}

void OOC_SymbolTable__RedirectDesc_Store(OOC_SymbolTable__Redirect redir, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)redir;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 77452))+88);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 77432)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 77488))+96);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 77468)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i0);
  return;
  ;
}

void OOC_SymbolTable__RedirectDesc_Load(OOC_SymbolTable__Redirect redir, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2;
  Object__Object obj;

  i0 = (OOC_INT64)redir;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 77649)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  *(OOC_INT64*)((_check_pointer(i0, 77678))+88) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 77694)))), &_td_OOC_SymbolTable__NameDesc, 77694));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 77706)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i1 = (OOC_INT64)obj;
  *(OOC_INT64*)((_check_pointer(i0, 77735))+96) = (_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 77750)))), &_td_OOC_SymbolTable__NameDesc, 77750));
  return;
  ;
}

void OOC_SymbolTable__InitFieldDecl(OOC_SymbolTable__FieldDecl fieldDecl, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_INT8 exportMark, OOC_Doc__Document docString, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;

  i0 = (OOC_INT64)fieldDecl;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  i3 = visibleFrom;
  i4 = exportMark;
  i5 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, i4, (OOC_Doc__Document)i5);
  i1 = (OOC_INT64)type;
  *(OOC_INT64*)((_check_pointer(i0, 78083))+88) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 78112))+96) = i1;
  *(OOC_INT32*)((_check_pointer(i0, 78148))+104) = (-1);
  *(OOC_UINT8*)((_check_pointer(i0, 78177))+108) = 0u;
  return;
  ;
}

void OOC_SymbolTable__FieldDeclDesc_Store(OOC_SymbolTable__FieldDecl fieldDecl, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)fieldDecl;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 78369))+88);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 78385))+96);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i2 = *(OOC_INT32*)((_check_pointer(i0, 78426))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 78405)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 78464))+108);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 78442)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__FieldDeclDesc_Load(OOC_SymbolTable__FieldDecl fieldDecl, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)fieldDecl;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 78637))+88), (void*)((_check_pointer(i0, 78653))+96));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 78673)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 78693))+104));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 78709)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 78730))+108));
  return;
  ;
}

void OOC_SymbolTable__FieldDeclDesc_SetOffset(OOC_SymbolTable__FieldDecl fieldDecl, OOC_INT32 offset) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)fieldDecl;
  i1 = offset;
  *(OOC_INT32*)((_check_pointer(i0, 78850))+104) = i1;
  return;
  ;
}

void OOC_SymbolTable__InitPredefProc(OOC_SymbolTable__PredefProc proc, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT16 id, OOC_INT16 minArgs, OOC_INT16 maxArgs) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)proc;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, 0, 1, (OOC_Doc__Document)(OOC_INT64)0);
  i1 = id;
  *(OOC_INT16*)((_check_pointer(i0, 79109))+88) = i1;
  i1 = minArgs;
  *(OOC_INT16*)((_check_pointer(i0, 79129))+90) = i1;
  i1 = maxArgs;
  *(OOC_INT16*)((_check_pointer(i0, 79159))+92) = i1;
  return;
  ;
}

void OOC_SymbolTable__PredefProcDesc_Store(OOC_SymbolTable__PredefProc proc, ADT_Storable__Writer w) {

  _assert(0u, 127, 79290);
  
  ;
}

void OOC_SymbolTable__PredefProcDesc_Load(OOC_SymbolTable__PredefProc proc, ADT_Storable__Reader r) {

  _assert(0u, 127, 79404);
  
  ;
}

void OOC_SymbolTable__InitProcDecl(OOC_SymbolTable__ProcDecl procDecl, OOC_SymbolTable__Item parent, OOC_SymbolTable__Name name, OOC_INT32 visibleFrom, OOC_INT8 exportMark, OOC_Doc__Document docString, OOC_INT8 procClass, OOC_CHAR8 isForwardDecl, OOC_AST__Node procAST) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)name;
  i3 = visibleFrom;
  i4 = exportMark;
  i5 = (OOC_INT64)docString;
  OOC_SymbolTable__InitDeclaration((OOC_SymbolTable__Declaration)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i2, i3, i4, (OOC_Doc__Document)i5);
  i1 = procClass;
  *(OOC_INT8*)((_check_pointer(i0, 79844))+88) = i1;
  i1 = isForwardDecl;
  *(OOC_UINT8*)((_check_pointer(i0, 79882))+89) = i1;
  *(OOC_UINT8*)((_check_pointer(i0, 79928))+90) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 79963))+91) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 80000))+92) = 1u;
  *(OOC_INT32*)((_check_pointer(i0, 80038))+96) = (-1);
  *(OOC_INT64*)((_check_pointer(i0, 80071))+104) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 80096))+112) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 80129))+120) = (OOC_INT64)0;
  i1 = (OOC_INT64)procAST;
  *(OOC_INT64*)((_check_pointer(i0, 80160))+128) = i1;
  *(OOC_UINT8*)((_check_pointer(i0, 80194))+136) = 0u;
  return;
  ;
}

void OOC_SymbolTable__ProcDeclDesc_Store(OOC_SymbolTable__ProcDecl procDecl, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__DeclarationDesc_Store((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Writer)i1);
  i2 = *(OOC_INT8*)((_check_pointer(i0, 80375))+88);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80354)))), IO_BinaryRider__WriterDesc_WriteSInt)),IO_BinaryRider__WriterDesc_WriteSInt)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 80415))+89);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80394)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 80459))+90);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80438)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 80500))+91);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80479)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 80543))+92);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80522)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_INT32*)((_check_pointer(i0, 80587))+96);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80567)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 80631))+112);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80608)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 80671))+120);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80651)))), IO_BinaryRider__WriterDesc_WriteStr)),IO_BinaryRider__WriterDesc_WriteStr)((IO_BinaryRider__Writer)i1, (Object__String)i0);
  return;
  ;
}

void OOC_SymbolTable__ProcDeclDesc_Load(OOC_SymbolTable__ProcDecl procDecl, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3;
  Object__Object obj;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__DeclarationDesc_Load((OOC_SymbolTable__Declaration)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80881)))), IO_BinaryRider__ReaderDesc_ReadSInt)),IO_BinaryRider__ReaderDesc_ReadSInt)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 80901))+88));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80920)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 80940))+89));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 80963)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 80983))+90));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 81003)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 81023))+91));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 81045)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 81065))+92));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 81089)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 81108))+96));
  *(OOC_INT64*)((_check_pointer(i0, 81136))+104) = (OOC_INT64)0;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 81154)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 81255))+112) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 81275)))), &_td_OOC_SymbolTable__FormalParsDesc, 81275));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 81212))+112) = (OOC_INT64)0;
l4:
  i1 = (OOC_INT64)OOC_SymbolTable__ReadString8((ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 81308))+120) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 81349))+128) = (OOC_INT64)0;
  *(OOC_UINT8*)((_check_pointer(i0, 81379))+136) = 0u;
  return;
  ;
}

void OOC_SymbolTable__ProcDeclDesc_SetNamespace(OOC_SymbolTable__ProcDecl procDecl, OOC_SymbolTable__Namespace ns) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)ns;
  *(OOC_INT64*)((_check_pointer(i0, 81578))+104) = i1;
  return;
  ;
}

void OOC_SymbolTable__ProcDeclDesc_SetLinkName(OOC_SymbolTable__ProcDecl procDecl, Object__String name) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)name;
  *(OOC_INT64*)((_check_pointer(i0, 81691))+120) = i1;
  return;
  ;
}

void OOC_SymbolTable__ProcDeclDesc_CopyTBProcIndex(OOC_SymbolTable__ProcDecl procDecl, OOC_SymbolTable__ProcDecl redefinition) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)redefinition;
  i1 = (OOC_INT64)procDecl;
  i1 = *(OOC_INT32*)((_check_pointer(i1, 82060))+96);
  *(OOC_INT32*)((_check_pointer(i0, 82035))+96) = i1;
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__ProcDeclDesc_IsTypeBound(OOC_SymbolTable__ProcDecl procDecl) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)procDecl;
  i0 = *(OOC_INT8*)((_check_pointer(i0, 82182))+88);
  return (i0!=0);
  ;
}

OOC_SymbolTable__Record OOC_SymbolTable__ProcDeclDesc_Class(OOC_SymbolTable__ProcDecl procDecl) {
  register OOC_INT64 i0,i1;
  OOC_SymbolTable__Item _class;

  i0 = (OOC_INT64)procDecl;
  i1 = OOC_SymbolTable__ProcDeclDesc_IsTypeBound((OOC_SymbolTable__ProcDecl)i0);
  if (i1) goto l3;
  return (OOC_SymbolTable__Record)(OOC_INT64)0;
  goto l12;
l3:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 82561))+112);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 82572))+72);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 82581))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 82561))+112);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 82572))+72);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 82581))+88);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 82586)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)i0);
  _class = (OOC_SymbolTable__Item)i0;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 82614)))), &_td_OOC_SymbolTable__PointerDesc);
  if (!i1) goto l7;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 82654)))), &_td_OOC_SymbolTable__PointerDesc, 82654)), 82662))+72);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 82654)))), &_td_OOC_SymbolTable__PointerDesc, 82654)), 82662))+72);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 82671)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)i0);
  _class = (OOC_SymbolTable__Item)i0;
  
l7:
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 82710)))), &_td_OOC_SymbolTable__RecordDesc);
  if (i1) goto l10;
  return (OOC_SymbolTable__Record)(OOC_INT64)0;
  goto l12;
l10:
  return (OOC_SymbolTable__Record)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 82747)))), &_td_OOC_SymbolTable__RecordDesc, 82747));
l12:
  _failed_function(82261); return 0;
  ;
}

void OOC_SymbolTable__ProcDeclDesc_RegisterForwardDecl(OOC_SymbolTable__ProcDecl procDecl, OOC_SymbolTable__ProcDecl forward) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)forward;
  i1 = *(OOC_INT32*)((_check_pointer(i1, 83103))+48);
  *(OOC_INT32*)((_check_pointer(i0, 83079))+48) = i1;
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__ProcDeclDesc_IsModuleBody(OOC_SymbolTable__ProcDecl procDecl) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)procDecl;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 83318))+8);
  return (i0==(OOC_INT64)0);
  ;
}

void OOC_SymbolTable__InitPredefType(OOC_SymbolTable__PredefType ptype, OOC_SymbolTable__Item parent, OOC_INT16 id) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)ptype;
  i1 = (OOC_INT64)parent;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)(OOC_INT64)0);
  i1 = id;
  *(OOC_INT16*)((_check_pointer(i0, 83483))+72) = i1;
  return;
  ;
}

void OOC_SymbolTable__PredefTypeDesc_Store(OOC_SymbolTable__PredefType tname, ADT_Storable__Writer w) {

  _assert(0u, 127, 83605);
  return;
  ;
}

void OOC_SymbolTable__PredefTypeDesc_Load(OOC_SymbolTable__PredefType tname, ADT_Storable__Reader r) {

  _assert(0u, 127, 83720);
  return;
  ;
}

void OOC_SymbolTable__InitTypeName(OOC_SymbolTable__TypeName tname, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_SymbolTable__Name module, OOC_SymbolTable__Name ident) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)tname;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  i1 = (OOC_INT64)module;
  *(OOC_INT64*)((_check_pointer(i0, 83929))+72) = i1;
  i1 = (OOC_INT64)ident;
  *(OOC_INT64*)((_check_pointer(i0, 83958))+80) = i1;
  return;
  ;
}

OOC_CHAR8 OOC_SymbolTable__TypeNameDesc_IsPredefReference(OOC_SymbolTable__TypeName tname) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)tname;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 84080))+72);
  i1 = i1!=(OOC_INT64)0;
  if (i1) goto l3;
  i0=0u;
  goto l4;
l3:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 84103))+72);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 84110))+16);
  i0 = _check_pointer(i0, 84114);
  i1 = OOC_ARRAY_LENGTH(i0, 0);
  i0 = *(OOC_UINT8*)(i0+(_check_index(0, i1, OOC_UINT8, 84114)));
  i0 = i0==0u;
  
l4:
  return i0;
  ;
}

void OOC_SymbolTable__TypeNameDesc_MarkAsPredefReference(OOC_SymbolTable__TypeName tname) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)tname;
  i1 = (OOC_INT64)OOC_SymbolTable__predefName;
  *(OOC_INT64*)((_check_pointer(i0, 84222))+72) = i1;
  return;
  ;
}

void OOC_SymbolTable__TypeNameDesc_Store(OOC_SymbolTable__TypeName tname, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)tname;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 84404))+72);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 84384)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 84440))+80);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 84420)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i0);
  return;
  ;
}

void OOC_SymbolTable__TypeNameDesc_Load(OOC_SymbolTable__TypeName tname, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3;
  Object__Object obj;

  i0 = (OOC_INT64)tname;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 84600)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 84691))+72) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 84707)))), &_td_OOC_SymbolTable__NameDesc, 84707));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 84655))+72) = (OOC_INT64)0;
l4:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 84727)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i1 = (OOC_INT64)obj;
  *(OOC_INT64*)((_check_pointer(i0, 84756))+80) = (_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 84771)))), &_td_OOC_SymbolTable__NameDesc, 84771));
  return;
  ;
}

OOC_SymbolTable__Import OOC_SymbolTable__TypeNameDesc_GetImport(OOC_SymbolTable__TypeName tname) {
  register OOC_INT64 i0,i1,i2,i3;
  OOC_SymbolTable__Module module;
  OOC_SymbolTable__Declaration decl;

  i0 = (OOC_INT64)tname;
  i1 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 84917)))), OOC_SymbolTable__ItemDesc_Module)),OOC_SymbolTable__ItemDesc_Module)((OOC_SymbolTable__Item)i0);
  module = (OOC_SymbolTable__Module)i1;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 84947))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 84981))+72);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 84947))+88);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 84951)))), OOC_SymbolTable__NamespaceDesc_IdentifyLocal)),OOC_SymbolTable__NamespaceDesc_IdentifyLocal)((OOC_SymbolTable__Namespace)i3, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Name)i0, 0u);
  decl = (OOC_SymbolTable__Declaration)i0;
  return (OOC_SymbolTable__Import)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 85015)))), &_td_OOC_SymbolTable__ImportDesc, 85015));
  ;
}

void OOC_SymbolTable__InitRecord(OOC_SymbolTable__Record record, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_SymbolTable__Type baseType) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)record;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  i1 = (OOC_INT64)baseType;
  *(OOC_INT64*)((_check_pointer(i0, 85214))+72) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 85248))+80) = i1;
  *(OOC_INT32*)((_check_pointer(i0, 85289))+88) = (-1);
  *(OOC_INT64*)((_check_pointer(i0, 85367))+96) = (OOC_INT64)0;
  *(OOC_UINT8*)((_check_pointer(i0, 85390))+104) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 85420))+105) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 85453))+106) = 1u;
  *(OOC_INT16*)((_check_pointer(i0, 85487))+108) = 0;
  *(OOC_INT64*)((_check_pointer(i0, 85516))+112) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__RecordDesc_Store(OOC_SymbolTable__Record record, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)record;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 85681))+72);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 85698))+80);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i2 = *(OOC_INT32*)((_check_pointer(i0, 85740))+88);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 85722)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 85780))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 85761)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 85816))+105);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 85797)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 85855))+106);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 85836)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_INT16*)((_check_pointer(i0, 85895))+108);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 85877)))), IO_BinaryRider__WriterDesc_WriteInt)),IO_BinaryRider__WriterDesc_WriteInt)((IO_BinaryRider__Writer)i1, i2);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 85936))+112);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 85915)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i0);
  return;
  ;
}

void OOC_SymbolTable__RecordDesc_Load(OOC_SymbolTable__Record record, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2;
  Object__Object obj;

  i0 = (OOC_INT64)record;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 86146))+72), (void*)((_check_pointer(i0, 86163))+80));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86187)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 86204))+88));
  *(OOC_INT64*)((_check_pointer(i0, 86230))+96) = (OOC_INT64)0;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86248)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 86266))+104));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86283)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 86301))+105));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86321)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 86339))+106));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86361)))), IO_BinaryRider__ReaderDesc_ReadInt)),IO_BinaryRider__ReaderDesc_ReadInt)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 86378))+108));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86398)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i1 = (OOC_INT64)obj;
  i2 = i1==(OOC_INT64)0;
  if (i2) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 86494))+112) = (_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 86513)))), &_td_OOC_SymbolTable__NameDesc, 86513));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 86454))+112) = (OOC_INT64)0;
l4:
  return;
  ;
}

void OOC_SymbolTable__RecordDesc_SetNamespace(OOC_SymbolTable__Record record, OOC_SymbolTable__Namespace ns) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)record;
  i1 = (OOC_INT64)ns;
  *(OOC_INT64*)((_check_pointer(i0, 86693))+96) = i1;
  return;
  ;
}

void OOC_SymbolTable__RecordDesc_AssignTBProcIndex(OOC_SymbolTable__Record record, OOC_SymbolTable__ProcDecl procDecl) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)procDecl;
  i1 = (OOC_INT64)record;
  i2 = *(OOC_INT32*)((_check_pointer(i1, 87017))+88);
  *(OOC_INT32*)((_check_pointer(i0, 86994))+96) = i2;
  i0 = *(OOC_INT32*)((_check_pointer(i1, 87047))+88);
  *(OOC_INT32*)((_check_pointer(i1, 87047))+88) = (i0+1);
  return;
  ;
}

void OOC_SymbolTable__InitTypeVar(OOC_SymbolTable__TypeVar typeVar, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_SymbolTable__Type bound) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)typeVar;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  i1 = (OOC_INT64)bound;
  *(OOC_INT64*)((_check_pointer(i0, 87263))+72) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 87291))+80) = i1;
  return;
  ;
}

void OOC_SymbolTable__TypeVarDesc_Store(OOC_SymbolTable__TypeVar typeVar, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)typeVar;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 87464))+72);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 87479))+80);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i0);
  return;
  ;
}

void OOC_SymbolTable__TypeVarDesc_Load(OOC_SymbolTable__TypeVar typeVar, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)typeVar;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 87635))+72), (void*)((_check_pointer(i0, 87650))+80));
  return;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeVarDesc_Bound(OOC_SymbolTable__TypeVar typeVar) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)typeVar;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 87750))+72);
  return (OOC_SymbolTable__Type)i0;
  ;
}

void OOC_SymbolTable__InitTypePars(OOC_SymbolTable__TypePars typePars, OOC_SymbolTable__Item parent) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)typePars;
  i1 = (OOC_INT64)parent;
  OOC_SymbolTable__InitItem((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
  *(OOC_INT64*)((_check_pointer(i0, 87885))+40) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 87913))+48) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__TypeParsDesc_Store(OOC_SymbolTable__TypePars typePars, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)typePars;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__ItemDesc_Store((OOC_SymbolTable__Item)i0, (ADT_Storable__Writer)i1);
  return;
  ;
}

void OOC_SymbolTable__TypeParsDesc_Load(OOC_SymbolTable__TypePars typePars, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)typePars;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__ItemDesc_Load((OOC_SymbolTable__Item)i0, (ADT_Storable__Reader)i1);
  *(OOC_INT64*)((_check_pointer(i0, 88227))+40) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 88255))+48) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__TypeParsDesc_SetNamespace(OOC_SymbolTable__TypePars typePars, OOC_SymbolTable__Namespace ns) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)typePars;
  i1 = (OOC_INT64)ns;
  *(OOC_INT64*)((_check_pointer(i0, 88440))+48) = i1;
  return;
  ;
}

void OOC_SymbolTable__InitTypeRef(struct OOC_SymbolTable__TypeRef *typeRef, RT0__Struct typeRef__tag, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)type;
  *(OOC_INT64*)(OOC_INT64)typeRef = i0;
  *(OOC_INT64*)((OOC_INT64)typeRef+8) = i0;
  return;
  ;
}

static void OOC_SymbolTable__StoreTypeRef(ADT_Storable__Writer w, struct OOC_SymbolTable__TypeRef *typeRef, RT0__Struct typeRef__tag) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)w;
  i1 = (OOC_INT64)*(OOC_INT64*)((OOC_INT64)typeRef+8);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 88736)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i0, (Object__Object)i1);
  return;
  ;
}

static void OOC_SymbolTable__LoadTypeRef(ADT_Storable__Reader r, struct OOC_SymbolTable__TypeRef *typeRef, RT0__Struct typeRef__tag) {
  register OOC_INT64 i0;
  Object__Object obj;

  i0 = (OOC_INT64)r;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 88940)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i0, (void*)(OOC_INT64)&obj);
  i0 = (OOC_INT64)obj;
  *(OOC_INT64*)((OOC_INT64)typeRef+8) = (_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 88991)))), &_td_OOC_SymbolTable__TypeDesc, 88991));
  *(OOC_INT64*)(OOC_INT64)typeRef = (_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 89022)))), &_td_OOC_SymbolTable__TypeDesc, 89022));
  return;
  ;
}

void OOC_SymbolTable__InitQualType(OOC_SymbolTable__QualType qualType, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_SymbolTable__Type baseType, OOC_SymbolTable__TypeRefArray arguments) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)qualType;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  i1 = (OOC_INT64)baseType;
  *(OOC_INT64*)((_check_pointer(i0, 89283))+72) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 89318))+80) = i1;
  i1 = (OOC_INT64)arguments;
  *(OOC_INT64*)((_check_pointer(i0, 89360))+88) = i1;
  return;
  ;
}

OOC_SymbolTable__QualType OOC_SymbolTable__NewQualType(OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_SymbolTable__Type baseType, OOC_SymbolTable__TypeRefArray arguments) {
  register OOC_INT64 i0,i1,i2,i3,i4;

  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__QualType.baseTypes[0]);
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  i3 = (OOC_INT64)baseType;
  i4 = (OOC_INT64)arguments;
  OOC_SymbolTable__InitQualType((OOC_SymbolTable__QualType)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2, (OOC_SymbolTable__Type)i3, (OOC_SymbolTable__TypeRefArray)i4);
  return (OOC_SymbolTable__QualType)i0;
  ;
}

void OOC_SymbolTable__QualTypeDesc_Store(OOC_SymbolTable__QualType qualType, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
  OOC_INT32 i;

  i0 = (OOC_INT64)qualType;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 89858))+72);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 89877))+80);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 89923))+88);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 89933)), 0);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 89901)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 89968))+88);
  i = 0;
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 89978)), 0);
  i3 = 0<i2;
  if (!i3) goto l8;
  i3 = (OOC_INT64)&_td_OOC_SymbolTable__TypeRef;
  i4=0;
l3_loop:
  i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90016))+88);
  i5 = _check_pointer(i5, 90026);
  i6 = OOC_ARRAY_LENGTH(i5, 0);
  i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90016))+88);
  i7 = OOC_ARRAY_LENGTH((_check_pointer(i7, 90026)), 0);
  i7 = _check_index(i4, i7, OOC_UINT32, 90026);
  OOC_SymbolTable__StoreTypeRef((ADT_Storable__Writer)i1, (void*)(i5+((_check_index(i4, i6, OOC_UINT32, 90026))*16)), (RT0__Struct)i3);
  i4 = i4+1;
  i = i4;
  i5 = i4<i2;
  if (i5) goto l3_loop;
l8:
  return;
  ;
}

void OOC_SymbolTable__QualTypeDesc_Load(OOC_SymbolTable__QualType qualType, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7;
  OOC_INT32 len;
  OOC_INT32 i;

  i0 = (OOC_INT64)qualType;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 90212))+72), (void*)((_check_pointer(i0, 90231))+80));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 90255)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&len);
  i2 = len;
  *(OOC_INT64*)((_check_pointer(i0, 90286))+88) = ((OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__TypeRefArray.baseTypes[0], i2));
  i = 0;
  i3 = 0<i2;
  if (!i3) goto l8;
  i3 = (OOC_INT64)&_td_OOC_SymbolTable__TypeRef;
  i4=0;
l3_loop:
  i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90360))+88);
  i5 = _check_pointer(i5, 90370);
  i6 = OOC_ARRAY_LENGTH(i5, 0);
  i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90360))+88);
  i7 = OOC_ARRAY_LENGTH((_check_pointer(i7, 90370)), 0);
  i7 = _check_index(i4, i7, OOC_UINT32, 90370);
  OOC_SymbolTable__LoadTypeRef((ADT_Storable__Reader)i1, (void*)(i5+((_check_index(i4, i6, OOC_UINT32, 90370))*16)), (RT0__Struct)i3);
  i4 = i4+1;
  i = i4;
  i5 = i4<i2;
  if (i5) goto l3_loop;
l8:
  return;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__QualTypeDesc_Deparam(OOC_SymbolTable__QualType qualType) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)qualType;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90474))+72);
  return (OOC_SymbolTable__Type)i0;
  ;
}

void OOC_SymbolTable__InitPointer(OOC_SymbolTable__Pointer pointer, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_SymbolTable__Type baseType) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)pointer;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  i1 = (OOC_INT64)baseType;
  *(OOC_INT64*)((_check_pointer(i0, 90680))+72) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 90715))+80) = i1;
  *(OOC_UINT8*)((_check_pointer(i0, 90757))+88) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 90799))+89) = 0u;
  return;
  ;
}

void OOC_SymbolTable__PointerDesc_Store(OOC_SymbolTable__Pointer pointer, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)pointer;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90971))+72);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 90989))+80);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 91033))+88);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 91013)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i0 = *(OOC_UINT8*)((_check_pointer(i0, 91081))+89);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 91061)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__PointerDesc_Load(OOC_SymbolTable__Pointer pointer, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)pointer;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 91236))+72), (void*)((_check_pointer(i0, 91254))+80));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 91278)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 91297))+88));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 91325)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 91344))+89));
  return;
  ;
}

void OOC_SymbolTable__InitArray(OOC_SymbolTable__Array array, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position, OOC_CHAR8 isOpenArray, OOC_SymbolTable__Type elementType, OOC_AST__Node lengthExpr) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)array;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  i1 = isOpenArray;
  *(OOC_UINT8*)((_check_pointer(i0, 91606))+72) = i1;
  *(OOC_UINT8*)((_check_pointer(i0, 91645))+73) = 1u;
  *(OOC_UINT8*)((_check_pointer(i0, 91679))+74) = 0u;
  i1 = (OOC_INT64)elementType;
  *(OOC_INT64*)((_check_pointer(i0, 91715))+80) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 91754))+88) = i1;
  *(OOC_INT32*)((_check_pointer(i0, 91800))+96) = (-1);
  i1 = (OOC_INT64)lengthExpr;
  *(OOC_INT64*)((_check_pointer(i0, 91825))+104) = i1;
  return;
  ;
}

void OOC_SymbolTable__ArrayDesc_Store(OOC_SymbolTable__Array array, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)array;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 91995))+72);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 91977)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 92034))+73);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92016)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 92075))+74);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92057)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 92116))+80);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 92135))+88);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i0 = *(OOC_INT32*)((_check_pointer(i0, 92179))+96);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92162)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i0);
  return;
  ;
}

void OOC_SymbolTable__ArrayDesc_Load(OOC_SymbolTable__Array array, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)array;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92312)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 92329))+72));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92350)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 92367))+73));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92390)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 92407))+74));
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 92447))+80), (void*)((_check_pointer(i0, 92466))+88));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92493)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 92509))+96));
  *(OOC_INT64*)((_check_pointer(i0, 92529))+104) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__ArrayDesc_SetLength(OOC_SymbolTable__Array array, OOC_INT32 length) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)array;
  i1 = length;
  *(OOC_INT32*)((_check_pointer(i0, 92635))+96) = i1;
  return;
  ;
}

OOC_INT32 OOC_SymbolTable__ArrayDesc_GetOpenDimensions(OOC_SymbolTable__Array array) {
  register OOC_INT64 i0,i1,i2;
  OOC_INT32 dim;
  OOC_SymbolTable__Type type;

  dim = 0;
  i0 = (OOC_INT64)array;
  type = (OOC_SymbolTable__Type)i0;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 92957)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i1) goto l3;
  i1=0u;
  goto l5;
l3:
  i1 = *(OOC_UINT8*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 92974)))), &_td_OOC_SymbolTable__ArrayDesc, 92974)), 92980))+72);
  
l5:
  if (i1) goto l7;
  i0=0;
  goto l17;
l7:
  i1=i0;i0=0;
l8_loop:
  i0 = i0+1;
  dim = i0;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 93032)))), &_td_OOC_SymbolTable__ArrayDesc, 93032)), 93038))+80);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 93032)))), &_td_OOC_SymbolTable__ArrayDesc, 93032)), 93038))+80);
  i1 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 93050)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)i1);
  type = (OOC_SymbolTable__Type)i1;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92957)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i2) goto l11;
  i2=0u;
  goto l13;
l11:
  i2 = *(OOC_UINT8*)((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 92974)))), &_td_OOC_SymbolTable__ArrayDesc, 92974)), 92980))+72);
  
l13:
  if (i2) goto l8_loop;
l17:
  return i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__ArrayDesc_GetNonOpenElementType(OOC_SymbolTable__Array array) {
  register OOC_INT64 i0,i1;
  OOC_SymbolTable__Type type;

  i0 = (OOC_INT64)array;
  type = (OOC_SymbolTable__Type)i0;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93318)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i1) goto l3;
  i1=0u;
  goto l5;
l3:
  i1 = *(OOC_UINT8*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93335)))), &_td_OOC_SymbolTable__ArrayDesc, 93335)), 93341))+72);
  
l5:
  if (!i1) goto l17;
l8_loop:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93376)))), &_td_OOC_SymbolTable__ArrayDesc, 93376)), 93382))+80);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93376)))), &_td_OOC_SymbolTable__ArrayDesc, 93376)), 93382))+80);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 93394)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)i0);
  type = (OOC_SymbolTable__Type)i0;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93318)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i1) goto l11;
  i1=0u;
  goto l13;
l11:
  i1 = *(OOC_UINT8*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93335)))), &_td_OOC_SymbolTable__ArrayDesc, 93335)), 93341))+72);
  
l13:
  if (i1) goto l8_loop;
l17:
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__ArrayDesc_GetInnermostElementType(OOC_SymbolTable__Array array) {
  register OOC_INT64 i0,i1;
  OOC_SymbolTable__Type type;

  i0 = (OOC_INT64)array;
  type = (OOC_SymbolTable__Type)i0;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93664)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (!i1) goto l9;
  
l4_loop:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93696)))), &_td_OOC_SymbolTable__ArrayDesc, 93696)), 93702))+80);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93696)))), &_td_OOC_SymbolTable__ArrayDesc, 93696)), 93702))+80);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 93714)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)i0);
  type = (OOC_SymbolTable__Type)i0;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 93664)))), &_td_OOC_SymbolTable__ArrayDesc);
  if (i1) goto l4_loop;
l9:
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__ArrayDesc_GetNthElementType(OOC_SymbolTable__Array array, OOC_INT32 dim) {
  register OOC_INT64 i0,i1,i2;
  OOC_SymbolTable__Type type;

  i0 = (OOC_INT64)array;
  type = (OOC_SymbolTable__Type)i0;
  i1 = dim;
  i2 = i1>0;
  if (!i2) goto l9;
  
l4_loop:
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 94075)))), &_td_OOC_SymbolTable__ArrayDesc, 94075)), 94081))+80);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 94075)))), &_td_OOC_SymbolTable__ArrayDesc, 94075)), 94081))+80);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 94093)))), OOC_SymbolTable__TypeDesc_Deparam)),OOC_SymbolTable__TypeDesc_Deparam)((OOC_SymbolTable__Type)i0);
  type = (OOC_SymbolTable__Type)i0;
  i1 = i1-1;
  dim = i1;
  i2 = i1>0;
  if (i2) goto l4_loop;
l9:
  return (OOC_SymbolTable__Type)i0;
  ;
}

void OOC_SymbolTable__InitFormalPars(OOC_SymbolTable__FormalPars formalPars, OOC_SymbolTable__Item parent, OOC_SymbolTable__Position position) {
  register OOC_INT64 i0,i1,i2;

  i0 = (OOC_INT64)formalPars;
  i1 = (OOC_INT64)parent;
  i2 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Item)i1, (OOC_SymbolTable__Position)i2);
  *(OOC_INT64*)((_check_pointer(i0, 94355))+72) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 94388))+80) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 94423))+88) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 94465))+96) = (OOC_INT64)0;
  *(OOC_UINT8*)((_check_pointer(i0, 94496))+104) = 0u;
  *(OOC_UINT8*)((_check_pointer(i0, 94540))+105) = 0u;
  *(OOC_INT8*)((_check_pointer(i0, 94575))+106) = 0;
  *(OOC_INT64*)((_check_pointer(i0, 94620))+112) = (OOC_INT64)0;
  *(OOC_INT64*)((_check_pointer(i0, 94651))+120) = (OOC_INT64)0;
  return;
  ;
}

void OOC_SymbolTable__FormalParsDesc_EnableRestParameters(OOC_SymbolTable__FormalPars formalPars) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)formalPars;
  *(OOC_UINT8*)((_check_pointer(i0, 94869))+104) = 1u;
  return;
  ;
}

void OOC_SymbolTable__FormalParsDesc_SetResultType(OOC_SymbolTable__FormalPars formalPars, OOC_SymbolTable__Type resultType) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)formalPars;
  i1 = (OOC_INT64)resultType;
  *(OOC_INT64*)((_check_pointer(i0, 95017))+80) = i1;
  *(OOC_INT64*)((_check_pointer(i0, 95058))+88) = i1;
  return;
  ;
}

void OOC_SymbolTable__FormalParsDesc_SetNamespace(OOC_SymbolTable__FormalPars formalPars, OOC_SymbolTable__Namespace ns) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)formalPars;
  i1 = (OOC_INT64)ns;
  *(OOC_INT64*)((_check_pointer(i0, 95289))+120) = i1;
  return;
  ;
}

void OOC_SymbolTable__FormalParsDesc_Store(OOC_SymbolTable__FormalPars formalPars, ADT_Storable__Writer w) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5;
  OOC_INT32 i;

  i0 = (OOC_INT64)formalPars;
  i1 = (OOC_INT64)w;
  OOC_SymbolTable__TypeDesc_Store((OOC_SymbolTable__Type)i0, (ADT_Storable__Writer)i1);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95490))+72);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95465)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95530))+80);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95553))+88);
  OOC_SymbolTable__WriteType((ADT_Storable__Writer)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Type)i3);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 95602))+104);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95579)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_UINT8*)((_check_pointer(i0, 95652))+105);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95629)))), IO_BinaryRider__WriterDesc_WriteBool)),IO_BinaryRider__WriterDesc_WriteBool)((IO_BinaryRider__Writer)i1, i2);
  i2 = *(OOC_INT8*)((_check_pointer(i0, 95693))+106);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95670)))), IO_BinaryRider__WriterDesc_WriteSInt)),IO_BinaryRider__WriterDesc_WriteSInt)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95724))+112);
  i2 = i2==(OOC_INT64)0;
  if (i2) goto l11;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95811))+112);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 95819)), 0);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95784)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, i2);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95859))+112);
  i = 0;
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 95867)), 0);
  i3 = 0<i2;
  if (!i3) goto l12;
  i3=0;
l5_loop:
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 95909))+112);
  i4 = _check_pointer(i4, 95917);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  i4 = (OOC_INT64)*(OOC_INT64*)(i4+(_check_index(i3, i5, OOC_UINT32, 95917))*8);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95884)))), ADT_Storable__WriterDesc_WriteObject)),ADT_Storable__WriterDesc_WriteObject)((ADT_Storable__Writer)i1, (Object__Object)i4);
  i3 = i3+1;
  i = i3;
  i4 = i3<i2;
  if (i4) goto l5_loop;
  goto l12;
l11:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 95752)))), IO_BinaryRider__WriterDesc_WriteNum)),IO_BinaryRider__WriterDesc_WriteNum)((IO_BinaryRider__Writer)i1, (-1));
l12:
  return;
  ;
}

void OOC_SymbolTable__FormalParsDesc_Load(OOC_SymbolTable__FormalPars formalPars, ADT_Storable__Reader r) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6;
  Object__Object obj;
  OOC_INT32 len;
  OOC_INT32 i;

  i0 = (OOC_INT64)formalPars;
  i1 = (OOC_INT64)r;
  OOC_SymbolTable__TypeDesc_Load((OOC_SymbolTable__Type)i0, (ADT_Storable__Reader)i1);
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 96153)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i2 = (OOC_INT64)obj;
  i3 = i2==(OOC_INT64)0;
  if (i3) goto l3;
  *(OOC_INT64*)((_check_pointer(i0, 96256))+72) = (_type_guard(i2, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i2, 96274)))), &_td_OOC_SymbolTable__VarDeclDesc, 96274));
  goto l4;
l3:
  *(OOC_INT64*)((_check_pointer(i0, 96213))+72) = (OOC_INT64)0;
l4:
  OOC_SymbolTable__ReadType((ADT_Storable__Reader)i1, (void*)((_check_pointer(i0, 96318))+80), (void*)((_check_pointer(i0, 96341))+88));
  *(OOC_INT64*)((_check_pointer(i0, 96376))+96) = (OOC_INT64)0;
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 96398)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 96420))+104));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 96447)))), IO_BinaryRider__ReaderDesc_ReadBool)),IO_BinaryRider__ReaderDesc_ReadBool)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 96469))+105));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 96487)))), IO_BinaryRider__ReaderDesc_ReadSInt)),IO_BinaryRider__ReaderDesc_ReadSInt)((IO_BinaryRider__Reader)i1, (void*)((_check_pointer(i0, 96509))+106));
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 96532)))), IO_BinaryRider__ReaderDesc_ReadNum)),IO_BinaryRider__ReaderDesc_ReadNum)((IO_BinaryRider__Reader)i1, (void*)(OOC_INT64)&len);
  i2 = len;
  i3 = i2<0;
  if (i3) goto l15;
  *(OOC_INT64*)((_check_pointer(i0, 96633))+112) = ((OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__ExceptionNameArray.baseTypes[0], i2));
  i = 0;
  i3 = 0<i2;
  if (!i3) goto l16;
  i3=0;
l9_loop:
  OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 96687)))), ADT_Storable__ReaderDesc_ReadObject)),ADT_Storable__ReaderDesc_ReadObject)((ADT_Storable__Reader)i1, (void*)(OOC_INT64)&obj);
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 96725))+112);
  i4 = _check_pointer(i4, 96733);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  i6 = (OOC_INT64)obj;
  *(OOC_INT64*)(i4+(_check_index(i3, i5, OOC_UINT32, 96733))*8) = (_type_guard(i6, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i6, 96744)))), &_td_OOC_SymbolTable__ExceptionNameDesc, 96744));
  i3 = i3+1;
  i = i3;
  i4 = i3<i2;
  if (i4) goto l9_loop;
  goto l16;
l15:
  *(OOC_INT64*)((_check_pointer(i0, 96587))+112) = (OOC_INT64)0;
l16:
  *(OOC_INT64*)((_check_pointer(i0, 96792))+120) = (OOC_INT64)0;
  return;
  ;
}

static void OOC_SymbolTable__InitTypeClosure(OOC_SymbolTable__TypeClosure tc, OOC_SymbolTable__Position position, OOC_SymbolTable__Type baseType, OOC_SymbolTable__TypeVarArray params, OOC_SymbolTable__TypeRefArray arguments) {
  register OOC_INT64 i0,i1,i2,i3;

  i0 = (OOC_INT64)params;
  i1 = (OOC_INT64)arguments;
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i0, 97053)), 0);
  i3 = OOC_ARRAY_LENGTH((_check_pointer(i1, 97071)), 0);
  _assert((i2==i3), 127, 97036);
  i2 = (OOC_INT64)tc;
  i3 = (OOC_INT64)position;
  OOC_SymbolTable__InitType((OOC_SymbolTable__Type)i2, (OOC_SymbolTable__Item)(OOC_INT64)0, (OOC_SymbolTable__Position)i3);
  i3 = (OOC_INT64)baseType;
  *(OOC_INT64*)((_check_pointer(i2, 97115))+72) = i3;
  *(OOC_INT64*)((_check_pointer(i2, 97144))+80) = i0;
  *(OOC_INT64*)((_check_pointer(i2, 97169))+88) = i1;
  i0 = i3!=(OOC_INT64)0;
  if (i0) goto l3;
  *(OOC_INT32*)((_check_pointer(i2, 97306))+64) = (-1);
  *(OOC_INT16*)((_check_pointer(i2, 97327))+68) = (-1);
  goto l4;
l3:
  i0 = *(OOC_INT32*)((_check_pointer(i3, 97248))+64);
  *(OOC_INT32*)((_check_pointer(i2, 97231))+64) = i0;
  i0 = *(OOC_INT16*)((_check_pointer(i3, 97281))+68);
  *(OOC_INT16*)((_check_pointer(i2, 97263))+68) = i0;
l4:
  return;
  ;
}

OOC_SymbolTable__TypeClosure OOC_SymbolTable__NewTypeClosure(OOC_SymbolTable__Position position, OOC_SymbolTable__Type baseType, OOC_SymbolTable__TypeVarArray params, OOC_SymbolTable__TypeRefArray arguments) {
  register OOC_INT64 i0,i1,i2,i3,i4;

  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__TypeClosure.baseTypes[0]);
  i1 = (OOC_INT64)position;
  i2 = (OOC_INT64)baseType;
  i3 = (OOC_INT64)params;
  i4 = (OOC_INT64)arguments;
  OOC_SymbolTable__InitTypeClosure((OOC_SymbolTable__TypeClosure)i0, (OOC_SymbolTable__Position)i1, (OOC_SymbolTable__Type)i2, (OOC_SymbolTable__TypeVarArray)i3, (OOC_SymbolTable__TypeRefArray)i4);
  return (OOC_SymbolTable__TypeClosure)i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeClosureDesc_Deparam(OOC_SymbolTable__TypeClosure typeClosure) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)typeClosure;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 97784))+72);
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeClosureDesc_Lookup(OOC_SymbolTable__TypeClosure typeClosure, OOC_SymbolTable__TypeVar tv, OOC_SymbolTable__TypeVar _default) {
  register OOC_INT64 i0,i1,i2,i3,i4;
  OOC_INT32 i;

  i0 = (OOC_INT64)typeClosure;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98075))+80);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98102))+88);
  i1 = OOC_ARRAY_LENGTH((_check_pointer(i1, 98082)), 0);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 98112)), 0);
  _assert((i1==i2), 127, 98053);
  i = 0;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98159))+80);
  i1 = OOC_ARRAY_LENGTH((_check_pointer(i1, 98166)), 0);
  i1 = 0!=i1;
  if (i1) goto l3;
  i1=0u;
  goto l5;
l3:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98184))+80);
  i1 = _check_pointer(i1, 98191);
  i2 = OOC_ARRAY_LENGTH(i1, 0);
  i1 = (OOC_INT64)*(OOC_INT64*)(i1+(_check_index(0, i2, OOC_UINT32, 98191))*8);
  i2 = (OOC_INT64)tv;
  i1 = i1!=i2;
  
l5:
  if (i1) goto l7;
  i1=0;
  goto l17;
l7:
  i1 = (OOC_INT64)tv;
  i2=0;
l8_loop:
  i2 = i2+1;
  i = i2;
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98159))+80);
  i3 = OOC_ARRAY_LENGTH((_check_pointer(i3, 98166)), 0);
  i3 = i2!=i3;
  if (i3) goto l11;
  i3=0u;
  goto l13;
l11:
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98184))+80);
  i3 = _check_pointer(i3, 98191);
  i4 = OOC_ARRAY_LENGTH(i3, 0);
  i3 = (OOC_INT64)*(OOC_INT64*)(i3+(_check_index(i2, i4, OOC_UINT32, 98191))*8);
  i3 = i3!=i1;
  
l13:
  if (i3) goto l8_loop;
l16:
  i1=i2;
l17:
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98255))+80);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 98262)), 0);
  i2 = i1==i2;
  if (i2) goto l20;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98520))+88);
  i0 = _check_pointer(i0, 98530);
  i2 = OOC_ARRAY_LENGTH(i0, 0);
  i0 = (OOC_INT64)*(OOC_INT64*)(i0+((_check_index(i1, i2, OOC_UINT32, 98530))*16));
  return (OOC_SymbolTable__Type)i0;
  goto l21;
l20:
  i0 = (OOC_INT64)_default;
  return (OOC_SymbolTable__Type)i0;
l21:
  _failed_function(97848); return 0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__TypeClosureDesc_Closure(OOC_SymbolTable__TypeClosure closure, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8,i9;
  OOC_SymbolTable__TypeRefArray args;
  OOC_INT32 i;
  OOC_SymbolTable__Type nextType;

  i0 = (OOC_INT64)type;
  i1 = i0==(OOC_INT64)0;
  if (!i1) goto l3;
  return (OOC_SymbolTable__Type)(OOC_INT64)0;
l3:
  i1 = (OOC_INT64)&_td_OOC_SymbolTable__TypeRef;
  
l4_loop:
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 98860)))), &_td_OOC_SymbolTable__QualTypeDesc);
  if (i2) goto l19;
  i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 99312)))), &_td_OOC_SymbolTable__TypeVarDesc);
  if (i2) goto l13;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 99525))+56);
  i2 = i2==(OOC_INT64)0;
  if (!i2) goto l29;
  return (OOC_SymbolTable__Type)i0;
  goto l28;
l13:
  i2 = (OOC_INT64)closure;
  i2 = (OOC_INT64)OOC_SymbolTable__TypeClosureDesc_Lookup((OOC_SymbolTable__TypeClosure)i2, (OOC_SymbolTable__TypeVar)i0, (OOC_SymbolTable__TypeVar)(OOC_INT64)0);
  nextType = (OOC_SymbolTable__Type)i2;
  i2 = i2==(OOC_INT64)0;
  if (i2) goto l16;
  i0 = (OOC_INT64)OOC_SymbolTable__emptyClosure;
  closure = (OOC_SymbolTable__TypeClosure)i0;
  goto l28;
l16:
  return (OOC_SymbolTable__Type)i0;
  goto l28;
l19:
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98897))+88);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98920))+72);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i3, 98929))+56);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i3, 98938))+40);
  i3 = OOC_ARRAY_LENGTH((_check_pointer(i3, 98945)), 0);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 98907)), 0);
  _assert((i2==i3), 127, 98882);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 98976))+72);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 98985))+56);
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i2, 98994))+40);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 99001)), 0);
  i2 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__TypeRefArray.baseTypes[0], i2);
  args = (OOC_SymbolTable__TypeRefArray)i2;
  i = 0;
  i3 = OOC_ARRAY_LENGTH((_check_pointer(i2, 99036)), 0);
  i4 = 0<i3;
  if (!i4) goto l27;
  i4 = (OOC_INT64)closure;
  i5=0;
l22_loop:
  i6 = _check_pointer(i2, 99070);
  i7 = OOC_ARRAY_LENGTH(i6, 0);
  i8 = OOC_ARRAY_LENGTH((_check_pointer(i2, 99070)), 0);
  i8 = _check_index(i5, i8, OOC_UINT32, 99070);
  i8 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 99095))+88);
  i8 = _check_pointer(i8, 99105);
  i9 = OOC_ARRAY_LENGTH(i8, 0);
  i8 = (OOC_INT64)*(OOC_INT64*)(i8+((_check_index(i5, i9, OOC_UINT32, 99105))*16));
  i8 = (OOC_INT64)OOC_SymbolTable__TypeClosureDesc_Closure((OOC_SymbolTable__TypeClosure)i4, (OOC_SymbolTable__Type)i8);
  OOC_SymbolTable__InitTypeRef((void*)(i6+((_check_index(i5, i7, OOC_UINT32, 99070))*16)), (RT0__Struct)i1, (OOC_SymbolTable__Type)i8);
  i5 = i5+1;
  i = i5;
  i6 = i5<i3;
  if (i6) goto l22_loop;
l27:
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 99222))+72);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i3, 99231))+56);
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 99168))+40);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i3, 99240))+40);
  i2 = (OOC_INT64)OOC_SymbolTable__NewTypeClosure((OOC_SymbolTable__Position)i4, (OOC_SymbolTable__Type)(OOC_INT64)0, (OOC_SymbolTable__TypeVarArray)i3, (OOC_SymbolTable__TypeRefArray)i2);
  closure = (OOC_SymbolTable__TypeClosure)i2;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 99280))+72);
  nextType = (OOC_SymbolTable__Type)i0;
l28:
  i0 = (OOC_INT64)nextType;
  type = (OOC_SymbolTable__Type)i0;
  
  goto l4_loop;
l29:
  i1 = (OOC_INT64)closure;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 99768))+40);
  i3 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 99818))+80);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 99834))+88);
  i0 = (OOC_INT64)OOC_SymbolTable__NewTypeClosure((OOC_SymbolTable__Position)i2, (OOC_SymbolTable__Type)i0, (OOC_SymbolTable__TypeVarArray)i3, (OOC_SymbolTable__TypeRefArray)i1);
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_CHAR8 OOC_SymbolTable__TypeClosureDesc_ArgumentsInduced(OOC_SymbolTable__TypeClosure closure, OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6,i7,i8;
  OOC_INT32 i;
  OOC_INT32 j;

  i0 = (OOC_INT64)type;
  i1 = i0==(OOC_INT64)0;
  if (i1) goto l35;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 100352)))), &_td_OOC_SymbolTable__QualTypeDesc);
  if (i1) goto l5;
  i0 = (OOC_INT64)closure;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100734))+88);
  i0 = OOC_ARRAY_LENGTH((_check_pointer(i0, 100744)), 0);
  return (i0==0);
  goto l36;
l5:
  i1 = (OOC_INT64)closure;
  i2 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 100399))+80);
  i2 = OOC_ARRAY_LENGTH((_check_pointer(i2, 100406)), 0);
  i = 0;
  i3 = 0<i2;
  if (!i3) goto l33;
  i3=0;
l8_loop:
  j = 0;
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100461))+88);
  i4 = OOC_ARRAY_LENGTH((_check_pointer(i4, 100471)), 0);
  i4 = 0!=i4;
  if (i4) goto l11;
  i4=0u;
  goto l13;
l11:
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100498))+88);
  i4 = _check_pointer(i4, 100508);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 100526))+80);
  i6 = _check_pointer(i6, 100533);
  i7 = OOC_ARRAY_LENGTH(i6, 0);
  i6 = (OOC_INT64)*(OOC_INT64*)(i6+(_check_index(i3, i7, OOC_UINT32, 100533))*8);
  i4 = (OOC_INT64)*(OOC_INT64*)(i4+((_check_index(0, i5, OOC_UINT32, 100508))*16));
  i4 = i4!=i6;
  
l13:
  if (i4) goto l15;
  i4=0;
  goto l25;
l15:
  i4=0;
l16_loop:
  i4 = i4+1;
  j = i4;
  i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100461))+88);
  i5 = OOC_ARRAY_LENGTH((_check_pointer(i5, 100471)), 0);
  i5 = i4!=i5;
  if (i5) goto l19;
  i5=0u;
  goto l21;
l19:
  i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100498))+88);
  i5 = _check_pointer(i5, 100508);
  i6 = OOC_ARRAY_LENGTH(i5, 0);
  i7 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 100526))+80);
  i7 = _check_pointer(i7, 100533);
  i8 = OOC_ARRAY_LENGTH(i7, 0);
  i7 = (OOC_INT64)*(OOC_INT64*)(i7+(_check_index(i3, i8, OOC_UINT32, 100533))*8);
  i5 = (OOC_INT64)*(OOC_INT64*)(i5+((_check_index(i4, i6, OOC_UINT32, 100508))*16));
  i5 = i5!=i7;
  
l21:
  if (i5) goto l16_loop;
l25:
  i5 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100602))+88);
  i5 = OOC_ARRAY_LENGTH((_check_pointer(i5, 100612)), 0);
  i4 = i4==i5;
  if (!i4) goto l28;
  return 0u;
l28:
  i3 = i3+1;
  i = i3;
  i4 = i3<i2;
  if (i4) goto l8_loop;
l33:
  return 1u;
  goto l36;
l35:
  i0 = (OOC_INT64)closure;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 100309))+88);
  i0 = OOC_ARRAY_LENGTH((_check_pointer(i0, 100319)), 0);
  return (i0==0);
l36:
  _failed_function(99896); return 0;
  ;
}

OOC_SymbolTable__Type OOC_SymbolTable__Expand(OOC_SymbolTable__Type type) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)OOC_SymbolTable__emptyClosure;
  i1 = (OOC_INT64)type;
  i0 = (OOC_INT64)OOC_SymbolTable__TypeClosureDesc_Closure((OOC_SymbolTable__TypeClosure)i0, (OOC_SymbolTable__Type)i1);
  return (OOC_SymbolTable__Type)i0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__ItemDesc_Namespace(OOC_SymbolTable__Item item) {

  return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__ModuleDesc_Namespace(OOC_SymbolTable__Module item) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)item;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102391))+88);
  return (OOC_SymbolTable__Namespace)i0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__ProcDeclDesc_Namespace(OOC_SymbolTable__ProcDecl item) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)item;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102490))+104);
  return (OOC_SymbolTable__Namespace)i0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__FormalParsDesc_Namespace(OOC_SymbolTable__FormalPars item) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)item;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102591))+120);
  return (OOC_SymbolTable__Namespace)i0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__RecordDesc_Namespace(OOC_SymbolTable__Record item) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)item;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102688))+96);
  return (OOC_SymbolTable__Namespace)i0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__TypeParsDesc_Namespace(OOC_SymbolTable__TypePars item) {
  register OOC_INT64 i0;

  i0 = (OOC_INT64)item;
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102787))+48);
  return (OOC_SymbolTable__Namespace)i0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__QualTypeDesc_Namespace(OOC_SymbolTable__QualType item) {
  register OOC_INT64 i0,i1;

  i0 = (OOC_INT64)item;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102886))+72);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 102886))+72);
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 102895)))), OOC_SymbolTable__ItemDesc_Namespace)),OOC_SymbolTable__ItemDesc_Namespace)((OOC_SymbolTable__Item)i0);
  return (OOC_SymbolTable__Namespace)i0;
  ;
}

void OOC_SymbolTable__Prune(OOC_SymbolTable__Module root, ADT_Dictionary_AddressKey__Dictionary keep) {
  register OOC_INT64 i0,i1,i2,i3,i4,i5,i6;
  ADT_ArrayList__ArrayList prunedImports;
  OOC_INT32 i;
  OOC_SymbolTable__Import import;
  OOC_SymbolTable__ModuleRef mr;
  auto void OOC_SymbolTable__Prune_PruneList(OOC_SymbolTable__Item *list, OOC_SymbolTable__Item *last);
    
    void OOC_SymbolTable__Prune_PruneList(OOC_SymbolTable__Item *list, OOC_SymbolTable__Item *last) {
      register OOC_INT64 i0,i1,i2;
      OOC_SymbolTable__Item _this;

      i0 = (OOC_INT64)*list;
      _this = (OOC_SymbolTable__Item)i0;
      *last = (OOC_SymbolTable__Item)(OOC_INT64)0;
      *list = (OOC_SymbolTable__Item)(OOC_INT64)0;
      i1 = i0!=(OOC_INT64)0;
      if (!i1) goto l23;
l3_loop:
      i1 = (OOC_INT64)keep;
      i1 = ADT_Dictionary_AddressKey__DictionaryDesc_HasKey((ADT_Dictionary_AddressKey__Dictionary)i1, (Object__Object)i0);
      if (i1) goto l13;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 103737)))), &_td_OOC_SymbolTable__ImportDesc);
      if (i1) goto l8;
      i1=0u;
      goto l10;
l8:
      i1 = OOC_SymbolTable__ImportDesc_IsInternalImport((OOC_SymbolTable__Import)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 103756)))), &_td_OOC_SymbolTable__ImportDesc, 103756)));
      i1 = !i1;
      
l10:
      if (!i1) goto l18;
      i1 = (OOC_INT64)prunedImports;
      OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 103813)))), ADT_ArrayList__ArrayListDesc_Append)),ADT_ArrayList__ArrayListDesc_Append)((ADT_ArrayList__ArrayList)i1, (Object__Object)i0);
      goto l18;
l13:
      OOC_SymbolTable__Prune_PruneList((void*)((_check_pointer(i0, 103473))+16), (void*)((_check_pointer(i0, 103492))+24));
      i1 = (OOC_INT64)*last;
      i2 = i1==(OOC_INT64)0;
      if (i2) goto l16;
      *(OOC_INT64*)(_check_pointer(i1, 103645)) = i0;
      goto l17;
l16:
      *list = (OOC_SymbolTable__Item)i0;
l17:
      *last = (OOC_SymbolTable__Item)i0;
l18:
      i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i0, 103876));
      _this = (OOC_SymbolTable__Item)i0;
      i1 = i0!=(OOC_INT64)0;
      if (i1) goto l3_loop;
l23:
      i0 = (OOC_INT64)*last;
      i1 = i0!=(OOC_INT64)0;
      if (!i1) goto l26;
      *(OOC_INT64*)(_check_pointer(i0, 103960)) = (OOC_INT64)0;
l26:
      return;
      ;
    }


  i0 = (OOC_INT64)ADT_ArrayList__New(8);
  prunedImports = (ADT_ArrayList__ArrayList)i0;
  i0 = (OOC_INT64)root;
  OOC_SymbolTable__Prune_PruneList((void*)((_check_pointer(i0, 104072))+16), (void*)((_check_pointer(i0, 104091))+24));
  i0 = (OOC_INT64)root;
  i1 = (OOC_INT64)prunedImports;
  i2 = *(OOC_INT32*)((_check_pointer(i1, 104152))+8);
  *(OOC_INT64*)((_check_pointer(i0, 104123))+136) = ((OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__ModuleRefArray.baseTypes[0], i2));
  i = 0;
  i2 = *(OOC_INT32*)((_check_pointer(i1, 104191))+8);
  i3 = 0<i2;
  if (!i3) goto l8;
  i3=0;
l3_loop:
  i4 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 104231));
  i4 = _check_pointer(i4, 104237);
  i5 = OOC_ARRAY_LENGTH(i4, 0);
  i4 = (OOC_INT64)*(OOC_INT64*)(i4+(_check_index(i3, i5, OOC_UINT32, 104237))*8);
  i4 = _type_guard(i4, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i4, 104241)))), &_td_OOC_SymbolTable__ImportDesc, 104241);
  import = (OOC_SymbolTable__Import)i4;
  i5 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__ModuleRef.baseTypes[0]);
  mr = (OOC_SymbolTable__ModuleRef)i5;
  i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i4, 104288))+88);
  i6 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i6, 104299))+16);
  *(OOC_INT64*)(_check_pointer(i5, 104273)) = i6;
  i4 = *(OOC_INT32*)((_check_pointer(i4, 104335))+104);
  *(OOC_INT32*)((_check_pointer(i5, 104313))+8) = i4;
  i4 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 104359))+136);
  i4 = _check_pointer(i4, 104373);
  i6 = OOC_ARRAY_LENGTH(i4, 0);
  *(OOC_INT64*)(i4+(_check_index(i3, i6, OOC_UINT32, 104373))*8) = i5;
  i3 = i3+1;
  i = i3;
  i4 = i3<i2;
  if (i4) goto l3_loop;
l8:
  return;
  ;
}

OOC_Scanner_InputBuffer__CharArray OOC_SymbolTable__DeclarationDesc_GetId(OOC_SymbolTable__Declaration decl) {
  register OOC_INT64 i0,i1,i2;
  OOC_Scanner_InputBuffer__CharArray id;
  OOC_SymbolTable__Declaration declWithType;
  OOC_SymbolTable__Item ptr;
  OOC_SymbolTable__Item parent;
  auto OOC_SymbolTable__Declaration OOC_SymbolTable__DeclarationDesc_GetId_GetContainer(OOC_SymbolTable__Type type);
  auto OOC_Scanner_InputBuffer__CharArray OOC_SymbolTable__DeclarationDesc_GetId_Concat(OOC_Scanner_InputBuffer__CharArray a, OOC_Scanner_InputBuffer__CharArray b);
    
    OOC_SymbolTable__Declaration OOC_SymbolTable__DeclarationDesc_GetId_GetContainer(OOC_SymbolTable__Type type) {
      register OOC_INT64 i0,i1;
      OOC_SymbolTable__Item ptr;
      OOC_CHAR8 found;
      auto OOC_CHAR8 OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains(OOC_SymbolTable__Item ptr, OOC_SymbolTable__Item type);
        
        OOC_CHAR8 OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains(OOC_SymbolTable__Item ptr, OOC_SymbolTable__Item type) {
          register OOC_INT64 i0,i1,i2;

          i0 = (OOC_INT64)ptr;
          i1 = (OOC_INT64)type;
          i2 = i0==i1;
          if (i2) goto l11;
          i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105123)))), &_td_OOC_SymbolTable__PointerDesc);
          if (i2) goto l9;
          i2 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105208)))), &_td_OOC_SymbolTable__ArrayDesc);
          if (i2) goto l7;
          return 0u;
          goto l12;
l7:
          i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105251))+88);
          i0 = OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
          return i0;
          goto l12;
l9:
          i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105168))+80);
          i0 = OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
          return i0;
          goto l12;
l11:
          return 1u;
l12:
          _failed_function(104992); return 0;
          ;
        }


      i0 = (OOC_INT64)type;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105400)))), &_td_OOC_SymbolTable__RecordDesc);
      if (i1) goto l3;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105420)))), &_td_OOC_SymbolTable__FormalParsDesc);
      
      goto l4;
l3:
      i1=1u;
l4:
      _assert(i1, 127, 105386);
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105452)))), &_td_OOC_SymbolTable__FormalParsDesc);
      if (i1) goto l7;
      i1=0u;
      goto l9;
l7:
      i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105474))+8);
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 105483)))), &_td_OOC_SymbolTable__ProcDeclDesc);
      
l9:
      if (i1) goto l15;
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105569))+8);
      ptr = (OOC_SymbolTable__Item)i0;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105595)))), &_td_OOC_SymbolTable__TypeParsDesc);
      if (!i1) goto l16;
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105633))+8);
      ptr = (OOC_SymbolTable__Item)i0;
      
      goto l16;
l15:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105520))+8);
      return (OOC_SymbolTable__Declaration)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105529)))), &_td_OOC_SymbolTable__ProcDeclDesc, 105529));
l16:
      i0 = (OOC_INT64)ptr;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105685)))), &_td_OOC_SymbolTable__ModuleDesc);
      if (i1) goto l19;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105718)))), &_td_OOC_SymbolTable__ProcDeclDesc);
      
      goto l21;
l19:
      i1=1u;
l21:
      if (i1) goto l23;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105753)))), &_td_OOC_SymbolTable__RecordDesc);
      
      goto l25;
l23:
      i1=1u;
l25:
      if (i1) goto l27;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105786)))), &_td_OOC_SymbolTable__FormalParsDesc);
      
      goto l28;
l27:
      i1=1u;
l28:
      _assert(i1, 127, 105672);
      found = 0u;
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105841))+16);
      ptr = (OOC_SymbolTable__Item)i0;
      i1 = i0!=(OOC_INT64)0;
      if (!i1) goto l55;
l31_loop:
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105899)))), &_td_OOC_SymbolTable__VarDeclDesc);
      if (i1) goto l46;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 105978)))), &_td_OOC_SymbolTable__TypeDeclDesc);
      if (i1) goto l44;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 106058)))), &_td_OOC_SymbolTable__ProcDeclDesc);
      if (i1) goto l42;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 106137)))), &_td_OOC_SymbolTable__FieldDeclDesc);
      if (i1) goto l40;
      found = 0u;
      i0=0u;
      goto l47;
l40:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 106184))+96);
      i1 = (OOC_INT64)type;
      i0 = OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
      found = i0;
      
      goto l47;
l42:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 106104))+112);
      i1 = (OOC_INT64)type;
      i0 = OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
      found = i0;
      
      goto l47;
l44:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 106024))+96);
      i1 = (OOC_INT64)type;
      i0 = OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
      found = i0;
      
      goto l47;
l46:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 105944))+96);
      i1 = (OOC_INT64)type;
      i0 = OOC_SymbolTable__DeclarationDesc_GetId_GetContainer_Contains((OOC_SymbolTable__Item)i0, (OOC_SymbolTable__Item)i1);
      found = i0;
      
l47:
      i1 = (OOC_INT64)ptr;
      if (!i0) goto l50;
      return (OOC_SymbolTable__Declaration)(_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 106299)))), &_td_OOC_SymbolTable__DeclarationDesc, 106299));
l50:
      i0 = (OOC_INT64)*(OOC_INT64*)(_check_pointer(i1, 106343));
      ptr = (OOC_SymbolTable__Item)i0;
      i1 = i0!=(OOC_INT64)0;
      if (i1) goto l31_loop;
l55:
      _assert(0u, 127, 106373);
      _failed_function(104886); return 0;
      ;
    }

    
    OOC_Scanner_InputBuffer__CharArray OOC_SymbolTable__DeclarationDesc_GetId_Concat(OOC_Scanner_InputBuffer__CharArray a, OOC_Scanner_InputBuffer__CharArray b) {
      register OOC_INT64 i0,i1,i2,i3;
      OOC_Scanner_InputBuffer__CharArray n;

      i0 = (OOC_INT64)a;
      i1 = (
      _cmp8((const void*)(_check_pointer(i0, 106514)),(const void*)""))==0;
      if (i1) goto l3;
      i1 = OOC_ARRAY_LENGTH((_check_pointer(i0, 106588)), 0);
      i1 = Strings__Length((void*)(_check_pointer(i0, 106588)), i1);
      i2 = (OOC_INT64)b;
      i3 = OOC_ARRAY_LENGTH((_check_pointer(i2, 106608)), 0);
      i3 = Strings__Length((void*)(_check_pointer(i2, 106608)), i3);
      i1 = (OOC_INT64)RT0__NewObject(_td_OOC_Scanner_InputBuffer__CharArray.baseTypes[0], ((i1+i3)+2));
      n = (OOC_Scanner_InputBuffer__CharArray)i1;
      i3 = OOC_ARRAY_LENGTH((_check_pointer(i1, 106634)), 0);
      _copy_8((const void*)(_check_pointer(i0, 106630)),(void*)(_check_pointer(i1, 106634)),i3);
      i0 = OOC_ARRAY_LENGTH((_check_pointer(i1, 106668)), 0);
      Strings__Append(".", 2, (void*)(_check_pointer(i1, 106668)), i0);
      i0 = OOC_ARRAY_LENGTH((_check_pointer(i1, 106701)), 0);
      i3 = OOC_ARRAY_LENGTH((_check_pointer(i2, 106697)), 0);
      Strings__Append((void*)(_check_pointer(i2, 106697)), i3, (void*)(_check_pointer(i1, 106701)), i0);
      return (OOC_Scanner_InputBuffer__CharArray)i1;
      goto l4;
l3:
      i0 = (OOC_INT64)b;
      return (OOC_Scanner_InputBuffer__CharArray)i0;
l4:
      _failed_function(106425); return 0;
      ;
    }


  i0 = (OOC_INT64)decl;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 106771))+72);
  i1 = i1!=(OOC_INT64)0;
  if (i1) goto l44;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 106846)))), &_td_OOC_SymbolTable__ModuleDesc);
  if (i1) goto l42;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 106967)))), &_td_OOC_SymbolTable__ProcDeclDesc);
  if (i1) goto l7;
  i1=0u;
  goto l9;
l7:
  i1 = OOC_SymbolTable__ProcDeclDesc_IsTypeBound((OOC_SymbolTable__ProcDecl)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 106987)))), &_td_OOC_SymbolTable__ProcDeclDesc, 106987)));
  
l9:
  if (i1) goto l40;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107286)))), &_td_OOC_SymbolTable__FieldDeclDesc);
  if (i1) goto l38;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107562)))), &_td_OOC_SymbolTable__VarDeclDesc);
  if (i1) goto l15;
  i1=0u;
  goto l17;
l15:
  i1 = *(OOC_UINT8*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107581)))), &_td_OOC_SymbolTable__VarDeclDesc, 107581)), 107589))+104);
  
l17:
  if (i1) goto l36;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107871)))), &_td_OOC_SymbolTable__TypeDeclDesc);
  if (i1) goto l21;
  i1=0u;
  goto l23;
l21:
  i1 = OOC_SymbolTable__TypeDeclDesc_IsTypeParameter((OOC_SymbolTable__TypeDecl)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107891)))), &_td_OOC_SymbolTable__TypeDeclDesc, 107891)));
  
l23:
  if (i1) goto l34;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 108195))+8);
  parent = (OOC_SymbolTable__Item)i1;
  i2 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 108227)))), &_td_OOC_SymbolTable__DeclarationDesc));
  if (!i2) goto l33;
l28_loop:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 108272))+8);
  parent = (OOC_SymbolTable__Item)i1;
  i2 = !(OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 108227)))), &_td_OOC_SymbolTable__DeclarationDesc));
  if (i2) goto l28_loop;
l33:
  i1 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 108323)))), &_td_OOC_SymbolTable__DeclarationDesc, 108323)), 108335)))), OOC_SymbolTable__DeclarationDesc_GetId)),OOC_SymbolTable__DeclarationDesc_GetId)((OOC_SymbolTable__Declaration)(_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 108323)))), &_td_OOC_SymbolTable__DeclarationDesc, 108323)));
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 108349))+40);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 108354))+16);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_Concat((OOC_Scanner_InputBuffer__CharArray)i1, (OOC_Scanner_InputBuffer__CharArray)i0);
  id = (OOC_Scanner_InputBuffer__CharArray)i0;
  
  goto l43;
l34:
  i1 = (OOC_INT64)OOC_SymbolTable__TypeDeclDesc_ParametricType((OOC_SymbolTable__TypeDecl)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 108074)))), &_td_OOC_SymbolTable__TypeDeclDesc, 108074)));
  ptr = (OOC_SymbolTable__Item)i1;
  i1 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer((_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 108127)))), &_td_OOC_SymbolTable__TypeDeclDesc, 108127)), 108136)))), OOC_SymbolTable__DeclarationDesc_GetId)),OOC_SymbolTable__DeclarationDesc_GetId)((OOC_SymbolTable__Declaration)(_type_guard(i1, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i1, 108127)))), &_td_OOC_SymbolTable__TypeDeclDesc, 108127)));
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 108150))+40);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 108155))+16);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_Concat((OOC_Scanner_InputBuffer__CharArray)i1, (OOC_Scanner_InputBuffer__CharArray)i0);
  id = (OOC_Scanner_InputBuffer__CharArray)i0;
  
  goto l43;
l36:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107760)))), &_td_OOC_SymbolTable__VarDeclDesc, 107760)), 107768))+8);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_GetContainer((OOC_SymbolTable__Type)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107777)))), &_td_OOC_SymbolTable__FormalParsDesc, 107777)));
  declWithType = (OOC_SymbolTable__Declaration)i0;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107825)))), OOC_SymbolTable__DeclarationDesc_GetId)),OOC_SymbolTable__DeclarationDesc_GetId)((OOC_SymbolTable__Declaration)i0);
  i1 = (OOC_INT64)decl;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 107840))+40);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 107846))+16);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_Concat((OOC_Scanner_InputBuffer__CharArray)i0, (OOC_Scanner_InputBuffer__CharArray)i1);
  id = (OOC_Scanner_InputBuffer__CharArray)i0;
  
  goto l43;
l38:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer((_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107453)))), &_td_OOC_SymbolTable__FieldDeclDesc, 107453)), 107463))+8);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_GetContainer((OOC_SymbolTable__Type)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107472)))), &_td_OOC_SymbolTable__RecordDesc, 107472)));
  declWithType = (OOC_SymbolTable__Declaration)i0;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107516)))), OOC_SymbolTable__DeclarationDesc_GetId)),OOC_SymbolTable__DeclarationDesc_GetId)((OOC_SymbolTable__Declaration)i0);
  i1 = (OOC_INT64)decl;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 107531))+40);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 107537))+16);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_Concat((OOC_Scanner_InputBuffer__CharArray)i0, (OOC_Scanner_InputBuffer__CharArray)i1);
  id = (OOC_Scanner_InputBuffer__CharArray)i0;
  
  goto l43;
l40:
  i0 = (OOC_INT64)OOC_SymbolTable__ProcDeclDesc_Class((OOC_SymbolTable__ProcDecl)(_type_guard(i0, ((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107185)))), &_td_OOC_SymbolTable__ProcDeclDesc, 107185)));
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_GetContainer((OOC_SymbolTable__Type)i0);
  declWithType = (OOC_SymbolTable__Declaration)i0;
  i0 = (OOC_INT64)OOC_TBCALL(((OOC_INT64)OOC_TBPROC_ADR(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 107240)))), OOC_SymbolTable__DeclarationDesc_GetId)),OOC_SymbolTable__DeclarationDesc_GetId)((OOC_SymbolTable__Declaration)i0);
  i1 = (OOC_INT64)decl;
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 107255))+40);
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i1, 107261))+16);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetId_Concat((OOC_Scanner_InputBuffer__CharArray)i0, (OOC_Scanner_InputBuffer__CharArray)i1);
  id = (OOC_Scanner_InputBuffer__CharArray)i0;
  
  goto l43;
l42:
  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_Scanner_InputBuffer__CharArray.baseTypes[0], 1);
  id = (OOC_Scanner_InputBuffer__CharArray)i0;
  i1 = _check_pointer(i0, 106939);
  i2 = OOC_ARRAY_LENGTH(i1, 0);
  *(OOC_UINT8*)(i1+(_check_index(0, i2, OOC_UINT8, 106939))) = 0u;
  
l43:
  i1 = (OOC_INT64)decl;
  *(OOC_INT64*)((_check_pointer(i1, 108382))+72) = i0;
  return (OOC_Scanner_InputBuffer__CharArray)i0;
  goto l45;
l44:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 106811))+72);
  return (OOC_Scanner_InputBuffer__CharArray)i0;
l45:
  _failed_function(104437); return 0;
  ;
}

OOC_SymbolTable__Namespace OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace(OOC_SymbolTable__Declaration decl, OOC_CHAR8 followTypeNames) {
  register OOC_INT64 i0,i1;
  auto OOC_SymbolTable__Namespace OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType(OOC_SymbolTable__Type type, OOC_SymbolTable__Type srcType);
    
    OOC_SymbolTable__Namespace OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType(OOC_SymbolTable__Type type, OOC_SymbolTable__Type srcType) {
      register OOC_INT64 i0,i1;

      i0 = followTypeNames;
      i0 = !i0;
      if (i0) goto l3;
      i0=0u;
      goto l5;
l3:
      i0 = (OOC_INT64)srcType;
      i0 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 108831)))), &_td_OOC_SymbolTable__TypeNameDesc);
      
l5:
      if (i0) goto l39;
      i0 = (OOC_INT64)type;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109019)))), &_td_OOC_SymbolTable__PredefTypeDesc);
      if (i1) goto l37;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109070)))), &_td_OOC_SymbolTable__TypeNameDesc);
      if (i1) goto l35;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109169)))), &_td_OOC_SymbolTable__PointerDesc);
      if (i1) goto l33;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109269)))), &_td_OOC_SymbolTable__FormalParsDesc);
      if (i1) goto l31;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109379)))), &_td_OOC_SymbolTable__ArrayDesc);
      if (i1) goto l29;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109483)))), &_td_OOC_SymbolTable__RecordDesc);
      if (i1) goto l27;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109535)))), &_td_OOC_SymbolTable__TypeVarDesc);
      if (i1) goto l25;
      i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109618)))), &_td_OOC_SymbolTable__QualTypeDesc);
      if (i1) goto l23;
      _failed_with(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109612)))), 109612);
      goto l40;
l23:
      i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109670))+72);
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109686))+80);
      i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i1, (OOC_SymbolTable__Type)i0);
      return (OOC_SymbolTable__Namespace)i0;
      goto l40;
l25:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109586))+72);
      i1 = (OOC_INT64)srcType;
      i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i0, (OOC_SymbolTable__Type)i1);
      return (OOC_SymbolTable__Namespace)i0;
      goto l40;
l27:
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109516))+96);
      return (OOC_SymbolTable__Namespace)i0;
      goto l40;
l29:
      i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109428))+80);
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109447))+88);
      i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i1, (OOC_SymbolTable__Type)i0);
      return (OOC_SymbolTable__Namespace)i0;
      goto l40;
l31:
      return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
      goto l40;
l33:
      i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109220))+72);
      i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109236))+80);
      i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i1, (OOC_SymbolTable__Type)i0);
      return (OOC_SymbolTable__Namespace)i0;
      goto l40;
l35:
      return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
      goto l40;
l37:
      return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
      goto l40;
l39:
      return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
l40:
      _failed_function(108734); return 0;
      ;
    }


  i0 = (OOC_INT64)decl;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109776)))), &_td_OOC_SymbolTable__ModuleDesc);
  if (i1) goto l35;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109820)))), &_td_OOC_SymbolTable__ImportDesc);
  if (i1) goto l33;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109880)))), &_td_OOC_SymbolTable__ProcDeclDesc);
  if (i1) goto l31;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109926)))), &_td_OOC_SymbolTable__ConstDeclDesc);
  if (i1) goto l29;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 109968)))), &_td_OOC_SymbolTable__PredefProcDesc);
  if (i1) goto l27;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 110011)))), &_td_OOC_SymbolTable__VarDeclDesc);
  if (i1) goto l25;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 110095)))), &_td_OOC_SymbolTable__FieldDeclDesc);
  if (i1) goto l23;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 110181)))), &_td_OOC_SymbolTable__TypeDeclDesc);
  if (i1) goto l21;
  i1 = OOC_TYPE_TEST(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 110266)))), &_td_OOC_SymbolTable__RedirectDesc);
  if (i1) goto l19;
  _failed_with(((OOC_INT64)OOC_TYPE_TAG((_check_pointer(i0, 110260)))), 110260);
  goto l36;
l19:
  return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
  goto l36;
l21:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 110229))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 110241))+96);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i1, (OOC_SymbolTable__Type)i0);
  return (OOC_SymbolTable__Namespace)i0;
  goto l36;
l23:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 110144))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 110156))+96);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i1, (OOC_SymbolTable__Type)i0);
  return (OOC_SymbolTable__Namespace)i0;
  goto l36;
l25:
  i1 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 110058))+88);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 110070))+96);
  i0 = (OOC_INT64)OOC_SymbolTable__DeclarationDesc_GetEmbeddedNamespace_NamespaceOfType((OOC_SymbolTable__Type)i1, (OOC_SymbolTable__Type)i0);
  return (OOC_SymbolTable__Namespace)i0;
  goto l36;
l27:
  return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
  goto l36;
l29:
  return (OOC_SymbolTable__Namespace)(OOC_INT64)0;
  goto l36;
l31:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109911))+104);
  return (OOC_SymbolTable__Namespace)i0;
  goto l36;
l33:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109849))+96);
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109865))+88);
  return (OOC_SymbolTable__Namespace)i0;
  goto l36;
l35:
  i0 = (OOC_INT64)*(OOC_INT64*)((_check_pointer(i0, 109805))+88);
  return (OOC_SymbolTable__Namespace)i0;
l36:
  _failed_function(108468); return 0;
  ;
}

static void OOC_SymbolTable__Init(void) {
  register OOC_INT64 i0,i1,i2;
  OOC_SymbolTable__TypeVarArray params;
  OOC_SymbolTable__TypeRefArray arguments;
  OOC_Scanner_InputBuffer__CharArray nameString;

  i0 = (OOC_INT64)URI_Scheme_File__NewPrototype();
  URI__RegisterScheme((URI__URI)i0);
  OOC_SymbolTable__predefIdToType = (void*)(OOC_INT64)0;
  i0 = (OOC_INT64)URI_Scheme_File__ToURI("/", 2);
  OOC_SymbolTable__emptyBaseURI = (URI__HierarchicalURI)i0;
  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__Position.baseTypes[0]);
  OOC_SymbolTable__importPosition = (OOC_SymbolTable__Position)i0;
  OOC_SymbolTable__InitPosition((OOC_SymbolTable__Position)i0, (-2), (-1), (-1));
  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__TypeVarArray.baseTypes[0], 0);
  params = (OOC_SymbolTable__TypeVarArray)i0;
  i1 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__TypeRefArray.baseTypes[0], 0);
  arguments = (OOC_SymbolTable__TypeRefArray)i1;
  i2 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__TypeClosure.baseTypes[0]);
  OOC_SymbolTable__emptyClosure = (OOC_SymbolTable__TypeClosure)i2;
  OOC_SymbolTable__InitTypeClosure((OOC_SymbolTable__TypeClosure)i2, (OOC_SymbolTable__Position)(OOC_INT64)0, (OOC_SymbolTable__Type)(OOC_INT64)0, (OOC_SymbolTable__TypeVarArray)i0, (OOC_SymbolTable__TypeRefArray)i1);
  i0 = (OOC_INT64)RT0__NewObject(_td_OOC_Scanner_InputBuffer__CharArray.baseTypes[0], 1);
  nameString = (OOC_Scanner_InputBuffer__CharArray)i0;
  i1 = OOC_ARRAY_LENGTH((_check_pointer(i0, 110832)), 0);
  _copy_8((const void*)"",(void*)(_check_pointer(i0, 110832)),i1);
  i1 = (OOC_INT64)RT0__NewObject(_td_OOC_SymbolTable__Name.baseTypes[0]);
  OOC_SymbolTable__predefName = (OOC_SymbolTable__Name)i1;
  OOC_SymbolTable__InitName((OOC_SymbolTable__Name)i1, (OOC_Scanner_InputBuffer__CharArray)i0, 0, 0, 0);
  return;
  ;
}

void OOC_OOC_SymbolTable_init(void) {
  _c0 = Object__NewLatin1Region("standard", 9, 0, 8);
  _c1 = Object__NewLatin1Region("internal", 9, 0, 8);
  _c2 = Object__NewLatin1Region("foreign", 8, 0, 7);
  _c3 = Object__NewLatin1Region("interface", 10, 0, 9);
  _c4 = Object__NewLatin1Region("--invalid--", 12, 0, 11);
  _c5 = Object__NewLatin1Region("default", 8, 0, 7);
  _c6 = Object__NewLatin1Region("internal", 9, 0, 8);
  _c7 = Object__NewLatin1Char(67u);
  _c8 = Object__NewLatin1Region("Pascal", 7, 0, 6);
  _c9 = Object__NewLatin1Char(67u);
  _c10 = Object__NewLatin1Region("Pascal", 7, 0, 6);

  OOC_SymbolTable__Init();
  return;
  ;
}

/* --- */
