FoxGlobal.SymU 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. MODULE FoxGlobal;
  2. IMPORT SyntaxTree := FoxSyntaxTree, Basic := FoxBasic, Scanner := FoxScanner, Strings, Dates;
  3. CONST
  4. StringWinAPI* = \"WINAPI"\;
  5. StringC* = \"C"\;
  6. StringPlatformCC* = \"PlatformCC"\;
  7. StringMovable* = \"MOVABLE"\;
  8. StringUntraced* = \"UNTRACED"\;
  9. StringDelegate* = \"DELEGATE"\;
  10. StringInterrupt* = \"INTERRUPT"\;
  11. StringPcOffset* = \"PCOFFSET"\;
  12. StringEntry* = \"INITIAL"\;
  13. StringExit* = \"FINAL"\;
  14. StringNoPAF* = \"NOPAF"\;
  15. StringFixed* = \"FIXED"\;
  16. StringFictive* = \"FICTIVE"\;
  17. StringAligned* = \"ALIGNED"\;
  18. StringAlignStack* = \"ALIGNSTACK"\;
  19. StringFinal* = \"FINAL"\;
  20. StringAbstract* = \"ABSTRACT"\;
  21. StringRegister* = \"REGISTER"\;
  22. StringNoReturn* = \"NORETURN"\;
  23. StringUnsafe* = \"UNSAFE"\;
  24. StringPlain* = \"PLAIN"\;
  25. StringDisposable* = \"DISPOSABLE"\;
  26. StringUnchecked* = \"UNCHECKED"\;
  27. StringUncooperative* = \"UNCOOPERATIVE"\;
  28. StringExclusive* = \"EXCLUSIVE"\;
  29. StringActive* = \"ACTIVE"\;
  30. StringPriority* = \"PRIORITY"\;
  31. StringSafe* = \"SAFE"\;
  32. StringRealtime* = \"REALTIME"\;
  33. StringDynamic* = \"DYNAMIC"\;
  34. StringFingerprint* = \"Fingerprint"\;
  35. StringInstructionWidth* = \"InstructionWidth"\;
  36. StringDataMemorySize* = \"DataMemorySize"\;
  37. StringCodeMemorySize* = \"CodeMemorySize"\;
  38. StringChannelWidth* = \"ChannelWidth"\;
  39. StringChannelDepth* = \"ChannelDepth"\;
  40. StringChannelModule* = \"Channels"\;
  41. StringSystemModule* = \"SYSTEM"\;
  42. StringsystemModule* = \"system"\;
  43. StringBaseMem* = \"BaseMem"\;
  44. StringBaseDiv* = \"BaseDiv"\;
  45. StringVector* = \"Vector"\;
  46. StringFloatingPoint* = \"FloatingPoint"\;
  47. StringNoMul* = \"NoMul"\;
  48. StringNonBlockingIO* = \"HasNonBlockingIO"\;
  49. StringFrequencyDivider* = \"FrequencyDivider"\;
  50. StringEngine* = \"Engine"\;
  51. StringTRM* = \"TRM"\;
  52. StringTRMS* = \"TRMS"\;
  53. StringBackend* = \"Backend"\;
  54. StringRuntime* = \"Runtime"\;
  55. WithTrap* = 1;
  56. CaseTrap* = 2;
  57. ReturnTrap* = 3;
  58. TypeEqualTrap* = 5;
  59. TypeCheckTrap* = 6;
  60. IndexCheckTrap* = 7;
  61. AssertTrap* = 8;
  62. ArraySizeTrap* = 9;
  63. ArrayFormTrap* = 10;
  64. NoReturnTrap* = 16;
  65. Assert* = (Scanner.EndOfText + 1);
  66. Copy* = (Assert + 1);
  67. Dec* = (Copy + 1);
  68. Excl* = (Dec + 1);
  69. Halt* = (Excl + 1);
  70. Inc* = (Halt + 1);
  71. Incl* = (Inc + 1);
  72. New* = (Incl + 1);
  73. Dispose* = (New + 1);
  74. GetProcedure* = (Dispose + 1);
  75. Connect* = (GetProcedure + 1);
  76. Delegate* = (Connect + 1);
  77. Read* = (Delegate + 1);
  78. Write* = (Read + 1);
  79. Reshape* = (Write + 1);
  80. Wait* = (Reshape + 1);
  81. Abs* = (Wait + 1);
  82. Cap* = (Abs + 1);
  83. Chr* = (Cap + 1);
  84. Chr32* = (Chr + 1);
  85. Entier* = (Chr32 + 1);
  86. EntierH* = (Entier + 1);
  87. Incr* = (EntierH + 1);
  88. Len* = (Incr + 1);
  89. Long* = (Len + 1);
  90. Max* = (Long + 1);
  91. Min* = (Max + 1);
  92. Odd* = (Min + 1);
  93. Ord* = (Odd + 1);
  94. Ord32* = (Ord + 1);
  95. Short* = (Ord32 + 1);
  96. Size* = (Short + 1);
  97. Sum* = (Size + 1);
  98. Dim* = (Sum + 1);
  99. Cas* = (Dim + 1);
  100. First* = (Cas + 1);
  101. Last* = (First + 1);
  102. Step* = (Last + 1);
  103. Re* = (Step + 1);
  104. Im* = (Re + 1);
  105. Ash* = (Im + 1);
  106. Lsh* = (Ash + 1);
  107. Rot* = (Lsh + 1);
  108. All* = (Rot + 1);
  109. systemGet* = (All + 1);
  110. systemPut* = (systemGet + 1);
  111. systemMove* = (systemPut + 1);
  112. systemNew* = (systemMove + 1);
  113. systemRef* = (systemNew + 1);
  114. systemTypeCode* = (systemRef + 1);
  115. systemHalt* = (systemTypeCode + 1);
  116. systemPut8* = (systemHalt + 1);
  117. systemPut16* = (systemPut8 + 1);
  118. systemPut32* = (systemPut16 + 1);
  119. systemPut64* = (systemPut32 + 1);
  120. systemTrace* = (systemPut64 + 1);
  121. systemSetStackPointer* = (systemTrace + 1);
  122. systemSetFramePointer* = (systemSetStackPointer + 1);
  123. systemSetActivity* = (systemSetFramePointer + 1);
  124. systemAdr* = (systemSetActivity + 1);
  125. systemSize* = (systemAdr + 1);
  126. systemBit* = (systemSize + 1);
  127. systemGet64* = (systemBit + 1);
  128. systemGet32* = (systemGet64 + 1);
  129. systemGet16* = (systemGet32 + 1);
  130. systemGet8* = (systemGet16 + 1);
  131. systemVal* = (systemGet8 + 1);
  132. systemMsk* = (systemVal + 1);
  133. systemGetStackPointer* = (systemMsk + 1);
  134. systemGetFramePointer* = (systemGetStackPointer + 1);
  135. systemGetActivity* = (systemGetFramePointer + 1);
  136. Send* = (systemGetActivity + 1);
  137. Receive* = (Send + 1);
  138. systemSpecial* = (Receive + 1);
  139. Asr* = (systemSpecial + 1);
  140. Ror* = (Asr + 1);
  141. Flt* = (Ror + 1);
  142. Conversion* = (Flt + 1);
  143. DotTimesPlus* = (Conversion + 1);
  144. AtMulDec* = (DotTimesPlus + 1);
  145. AtMulInc* = (AtMulDec + 1);
  146. DecMul* = (AtMulInc + 1);
  147. IncMul* = (DecMul + 1);
  148. endFox* = (IncMul + 1);
  149. VectorCapability* = 0;
  150. FloatingPointCapability* = 1;
  151. EngineCapability* = 2;
  152. TRMSCapability* = 3;
  153. NoMulCapability* = 4;
  154. NonBlockingIOCapability* = 5;
  155. LynxChar* = \"@lynx_char"\;
  156. LynxSbyte* = \"@lynx_sbyte"\;
  157. LynxShort* = \"@lynx_short"\;
  158. LynxInt* = \"@lynx_int"\;
  159. LynxLong* = \"@lynx_long"\;
  160. LynxFloat* = \"@lynx_float"\;
  161. LynxDouble* = \"@lynx_double"\;
  162. LynxBool* = \"@lynx_bool"\;
  163. LynxObject* = \"@lynx_object"\;
  164. LynxString* = \"@lynx_string"\;
  165. LynxNewobj* = \"lynx@newobj"\;
  166. LynxNewarr* = \"lynx@newarr"\;
  167. LynxAsop* = \"lynx@asop"\;
  168. LynxUnop* = \"lynx@unop"\;
  169. LynxBinop* = \"lynx@binop"\;
  170. LynxSend* = \"lynx@send"\;
  171. LynxReceive* = \"lynx@receive"\;
  172. LynxRecvnb* = \"lynx@recvnb"\;
  173. LynxConnect* = \"lynx@connect"\;
  174. LynxDelegate* = \"lynx@delegate"\;
  175. LynxNewsel* = \"lynx@newsel"\;
  176. LynxAddsel* = \"lynx@addsel"\;
  177. LynxSelect* = \"lynx@select"\;
  178. LynxSelidx* = \"lynx@selidx"\;
  179. LynxOpAdd* = 1;
  180. LynxOpSub* = 2;
  181. LynxOpMul* = 3;
  182. LynxOpDiv* = 4;
  183. LynxOpRem* = 5;
  184. LynxOpAnd* = 6;
  185. LynxOpOr* = 7;
  186. LynxOpXor* = 8;
  187. LynxOpShl* = 9;
  188. LynxOpShr* = 10;
  189. LynxOpNot* = 11;
  190. SymLynxNewobj* = endFox;
  191. SymLynxNewarr* = (endFox + 1);
  192. SymLynxAsop* = (endFox + 2);
  193. SymLynxUnop* = (endFox + 3);
  194. SymLynxBinop* = (endFox + 4);
  195. SymLynxRecvnb* = (endFox + 5);
  196. SymLynxNewsel* = (endFox + 6);
  197. SymLynxAddsel* = (endFox + 7);
  198. SymLynxSelect* = (endFox + 8);
  199. SymLynxSelidx* = (endFox + 9);
  200. end = (endFox + 10);
  201. TYPE
  202. Position = SyntaxTree.Position;
  203. Alignment* = RECORD
  204. min, max: LONGINT;
  205. END;
  206. PassInRegisterProc = PROCEDURE {DELEGATE}(type: SyntaxTree.Type):BOOLEAN;
  207. System* = OBJECT
  208. VAR
  209. systemScope-, globalScope-: ARRAY 2 OF SyntaxTree.ModuleScope;
  210. systemModule-, globalModule-: ARRAY 2 OF SyntaxTree.Module;
  211. activeCellsCapabilities-: SyntaxTree.Symbol;
  212. codeUnit-: LONGINT;
  213. dataUnit-: LONGINT;
  214. variableAlignment-, parameterAlignment-: Alignment;
  215. offsetFirstParameter-: LONGINT;
  216. operatorDefined-: ARRAY end OF BOOLEAN;
  217. addressSize-: LONGINT;
  218. 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;
  219. CanPassInRegister-: PassInRegisterProc;
  220. cellsAreObjects-: BOOLEAN;
  221. platformCallingConvention-: SyntaxTree.CallingConvention;
  222. PROCEDURE ^ & InitSystem*(codeUnit, dataUnit: LONGINT; addressSize, minVarAlign, maxVarAlign, minParAlign, maxParAlign, offsetFirstPar: LONGINT; cooperative: BOOLEAN);
  223. PROCEDURE ^ SetPlatformCallingConvention*(callingConvention: SyntaxTree.CallingConvention);
  224. PROCEDURE ^ SetCellsAreObjects*(c: BOOLEAN);
  225. PROCEDURE ^ SetRegisterPassCallback*(canPassInRegister: PassInRegisterProc);
  226. PROCEDURE ^ AddCapability*(name: SyntaxTree.Identifier);
  227. PROCEDURE ^ GenerateRecordOffsets*(x: SyntaxTree.RecordType): BOOLEAN;
  228. PROCEDURE ^ GenerateCellOffsets(x: SyntaxTree.CellType): BOOLEAN;
  229. PROCEDURE ^ GenerateVariableOffsets*(scope: SyntaxTree.Scope): BOOLEAN;
  230. PROCEDURE ^ GenerateParameterOffsets*(procedure: SyntaxTree.Procedure; nestedProcedure: BOOLEAN): BOOLEAN;
  231. PROCEDURE ^ SizeOf*(type: SyntaxTree.Type): LONGINT;
  232. PROCEDURE ^ SizeOfParameter*(par: SyntaxTree.Parameter): LONGINT;
  233. PROCEDURE ^ SizeOfVariable*(var: SyntaxTree.Variable): LONGINT;
  234. PROCEDURE ^ AlignmentOf*(CONST alignment: Alignment; type: SyntaxTree.Type): LONGINT;
  235. PROCEDURE ^ AlignedSizeOf*(type: SyntaxTree.Type): LONGINT;
  236. PROCEDURE ^ IsLynx*(): BOOLEAN;
  237. END System;
  238. VAR
  239. 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;
  240. identifiers: ARRAY 2 OF ARRAY end OF SyntaxTree.Identifier;
  241. Boolean8-, Boolean32-: SyntaxTree.BooleanType;
  242. Integer8-, Integer16-, Integer32-, Integer64-: SyntaxTree.IntegerType;
  243. Unsigned8-, Unsigned16-, Unsigned32-, Unsigned64-: SyntaxTree.IntegerType;
  244. Character8-, Character16-, Character32-: SyntaxTree.CharacterType;
  245. Set8-, Set16-, Set32-, Set64-: SyntaxTree.SetType;
  246. Float32-, Float64-: SyntaxTree.FloatType;
  247. Complex64-, Complex128-: SyntaxTree.ComplexType;
  248. Byte8: SyntaxTree.ByteType;
  249. Byte32: SyntaxTree.ByteType;
  250. PROCEDURE ^ BuildScopes(system: System);
  251. PROCEDURE ^ SetDefaultDeclarations*(system: System; minBits: LONGINT);
  252. PROCEDURE ^ OperatorDefined*(system: System; op: LONGINT; defined: BOOLEAN);
  253. PROCEDURE ^ SetDefaultOperators*(system: System);
  254. PROCEDURE ^ DefaultSystem*(): System;
  255. PROCEDURE ^ IsOberonProcedure*(type: SyntaxTree.Type): BOOLEAN;
  256. PROCEDURE ^ AlignedSizeOf*(system: System; CONST alignment: Alignment; type: SyntaxTree.Type): LONGINT;
  257. PROCEDURE ^ IsSystemModule*(module: SyntaxTree.Module): BOOLEAN;
  258. PROCEDURE ^ DeclareType0(type: SyntaxTree.Type; CONST name: ARRAY OF CHAR; in: SyntaxTree.Scope);
  259. PROCEDURE ^ DeclareType*(type: SyntaxTree.Type; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope);
  260. PROCEDURE ^ DeclareLynxType*(type: SyntaxTree.Type; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope);
  261. PROCEDURE ^ NewConstant0(CONST name: ARRAY OF CHAR; int: LONGINT; type: SyntaxTree.Type; in: SyntaxTree.Scope);
  262. PROCEDURE ^ NewConstant*(CONST name: ARRAY OF CHAR; int: LONGINT; type: SyntaxTree.Type; CONST scope: ARRAY OF SyntaxTree.ModuleScope);
  263. PROCEDURE ^ NewStringConstant0(CONST name: ARRAY OF CHAR; string: SyntaxTree.String; baseType: SyntaxTree.Type; in: SyntaxTree.Scope);
  264. PROCEDURE ^ NewStringConstant*(CONST name: ARRAY OF CHAR; string: SyntaxTree.String; type: SyntaxTree.Type; CONST scope: ARRAY OF SyntaxTree.ModuleScope);
  265. PROCEDURE ^ NewStringConstantCamelCase*(CONST name: ARRAY OF CHAR; string: SyntaxTree.String; type: SyntaxTree.Type; CONST scope: ARRAY OF SyntaxTree.ModuleScope);
  266. PROCEDURE ^ NewBuiltin0(id: LONGINT; CONST name: ARRAY OF CHAR; in: SyntaxTree.ModuleScope; realtime: BOOLEAN);
  267. PROCEDURE ^ NewBuiltin*(id: LONGINT; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope; realtime: BOOLEAN);
  268. PROCEDURE ^ NewBuiltinCamelCase*(id: LONGINT; CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope; realtime: BOOLEAN);
  269. PROCEDURE ^ NewCustomBuiltin0(CONST name: ARRAY OF CHAR; scope: SyntaxTree.ModuleScope; subType: SHORTINT; procedureType: SyntaxTree.ProcedureType);
  270. PROCEDURE ^ NewCustomBuiltin*(CONST name: ARRAY OF CHAR; CONST scope: ARRAY OF SyntaxTree.ModuleScope; subType: SHORTINT; procedureType: SyntaxTree.ProcedureType);
  271. PROCEDURE ^ GetModuleSectionName*(name, context: SyntaxTree.Identifier; VAR n: ARRAY OF CHAR);
  272. PROCEDURE ^ ModuleFileName*(name, context: SyntaxTree.Identifier; VAR n: ARRAY OF CHAR);
  273. PROCEDURE ^ ModuleSectionIdentifier*(name, context: SyntaxTree.Identifier): SyntaxTree.Identifier;
  274. PROCEDURE ^ ContextFromName*(CONST fileName: ARRAY OF CHAR; VAR module, context: SyntaxTree.Identifier);
  275. PROCEDURE ^ GetModuleName*(module: SyntaxTree.Module; VAR name: ARRAY OF CHAR);
  276. PROCEDURE ^ GetModuleSegmentedName*(module: SyntaxTree.Module; VAR name: Basic.SegmentedName);
  277. PROCEDURE ^ FindSymbol*(CONST name: Basic.SegmentedName; scope: SyntaxTree.Scope): SyntaxTree.Symbol;
  278. PROCEDURE ^ GetSymbolNameInScope*(symbol: SyntaxTree.Symbol; inScope: SyntaxTree.Scope; VAR name: ARRAY OF CHAR);
  279. PROCEDURE ^ GetSymbolName*(symbol: SyntaxTree.Symbol; VAR name: ARRAY OF CHAR);
  280. PROCEDURE ^ GetSymbolSegmentedNameInScope*(symbol: SyntaxTree.Symbol; inScope: SyntaxTree.Scope; VAR pooledName: Basic.SegmentedName);
  281. PROCEDURE ^ GetSymbolSegmentedName*(symbol: SyntaxTree.Symbol; VAR pooledName: Basic.SegmentedName);
  282. PROCEDURE ^ Level*(t: SyntaxTree.Type): LONGINT;
  283. PROCEDURE ^ ConvertSigned*(this: HUGEINT; bits: LONGINT): HUGEINT;
  284. PROCEDURE ^ ConvertUnsigned*(this: HUGEINT; bits: LONGINT): HUGEINT;
  285. PROCEDURE ^ MaxInteger*(system: System; type: SyntaxTree.BasicType; signed: BOOLEAN): HUGEINT;
  286. PROCEDURE ^ MinInteger*(system: System; type: SyntaxTree.BasicType; signed: BOOLEAN): HUGEINT;
  287. PROCEDURE ^ MaxFloat*(system: System; type: SyntaxTree.FloatType): LONGREAL;
  288. PROCEDURE ^ MinFloat*(system: System; type: SyntaxTree.FloatType): LONGREAL;
  289. PROCEDURE ^ ConvertSet*(this: Basic.Set; bits: LONGINT): Basic.Set;
  290. PROCEDURE ^ IsUnsignedInteger*(this: HUGEINT; sizeInBits: LONGINT): BOOLEAN;
  291. PROCEDURE ^ IsSignedInteger*(this: HUGEINT; sizeInBits: LONGINT): BOOLEAN;
  292. PROCEDURE ^ GetSignedIntegerType*(system: System; this: HUGEINT): SyntaxTree.IntegerType;
  293. PROCEDURE ^ GetIntegerType*(system: System; this: HUGEINT): SyntaxTree.IntegerType;
  294. PROCEDURE ^ NewIntegerValue*(system: System; position: Position; hugeint: HUGEINT): SyntaxTree.Value;
  295. PROCEDURE ^ NewBooleanValue*(system: System; position: Position; b: BOOLEAN): SyntaxTree.Value;
  296. PROCEDURE ^ GetSetType*(system: System; this: Basic.Set): SyntaxTree.SetType;
  297. PROCEDURE ^ NewSetValue*(system: System; position: Position; s: Basic.Set): SyntaxTree.Value;
  298. PROCEDURE ^ NewCharacterValue*(system: System; position: Position; c: CHAR): SyntaxTree.Value;
  299. PROCEDURE ^ NewNilValue*(system: System; position: Position): SyntaxTree.Value;
  300. PROCEDURE ^ BasicTypeDistance*(system: System; from, to: SyntaxTree.BasicType): LONGINT;
  301. PROCEDURE ^ GetIdentifier*(symbol: LONGINT; case: LONGINT): SyntaxTree.Identifier;
  302. PROCEDURE ^ GetSymbol*(case: LONGINT; id: SyntaxTree.Identifier): LONGINT;
  303. PROCEDURE ^ InitIdentifiers;
  304. PROCEDURE ^ Init;
  305. BEGIN
  306. END FoxGlobal.