easycoder 250210.1__tar.gz → 250216.1__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 (175) hide show
  1. {easycoder-250210.1 → easycoder-250216.1}/PKG-INFO +2 -2
  2. {easycoder-250210.1 → easycoder-250216.1}/easycoder/__init__.py +1 -1
  3. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_compiler.py +5 -6
  4. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_condition.py +1 -0
  5. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_core.py +34 -16
  6. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_program.py +9 -7
  7. {easycoder-250210.1 → easycoder-250216.1}/LICENSE +0 -0
  8. {easycoder-250210.1 → easycoder-250216.1}/README.md +0 -0
  9. {easycoder-250210.1 → easycoder-250216.1}/doc/README.md +0 -0
  10. {easycoder-250210.1 → easycoder-250216.1}/doc/core/README.md +0 -0
  11. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/boolean.md +0 -0
  12. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/empty.md +0 -0
  13. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/ends.md +0 -0
  14. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/even.md +0 -0
  15. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/exists.md +0 -0
  16. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/greater.md +0 -0
  17. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/hasProperty.md +0 -0
  18. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/includes.md +0 -0
  19. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/is.md +0 -0
  20. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/less.md +0 -0
  21. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/list.md +0 -0
  22. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/none.md +0 -0
  23. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/not.md +0 -0
  24. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/numeric.md +0 -0
  25. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/object.md +0 -0
  26. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/odd.md +0 -0
  27. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/starts.md +0 -0
  28. {easycoder-250210.1 → easycoder-250216.1}/doc/core/conditions/string.md +0 -0
  29. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/add.md +0 -0
  30. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/append.md +0 -0
  31. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/assert.md +0 -0
  32. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/begin.md +0 -0
  33. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/clear.md +0 -0
  34. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/close.md +0 -0
  35. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/create.md +0 -0
  36. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/debug.md +0 -0
  37. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/decrement.md +0 -0
  38. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/delete.md +0 -0
  39. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/divide.md +0 -0
  40. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/exit.md +0 -0
  41. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/file.md +0 -0
  42. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/fork.md +0 -0
  43. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/get.md +0 -0
  44. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/go.md +0 -0
  45. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/gosub.md +0 -0
  46. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/if.md +0 -0
  47. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/import.md +0 -0
  48. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/increment.md +0 -0
  49. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/index.md +0 -0
  50. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/init.md +0 -0
  51. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/input.md +0 -0
  52. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/load.md +0 -0
  53. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/lock.md +0 -0
  54. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/log.md +0 -0
  55. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/module.md +0 -0
  56. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/multiply.md +0 -0
  57. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/negate.md +0 -0
  58. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/open.md +0 -0
  59. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/pop.md +0 -0
  60. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/post.md +0 -0
  61. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/print.md +0 -0
  62. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/push.md +0 -0
  63. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/put.md +0 -0
  64. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/read.md +0 -0
  65. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/release.md +0 -0
  66. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/replace.md +0 -0
  67. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/return.md +0 -0
  68. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/run.md +0 -0
  69. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/save.md +0 -0
  70. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/script.md +0 -0
  71. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/set.md +0 -0
  72. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/split.md +0 -0
  73. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/stack.md +0 -0
  74. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/stop.md +0 -0
  75. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/system.md +0 -0
  76. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/take.md +0 -0
  77. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/toggle.md +0 -0
  78. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/truncate.md +0 -0
  79. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/unlock.md +0 -0
  80. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/variable.md +0 -0
  81. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/wait.md +0 -0
  82. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/while.md +0 -0
  83. {easycoder-250210.1 → easycoder-250216.1}/doc/core/keywords/write.md +0 -0
  84. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/arg.md +0 -0
  85. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/args.md +0 -0
  86. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/cos.md +0 -0
  87. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/datime.md +0 -0
  88. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/decode.md +0 -0
  89. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/element.md +0 -0
  90. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/elements.md +0 -0
  91. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/empty.md +0 -0
  92. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/encode.md +0 -0
  93. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/error.md +0 -0
  94. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/files.md +0 -0
  95. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/float.md +0 -0
  96. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/from.md +0 -0
  97. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/hash.md +0 -0
  98. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/index.md +0 -0
  99. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/integer.md +0 -0
  100. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/json.md +0 -0
  101. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/keys.md +0 -0
  102. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/left.md +0 -0
  103. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/length.md +0 -0
  104. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/lowercase.md +0 -0
  105. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/memory.md +0 -0
  106. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/modification.md +0 -0
  107. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/modulo.md +0 -0
  108. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/newline.md +0 -0
  109. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/now.md +0 -0
  110. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/position.md +0 -0
  111. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/property.md +0 -0
  112. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/random.md +0 -0
  113. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/right.md +0 -0
  114. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/sin.md +0 -0
  115. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/stringify.md +0 -0
  116. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/tab.md +0 -0
  117. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/tan.md +0 -0
  118. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/timestamp.md +0 -0
  119. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/today.md +0 -0
  120. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/trim.md +0 -0
  121. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/type.md +0 -0
  122. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/uppercase.md +0 -0
  123. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/value.md +0 -0
  124. {easycoder-250210.1 → easycoder-250216.1}/doc/core/values/weekday.md +0 -0
  125. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/README.md +0 -0
  126. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/attach.md +0 -0
  127. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/close.md +0 -0
  128. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/create.md +0 -0
  129. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/ellipse.md +0 -0
  130. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/image.md +0 -0
  131. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/move.md +0 -0
  132. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/on.md +0 -0
  133. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/rectangle.md +0 -0
  134. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/render.md +0 -0
  135. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/run.md +0 -0
  136. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/set.md +0 -0
  137. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/keywords/text.md +0 -0
  138. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/values/attribute.md +0 -0
  139. {easycoder-250210.1 → easycoder-250216.1}/doc/graphics/values/window.md +0 -0
  140. {easycoder-250210.1 → easycoder-250216.1}/easycoder/README.md +0 -0
  141. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_classes.py +0 -0
  142. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_graphics.py +0 -0
  143. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_gutils.py +0 -0
  144. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_handler.py +0 -0
  145. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_timestamp.py +0 -0
  146. {easycoder-250210.1 → easycoder-250216.1}/easycoder/ec_value.py +0 -0
  147. {easycoder-250210.1 → easycoder-250216.1}/images/Semoigo Dawn.jpg +0 -0
  148. {easycoder-250210.1 → easycoder-250216.1}/json/graphics-demo.json +0 -0
  149. {easycoder-250210.1 → easycoder-250216.1}/plugins/ec_keyboard.py +0 -0
  150. {easycoder-250210.1 → easycoder-250216.1}/plugins/ec_p100.py +0 -0
  151. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/4-function.json +0 -0
  152. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/4-function.png +0 -0
  153. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-0.json +0 -0
  154. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-0.png +0 -0
  155. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-1.json +0 -0
  156. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-1.png +0 -0
  157. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-2.json +0 -0
  158. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-2.png +0 -0
  159. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-3.json +0 -0
  160. {easycoder-250210.1 → easycoder-250216.1}/plugins/keyboards/qwerty-3.png +0 -0
  161. {easycoder-250210.1 → easycoder-250216.1}/plugins/points.py +0 -0
  162. {easycoder-250210.1 → easycoder-250216.1}/pyproject.toml +0 -0
  163. {easycoder-250210.1 → easycoder-250216.1}/scripts/README.md +0 -0
  164. {easycoder-250210.1 → easycoder-250216.1}/scripts/benchmark.ecs +0 -0
  165. {easycoder-250210.1 → easycoder-250216.1}/scripts/config.ecg +0 -0
  166. {easycoder-250210.1 → easycoder-250216.1}/scripts/connect.ecg +0 -0
  167. {easycoder-250210.1 → easycoder-250216.1}/scripts/ec_keyboard.py +0 -0
  168. {easycoder-250210.1 → easycoder-250216.1}/scripts/findxr.ecs +0 -0
  169. {easycoder-250210.1 → easycoder-250216.1}/scripts/fizzbuzz.ecs +0 -0
  170. {easycoder-250210.1 → easycoder-250216.1}/scripts/hello.ecs +0 -0
  171. {easycoder-250210.1 → easycoder-250216.1}/scripts/points.ecs +0 -0
  172. {easycoder-250210.1 → easycoder-250216.1}/scripts/test.ecs +0 -0
  173. {easycoder-250210.1 → easycoder-250216.1}/scripts/testg.ecg +0 -0
  174. {easycoder-250210.1 → easycoder-250216.1}/scripts/tests.ecs +0 -0
  175. {easycoder-250210.1 → easycoder-250216.1}/test.ecs +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: easycoder
3
- Version: 250210.1
3
+ Version: 250216.1
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__ = "250210.1"
12
+ __version__ = "250216.1"
@@ -13,7 +13,6 @@ class Compiler:
13
13
  self.tokens = self.script.tokens
14
14
  self.symbols = self.program.symbols
15
15
  self.code = self.program.code
16
- self.warnings = []
17
16
  self.program.compiler = self
18
17
  self.addCommand = self.program.add
19
18
  self.compileConstant = self.value.compileConstant
@@ -107,11 +106,10 @@ class Compiler:
107
106
  def getSymbolRecord(self):
108
107
  token = self.getToken()
109
108
  symbol = self.symbols[token]
110
- if symbol != None:
111
- symbolRecord = self.code[symbol]
112
- symbolRecord['used'] = True
113
- return symbolRecord
114
- return None
109
+ if symbol == None: return None
110
+ symbolRecord = self.code[symbol]
111
+ symbolRecord['used'] = True
112
+ return symbolRecord
115
113
 
116
114
  def compileLabel(self, command):
117
115
  return self.compileSymbol(command, self.getToken(), False)
@@ -144,6 +142,7 @@ class Compiler:
144
142
 
145
143
  # Compile the current token
146
144
  def compileToken(self):
145
+ self.warnings = []
147
146
  token = self.getToken()
148
147
  # print(f'Compile {token}')
149
148
  if not token:
@@ -9,6 +9,7 @@ class Condition:
9
9
  self.tokenIs = compiler.tokenIs
10
10
  self.rewindTo = compiler.rewindTo
11
11
  self.program = compiler.program
12
+ self.negate = False
12
13
 
13
14
  def compileCondition(self):
14
15
  mark = self.getIndex()
@@ -696,22 +696,28 @@ class Core(Handler):
696
696
  self.program.importPlugin(f'{source}:{clazz}')
697
697
  return True
698
698
  elif self.isSymbol():
699
- command['target'] = self.getToken()
700
- if self.nextIs('from'):
701
- command['file'] = self.nextValue()
702
- self.add(command)
703
- return True
699
+ symbolRecord = self.getSymbolRecord()
700
+ if symbolRecord['valueHolder']:
701
+ command['target'] = symbolRecord['name']
702
+ if self.nextIs('from'):
703
+ command['file'] = self.nextValue()
704
+ self.add(command)
705
+ return True
706
+ else:
707
+ FatalError(self.program.compiler, f'I don\'t understand \'{self.getToken()}\'')
704
708
  return False
705
709
 
706
710
  def r_load(self, command):
707
711
  target = self.getVariable(command['target'])
708
- file = self.getRuntimeValue(command['file'])
712
+ filename = self.getRuntimeValue(command['file'])
713
+ try:
714
+ with open(filename) as f: content = f.read()
715
+ except:
716
+ RuntimeError(self.program, f'File \'{filename}\' not found')
709
717
  try:
710
- with open(file, 'r') as f:
711
- content = f.read()
718
+ if filename.endswith('.json'): content = json.loads(content)
712
719
  except:
713
- content=None
714
- if content != None and file.endswith('.json'): content = json.loads(content)
720
+ RuntimeError(self.program, 'Bad or null JSON string')
715
721
  value = {}
716
722
  value['type'] = 'text'
717
723
  value['content'] = content
@@ -1219,10 +1225,9 @@ class Core(Handler):
1219
1225
 
1220
1226
  def r_save(self, command):
1221
1227
  content = self.getRuntimeValue(command['content'])
1222
- file = self.getRuntimeValue(command['file'])
1223
- if file.endswith('.json'): content = json.dumps(content)
1224
- with open(file, 'w') as f:
1225
- f.write(content)
1228
+ filename = self.getRuntimeValue(command['file'])
1229
+ if filename.endswith('.json'): content = json.dumps(content)
1230
+ with open(filename, 'w') as f: f.write(content)
1226
1231
  return self.nextPC()
1227
1232
 
1228
1233
  # Send a message to a module
@@ -1691,6 +1696,7 @@ class Core(Handler):
1691
1696
  value['name'] = token
1692
1697
  symbolRecord = self.getSymbolRecord()
1693
1698
  keyword = symbolRecord['keyword']
1699
+
1694
1700
  if keyword == 'module':
1695
1701
  value['type'] = 'module'
1696
1702
  return value
@@ -2375,6 +2381,7 @@ class Core(Handler):
2375
2381
  # Compile a condition
2376
2382
  def compileCondition(self):
2377
2383
  condition = Condition()
2384
+
2378
2385
  if self.getToken() == 'not':
2379
2386
  condition.type = 'not'
2380
2387
  condition.value = self.nextValue()
@@ -2406,6 +2413,18 @@ class Core(Handler):
2406
2413
  return condition
2407
2414
  return None
2408
2415
 
2416
+ if token == 'does':
2417
+ self.nextToken()
2418
+ if self.nextIs('not'):
2419
+ if self.nextIs('have'):
2420
+ if self.nextToken() == 'property':
2421
+ prop = self.nextValue()
2422
+ condition.type = 'hasProperty'
2423
+ condition.property = prop
2424
+ condition.negate = not condition.negate
2425
+ return condition
2426
+ return None
2427
+
2409
2428
  if token in ['starts', 'ends']:
2410
2429
  self.nextToken()
2411
2430
  if self.nextToken() == 'with':
@@ -2498,7 +2517,7 @@ class Core(Handler):
2498
2517
  hasProp = True
2499
2518
  except:
2500
2519
  hasProp = False
2501
- return hasProp
2520
+ return not hasProp if condition.negate else hasProp
2502
2521
 
2503
2522
  def c_includes(self, condition):
2504
2523
  value1 = self.getRuntimeValue(condition.value1)
@@ -2543,4 +2562,3 @@ class Core(Handler):
2543
2562
  def c_string(self, condition):
2544
2563
  comparison = type(self.getRuntimeValue(condition.value1)) is str
2545
2564
  return not comparison if condition.negate else comparison
2546
- # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
@@ -149,17 +149,19 @@ class Program:
149
149
  elif valType == 'symbol':
150
150
  name = value['name']
151
151
  symbolRecord = self.getSymbolRecord(name)
152
- if symbolRecord['value'] == [None]:
153
- RuntimeWarning(self, f'Variable "{name}" has no value')
154
- return None
155
- handler = self.domainIndex[symbolRecord['domain']].valueHandler('symbol')
156
- result = handler(symbolRecord)
152
+ if symbolRecord['valueHolder']:
153
+ handler = self.domainIndex[symbolRecord['domain']].valueHandler('symbol')
154
+ result = handler(symbolRecord)
155
+ else:
156
+ # Call the given domain to handle a value
157
+ domain = self.domainIndex[value['domain']]
158
+ handler = domain.valueHandler(value['type'])
159
+ if handler: result = handler(value)
157
160
  else:
158
161
  # Call the given domain to handle a value
159
162
  domain = self.domainIndex[value['domain']]
160
163
  handler = domain.valueHandler(value['type'])
161
- if handler:
162
- result = handler(value)
164
+ if handler: result = handler(value)
163
165
 
164
166
  return result
165
167
 
File without changes
File without changes
File without changes
File without changes