MODULE FoxGlobal; IMPORT SyntaxTree := FoxSyntaxTree, Basic := FoxBasic, Scanner := FoxScanner, Strings, Dates; CONST StringWinAPI* = \"WINAPI"\; StringC* = \"C"\; StringPlatformCC* = \"PlatformCC"\; StringMovable* = \"MOVABLE"\; StringUntraced* = \"UNTRACED"\; StringDelegate* = \"DELEGATE"\; StringInterrupt* = \"INTERRUPT"\; StringPcOffset* = \"PCOFFSET"\; StringEntry* = \"INITIAL"\; StringExit* = \"FINAL"\; StringNoPAF* = \"NOPAF"\; StringFixed* = \"FIXED"\; StringFictive* = \"FICTIVE"\; StringAligned* = \"ALIGNED"\; StringAlignStack* = \"ALIGNSTACK"\; StringFinal* = \"FINAL"\; StringAbstract* = \"ABSTRACT"\; StringRegister* = \"REGISTER"\; StringNoReturn* = \"NORETURN"\; StringUnsafe* = \"UNSAFE"\; StringPlain* = \"PLAIN"\; StringDisposable* = \"DISPOSABLE"\; StringUnchecked* = \"UNCHECKED"\; StringUncooperative* = \"UNCOOPERATIVE"\; StringExclusive* = \"EXCLUSIVE"\; StringActive* = \"ACTIVE"\; StringPriority* = \"PRIORITY"\; StringSafe* = \"SAFE"\; StringRealtime* = \"REALTIME"\; StringDynamic* = \"DYNAMIC"\; StringFingerprint* = \"Fingerprint"\; StringInstructionWidth* = \"InstructionWidth"\; StringDataMemorySize* = \"DataMemorySize"\; StringCodeMemorySize* = \"CodeMemorySize"\; StringChannelWidth* = \"ChannelWidth"\; StringChannelDepth* = \"ChannelDepth"\; StringChannelModule* = \"Channels"\; StringSystemModule* = \"SYSTEM"\; StringsystemModule* = \"system"\; StringBaseMem* = \"BaseMem"\; StringBaseDiv* = \"BaseDiv"\; StringVector* = \"Vector"\; StringFloatingPoint* = \"FloatingPoint"\; StringNoMul* = \"NoMul"\; StringNonBlockingIO* = \"HasNonBlockingIO"\; StringFrequencyDivider* = \"FrequencyDivider"\; StringEngine* = \"Engine"\; StringTRM* = \"TRM"\; StringTRMS* = \"TRMS"\; StringBackend* = \"Backend"\; StringRuntime* = \"Runtime"\; WithTrap* = 1; CaseTrap* = 2; ReturnTrap* = 3; TypeEqualTrap* = 5; TypeCheckTrap* = 6; IndexCheckTrap* = 7; AssertTrap* = 8; ArraySizeTrap* = 9; ArrayFormTrap* = 10; NoReturnTrap* = 16; Assert* = (Scanner.EndOfText + 1); Copy* = (Assert + 1); Dec* = (Copy + 1); Excl* = (Dec + 1); Halt* = (Excl + 1); Inc* = (Halt + 1); Incl* = (Inc + 1); New* = (Incl + 1); Dispose* = (New + 1); GetProcedure* = (Dispose + 1); Connect* = (GetProcedure + 1); Delegate* = (Connect + 1); Read* = (Delegate + 1); Write* = (Read + 1); Reshape* = (Write + 1); Wait* = (Reshape + 1); Abs* = (Wait + 1); Cap* = (Abs + 1); Chr* = (Cap + 1); Chr32* = (Chr + 1); Entier* = (Chr32 + 1); EntierH* = (Entier + 1); Incr* = (EntierH + 1); Len* = (Incr + 1); Long* = (Len + 1); Max* = (Long + 1); Min* = (Max + 1); Odd* = (Min + 1); Ord* = (Odd + 1); Ord32* = (Ord + 1); Short* = (Ord32 + 1); Size* = (Short + 1); Sum* = (Size + 1); Dim* = (Sum + 1); Cas* = (Dim + 1); First* = (Cas + 1); Last* = (First + 1); Step* = (Last + 1); Re* = (Step + 1); Im* = (Re + 1); Ash* = (Im + 1); Lsh* = (Ash + 1); Rot* = (Lsh + 1); All* = (Rot + 1); systemGet* = (All + 1); systemPut* = (systemGet + 1); systemMove* = (systemPut + 1); systemNew* = (systemMove + 1); systemRef* = (systemNew + 1); systemTypeCode* = (systemRef + 1); systemHalt* = (systemTypeCode + 1); systemPut8* = (systemHalt + 1); systemPut16* = (systemPut8 + 1); systemPut32* = (systemPut16 + 1); systemPut64* = (systemPut32 + 1); systemTrace* = (systemPut64 + 1); systemSetStackPointer* = (systemTrace + 1); systemSetFramePointer* = (systemSetStackPointer + 1); systemSetActivity* = (systemSetFramePointer + 1); systemAdr* = (systemSetActivity + 1); systemSize* = (systemAdr + 1); systemBit* = (systemSize + 1); systemGet64* = (systemBit + 1); systemGet32* = (systemGet64 + 1); systemGet16* = (systemGet32 + 1); systemGet8* = (systemGet16 + 1); systemVal* = (systemGet8 + 1); systemMsk* = (systemVal + 1); systemGetStackPointer* = (systemMsk + 1); systemGetFramePointer* = (systemGetStackPointer + 1); systemGetActivity* = (systemGetFramePointer + 1); Send* = (systemGetActivity + 1); Receive* = (Send + 1); systemSpecial* = (Receive + 1); Asr* = (systemSpecial + 1); Ror* = (Asr + 1); Flt* = (Ror + 1); Conversion* = (Flt + 1); DotTimesPlus* = (Conversion + 1); AtMulDec* = (DotTimesPlus + 1); AtMulInc* = (AtMulDec + 1); DecMul* = (AtMulInc + 1); IncMul* = (DecMul + 1); endFox* = (IncMul + 1); VectorCapability* = 0; FloatingPointCapability* = 1; EngineCapability* = 2; TRMSCapability* = 3; NoMulCapability* = 4; NonBlockingIOCapability* = 5; LynxChar* = \"@lynx_char"\; LynxSbyte* = \"@lynx_sbyte"\; LynxShort* = \"@lynx_short"\; LynxInt* = \"@lynx_int"\; LynxLong* = \"@lynx_long"\; LynxFloat* = \"@lynx_float"\; LynxDouble* = \"@lynx_double"\; LynxBool* = \"@lynx_bool"\; LynxObject* = \"@lynx_object"\; LynxString* = \"@lynx_string"\; LynxNewobj* = \"lynx@newobj"\; LynxNewarr* = \"lynx@newarr"\; LynxAsop* = \"lynx@asop"\; LynxUnop* = \"lynx@unop"\; LynxBinop* = \"lynx@binop"\; LynxSend* = \"lynx@send"\; LynxReceive* = \"lynx@receive"\; LynxRecvnb* = \"lynx@recvnb"\; LynxConnect* = \"lynx@connect"\; LynxDelegate* = \"lynx@delegate"\; LynxNewsel* = \"lynx@newsel"\; LynxAddsel* = \"lynx@addsel"\; LynxSelect* = \"lynx@select"\; LynxSelidx* = \"lynx@selidx"\; LynxOpAdd* = 1; LynxOpSub* = 2; LynxOpMul* = 3; LynxOpDiv* = 4; LynxOpRem* = 5; LynxOpAnd* = 6; LynxOpOr* = 7; LynxOpXor* = 8; LynxOpShl* = 9; LynxOpShr* = 10; LynxOpNot* = 11; SymLynxNewobj* = endFox; SymLynxNewarr* = (endFox + 1); SymLynxAsop* = (endFox + 2); SymLynxUnop* = (endFox + 3); SymLynxBinop* = (endFox + 4); SymLynxRecvnb* = (endFox + 5); SymLynxNewsel* = (endFox + 6); SymLynxAddsel* = (endFox + 7); SymLynxSelect* = (endFox + 8); SymLynxSelidx* = (endFox + 9); end = (endFox + 10); TYPE Position = SyntaxTree.Position; Alignment* = RECORD min, max: LONGINT; END; PassInRegisterProc = PROCEDURE {DELEGATE}(type: SyntaxTree.Type):BOOLEAN; System* = OBJECT VAR systemScope-, globalScope-: ARRAY 2 OF SyntaxTree.ModuleScope; systemModule-, globalModule-: ARRAY 2 OF SyntaxTree.Module; activeCellsCapabilities-: SyntaxTree.Symbol; codeUnit-: LONGINT; dataUnit-: LONGINT; variableAlignment-, parameterAlignment-: Alignment; offsetFirstParameter-: LONGINT; operatorDefined-: ARRAY end OF BOOLEAN; addressSize-: LONGINT; addressType-, sizeType-, shortintType-, integerType-, longintType-, hugeintType-, wordType-, longWordType-, wordSetType-, characterType-, characterType8-, characterType16-, characterType32-, setType-, booleanType-, anyType-, byteType-, realType-, longrealType-, complexType-, longcomplexType-, objectType-, nilType-, rangeType-, lenType-: SyntaxTree.Type; CanPassInRegister-: PassInRegisterProc; cellsAreObjects-: BOOLEAN; platformCallingConvention-: SyntaxTree.CallingConvention; PROCEDURE ^ & InitSystem*(codeUnit, dataUnit: LONGINT; addressSize, minVarAlign, maxVarAlign, minParAlign, maxParAlign, offsetFirstPar: LONGINT; cooperative: BOOLEAN); PROCEDURE ^ SetPlatformCallingConvention*(callingConvention: SyntaxTree.CallingConvention); PROCEDURE ^ SetCellsAreObjects*(c: BOOLEAN); PROCEDURE ^ SetRegisterPassCallback*(canPassInRegister: PassInRegisterProc); PROCEDURE ^ AddCapability*(name: SyntaxTree.Identifier); PROCEDURE ^ GenerateRecordOffsets*(x: SyntaxTree.RecordType): BOOLEAN; PROCEDURE ^ GenerateCellOffsets(x: SyntaxTree.CellType): BOOLEAN; PROCEDURE ^ GenerateVariableOffsets*(scope: SyntaxTree.Scope): BOOLEAN; PROCEDURE ^ GenerateParameterOffsets*(procedure: SyntaxTree.Procedure; nestedProcedure: BOOLEAN): BOOLEAN; PROCEDURE ^ SizeOf*(type: SyntaxTree.Type): LONGINT; PROCEDURE ^ SizeOfParameter*(par: SyntaxTree.Parameter): LONGINT; PROCEDURE ^ SizeOfVariable*(var: SyntaxTree.Variable): LONGINT; PROCEDURE ^ AlignmentOf*(CONST alignment: Alignment; type: SyntaxTree.Type): LONGINT; PROCEDURE ^ AlignedSizeOf*(type: SyntaxTree.Type): LONGINT; PROCEDURE ^ IsLynx*(): BOOLEAN; END System; VAR SelfParameterName-, ReturnParameterName-, SystemName-, systemName-, PointerReturnName-, ResultName-, A2Name-, ArrayBaseName-, ComplexNumbersName-, RecordBodyName-, ModuleBodyName-, NameWinAPI-, NameC-, NamePlatformCC-, NameMovable-, NameUntraced-, NameDelegate-, NameInterrupt-, NamePcOffset-, NameNoPAF-, NameEntry-, NameExit-, NameFixed-, NameFictive-, NameAligned-, NameStackAligned-, NameExclusive-, NameActive-, NamePriority-, NameSafe-, NameRealtime-, NameDynamic-, NameFingerprint-, NameDataMemorySize-, NameCodeMemorySize-, NameChannelWidth-, NameChannelDepth-, NameChannelModule-, NameVector-, NameFloatingPoint-, NameNoMul-, NameNonBlockingIO-, NameTRM-, NameTRMS-, NameEngine-, NameFinal-, NameAbstract-, NameBackend-, NameRuntime-, NameFrequencyDivider-, NameRegister-, NameNoReturn-, NamePlain-, NameUnsafe-, NameDisposable-, NameUnchecked-, NameUncooperative-: SyntaxTree.Identifier; identifiers: ARRAY 2 OF ARRAY end OF SyntaxTree.Identifier; Boolean8-, Boolean32-: SyntaxTree.BooleanType; Integer8-, Integer16-, Integer32-, Integer64-: SyntaxTree.IntegerType; Unsigned8-, Unsigned16-, Unsigned32-, Unsigned64-: SyntaxTree.IntegerType; Character8-, Character16-, Character32-: SyntaxTree.CharacterType; Set8-, Set16-, Set32-, Set64-: SyntaxTree.SetType; Float32-, Float64-: SyntaxTree.FloatType; Complex64-, Complex128-: SyntaxTree.ComplexType; Byte8: SyntaxTree.ByteType; Byte32: SyntaxTree.ByteType; PROCEDURE ^ BuildScopes(system: System); PROCEDURE ^ SetDefaultDeclarations*(system: System; minBits: LONGINT); PROCEDURE ^ OperatorDefined*(system: System; op: LONGINT; defined: BOOLEAN); PROCEDURE ^ SetDefaultOperators*(system: System); PROCEDURE ^ DefaultSystem*(): System; PROCEDURE ^ IsOberonProcedure*(type: SyntaxTree.Type): BOOLEAN; PROCEDURE ^ AlignedSizeOf*(system: System; CONST alignment: Alignment; type: SyntaxTree.Type): LONGINT; PROCEDURE ^ IsSystemModule*(module: SyntaxTree.Module): BOOLEAN; PROCEDURE ^ DeclareType0(type: SyntaxTree.Type; CONST name: ARRAY OF CHAR; in: SyntaxTree.Scope); PROCEDURE ^ DeclareType*(type: SyntaxTree.Type; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope); PROCEDURE ^ DeclareLynxType*(type: SyntaxTree.Type; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope); PROCEDURE ^ NewConstant0(CONST name: ARRAY OF CHAR; int: LONGINT; type: SyntaxTree.Type; in: SyntaxTree.Scope); PROCEDURE ^ NewConstant*(CONST name: ARRAY OF CHAR; int: LONGINT; type: SyntaxTree.Type; CONST scope: ARRAY OF SyntaxTree.ModuleScope); PROCEDURE ^ NewStringConstant0(CONST name: ARRAY OF CHAR; string: SyntaxTree.String; baseType: SyntaxTree.Type; in: SyntaxTree.Scope); PROCEDURE ^ NewStringConstant*(CONST name: ARRAY OF CHAR; string: SyntaxTree.String; type: SyntaxTree.Type; CONST scope: ARRAY OF SyntaxTree.ModuleScope); PROCEDURE ^ NewStringConstantCamelCase*(CONST name: ARRAY OF CHAR; string: SyntaxTree.String; type: SyntaxTree.Type; CONST scope: ARRAY OF SyntaxTree.ModuleScope); PROCEDURE ^ NewBuiltin0(id: LONGINT; CONST name: ARRAY OF CHAR; in: SyntaxTree.ModuleScope; realtime: BOOLEAN); PROCEDURE ^ NewBuiltin*(id: LONGINT; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope; realtime: BOOLEAN); PROCEDURE ^ NewBuiltinCamelCase*(id: LONGINT; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope; realtime: BOOLEAN); PROCEDURE ^ NewCustomBuiltin0(CONST name: ARRAY OF CHAR; scope: SyntaxTree.ModuleScope; subType: SHORTINT; procedureType: SyntaxTree.ProcedureType); PROCEDURE ^ NewCustomBuiltin*(CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope; subType: SHORTINT; procedureType: SyntaxTree.ProcedureType); PROCEDURE ^ GetModuleSectionName*(name, context: SyntaxTree.Identifier; VAR n: ARRAY OF CHAR); PROCEDURE ^ ModuleFileName*(name, context: SyntaxTree.Identifier; VAR n: ARRAY OF CHAR); PROCEDURE ^ ModuleSectionIdentifier*(name, context: SyntaxTree.Identifier): SyntaxTree.Identifier; PROCEDURE ^ ContextFromName*(CONST fileName: ARRAY OF CHAR; VAR module, context: SyntaxTree.Identifier); PROCEDURE ^ GetModuleName*(module: SyntaxTree.Module; VAR name: ARRAY OF CHAR); PROCEDURE ^ GetModuleSegmentedName*(module: SyntaxTree.Module; VAR name: Basic.SegmentedName); PROCEDURE ^ FindSymbol*(CONST name: Basic.SegmentedName; scope: SyntaxTree.Scope): SyntaxTree.Symbol; PROCEDURE ^ GetSymbolNameInScope*(symbol: SyntaxTree.Symbol; inScope: SyntaxTree.Scope; VAR name: ARRAY OF CHAR); PROCEDURE ^ GetSymbolName*(symbol: SyntaxTree.Symbol; VAR name: ARRAY OF CHAR); PROCEDURE ^ GetSymbolSegmentedNameInScope*(symbol: SyntaxTree.Symbol; inScope: SyntaxTree.Scope; VAR pooledName: Basic.SegmentedName); PROCEDURE ^ GetSymbolSegmentedName*(symbol: SyntaxTree.Symbol; VAR pooledName: Basic.SegmentedName); PROCEDURE ^ Level*(t: SyntaxTree.Type): LONGINT; PROCEDURE ^ ConvertSigned*(this: HUGEINT; bits: LONGINT): HUGEINT; PROCEDURE ^ ConvertUnsigned*(this: HUGEINT; bits: LONGINT): HUGEINT; PROCEDURE ^ MaxInteger*(system: System; type: SyntaxTree.BasicType; signed: BOOLEAN): HUGEINT; PROCEDURE ^ MinInteger*(system: System; type: SyntaxTree.BasicType; signed: BOOLEAN): HUGEINT; PROCEDURE ^ MaxFloat*(system: System; type: SyntaxTree.FloatType): LONGREAL; PROCEDURE ^ MinFloat*(system: System; type: SyntaxTree.FloatType): LONGREAL; PROCEDURE ^ ConvertSet*(this: Basic.Set; bits: LONGINT): Basic.Set; PROCEDURE ^ IsUnsignedInteger*(this: HUGEINT; sizeInBits: LONGINT): BOOLEAN; PROCEDURE ^ IsSignedInteger*(this: HUGEINT; sizeInBits: LONGINT): BOOLEAN; PROCEDURE ^ GetSignedIntegerType*(system: System; this: HUGEINT): SyntaxTree.IntegerType; PROCEDURE ^ GetIntegerType*(system: System; this: HUGEINT): SyntaxTree.IntegerType; PROCEDURE ^ NewIntegerValue*(system: System; position: Position; hugeint: HUGEINT): SyntaxTree.Value; PROCEDURE ^ NewBooleanValue*(system: System; position: Position; b: BOOLEAN): SyntaxTree.Value; PROCEDURE ^ GetSetType*(system: System; this: Basic.Set): SyntaxTree.SetType; PROCEDURE ^ NewSetValue*(system: System; position: Position; s: Basic.Set): SyntaxTree.Value; PROCEDURE ^ NewCharacterValue*(system: System; position: Position; c: CHAR): SyntaxTree.Value; PROCEDURE ^ NewNilValue*(system: System; position: Position): SyntaxTree.Value; PROCEDURE ^ BasicTypeDistance*(system: System; from, to: SyntaxTree.BasicType): LONGINT; PROCEDURE ^ GetIdentifier*(symbol: LONGINT; case: LONGINT): SyntaxTree.Identifier; PROCEDURE ^ GetSymbol*(case: LONGINT; id: SyntaxTree.Identifier): LONGINT; PROCEDURE ^ InitIdentifiers; PROCEDURE ^ Init; BEGIN END FoxGlobal.