Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

82 строки
3.5KB

  1. ; parser.inc - parser tables and limits (E03-S01..E03-S04).
  2. .ifndef PARSER_INC
  3. PARSER_INC = 1
  4. ; Top-level type kinds (type table column C_TYPE_KIND)
  5. TYPE_NONE = 0
  6. TYPE_INTERFACE = 1
  7. TYPE_CLASS = 2
  8. TYPE_PROGRAM = 3
  9. PARSE_MAX_DEPTH = 16 ; nested method/program/if/while/for blocks
  10. EX_MAX_DEPTH = 16 ; expression levels: parse_expr calls + unary ops
  11. ; What a postfix expression ends in (statement checks)
  12. EX_OTHER = 0 ; literal, self, new, (group), operator result
  13. EX_PLACE = 1 ; name, field, or element: assignable
  14. EX_CALL = 2 ; method call: a statement by itself
  15. ; Test trace bytes (parser ex_trace_on): operand = its column (1-80)
  16. TR_BINARY = $80 ; + operator token kind ($80-$DF)
  17. TR_NEG = $F0 ; unary -
  18. TR_NOT = $F1 ; unary not
  19. TR_LINE = $FF ; statement start, then line lo/hi
  20. ; A type is base, name, length (E03-S04, types.s). Declared types use the
  21. ; first four bytes; an expression's type adds a constant's value and sign.
  22. ; base TY_*
  23. ; name class/interface name ID when base = TY_REF, else 0
  24. ; length array length (2 bytes); 0 = not an array
  25. ; value TY_CONST only: magnitude 0..65535 (2 bytes)
  26. ; neg TY_CONST only: 1 = negative (magnitude 1..32768)
  27. TY_NONE = 0 ; declared: no result; expression: unknown
  28. TY_BOOLEAN = 1 ; (an error was already reported: no checks)
  29. TY_BYTE = 2
  30. TY_CHAR = 3
  31. TY_INTEGER = 4
  32. TY_WORD = 5
  33. TY_REF = 6
  34. TY_NULL = 7 ; expressions only: the null literal
  35. TY_STRING = 8 ; a string literal (print only)
  36. TY_CONST = 9 ; a number literal or constant expression
  37. TY_VOID = 10 ; the result of a method without `as type`
  38. TV_SIZE = 7 ; bytes in a type value (sc_*, tt_*)
  39. ; Member flags
  40. MF_METHOD = $01 ; clear = field
  41. MF_PRIVATE = $02 ; clear = public
  42. MEMBERS_MAX = 255 ; rows 0..254, all classes and interfaces
  43. PARAMS_MAX = 255 ; rows 0..254, all method signatures
  44. IMPLS_MAX = 255 ; rows 0..254, all implements lists
  45. ; Bank-1 parser tables: 256-byte columns, consecutive from type_kind.
  46. ; tb_get/tb_set take A = column and Y = row (a name ID for type columns).
  47. C_TYPE_KIND = 0 ; TYPE_*
  48. C_TYPE_LINE_LO = 1 ; declaration line
  49. C_TYPE_LINE_HI = 2
  50. C_TYPE_MFIRST = 3 ; first member row
  51. C_TYPE_MCOUNT = 4 ; member rows (contiguous, declaration order)
  52. C_TYPE_IFIRST = 5 ; class: first implements row
  53. C_TYPE_ICOUNT = 6 ; class: implements rows (source order)
  54. C_TYPE_INIT = 7 ; class: init member row + 1, 0 = none
  55. C_MEM_OWNER = 8 ; owning class/interface name ID
  56. C_MEM_NAME = 9 ; member name ID
  57. C_MEM_FLAGS = 10 ; MF_*
  58. C_MEM_TBASE = 11 ; field type / method result type
  59. C_MEM_TNAME = 12
  60. C_MEM_TLEN_LO = 13
  61. C_MEM_TLEN_HI = 14
  62. C_MEM_PFIRST = 15 ; first parameter row
  63. C_MEM_PCOUNT = 16 ; parameter rows (declaration order)
  64. C_PAR_TBASE = 17 ; parameter type
  65. C_PAR_TNAME = 18
  66. C_PAR_TLEN_LO = 19
  67. C_PAR_TLEN_HI = 20
  68. C_IMPL_IFACE = 21 ; implemented interface name ID
  69. TABLE_COLUMNS = 22
  70. C_TYPE_LAST = C_TYPE_INIT ; type columns 0..this are cleared per run
  71. .endif

Powered by TurnKey Linux.