enum TypeCategory {
   TC_PSEUDO = 0,
   TC_NUMBER = 0x40,
   TC_WEAKREFLAG = 0x40,
   TC_REFTYPE = 0x80,
   TC_WEAKREF = TC_REFTYPE | TC_WEAKREFFLAG
}

enum NumberCategory {
   NC_INTEGRAL = 0,
   NC_REAL = 0x20
}

enum SignedType {
  ST_SIGNED = 0,
  ST_UNSIGNED = 1
}

enum NumSizeShift {
  NS_BYTE = 0,
  NS_WORD = 4,
  NS_DWORD = 8,
  NS_INTPTR = 0x0A,
  NS_QWORD = 0x0C
}

enum RefTypeCategory {
	RTC_PTRTYPE = 0,
	RTC_REFCOUNTED = 0x40
}

enum RefCountedCategory {
	RCC_SINGLE = 0,
	RCC_SEQUENCE = 0x10
}

enum RefSingleCategory {
   RSC_OBJECTTYPE = 0,
   RSC_CLASS = 0x08
}

enum RefSequenceCategory {
  RSQC_SIMPLE = 0,
  RSQC_VECTOR = 0x04,
  RSQC_DICT = 0x08
}

enum TypeMasks {
	WEAKMASK = ~TC_WEAKREF | TC_REFTYPE
}


enum Types {
	NULL = TC_PSEUDO,
	VOID,
	AUTO,
        NIL,
	_NUMBERBASE = TC_NUMBER,
	_INTEGRALBASE = _NUMBERBASE | NC_INTEGRAL,
	SBYTE = _INTEGRALBASE | NS_BYTE | ST_SIGNED,
    BYTE = _INTEGRALBASE | NS_BYTE | ST_UNSIGNED,
	SHORT = _INTEGRALBASE | NS_WORD | ST_SIGNED,
    USHORT = _INTEGRALBASE | NS_WORD | ST_UNSIGNED,
	INT = _INTEGRALBASE | NS_DWORD | ST_SIGNED,
    UINT = _INTEGRALBASE | NS_DWORD | ST_UNSIGNED,
    INTPTR = _INTEGRALBASE | NS_INTPTR | ST_SIGNED,
	LONG = _INTEGRALBASE | NS_QWORD | ST_SIGNED,
    ULONG = _INTEGRALBASE | NS_QWORD | ST_UNSIGNED,
	_REALBASE = _NUMBERBASE | NC_REAL,
	FLOAT = _REALBASE | NS_DWORD,
	DOUBLE = _REALASE | NS_QWORD,
	_REFTYPEBASE = TC_REFTYPE,
	_REFPTRBASE = _REFTYPEBASE | RTC_PTRTYPE,
	FILE = _REFPTRBASE,
	CODE,
	VAR,
	_REFCNTBASE = _REFTYPEBASE | RTC_REFCOUNTED,
	_REFCNTSINGLEBASE = _REFCNTBASE | RCC_SINGLE,
	_OBJECTBASE = _REFCNTSINGLEBASE | RSC_OBJECTTYPE,
	OBJECT = _OBJECTBASE,
	STRONGOBJECT,
	_CLASSBASE = _REFCNTSINGLEBASE | RSC_CLASS,
	CLASS = _CLASSBASE,
	_SEQUENCEBASE = _REFCNTBASE | RCC_SEQUENCE,
	_SEQSIMPLEBASE = _SEQUENCEBASE | RSQC_SIMPLE,
	STRING = _SEQSIMPLEBASE,
	BUFFER,
	CHARBUFFER,
	_VECTORBASE = _SEQUENCEBASE | RSQC_VECTOR,
	VECTOR = _VECTORBASE,
	BYTECODE,
	VARINFO,
	_DICTBASE = _SEQUENCEBASE | RSQC_DICT,
	DICTIONARY = _DICTBASE,
	_WEAKREFBASE = _REFCNTBASE | TC_WEAKREFFLAG,
	OBJECTREF = OBJECT | TC_WEAKREFFLAG,
	STRONGOBJECTREF = STRONGOBJECT | TC_WEAKREFFLAG,
	CLASSREF = CLASS | TC_WEAKREFFLAG,
	STRINGREF = STRING | TC_WEAKREFFLAG,
	BUFFEREF = BUFFER | TC_WEAKREFFLAG,
	CHARBUFFERREF = CHARBUFFER | TC_WEAKREFFLAG,
	VECTORREF = VECTOR | TC_WEAKREFFLAG,
	BYTECODEREF = BYTECODE | TC_WEAKREFFLAG,
	VARINFOREF = VARINFO | TC_WEAKREFFLAG,
	DICTIONARYREF = DICTIONARY | TC_WEAKREFFLAG
	
}