/* * SYM.H * * (c)Copyright 1993-2014, Matthew Dillon, All Rights Reserved. See the * COPYRIGHT file at the base of the distribution. */ #define TOK_IMPORT (TOKF_ID|TOKF_KEYWORD|0x0001) #define TOK_CLASS (TOKF_ID|TOKF_KEYWORD|0x0002) #define TOK_SUBCLASS (TOKF_ID|TOKF_KEYWORD|0x0003) #define TOK_TYPEDEF (TOKF_ID|TOKF_KEYWORD|0x0004) #define TOK_EXP_CONSTANT ( 0x0005) #define TOK_AS (TOKF_ID|TOKF_KEYWORD|0x0010) #define TOK_SELF (TOKF_ID|TOKF_KEYWORD|0x0011) #define TOK_FOR (TOKF_ID|TOKF_KEYWORD|0x0012) #define TOK_WHILE (TOKF_ID|TOKF_KEYWORD|0x0013) #define TOK_DO (TOKF_ID|TOKF_KEYWORD|0x0014) #define TOK_UNTIL (TOKF_ID|TOKF_KEYWORD|0x0015) #define TOK_BREAK (TOKF_ID|TOKF_KEYWORD|0x0016) #define TOK_CONTINUE (TOKF_ID|TOKF_KEYWORD|0x0017) #define TOK_SWITCH (TOKF_ID|TOKF_KEYWORD|0x0018) #define TOK_IF (TOKF_ID|TOKF_KEYWORD|0x0019) #define TOK_BLOCK (TOKF_ID|TOKF_KEYWORD|0x001A) #define TOK_ELSE (TOKF_ID|TOKF_KEYWORD|0x001B) #define TOK_CASE (TOKF_ID|TOKF_KEYWORD|0x001C) #define TOK_DEFAULT (TOKF_ID|TOKF_KEYWORD|0x001D) #define TOK_LOOP (TOKF_ID|TOKF_KEYWORD|0x001E) #define TOK_RETURN (TOKF_ID|TOKF_KEYWORD|0x001F) #define TOK_RESULT (TOKF_ID|TOKF_KEYWORD|0x0020) #define TOK_ALIAS (TOKF_ID|TOKF_KEYWORD|0x0021) #define TOK_INTERFACE (TOKF_ID|TOKF_KEYWORD|0x0022) #define TOK_SUBINTERFACE (TOKF_ID|TOKF_KEYWORD|0x0023) #define TOK_PROJECT (TOKF_ID|TOKF_KEYWORD|0x0024) #define TOK_USING (TOKF_ID|TOKF_KEYWORD|0x0025) #define TOK_FROM (TOKF_ID|TOKF_KEYWORD|0x0026) #define TOK_OPERATOR (TOKF_ID|TOKF_KEYWORD|0x0030) #define TOK_CAST (TOKF_ID|TOKF_KEYWORD|0x0031) #define TOK_STORAGE (TOKF_ID|TOKF_KEYWORD|0x0032) #define TOK_METHOD (TOKF_ID|TOKF_KEYWORD|0x0033) #define TOK_GMETHOD (TOKF_ID|TOKF_KEYWORD|0x0034) /* * note: TOKF_SCOPE_MASK is maximum, 0xFFF. */ #define TOK_PRIVATE (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0000) #define TOK_LIBRARY (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0001) #define TOK_PUBLIC (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0002) #define TOK_REFINE (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0003) #define TOK_INTERNAL (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0004) #define TOK_LVALUE (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0005) #define TOK_GLOBAL (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0006) #define TOK_INLINE (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0007) #define TOK_OVERLOAD (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0008) #define TOK_S_CAST (TOKF_ID| 0|TOKF_SCOPE_QUAL|0x0009) #define TOK_THREAD (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000A) #define TOK_PREEMPT (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000B) #define TOK_DESTRUCTOR (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000C) #define TOK_CONSTRUCTOR (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000D) #define TOK_CLANG (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000E) #define TOK_ALIGN (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x000F) #define TOK_INTERNAL2 (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0010) #define TOK_S_INTERFACE (TOKF_ID| 0|TOKF_SCOPE_QUAL|0x0011) #define TOK_PERSIST (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0012) #define TOK_HEAP (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0013) #define TOK_PURE (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0014) #define TOK_SHARED (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0015) #define TOK_UNLOCKED (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0016) #define TOK_CONSTANT (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0017) #define TOK_HARD (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0018) #define TOK_NOINLINE (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x0019) #define TOK_UNTRACKED (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x001A) #define TOK_SOFT (TOKF_ID|TOKF_KEYWORD|TOKF_SCOPE_QUAL|0x001B) /* converts to flags, 0x1F maximum */ /* * NOTE: TOKF_STOR_MASK is maximum, 0xFFF. */ #define TOK_CONST (TOKF_ID|TOKF_KEYWORD|TOKF_STOR_QUAL|0x0001) #define TOK_S_HARD (TOKF_ID| 0|TOKF_STOR_QUAL|0x0002) #define TOK_VOLATILE (TOKF_ID|TOKF_KEYWORD|TOKF_STOR_QUAL|0x0003) #define TOK_S_VARARGS (TOKF_ID| 0|TOKF_STOR_QUAL|0x0004) #define TOK_S_LVALUE (TOKF_ID| 0|TOKF_STOR_QUAL|0x0005) #define TOK_NOZERO (TOKF_ID|TOKF_KEYWORD|TOKF_STOR_QUAL|0x0006) #define TOK_S_METHOD (TOKF_ID| 0|TOKF_STOR_QUAL|0x0007) #define TOK_S_GMETHOD (TOKF_ID| 0|TOKF_STOR_QUAL|0x0008) #define TOK_S_UNTRACKED (TOKF_ID| 0|TOKF_STOR_QUAL|0x0009) #define TOK_S_SOFT (TOKF_ID| 0|TOKF_STOR_QUAL|0x000A) #define TOK_S_UNLOCKED (TOKF_ID| 0|TOKF_STOR_QUAL|0x000B) /* converts to flags, 0x1F maximum */ /* * NOTE! do not exceed TOKF_SCOPE_MASK (0x0FFF) */ #define SCOPE_PRIVATE (1 << (TOK_PRIVATE & TOKF_SCOPE_MASK)) #define SCOPE_LIBRARY (1 << (TOK_LIBRARY & TOKF_SCOPE_MASK)) #define SCOPE_PUBLIC (1 << (TOK_PUBLIC & TOKF_SCOPE_MASK)) #define SCOPE_REFINE (1 << (TOK_REFINE & TOKF_SCOPE_MASK)) #define SCOPE_INTERNAL (1 << (TOK_INTERNAL & TOKF_SCOPE_MASK)) #define SCOPE_LVALUE (1 << (TOK_LVALUE & TOKF_SCOPE_MASK)) #define SCOPE_GLOBAL (1 << (TOK_GLOBAL & TOKF_SCOPE_MASK)) #define SCOPE_INLINE (1 << (TOK_INLINE & TOKF_SCOPE_MASK)) #define SCOPE_OVERLOAD (1 << (TOK_OVERLOAD & TOKF_SCOPE_MASK)) #define SCOPE_CAST (1 << (TOK_S_CAST & TOKF_SCOPE_MASK)) #define SCOPE_THREAD (1 << (TOK_THREAD & TOKF_SCOPE_MASK)) #define SCOPE_PREEMPT (1 << (TOK_PREEMPT & TOKF_SCOPE_MASK)) #define SCOPE_CONSTRUCTOR (1 << (TOK_CONSTRUCTOR & TOKF_SCOPE_MASK)) #define SCOPE_DESTRUCTOR (1 << (TOK_DESTRUCTOR & TOKF_SCOPE_MASK)) #define SCOPE_CLANG (1 << (TOK_CLANG & TOKF_SCOPE_MASK)) #define SCOPE_ALIGN (1 << (TOK_ALIGN & TOKF_SCOPE_MASK)) #define SCOPE_INTERNAL2 (1 << (TOK_INTERNAL2 & TOKF_SCOPE_MASK)) #define SCOPE_INTERFACE (1 << (TOK_S_INTERFACE & TOKF_SCOPE_MASK)) #define SCOPE_PERSIST (1 << (TOK_PERSIST & TOKF_SCOPE_MASK)) #define SCOPE_HEAP (1 << (TOK_HEAP & TOKF_SCOPE_MASK)) #define SCOPE_PURE (1 << (TOK_PURE & TOKF_SCOPE_MASK)) #define SCOPE_SHARED (1 << (TOK_SHARED & TOKF_SCOPE_MASK)) #define SCOPE_UNLOCKED (1 << (TOK_UNLOCKED & TOKF_SCOPE_MASK)) #define SCOPE_CONSTANT (1 << (TOK_CONSTANT & TOKF_SCOPE_MASK)) #define SCOPE_HARD (1 << (TOK_HARD & TOKF_SCOPE_MASK)) #define SCOPE_NOINLINE (1 << (TOK_NOINLINE & TOKF_SCOPE_MASK)) #define SCOPE_UNTRACKED (1 << (TOK_UNTRACKED & TOKF_SCOPE_MASK)) #define SCOPE_SOFT (1 << (TOK_SOFT & TOKF_SCOPE_MASK)) /* * Note: SCOPE_INTERNAL is used to determine whether we have to dup an * expression or not. It is not part of our normal visibility mask */ #define SCOPE_ALL_VISIBLE (SCOPE_PRIVATE | SCOPE_LIBRARY | SCOPE_PUBLIC) #define SCOPE_LOCKING_MASK (SCOPE_UNTRACKED | SCOPE_UNLOCKED | \ SCOPE_SOFT | SCOPE_HARD) /* * NOTE: SF_CONST will be set in the type governing the storage when * SCOPE_CONSTANT is specified. * * NOTE: Do not exceed TOKF_STOR_MASK (0x0FFF) */ #define SF_CONST (1 << (TOK_CONST & TOKF_STOR_MASK)) #define SF_HARD (1 << (TOK_S_HARD & TOKF_STOR_MASK)) #define SF_VOLATILE (1 << (TOK_VOLATILE & TOKF_STOR_MASK)) #define SF_VARARGS (1 << (TOK_S_VARARGS & TOKF_STOR_MASK)) #define SF_LVALUE (1 << (TOK_S_LVALUE & TOKF_STOR_MASK)) #define SF_NOZERO (1 << (TOK_NOZERO & TOKF_STOR_MASK)) #define SF_METHOD (1 << (TOK_S_METHOD & TOKF_STOR_MASK)) #define SF_GMETHOD (1 << (TOK_S_GMETHOD & TOKF_STOR_MASK)) #define SF_UNTRACKED (1 << (TOK_S_UNTRACKED & TOKF_STOR_MASK)) #define SF_SOFT (1 << (TOK_S_SOFT & TOKF_STOR_MASK)) #define SF_UNLOCKED (1 << (TOK_S_UNLOCKED & TOKF_STOR_MASK)) #define SF_IGNORE_MASK (SF_VOLATILE | SF_LVALUE | SF_NOZERO) #define SF_RELAXING_MASK (SF_IGNORE_MASK | SF_CONST) #define SF_LOCKING_MASK (SF_UNTRACKED | SF_UNLOCKED | \ SF_SOFT | SF_HARD) /* * SPECIAL_ string table identifiers. These are used to implement * internal structural fields */ #define SPECIALF_SEMGROUP 0x00010000 #define SPECIALF_INTERNAL 0x00020000 #define SPECIALF_AUXKEYWORD 0x00040000 #define SPECIALF_REGISTERED 0x00080000 #define SPECIALF_MASK 0x0000FFFF #define SPECIAL_COUNT (SPECIALF_SEMGROUP|1) #define SPECIAL_DATA (SPECIALF_SEMGROUP|3) #define SPECIAL_VAR_COUNT (SPECIALF_SEMGROUP|4) #define SPECIAL_VAR_DATA (SPECIALF_SEMGROUP|6) #define SPECIAL_TYPEID (SPECIALF_SEMGROUP|7) #define SPECIAL_TYPESTR (SPECIALF_SEMGROUP|8) #define SPECIAL_NULL (SPECIALF_SEMGROUP|9) #define SPECIAL_INTERNAL_VOID (SPECIALF_INTERNAL|1) #define SPECIAL_INTERNAL_BOOL (SPECIALF_INTERNAL|2) #define SPECIAL_INTERNAL_INT8 (SPECIALF_INTERNAL|3) #define SPECIAL_INTERNAL_UINT8 (SPECIALF_INTERNAL|4) #define SPECIAL_INTERNAL_INT16 (SPECIALF_INTERNAL|5) #define SPECIAL_INTERNAL_UINT16 (SPECIALF_INTERNAL|6) #define SPECIAL_INTERNAL_INT32 (SPECIALF_INTERNAL|7) #define SPECIAL_INTERNAL_UINT32 (SPECIALF_INTERNAL|8) #define SPECIAL_INTERNAL_INT64 (SPECIALF_INTERNAL|9) #define SPECIAL_INTERNAL_UINT64 (SPECIALF_INTERNAL|10) #define SPECIAL_INTERNAL_INT128 (SPECIALF_INTERNAL|11) #define SPECIAL_INTERNAL_UINT128 (SPECIALF_INTERNAL|12) #define SPECIAL_INTERNAL_FLOAT (SPECIALF_INTERNAL|16) #define SPECIAL_INTERNAL_FLOAT32 (SPECIALF_INTERNAL|17) #define SPECIAL_INTERNAL_FLOAT64 (SPECIALF_INTERNAL|18) #define SPECIAL_INTERNAL_FLOAT128 (SPECIALF_INTERNAL|19) #define SPECIAL_INTERNAL_POINTER (SPECIALF_INTERNAL|32) #define SPECIAL_INTERNAL_INTPTR (SPECIALF_INTERNAL|33) #define SPECIAL_INTERNAL_UINTPTR (SPECIALF_INTERNAL|34) #define SPECIAL_INTERNAL_OFF (SPECIALF_INTERNAL|35) #define SPECIAL_INTERNAL_SIZE (SPECIALF_INTERNAL|36) #define SPECIAL_INTERNAL_NUMERIC (SPECIALF_INTERNAL|48) #define SPECIAL_INTERNAL_INTEGRAL (SPECIALF_INTERNAL|49) #define SPECIAL_INTERNAL_SINTEGER (SPECIALF_INTERNAL|50) #define SPECIAL_INTERNAL_UINTEGER (SPECIALF_INTERNAL|51) #define SPECIAL_INTERNAL_LEXREF (SPECIALF_INTERNAL|64) #define SPECIAL_INTERNAL_SCOPE (SPECIALF_INTERNAL|65) #define SPECIAL_INTERNAL_DECLARATION (SPECIALF_INTERNAL|66) #define SPECIAL_INTERNAL_SEMGROUP (SPECIALF_INTERNAL|67) #define SPECIAL_INTERNAL_TYPE (SPECIALF_INTERNAL|68) #define SPECIAL_INTERNAL_FILLERTYPE (SPECIALF_INTERNAL|69) #define SPECIAL_INTERNAL_FILLERDECL (SPECIALF_INTERNAL|70) #define SPECIAL_INTERNAL_POINTERINFO (SPECIALF_INTERNAL|71) #define SPECIAL_AUX_PREEMPT (SPECIALF_AUXKEYWORD|1) #define SPECIAL_AUX_NOPREEMPT (SPECIALF_AUXKEYWORD|2) #define SPECIAL_AUX_IMMEDIATE (SPECIALF_AUXKEYWORD|3) #define SPECIAL_AUX_PROCEDURE (SPECIALF_AUXKEYWORD|4)