?login_element?

Subversion Repositories NedoOS

Rev

Rev 539 | Blame | Compare with Previous | Last modification | View Log | Download

  1.     OUTPUT "labels_syntax_and_find.bin"
  2.  
  3.     MODULE mod1 : ORG $3130
  4. label:
  5.         dec hl
  6. .local:
  7.         inc l
  8.  
  9.         dw  label
  10.         dw  .local
  11.         dw  label.local
  12.         dw  mod1.label.local
  13.         dw  @mod1.label.local
  14.         ; global one!
  15.         dw  @label
  16.         dw  @label.local
  17.         dw  @unique
  18.         dw  unique
  19.         ; mod1 unique
  20.         dw  mod1unique
  21.         dw  mod1.mod1unique
  22.         dw  @mod1.mod1unique
  23. mod1unique:
  24.         ; mod2 unique
  25.         dw  '!!'+mod2unique ; should be error, searching only: mod1.mod2unique, @mod2unique
  26.         dw  mod2.mod2unique
  27.         dw  @mod2.mod2unique
  28.         ; mod1 nested
  29.         dw  nested.label
  30.         dw  nested.label.local
  31.         dw  mod1.nested.label.local
  32.         dw  @mod1.nested.label.local
  33.         dw  '!!'+nest1unique    ; should be error
  34.         dw  nested.nest1unique
  35.         dw  mod1.nested.nest1unique
  36.         dw  @mod1.nested.nest1unique
  37.         ; mod2 nested
  38.         dw  mod2.nested.label
  39.         dw  @mod2.nested.label
  40.         dw  mod2.nested.label.local
  41.         dw  @mod2.nested.label.local
  42.         dw  '!!'+nested.nest2unique ; should be error
  43.         dw  mod2.nested.nest2unique
  44.         dw  @mod2.nested.nest2unique
  45.  
  46.         MODULE nested
  47. label:
  48.             dec l
  49. .local:
  50.             cpl
  51. nest1unique:
  52.         ENDMODULE
  53.  
  54.     ENDMODULE
  55.  
  56.     MODULE mod2 : ORG $3332
  57. label:
  58.         add hl,hl
  59. .local:
  60.         daa
  61.  
  62.         dw  label
  63.         dw  .local
  64.         dw  label.local
  65.         dw  mod2.label.local
  66.         dw  @mod2.label.local
  67.         ; global one!
  68.         dw  @label
  69.         dw  @label.local
  70.         dw  @unique
  71.         dw  unique
  72.         ; mod2 unique
  73.         dw  mod2unique
  74.         dw  mod2.mod2unique
  75.         dw  @mod2.mod2unique
  76. mod2unique:
  77.         ; mod1 unique
  78.         dw  '!!'+mod1unique ; should be error, searching only: mod2.mod1unique, @mod1unique
  79.         dw  mod1.mod1unique
  80.         dw  @mod1.mod1unique
  81.         ; mod2 nested
  82.         dw  nested.label
  83.         dw  nested.label.local
  84.         dw  mod2.nested.label.local
  85.         dw  @mod2.nested.label.local
  86.         dw  '!!'+nest2unique    ; should be error
  87.         dw  nested.nest2unique
  88.         dw  mod2.nested.nest2unique
  89.         dw  @mod2.nested.nest2unique
  90.         ; mod1 nested
  91.         dw  mod1.nested.label
  92.         dw  @mod1.nested.label
  93.         dw  mod1.nested.label.local
  94.         dw  @mod1.nested.label.local
  95.         dw  '!!'+nested.nest1unique ; should be error
  96.         dw  mod1.nested.nest1unique
  97.         dw  @mod1.nested.nest1unique
  98.  
  99.         MODULE nested
  100. label:
  101.             inc h
  102. .local:
  103.             dec h
  104. nest2unique:
  105.         ENDMODULE
  106.  
  107.     ENDMODULE
  108.  
  109.     ORG $3534
  110. label:
  111.     dec hl
  112. .local:
  113.     inc l
  114.  
  115.     dw  label
  116.     dw  .local
  117.     dw  label.local
  118.     dw  @label.local
  119.     dw  mod1.label.local
  120.     dw  @mod1.label.local
  121.     dw  mod2.label.local
  122.     dw  @mod2.label.local
  123.     ; uniques
  124.     dw  unique
  125.     dw  @unique
  126.     dw  '!!'+mod1unique ; should be error
  127.     dw  mod1.mod1unique
  128.     dw  @mod1.mod1unique
  129.     dw  mod1.nested.nest1unique
  130.     dw  @mod1.nested.nest1unique
  131.     dw  '!!'+mod2unique ; should be error
  132.     dw  mod2.mod2unique
  133.     dw  @mod2.mod2unique
  134.     dw  mod2.nested.nest2unique
  135.     dw  @mod2.nested.nest2unique
  136.     ; nested
  137.     dw  '!!'+nested.label       ; should be error
  138.     dw  '!!'+nested.label.local ; should be error
  139.     dw  mod1.nested.label
  140.     dw  @mod1.nested.label
  141.     dw  mod2.nested.label.local
  142.     dw  @mod2.nested.label.local
  143.  
  144. unique:
  145.     dec l
  146.  
  147. ..invalidLabelName:
  148. @.invalidLabelName:
  149. .@invalidLabelName:
  150. .1nvalidLabelName:
  151. @1nvalidLabelName:
  152. .@1nvalidLabelName:
  153. @.1nvalidLabelName:
  154. 1nvalidLabelName: jr  nz,1B
  155. Inv&lidL&belN&me:
  156. 100     equ     should not work
  157. 101     =       should not work
  158. 102     defl    should not work
  159. 103:    equ     should not work
  160. 104:    =       should not work
  161. 105:    defl    should not work
  162.  
  163. EquLineRemnants1:   EQU $+1-$100    cpl     ; error
  164. EquLineRemnants2:   EQU $+2-$100  : cpl     ; valid
  165. DeflLineRemnants1:  DEFL $+3-$100   cpl     ; error
  166. DeflLineRemnants2:  DEFL $+4-$100 : cpl     ; valid
  167. DeflLineRemnants3:  = $+5-$100      cpl     ; error
  168. DeflLineRemnants4:  = $+6-$100    : cpl     ; valid
  169.  
  170. ; the ones without colon are reported as errors since v1.17.1, because without colon
  171. ; this is total "gotcha":
  172. noColonProblemDemonstration EQU $   and 7
  173.     ; ^^ the expression parser will eat whole "$ and 7", no instruction/error here
  174.     ; obviously *this* does NOT report error even after change, it's valid expression...
  175.  
  176. ; v1.18.2 - added "exist" operator for expressions
  177.     ASSERT exist label && exist label.local && exist mod1.label && exist mod1.label.local && exist mod1.mod1unique
  178.     ASSERT exist mod1.nested.label && exist mod1.nested.label.local && exist mod1.nested.nest1unique
  179.     ASSERT exist noColonProblemDemonstration    ; should preserve "unused" flag!
  180.     ASSERT !exist MissingLabel && !exist @MissingLabel && !exist .MissingLabel
  181.     IFUSED MissingLabel : ASSERT 0, "MissingLabel should NOT exist + NOT be used" : ENDIF
  182.  
  183.     ; do another module setup to test the EXIST searching from inner blocks
  184.     MODULE mod3 : ORG $4156
  185.         ; check global ones (outside of current module)
  186.         DB  -(exist label + exist label.local + exist unique + exist mod1.label + exist mod1.label.local + exist mod1.mod1unique)  ; == 6 (no error)
  187.         DB  -(exist @label + exist @label.local + exist @unique + exist @mod1.label + exist @mod1.label.local + exist @mod1.mod1unique)  ; == 6 (no error)
  188.         DB  -(!exist mod2unique + exist mod2.mod2unique + exist @mod2.mod2unique)  ; == 3 (no error) (does not find mod2unique w/o module!)
  189. m3label:
  190.         DB -(exist m3label + exist mod3.m3label + !exist @m3label + exist @mod3.m3label)    ; == 4 (no error)
  191. .local:
  192.         DB -(exist .local + exist m3label.local + exist mod3.m3label.local + !exist @m3label.local + exist @mod3.m3label.local) ; == 5 (no error)
  193.         ; check nested-module from parent
  194.         DB -(!exist m3nlabel + exist nested.m3nlabel + exist nested.m3nlabel.local + exist mod3.nested.m3nlabel.local + exist @mod3.nested.m3nlabel.local)    ; == 5 (no error)
  195.         MODULE nested
  196. m3nlabel:
  197.             daa
  198. .local:
  199.             cpl
  200.         ENDMODULE
  201.  
  202.         ; parentheses form
  203.         DB -(exist(m3label) + exist(mod3.m3label) + !exist(@m3label) + exist(@mod3.m3label))    ; == 4 (no error)
  204.     ENDMODULE
  205.  
  206.     ; errors reporting for exist
  207. exist:              ; warning about reserved keyword (at top of listing, because early pass)
  208.     DW exist        ; no error, but assembles as label
  209.     DW exist 3xist  ; unexpected "3xist"
  210.     DW exist e\ist  ; unexpected "\ist" ("e") is picked up as label to check existence = 0
  211.     DW exist exi$t  ; unexpected "$t" ("exi") is picked up as label to check existence = 0
  212.     DW exist @@exi  ; unexpected "@@exi"
  213.     DW exist()      ; invalid label name + unexpected
  214.     DW exist(3xist) ; invalid label name + unexpected
  215.     DW exist(e\ist) ; unexpected "(e\ist)" - fails as argument for exists, fallback to symbol eval + extra chars
  216.     DW exist(exi$t) ; unexpected "(exi$t)" - fails as argument for exists, fallback to symbol eval + extra chars
  217.     DW exist(@@exi) ; invalid label name + unexpected
  218.  
  219. exist:              ; error Duplicate label: another code path exercised for test coverage
  220.