FoxBasic.SymUu 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. MODULE FoxBasic;
  2. IMPORT KernelLog, StringPool, Strings, Streams, Diagnostics, Files, SYSTEM, ObjectFile, Modules, D := Debugging;
  3. CONST
  4. UndeclaredIdentifier* = 256;
  5. MultiplyDefinedIdentifier* = 257;
  6. NumberIllegalCharacter* = 258;
  7. StringIllegalCharacter* = 259;
  8. NoMatchProcedureName* = 260;
  9. CommentNotClosed* = 261;
  10. IllegalCharacterValue* = 262;
  11. ValueStartIncorrectSymbol* = 263;
  12. IllegalyMarkedIdentifier* = 264;
  13. IdentifierNoType* = 265;
  14. IdentifierNoRecordType* = 266;
  15. IdentifierNoObjectType* = 267;
  16. ImportNotAvailable* = 268;
  17. RecursiveTypeDeclaration* = 269;
  18. NumberTooLarge* = 270;
  19. IdentifierTooLong* = 271;
  20. StringTooLong* = 272;
  21. InitErrMsgSize = 300;
  22. invalidString* = -1;
  23. InvalidCode* = -1;
  24. TYPE
  25. String* = StringPool.Index;
  26. SegmentedName* = ObjectFile.SegmentedName;
  27. FileName* = Files.FileName;
  28. SectionName* = ARRAY 256 OF CHAR;
  29. MessageString* = ARRAY 256 OF CHAR;
  30. Integer* = SIGNED64;
  31. Set* = SET64;
  32. ObjectArray = POINTER TO ARRAY OF ANY;
  33. ErrorMsgs = POINTER TO ARRAY OF StringPool.Index;
  34. ComparisonFunction = PROCEDURE {DELEGATE}(object1, object2: ANY):BOOLEAN;
  35. Position* = RECORD
  36. start*, end*, line*, linepos*: LONGINT;
  37. reader*: Streams.Reader;
  38. END;
  39. ErrorCode* = LONGINT;
  40. Fingerprint* = ObjectFile.Fingerprint;
  41. List* = OBJECT
  42. VAR
  43. list: ObjectArray;
  44. count-: LONGINT;
  45. multipleAllowed*: BOOLEAN;
  46. nilAllowed*: BOOLEAN;
  47. PROCEDURE ^ & InitList*(initialSize: LONGINT);
  48. PROCEDURE ^ Length*(): LONGINT;
  49. PROCEDURE ^ Grow;
  50. PROCEDURE ^ Get*(i: SIZE): ANY;
  51. PROCEDURE ^ Set*(i: SIZE; x: ANY);
  52. PROCEDURE ^ Add*(x: ANY);
  53. PROCEDURE ^ Prepend*(x: ANY);
  54. PROCEDURE ^ Append*(x: List);
  55. PROCEDURE ^ Remove*(x: ANY);
  56. PROCEDURE ^ RemoveByIndex*(i: SIZE);
  57. PROCEDURE ^ Insert*(i: SIZE; x: ANY);
  58. PROCEDURE ^ Replace*(x, y: ANY);
  59. PROCEDURE ^ ReplaceByIndex*(i: SIZE; x: ANY);
  60. PROCEDURE ^ IndexOf*(x: ANY): LONGINT;
  61. PROCEDURE ^ Contains*(x: ANY): BOOLEAN;
  62. PROCEDURE ^ Clear*;
  63. PROCEDURE ^ GrowAndSet*(i: LONGINT; x: ANY);
  64. PROCEDURE ^ Sort*(comparisonFunction: ComparisonFunction);
  65. PROCEDURE ^ QuickSort(comparisonFunction: ComparisonFunction; lo, hi: LONGINT);
  66. END List;
  67. HashEntryAny = RECORD
  68. key, value: ANY;
  69. valueInt: LONGINT;
  70. END;
  71. HashEntryInt = RECORD
  72. key, valueInt: LONGINT;
  73. value: ANY;
  74. END;
  75. HashAnyArray = POINTER TO ARRAY OF HashEntryAny;
  76. HashIntArray = POINTER TO ARRAY OF HashEntryInt;
  77. HashTable* = OBJECT
  78. VAR
  79. table: HashAnyArray;
  80. size: LONGINT;
  81. used-: LONGINT;
  82. maxLoadFactor: REAL;
  83. PROCEDURE ^ & Init*(initialSize: LONGINT);
  84. PROCEDURE ^ Put*(key, value: ANY);
  85. PROCEDURE ^ Get*(key: ANY): ANY;
  86. PROCEDURE ^ Has*(key: ANY): BOOLEAN;
  87. PROCEDURE ^ Length*(): LONGINT;
  88. PROCEDURE ^ Clear*;
  89. PROCEDURE ^ PutInt*(key: ANY; value: LONGINT);
  90. PROCEDURE ^ GetInt*(key: ANY): LONGINT;
  91. PROCEDURE ^ HashValue(key: ANY): LONGINT;
  92. PROCEDURE ^ Grow;
  93. END HashTable;
  94. IntIterator* = OBJECT
  95. VAR
  96. table: HashIntArray;
  97. count: LONGINT;
  98. PROCEDURE ^ & Init(t: HashIntArray);
  99. PROCEDURE ^ GetNext*(VAR key: LONGINT; VAR value: ANY): BOOLEAN;
  100. END IntIterator;
  101. HashTableInt* = OBJECT
  102. VAR
  103. table: HashIntArray;
  104. size: LONGINT;
  105. used-: LONGINT;
  106. maxLoadFactor: REAL;
  107. PROCEDURE ^ & Init*(initialSize: LONGINT);
  108. PROCEDURE ^ Put*(key: LONGINT; value: ANY);
  109. PROCEDURE ^ Get*(key: LONGINT): ANY;
  110. PROCEDURE ^ Has*(key: LONGINT): BOOLEAN;
  111. PROCEDURE ^ Length*(): LONGINT;
  112. PROCEDURE ^ Clear*;
  113. PROCEDURE ^ PutInt*(key, value: LONGINT);
  114. PROCEDURE ^ GetInt*(key: LONGINT): LONGINT;
  115. PROCEDURE ^ HashValue(key: LONGINT): LONGINT;
  116. PROCEDURE ^ Grow;
  117. PROCEDURE ^ GetIterator*(): IntIterator;
  118. END HashTableInt;
  119. HashEntrySegmentedName = RECORD
  120. key: ObjectFile.SegmentedName;
  121. value: ANY;
  122. END;
  123. HashSegmentedNameArray = POINTER TO ARRAY OF HashEntrySegmentedName;
  124. HashTableSegmentedName* = OBJECT
  125. VAR
  126. table: HashSegmentedNameArray;
  127. size: LONGINT;
  128. used-: LONGINT;
  129. maxLoadFactor: REAL;
  130. PROCEDURE ^ & Init*(initialSize: LONGINT);
  131. PROCEDURE ^ Put*(CONST key: SegmentedName; value: ANY);
  132. PROCEDURE ^ Get*(CONST key: SegmentedName): ANY;
  133. PROCEDURE ^ Has*(CONST key: SegmentedName): BOOLEAN;
  134. PROCEDURE ^ Length*(): LONGINT;
  135. PROCEDURE ^ Clear*;
  136. PROCEDURE ^ Hash*(CONST name: SegmentedName): LONGINT;
  137. PROCEDURE ^ HashValue(CONST key: SegmentedName): LONGINT;
  138. PROCEDURE ^ Grow;
  139. END HashTableSegmentedName;
  140. IntegerObject = OBJECT
  141. END IntegerObject;
  142. Writer* = OBJECT (Streams.Writer)
  143. VAR
  144. indent-: LONGINT;
  145. doindent: BOOLEAN;
  146. w-: Streams.Writer;
  147. PROCEDURE ^ InitBasicWriter*(w: Streams.Writer);
  148. PROCEDURE ^ & InitW(w: Streams.Writer);
  149. PROCEDURE ^ Reset*;
  150. PROCEDURE ^ CanSetPos*(): BOOLEAN;
  151. PROCEDURE ^ SetPos*(pos: Streams.Position);
  152. PROCEDURE ^ Update*;
  153. PROCEDURE ^ Pos*(): Streams.Position;
  154. PROCEDURE ^ Indent;
  155. PROCEDURE ^ Char*(x: CHAR);
  156. PROCEDURE ^ Bytes*(CONST x: ARRAY OF CHAR; ofs, len: LONGINT);
  157. PROCEDURE ^ RawSInt*(x: SHORTINT);
  158. PROCEDURE ^ RawInt*(x: INTEGER);
  159. PROCEDURE ^ RawLInt*(x: LONGINT);
  160. PROCEDURE ^ RawHInt*(x: HUGEINT);
  161. PROCEDURE ^ Net32*(x: LONGINT);
  162. PROCEDURE ^ Net16*(x: LONGINT);
  163. PROCEDURE ^ Net8*(x: LONGINT);
  164. PROCEDURE ^ RawSet*(x: SET);
  165. PROCEDURE ^ RawBool*(x: BOOLEAN);
  166. PROCEDURE ^ RawReal*(x: REAL);
  167. PROCEDURE ^ RawLReal*(x: LONGREAL);
  168. PROCEDURE ^ RawString*(CONST x: ARRAY OF CHAR);
  169. PROCEDURE ^ RawNum*(x: HUGEINT);
  170. PROCEDURE ^ Ln*;
  171. PROCEDURE ^ String*(CONST x: ARRAY OF CHAR);
  172. PROCEDURE ^ Int*(x: HUGEINT; wd: SIZE);
  173. PROCEDURE ^ Set*(s: SET);
  174. PROCEDURE ^ Hex*(x: HUGEINT; wd: SIZE);
  175. PROCEDURE ^ Address*(x: ADDRESS);
  176. PROCEDURE ^ Date*(t, d: LONGINT);
  177. PROCEDURE ^ Date822*(t, d, tz: LONGINT);
  178. PROCEDURE ^ Float*(x: LONGREAL; n: LONGINT);
  179. PROCEDURE ^ FloatFix*(x: LONGREAL; n, f, D: LONGINT);
  180. PROCEDURE ^ SetIndent*(i: LONGINT);
  181. PROCEDURE ^ IncIndent*;
  182. PROCEDURE ^ DecIndent*;
  183. PROCEDURE ^ BeginAlert*;
  184. PROCEDURE ^ EndAlert*;
  185. PROCEDURE ^ BeginKeyword*;
  186. PROCEDURE ^ EndKeyword*;
  187. PROCEDURE ^ BeginComment*;
  188. PROCEDURE ^ EndComment*;
  189. PROCEDURE ^ AlertString*(CONST s: ARRAY OF CHAR);
  190. END Writer;
  191. TracingDiagnostics = OBJECT (Diagnostics.Diagnostics)
  192. VAR
  193. diagnostics: Diagnostics.Diagnostics;
  194. PROCEDURE ^ & InitDiagnostics(diagnostics: Diagnostics.Diagnostics);
  195. PROCEDURE ^ Error*(CONST source: ARRAY OF CHAR; position: Streams.Position; CONST message: ARRAY OF CHAR);
  196. PROCEDURE ^ Warning*(CONST source: ARRAY OF CHAR; position: Streams.Position; CONST message: ARRAY OF CHAR);
  197. PROCEDURE ^ Information*(CONST source: ARRAY OF CHAR; position: Streams.Position; CONST message: ARRAY OF CHAR);
  198. END TracingDiagnostics;
  199. DebugWriterFactory* = PROCEDURE {DELEGATE}(CONST title: ARRAY OF CHAR):Streams.Writer;
  200. WriterFactory* = PROCEDURE {DELEGATE}(w: Streams.Writer):Writer;
  201. DiagnosticsFactory* = PROCEDURE {DELEGATE}(w: Streams.Writer):Diagnostics.Diagnostics;
  202. VAR
  203. lists-: LONGINT;
  204. enlarged-: LONGINT;
  205. strings-: LONGINT;
  206. integerObjects: HashTableInt;
  207. errMsg: ErrorMsgs;
  208. emptyString-: String;
  209. debug: BOOLEAN;
  210. getDebugWriter: DebugWriterFactory;
  211. getWriter: WriterFactory;
  212. getDiagnostics: DiagnosticsFactory;
  213. invalidPosition-: Position;
  214. PROCEDURE ^ MakeString*(CONST s: ARRAY OF CHAR): String;
  215. PROCEDURE ^ GetString*(s: String; VAR str: ARRAY OF CHAR);
  216. PROCEDURE ^ StringEqual*(s, t: String): BOOLEAN;
  217. PROCEDURE ^ GetErrorMessage*(err: LONGINT; CONST msg: ARRAY OF CHAR; VAR res: ARRAY OF CHAR);
  218. PROCEDURE ^ AppendDetailedErrorMessage*(VAR message: ARRAY OF CHAR; pos: Position; reader: Streams.Reader);
  219. PROCEDURE ^ AppendPosition*(VAR msg: ARRAY OF CHAR; pos: Position);
  220. PROCEDURE ^ MakeMessage(pos: Position; code: ErrorCode; CONST msg: ARRAY OF CHAR; VAR message: ARRAY OF CHAR);
  221. PROCEDURE ^ MakeDetailedMessage(pos: Position; code: ErrorCode; CONST msg: ARRAY OF CHAR; reader: Streams.Reader; VAR message: ARRAY OF CHAR);
  222. PROCEDURE ^ ErrorC*(diagnostics: Diagnostics.Diagnostics; CONST source: ARRAY OF CHAR; pos: Position; code: ErrorCode; CONST msg: ARRAY OF CHAR);
  223. PROCEDURE ^ Error*(diagnostics: Diagnostics.Diagnostics; CONST source: ARRAY OF CHAR; pos: Position; CONST msg: ARRAY OF CHAR);
  224. PROCEDURE ^ Warning*(diagnostics: Diagnostics.Diagnostics; CONST source: ARRAY OF CHAR; pos: Position; CONST msg: ARRAY OF CHAR);
  225. PROCEDURE ^ Information*(diagnostics: Diagnostics.Diagnostics; CONST source: ARRAY OF CHAR; pos: Position; CONST msg: ARRAY OF CHAR);
  226. PROCEDURE ^ SetErrorMessage*(n: LONGINT; CONST msg: ARRAY OF CHAR);
  227. PROCEDURE ^ SetErrorExpected*(n: LONGINT; CONST msg: ARRAY OF CHAR);
  228. PROCEDURE ^ AppendNumber*(VAR s: ARRAY OF CHAR; num: LONGINT);
  229. PROCEDURE ^ InitSegmentedName*(VAR name: SegmentedName);
  230. PROCEDURE ^ ToSegmentedName*(CONST name: ARRAY OF CHAR; VAR pooledName: SegmentedName);
  231. PROCEDURE ^ SegmentedNameToString*(CONST pooledName: SegmentedName; VAR name: ARRAY OF CHAR);
  232. PROCEDURE ^ WriteSegmentedName*(w: Streams.Writer; name: SegmentedName);
  233. PROCEDURE ^ AppendToSegmentedName*(VAR name: SegmentedName; CONST this: ARRAY OF CHAR);
  234. PROCEDURE ^ SuffixSegmentedName*(VAR name: SegmentedName; this: StringPool.Index);
  235. PROCEDURE ^ SegmentedNameEndsWith*(CONST name: SegmentedName; CONST this: ARRAY OF CHAR): BOOLEAN;
  236. PROCEDURE ^ RemoveSuffix*(VAR name: SegmentedName);
  237. PROCEDURE ^ GetSuffix*(CONST name: SegmentedName; VAR string: ARRAY OF CHAR);
  238. PROCEDURE ^ IsPrefix*(CONST prefix, of: SegmentedName): BOOLEAN;
  239. PROCEDURE ^ Expand(VAR oldAry: ErrorMsgs);
  240. PROCEDURE ^ Concat*(VAR result: ARRAY OF CHAR; CONST prefix, name, suffix: ARRAY OF CHAR);
  241. PROCEDURE ^ Lowercase*(CONST name: ARRAY OF CHAR; VAR result: ARRAY OF CHAR);
  242. PROCEDURE ^ Uppercase*(CONST name: ARRAY OF CHAR; VAR result: ARRAY OF CHAR);
  243. PROCEDURE ^ GetIntegerObj*(value: LONGINT): ANY;
  244. PROCEDURE ^ Align*(VAR offset: LONGINT; alignment: LONGINT);
  245. PROCEDURE ^ InitErrorMessages;
  246. PROCEDURE ^ ActivateDebug*;
  247. PROCEDURE ^ Test*;
  248. PROCEDURE ^ GetFileReader*(CONST filename: ARRAY OF CHAR): Streams.Reader;
  249. PROCEDURE ^ GetWriter*(w: Streams.Writer): Writer;
  250. PROCEDURE ^ GetDebugWriter*(CONST title: ARRAY OF CHAR): Streams.Writer;
  251. PROCEDURE ^ GetDiagnostics*(w: Streams.Writer): Diagnostics.Diagnostics;
  252. PROCEDURE ^ GetDefaultDiagnostics*(): Diagnostics.Diagnostics;
  253. PROCEDURE ^ InitWindowWriter;
  254. PROCEDURE ^ InstallWriterFactory*(writer: WriterFactory; debug: DebugWriterFactory; diagnostics: DiagnosticsFactory);
  255. PROCEDURE ^ Replace(VAR in: ARRAY OF CHAR; CONST this, by: ARRAY OF CHAR);
  256. OPERATOR ^ "="-(CONST left: ARRAY OF CHAR; right: String): BOOLEAN;
  257. OPERATOR ^ "="-(left: String; CONST right: ARRAY OF CHAR): BOOLEAN;
  258. PROCEDURE ^ MessageS*(CONST format, s0: ARRAY OF CHAR): MessageString;
  259. PROCEDURE ^ MessageSS*(CONST format, s0, s1: ARRAY OF CHAR): MessageString;
  260. PROCEDURE ^ MessageI*(CONST format: ARRAY OF CHAR; i0: LONGINT): MessageString;
  261. PROCEDURE ^ MessageSI*(CONST format: ARRAY OF CHAR; CONST s0: ARRAY OF CHAR; i1: LONGINT): MessageString;
  262. PROCEDURE ^ GetStringParameter*(r: Streams.Reader; VAR string: ARRAY OF CHAR): BOOLEAN;
  263. PROCEDURE ^ GetTracingDiagnostics*(diagnostics: Diagnostics.Diagnostics): Diagnostics.Diagnostics;
  264. BEGIN
  265. END FoxBasic.