easycoder 250611.3__tar.gz → 250611.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of easycoder might be problematic. Click here for more details.

Files changed (164) hide show
  1. {easycoder-250611.3 → easycoder-250611.5}/PKG-INFO +1 -1
  2. {easycoder-250611.3 → easycoder-250611.5}/easycoder/__init__.py +1 -1
  3. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_compiler.py +5 -2
  4. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_core.py +75 -47
  5. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_handler.py +1 -2
  6. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_program.py +0 -4
  7. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_pyside.py +7 -7
  8. {easycoder-250611.3 → easycoder-250611.5}/.gitignore +0 -0
  9. {easycoder-250611.3 → easycoder-250611.5}/LICENSE +0 -0
  10. {easycoder-250611.3 → easycoder-250611.5}/README.md +0 -0
  11. {easycoder-250611.3 → easycoder-250611.5}/backdrop.jpg +0 -0
  12. {easycoder-250611.3 → easycoder-250611.5}/doc/README.md +0 -0
  13. {easycoder-250611.3 → easycoder-250611.5}/doc/core/README.md +0 -0
  14. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/boolean.md +0 -0
  15. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/empty.md +0 -0
  16. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/ends.md +0 -0
  17. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/even.md +0 -0
  18. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/exists.md +0 -0
  19. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/greater.md +0 -0
  20. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/hasProperty.md +0 -0
  21. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/includes.md +0 -0
  22. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/is.md +0 -0
  23. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/less.md +0 -0
  24. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/list.md +0 -0
  25. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/none.md +0 -0
  26. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/not.md +0 -0
  27. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/numeric.md +0 -0
  28. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/object.md +0 -0
  29. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/odd.md +0 -0
  30. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/starts.md +0 -0
  31. {easycoder-250611.3 → easycoder-250611.5}/doc/core/conditions/string.md +0 -0
  32. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/add.md +0 -0
  33. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/append.md +0 -0
  34. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/assert.md +0 -0
  35. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/begin.md +0 -0
  36. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/clear.md +0 -0
  37. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/close.md +0 -0
  38. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/create.md +0 -0
  39. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/debug.md +0 -0
  40. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/decrement.md +0 -0
  41. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/delete.md +0 -0
  42. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/divide.md +0 -0
  43. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/exit.md +0 -0
  44. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/file.md +0 -0
  45. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/fork.md +0 -0
  46. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/get.md +0 -0
  47. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/go.md +0 -0
  48. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/gosub.md +0 -0
  49. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/if.md +0 -0
  50. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/import.md +0 -0
  51. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/increment.md +0 -0
  52. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/index.md +0 -0
  53. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/init.md +0 -0
  54. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/input.md +0 -0
  55. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/load.md +0 -0
  56. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/lock.md +0 -0
  57. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/log.md +0 -0
  58. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/module.md +0 -0
  59. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/multiply.md +0 -0
  60. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/negate.md +0 -0
  61. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/open.md +0 -0
  62. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/pop.md +0 -0
  63. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/post.md +0 -0
  64. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/print.md +0 -0
  65. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/push.md +0 -0
  66. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/put.md +0 -0
  67. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/read.md +0 -0
  68. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/release.md +0 -0
  69. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/replace.md +0 -0
  70. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/return.md +0 -0
  71. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/run.md +0 -0
  72. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/save.md +0 -0
  73. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/script.md +0 -0
  74. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/set.md +0 -0
  75. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/split.md +0 -0
  76. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/stack.md +0 -0
  77. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/stop.md +0 -0
  78. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/system.md +0 -0
  79. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/take.md +0 -0
  80. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/toggle.md +0 -0
  81. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/truncate.md +0 -0
  82. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/unlock.md +0 -0
  83. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/variable.md +0 -0
  84. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/wait.md +0 -0
  85. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/while.md +0 -0
  86. {easycoder-250611.3 → easycoder-250611.5}/doc/core/keywords/write.md +0 -0
  87. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/arg.md +0 -0
  88. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/args.md +0 -0
  89. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/cos.md +0 -0
  90. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/datime.md +0 -0
  91. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/decode.md +0 -0
  92. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/element.md +0 -0
  93. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/elements.md +0 -0
  94. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/empty.md +0 -0
  95. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/encode.md +0 -0
  96. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/error.md +0 -0
  97. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/files.md +0 -0
  98. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/float.md +0 -0
  99. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/from.md +0 -0
  100. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/hash.md +0 -0
  101. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/index.md +0 -0
  102. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/integer.md +0 -0
  103. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/json.md +0 -0
  104. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/keys.md +0 -0
  105. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/left.md +0 -0
  106. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/length.md +0 -0
  107. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/lowercase.md +0 -0
  108. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/memory.md +0 -0
  109. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/modification.md +0 -0
  110. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/modulo.md +0 -0
  111. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/newline.md +0 -0
  112. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/now.md +0 -0
  113. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/position.md +0 -0
  114. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/property.md +0 -0
  115. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/random.md +0 -0
  116. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/right.md +0 -0
  117. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/sin.md +0 -0
  118. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/stringify.md +0 -0
  119. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/tab.md +0 -0
  120. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/tan.md +0 -0
  121. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/timestamp.md +0 -0
  122. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/today.md +0 -0
  123. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/trim.md +0 -0
  124. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/type.md +0 -0
  125. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/uppercase.md +0 -0
  126. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/value.md +0 -0
  127. {easycoder-250611.3 → easycoder-250611.5}/doc/core/values/weekday.md +0 -0
  128. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/README.md +0 -0
  129. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/attach.md +0 -0
  130. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/close.md +0 -0
  131. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/create.md +0 -0
  132. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/ellipse.md +0 -0
  133. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/image.md +0 -0
  134. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/move.md +0 -0
  135. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/on.md +0 -0
  136. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/rectangle.md +0 -0
  137. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/render.md +0 -0
  138. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/run.md +0 -0
  139. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/set.md +0 -0
  140. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/keywords/text.md +0 -0
  141. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/values/attribute.md +0 -0
  142. {easycoder-250611.3 → easycoder-250611.5}/doc/graphics/values/window.md +0 -0
  143. {easycoder-250611.3 → easycoder-250611.5}/easycoder/README.md +0 -0
  144. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_classes.py +0 -0
  145. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_condition.py +0 -0
  146. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_timestamp.py +0 -0
  147. {easycoder-250611.3 → easycoder-250611.5}/easycoder/ec_value.py +0 -0
  148. {easycoder-250611.3 → easycoder-250611.5}/images/Semoigo Dawn.jpg +0 -0
  149. {easycoder-250611.3 → easycoder-250611.5}/json/graphics-demo.json +0 -0
  150. {easycoder-250611.3 → easycoder-250611.5}/plugins/ec_keyboard.py +0 -0
  151. {easycoder-250611.3 → easycoder-250611.5}/plugins/ec_p100.py +0 -0
  152. {easycoder-250611.3 → easycoder-250611.5}/plugins/ec_pyside6.py +0 -0
  153. {easycoder-250611.3 → easycoder-250611.5}/plugins/points.py +0 -0
  154. {easycoder-250611.3 → easycoder-250611.5}/pyproject.toml +0 -0
  155. {easycoder-250611.3 → easycoder-250611.5}/scripts/benchmark.ecs +0 -0
  156. {easycoder-250611.3 → easycoder-250611.5}/scripts/config.ecg +0 -0
  157. {easycoder-250611.3 → easycoder-250611.5}/scripts/ec_keyboard.py +0 -0
  158. {easycoder-250611.3 → easycoder-250611.5}/scripts/findxr.ecs +0 -0
  159. {easycoder-250611.3 → easycoder-250611.5}/scripts/fizzbuzz.ecs +0 -0
  160. {easycoder-250611.3 → easycoder-250611.5}/scripts/hello.ecs +0 -0
  161. {easycoder-250611.3 → easycoder-250611.5}/scripts/points.ecs +0 -0
  162. {easycoder-250611.3 → easycoder-250611.5}/scripts/test.ecs +0 -0
  163. {easycoder-250611.3 → easycoder-250611.5}/scripts/tests.ecs +0 -0
  164. {easycoder-250611.3 → easycoder-250611.5}/testrc.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: easycoder
3
- Version: 250611.3
3
+ Version: 250611.5
4
4
  Summary: Rapid scripting in English
5
5
  Keywords: compiler,scripting,prototyping,programming,coding,python,low code,hypertalk,computer language,learn to code
6
6
  Author-email: Graham Trott <gtanyware@gmail.com>
@@ -9,4 +9,4 @@ from .ec_program import *
9
9
  from .ec_timestamp import *
10
10
  from .ec_value import *
11
11
 
12
- __version__ = "250611.3"
12
+ __version__ = "250611.5"
@@ -14,7 +14,6 @@ class Compiler:
14
14
  self.symbols = self.program.symbols
15
15
  self.code = self.program.code
16
16
  self.program.compiler = self
17
- self.addCommand = self.program.add
18
17
  self.compileConstant = self.value.compileConstant
19
18
  self.debugCompile = False
20
19
 
@@ -77,6 +76,10 @@ class Compiler:
77
76
  def getCommandAt(self, pc):
78
77
  return self.program.code[pc]
79
78
 
79
+ # Add a command to the code list
80
+ def add(self, command):
81
+ self.code.append(command)
82
+
80
83
  def isSymbol(self):
81
84
  token=self.getToken()
82
85
  try:
@@ -148,7 +151,7 @@ class Compiler:
148
151
  command['import'] = None
149
152
  command['locked'] = False
150
153
  command['extra'] = extra
151
- self.addCommand(command)
154
+ self.add(command)
152
155
  return True
153
156
 
154
157
  # Compile the current token
@@ -126,7 +126,7 @@ class Core(Handler):
126
126
  command['with'] = self.nextValue()
127
127
  else:
128
128
  command['with'] = None
129
- self.addCommand(command)
129
+ self.add(command)
130
130
  return True
131
131
 
132
132
  def r_assert(self, command):
@@ -143,7 +143,7 @@ class Core(Handler):
143
143
  cmd['keyword'] = 'end'
144
144
  cmd['debug'] = True
145
145
  cmd['lino'] = command['lino']
146
- self.addCommand(cmd)
146
+ self.add(cmd)
147
147
  return self.nextPC()
148
148
  else:
149
149
  return self.compileFromHere(['end'])
@@ -441,7 +441,7 @@ class Core(Handler):
441
441
  timeout['type'] = 'int'
442
442
  timeout['content'] = 5
443
443
  command['timeout'] = timeout
444
- self.addCommand(command)
444
+ self.add(command)
445
445
  if self.peek() == 'or':
446
446
  self.nextToken()
447
447
  self.nextToken()
@@ -453,7 +453,7 @@ class Core(Handler):
453
453
  cmd['goto'] = 0
454
454
  cmd['debug'] = False
455
455
  skip = self.getPC()
456
- self.addCommand(cmd)
456
+ self.add(cmd)
457
457
  # Process the 'or'
458
458
  self.getCommandAt(get)['or'] = self.getPC()
459
459
  self.compileOne()
@@ -535,7 +535,7 @@ class Core(Handler):
535
535
  # if <condition> <action> [else <action>]
536
536
  def k_if(self, command):
537
537
  command['condition'] = self.nextCondition()
538
- self.addCommand(command)
538
+ self.add(command)
539
539
  self.nextToken()
540
540
  pcElse = self.getPC()
541
541
  cmd = {}
@@ -544,7 +544,7 @@ class Core(Handler):
544
544
  cmd['keyword'] = 'gotoPC'
545
545
  cmd['goto'] = 0
546
546
  cmd['debug'] = False
547
- self.addCommand(cmd)
547
+ self.add(cmd)
548
548
  # Get the 'then' code
549
549
  self.compileOne()
550
550
  if self.peek() == 'else':
@@ -557,7 +557,7 @@ class Core(Handler):
557
557
  cmd['keyword'] = 'gotoPC'
558
558
  cmd['goto'] = 0
559
559
  cmd['debug'] = False
560
- self.addCommand(cmd)
560
+ self.add(cmd)
561
561
  # Fixup the link to the 'else' branch
562
562
  self.getCommandAt(pcElse)['goto'] = self.getPC()
563
563
  # Process the 'else' branch
@@ -603,7 +603,7 @@ class Core(Handler):
603
603
  variable['keyword'] = keyword
604
604
  variable['import'] = None
605
605
  variable['used'] = False
606
- self.addCommand(variable)
606
+ self.add(variable)
607
607
  if self.peek() != 'and':
608
608
  break
609
609
  self.nextToken()
@@ -732,17 +732,37 @@ class Core(Handler):
732
732
  if record['keyword'] == 'ssh':
733
733
  command['ssh'] = record['name']
734
734
  command['path'] = self.nextValue()
735
- self.add(command)
736
- return True
737
-
738
- command['file'] = self.getValue()
735
+ else:
736
+ command['file'] = self.getValue()
737
+ else:
738
+ command['file'] = self.getValue()
739
+ command['or'] = None
740
+ load = self.getPC()
739
741
  self.add(command)
742
+ if self.peek() == 'or':
743
+ self.nextToken()
744
+ self.nextToken()
745
+ # Add a 'goto' to skip the 'or'
746
+ cmd = {}
747
+ cmd['lino'] = command['lino']
748
+ cmd['domain'] = 'core'
749
+ cmd['keyword'] = 'gotoPC'
750
+ cmd['goto'] = 0
751
+ cmd['debug'] = False
752
+ skip = self.getPC()
753
+ self.add(cmd)
754
+ # Process the 'or'
755
+ self.getCommandAt(load)['or'] = self.getPC()
756
+ self.compileOne()
757
+ # Fixup the skip
758
+ self.getCommandAt(skip)['goto'] = self.getPC()
740
759
  return True
741
760
  else:
742
761
  FatalError(self.compiler, f'I don\'t understand \'{self.getToken()}\'')
743
762
  return False
744
763
 
745
764
  def r_load(self, command):
765
+ errorReason = None
746
766
  target = self.getVariable(command['target'])
747
767
  if 'ssh' in command:
748
768
  ssh = self.getVariable(command['ssh'])
@@ -751,17 +771,24 @@ class Core(Handler):
751
771
  try:
752
772
  with sftp.open(path, 'r') as remote_file: content = remote_file.read().decode()
753
773
  except:
754
- RuntimeError(self.program, f'Unable to read from {path}')
774
+ errorReason = f'Unable to read from {path}'
755
775
  else:
756
776
  filename = self.getRuntimeValue(command['file'])
757
777
  try:
758
778
  with open(filename) as f: content = f.read()
779
+ try:
780
+ if filename.endswith('.json'): content = json.loads(content)
781
+ except:
782
+ errorReason = 'Bad or null JSON string'
759
783
  except:
760
- RuntimeError(self.program, f'Unable to read from {filename}')
761
- try:
762
- if filename.endswith('.json'): content = json.loads(content)
763
- except:
764
- RuntimeError(self.program, 'Bad or null JSON string')
784
+ errorReason = f'Unable to read from {filename}'
785
+
786
+ if errorReason:
787
+ if command['or'] != None:
788
+ print(f'Exception "{errorReason}": Running the "or" clause')
789
+ return command['or']
790
+ else:
791
+ RuntimeError(self.program, f'Error: {errorReason}')
765
792
  value = {}
766
793
  value['type'] = 'text'
767
794
  value['content'] = content
@@ -888,7 +915,7 @@ class Core(Handler):
888
915
  cmd['keyword'] = 'gotoPC'
889
916
  cmd['goto'] = 0
890
917
  cmd['debug'] = False
891
- self.addCommand(cmd)
918
+ self.add(cmd)
892
919
  # Add the action and a 'stop'
893
920
  self.compileOne()
894
921
  cmd = {}
@@ -896,7 +923,7 @@ class Core(Handler):
896
923
  cmd['lino'] = command['lino']
897
924
  cmd['keyword'] = 'stop'
898
925
  cmd['debug'] = False
899
- self.addCommand(cmd)
926
+ self.add(cmd)
900
927
  # Fixup the link
901
928
  command['goto'] = self.getPC()
902
929
  return True
@@ -990,7 +1017,7 @@ class Core(Handler):
990
1017
  command['result'] = None
991
1018
  command['or'] = None
992
1019
  post = self.getPC()
993
- self.addCommand(command)
1020
+ self.add(command)
994
1021
  if self.peek() == 'or':
995
1022
  self.nextToken()
996
1023
  self.nextToken()
@@ -1002,7 +1029,7 @@ class Core(Handler):
1002
1029
  cmd['goto'] = 0
1003
1030
  cmd['debug'] = False
1004
1031
  skip = self.getPC()
1005
- self.addCommand(cmd)
1032
+ self.add(cmd)
1006
1033
  # Process the 'or'
1007
1034
  self.getCommandAt(post)['or'] = self.getPC()
1008
1035
  self.compileOne()
@@ -1271,28 +1298,29 @@ class Core(Handler):
1271
1298
  self.add(command)
1272
1299
  else:
1273
1300
  command['file'] = self.getValue()
1274
- command['or'] = None
1275
- save = self.getPC()
1276
- self.addCommand(command)
1277
- if self.peek() == 'or':
1278
- self.nextToken()
1279
- self.nextToken()
1280
- # Add a 'goto' to skip the 'or'
1281
- cmd = {}
1282
- cmd['lino'] = command['lino']
1283
- cmd['domain'] = 'core'
1284
- cmd['keyword'] = 'gotoPC'
1285
- cmd['goto'] = 0
1286
- cmd['debug'] = False
1287
- skip = self.getPC()
1288
- self.addCommand(cmd)
1289
- # Process the 'or'
1290
- self.getCommandAt(save)['or'] = self.getPC()
1291
- self.compileOne()
1292
- # Fixup the skip
1293
- self.getCommandAt(skip)['goto'] = self.getPC()
1294
- return True
1295
- return False
1301
+ else:
1302
+ command['file'] = self.getValue()
1303
+ command['or'] = None
1304
+ save = self.getPC()
1305
+ self.add(command)
1306
+ if self.peek() == 'or':
1307
+ self.nextToken()
1308
+ self.nextToken()
1309
+ # Add a 'goto' to skip the 'or'
1310
+ cmd = {}
1311
+ cmd['lino'] = command['lino']
1312
+ cmd['domain'] = 'core'
1313
+ cmd['keyword'] = 'gotoPC'
1314
+ cmd['goto'] = 0
1315
+ cmd['debug'] = False
1316
+ skip = self.getPC()
1317
+ self.add(cmd)
1318
+ # Process the 'or'
1319
+ self.getCommandAt(save)['or'] = self.getPC()
1320
+ self.compileOne()
1321
+ # Fixup the skip
1322
+ self.getCommandAt(skip)['goto'] = self.getPC()
1323
+ return True
1296
1324
 
1297
1325
  def r_save(self, command):
1298
1326
  errorReason = None
@@ -1792,7 +1820,7 @@ class Core(Handler):
1792
1820
  # token = self.getToken()
1793
1821
  command['condition'] = code
1794
1822
  test = self.getPC()
1795
- self.addCommand(command)
1823
+ self.add(command)
1796
1824
  # Set up a goto for when the test fails
1797
1825
  fail = self.getPC()
1798
1826
  cmd = {}
@@ -1801,7 +1829,7 @@ class Core(Handler):
1801
1829
  cmd['keyword'] = 'gotoPC'
1802
1830
  cmd['goto'] = 0
1803
1831
  cmd['debug'] = False
1804
- self.addCommand(cmd)
1832
+ self.add(cmd)
1805
1833
  # Do the body of the while
1806
1834
  self.nextToken()
1807
1835
  if self.compileOne() == False:
@@ -1813,7 +1841,7 @@ class Core(Handler):
1813
1841
  cmd['keyword'] = 'gotoPC'
1814
1842
  cmd['goto'] = test
1815
1843
  cmd['debug'] = False
1816
- self.addCommand(cmd)
1844
+ self.add(cmd)
1817
1845
  # Fixup the 'goto' on completion
1818
1846
  self.getCommandAt(fail)['goto'] = self.getPC()
1819
1847
  return True
@@ -23,14 +23,13 @@ class Handler:
23
23
  self.rewindTo = compiler.rewindTo
24
24
  self.warning = compiler.warning
25
25
  self.getPC = compiler.getPC
26
- self.addCommand = compiler.addCommand
26
+ self.add = compiler.add
27
27
  self.getCommandAt = compiler.getCommandAt
28
28
  self.compileOne = compiler.compileOne
29
29
  self.compileFromHere = compiler.compileFromHere
30
30
  self.compileConstant = compiler.compileConstant
31
31
 
32
32
  self.code = self.program.code
33
- self.add = self.program.add
34
33
  self.evaluate = self.program.evaluate
35
34
  self.getVariable = self.program.getSymbolRecord
36
35
  self.getRuntimeValue = self.program.getRuntimeValue
@@ -116,10 +116,6 @@ class Program:
116
116
  def getDomains(self):
117
117
  return self.domains
118
118
 
119
- # Add a command to the code list
120
- def add(self, command):
121
- self.code.append(command)
122
-
123
119
  def getSymbolRecord(self, name):
124
120
  try:
125
121
  target = self.code[self.symbols[name]]
@@ -603,7 +603,7 @@ class Graphics(Handler):
603
603
  cmd['keyword'] = 'gotoPC'
604
604
  cmd['goto'] = 0
605
605
  cmd['debug'] = False
606
- self.addCommand(cmd)
606
+ self.add(cmd)
607
607
  # This is the click handler
608
608
  self.compileOne()
609
609
  cmd = {}
@@ -611,7 +611,7 @@ class Graphics(Handler):
611
611
  cmd['lino'] = command['lino']
612
612
  cmd['keyword'] = 'stop'
613
613
  cmd['debug'] = False
614
- self.addCommand(cmd)
614
+ self.add(cmd)
615
615
  # Fixup the goto
616
616
  self.getCommandAt(pcNext)['goto'] = self.getPC()
617
617
 
@@ -634,7 +634,7 @@ class Graphics(Handler):
634
634
  elif token == 'tick':
635
635
  command['tick'] = True
636
636
  command['runOnTick'] = self.getPC() + 2
637
- self.addCommand(command)
637
+ self.add(command)
638
638
  self.nextToken()
639
639
  # Step over the on tick action
640
640
  pcNext = self.getPC()
@@ -644,7 +644,7 @@ class Graphics(Handler):
644
644
  cmd['keyword'] = 'gotoPC'
645
645
  cmd['goto'] = 0
646
646
  cmd['debug'] = False
647
- self.addCommand(cmd)
647
+ self.add(cmd)
648
648
  # This is the on tick handler
649
649
  self.compileOne()
650
650
  cmd = {}
@@ -652,7 +652,7 @@ class Graphics(Handler):
652
652
  cmd['lino'] = command['lino']
653
653
  cmd['keyword'] = 'stop'
654
654
  cmd['debug'] = False
655
- self.addCommand(cmd)
655
+ self.add(cmd)
656
656
  # Fixup the goto
657
657
  self.getCommandAt(pcNext)['goto'] = self.getPC()
658
658
  return True
@@ -692,12 +692,12 @@ class Graphics(Handler):
692
692
  if record['keyword'] == 'combobox':
693
693
  command['variant'] = 'current'
694
694
  command['name'] = record['name']
695
- self.addCommand(command)
695
+ self.add(command)
696
696
  return True
697
697
  elif record['keyword'] == 'listbox':
698
698
  command['variant'] = 'current'
699
699
  command['name'] = record['name']
700
- self.addCommand(command)
700
+ self.add(command)
701
701
  return True
702
702
  return False
703
703
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes