ranger-compiler 2.1.69 → 3.0.3

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.
Files changed (363) hide show
  1. package/CHANGELOG.md +103 -0
  2. package/README.md +991 -96
  3. package/{compiler/Lang.clj → dist/Lang.rgr} +2345 -75
  4. package/dist/README.md +116 -0
  5. package/dist/{bin/api.d.ts → api.d.ts} +430 -154
  6. package/dist/api.js +34345 -0
  7. package/{lib/Ajax.clj → dist/lib/Ajax.rgr} +1 -1
  8. package/{lib/CmdParams.clj → dist/lib/CmdParams.rgr} +72 -72
  9. package/{lib/Crypto.clj → dist/lib/Crypto.rgr} +1 -1
  10. package/{lib/DOMLib.clj → dist/lib/DOMLib.rgr} +2 -2
  11. package/{lib/Engine3D.clj → dist/lib/Engine3D.rgr} +1 -1
  12. package/{lib/ImmutableVector.clj → dist/lib/ImmutableVector.rgr} +364 -364
  13. package/{lib/IndexedDB.clj → dist/lib/IndexedDB.rgr} +1 -1
  14. package/{lib/JSON.clj → dist/lib/JSON.rgr} +105 -2
  15. package/{lib/JinxProcess.clj → dist/lib/JinxProcess.rgr} +3 -3
  16. package/{lib/Storage.clj → dist/lib/Storage.rgr} +1 -1
  17. package/{lib/Timers.clj → dist/lib/Timers.rgr} +176 -170
  18. package/{lib/ViewLib.clj → dist/lib/ViewLib.rgr} +1 -1
  19. package/dist/lib/lib/ACEEditor.rgr +5 -0
  20. package/dist/lib/lib/Ajax.rgr +196 -0
  21. package/dist/lib/lib/CmdParams.rgr +72 -0
  22. package/dist/lib/lib/Crypto.rgr +90 -0
  23. package/dist/lib/lib/DOMLib.rgr +307 -0
  24. package/{examples/3D/Engine3D.clj → dist/lib/lib/Engine3D.rgr} +870 -857
  25. package/dist/lib/lib/ImmutableVector.rgr +364 -0
  26. package/dist/lib/lib/IndexedDB.rgr +32 -0
  27. package/{compiler/JSON.clj → dist/lib/lib/JSON.rgr} +106 -3
  28. package/dist/lib/lib/JinxProcess.rgr +838 -0
  29. package/dist/lib/lib/SQL.rgr +44 -0
  30. package/dist/lib/lib/ServiceLib.rgr +9 -0
  31. package/dist/lib/lib/Storage.rgr +89 -0
  32. package/dist/lib/lib/Time.rgr +75 -0
  33. package/dist/lib/lib/Timers.rgr +176 -0
  34. package/dist/lib/lib/TypedArrays.rgr +14 -0
  35. package/dist/lib/lib/ViewLib.rgr +851 -0
  36. package/dist/lib/lib/WebLib.rgr +47 -0
  37. package/dist/lib/lib/WebServerLib.rgr +137 -0
  38. package/{lib/ranger-dir.clj → dist/lib/lib/ranger-dir.rgr} +1 -1
  39. package/{compiler/stdlib.clj → dist/lib/lib/stdlib.rgr} +42 -19
  40. package/{lib/stdops.clj → dist/lib/lib/stdops.rgr} +1 -1
  41. package/dist/lib/ranger-dir.rgr +175 -0
  42. package/{lib/stdlib.clj → dist/lib/stdlib.rgr} +2 -2
  43. package/dist/lib/stdops.rgr +168 -0
  44. package/dist/package.json +47 -0
  45. package/{bin/output.js → dist/rgrc.js} +15377 -7935
  46. package/dist/stdops.rgr +168 -0
  47. package/package.json +196 -38
  48. package/adventofcode/day1/bin/LambdaSignature1.java +0 -3
  49. package/adventofcode/day1/bin/LambdaSignature2.java +0 -3
  50. package/adventofcode/day1/bin/LambdaSignature3.java +0 -3
  51. package/adventofcode/day1/bin/day1.cpp +0 -124
  52. package/adventofcode/day1/bin/day1.go +0 -75
  53. package/adventofcode/day1/bin/day1.js +0 -45
  54. package/adventofcode/day1/bin/day1.php +0 -46
  55. package/adventofcode/day1/bin/day1.scala +0 -48
  56. package/adventofcode/day1/bin/day1.swift +0 -48
  57. package/adventofcode/day1/bin/day1_part2.cpp +0 -180
  58. package/adventofcode/day1/bin/day1_part2.go +0 -123
  59. package/adventofcode/day1/bin/day1_part2.js +0 -76
  60. package/adventofcode/day1/bin/day1_part2.php +0 -88
  61. package/adventofcode/day1/bin/day1_part2.scala +0 -81
  62. package/adventofcode/day1/bin/day1_part2.swift +0 -91
  63. package/adventofcode/day1/bin/day_one.java +0 -38
  64. package/adventofcode/day1/bin/day_one_part_two.java +0 -57
  65. package/adventofcode/day1/bin/operatorsOf.java +0 -37
  66. package/adventofcode/day1/bin/operatorsOf_5.java +0 -10
  67. package/adventofcode/day1/bin/operatorsOfboolean_5.java +0 -10
  68. package/adventofcode/day1/bin/variant.hpp +0 -2416
  69. package/adventofcode/day1/compile.bat +0 -7
  70. package/adventofcode/day1/compile2.bat +0 -7
  71. package/adventofcode/day1/day1.clj +0 -19
  72. package/adventofcode/day1/day1_part2.clj +0 -43
  73. package/adventofcode/day1/input1.txt +0 -1
  74. package/adventofcode/day2/bin/LambdaSignature1.class +0 -0
  75. package/adventofcode/day2/bin/LambdaSignature1.java +0 -3
  76. package/adventofcode/day2/bin/LambdaSignature2.class +0 -0
  77. package/adventofcode/day2/bin/LambdaSignature2.java +0 -3
  78. package/adventofcode/day2/bin/day2.cpp +0 -133
  79. package/adventofcode/day2/bin/day2.go +0 -85
  80. package/adventofcode/day2/bin/day2.js +0 -45
  81. package/adventofcode/day2/bin/day2.php +0 -59
  82. package/adventofcode/day2/bin/day2.scala +0 -54
  83. package/adventofcode/day2/bin/day2.swift +0 -62
  84. package/adventofcode/day2/bin/day2_part2.cpp +0 -150
  85. package/adventofcode/day2/bin/day2_part2.go +0 -101
  86. package/adventofcode/day2/bin/day2_part2.js +0 -54
  87. package/adventofcode/day2/bin/day2_part2.php +0 -80
  88. package/adventofcode/day2/bin/day2_part2.scala +0 -68
  89. package/adventofcode/day2/bin/day2_part2.swift +0 -82
  90. package/adventofcode/day2/bin/day_two.java +0 -61
  91. package/adventofcode/day2/bin/day_two_part_two$1$1$1.class +0 -0
  92. package/adventofcode/day2/bin/day_two_part_two$1$1.class +0 -0
  93. package/adventofcode/day2/bin/day_two_part_two$1.class +0 -0
  94. package/adventofcode/day2/bin/day_two_part_two.class +0 -0
  95. package/adventofcode/day2/bin/day_two_part_two.java +0 -80
  96. package/adventofcode/day2/bin/operatorsOf.class +0 -0
  97. package/adventofcode/day2/bin/operatorsOf.java +0 -18
  98. package/adventofcode/day2/bin/variant.hpp +0 -2416
  99. package/adventofcode/day2/compile.bat +0 -7
  100. package/adventofcode/day2/compile2.bat +0 -7
  101. package/adventofcode/day2/day2.clj +0 -60
  102. package/adventofcode/day2/day2_part2.clj +0 -69
  103. package/adventofcode/day2/input1.txt +0 -1
  104. package/adventofcode/day3/bin/Grid.java +0 -92
  105. package/adventofcode/day3/bin/GridRow.java +0 -5
  106. package/adventofcode/day3/bin/LambdaSignature1.java +0 -3
  107. package/adventofcode/day3/bin/LambdaSignature2.java +0 -3
  108. package/adventofcode/day3/bin/LambdaSignature3.java +0 -3
  109. package/adventofcode/day3/bin/day3.cpp +0 -64
  110. package/adventofcode/day3/bin/day3.go +0 -55
  111. package/adventofcode/day3/bin/day3.js +0 -42
  112. package/adventofcode/day3/bin/day3.php +0 -41
  113. package/adventofcode/day3/bin/day3.scala +0 -52
  114. package/adventofcode/day3/bin/day3.swift +0 -43
  115. package/adventofcode/day3/bin/day3_part2.cpp +0 -216
  116. package/adventofcode/day3/bin/day3_part2.go +0 -188
  117. package/adventofcode/day3/bin/day3_part2.js +0 -123
  118. package/adventofcode/day3/bin/day3_part2.php +0 -135
  119. package/adventofcode/day3/bin/day3_part2.swift +0 -131
  120. package/adventofcode/day3/bin/day_three_part_two.java +0 -43
  121. package/adventofcode/day3/bin/day_two.java +0 -42
  122. package/adventofcode/day3/bin/operatorsOf.java +0 -14
  123. package/adventofcode/day3/bin/variant.hpp +0 -2416
  124. package/adventofcode/day3/compile.bat +0 -7
  125. package/adventofcode/day3/compile2.bat +0 -7
  126. package/adventofcode/day3/day3.clj +0 -42
  127. package/adventofcode/day3/day3_part2.clj +0 -112
  128. package/adventofcode/day4/bin/LambdaSignature1.java +0 -3
  129. package/adventofcode/day4/bin/day4.cpp +0 -118
  130. package/adventofcode/day4/bin/day4.go +0 -75
  131. package/adventofcode/day4/bin/day4.js +0 -40
  132. package/adventofcode/day4/bin/day4.php +0 -52
  133. package/adventofcode/day4/bin/day4.scala +0 -47
  134. package/adventofcode/day4/bin/day4.swift +0 -56
  135. package/adventofcode/day4/bin/day4_part2.go +0 -129
  136. package/adventofcode/day4/bin/day4_part2.js +0 -72
  137. package/adventofcode/day4/bin/day_four.java +0 -41
  138. package/adventofcode/day4/bin/inputData.java +0 -7
  139. package/adventofcode/day4/bin/operatorsOf.java +0 -11
  140. package/adventofcode/day4/bin/variant.hpp +0 -2416
  141. package/adventofcode/day4/compile.bat +0 -7
  142. package/adventofcode/day4/compile2.bat +0 -7
  143. package/adventofcode/day4/day4.clj +0 -32
  144. package/adventofcode/day4/day4_part2.clj +0 -44
  145. package/adventofcode/day4/input.clj +0 -519
  146. package/adventofcode/day4/input.txt +0 -512
  147. package/bin/api.ts +0 -24471
  148. package/bin/compiler.ts +0 -24482
  149. package/compiler/ColorConsole.clj +0 -22
  150. package/compiler/ContextOperators.clj +0 -75
  151. package/compiler/FlowEnterVarDef.clj +0 -223
  152. package/compiler/InputFileSystem.clj +0 -276
  153. package/compiler/RangerDocs.clj +0 -7
  154. package/compiler/TFactory.clj +0 -146
  155. package/compiler/TFiles.clj +0 -23
  156. package/compiler/TFlow.clj +0 -39
  157. package/compiler/TNodeFactory.clj +0 -84
  158. package/compiler/TTypes.clj +0 -188
  159. package/compiler/VirtualCompiler.clj +0 -800
  160. package/compiler/bin/ng_Compiler.js +0 -23779
  161. package/compiler/commonmark_plugin.clj +0 -359
  162. package/compiler/feat2.bat +0 -2
  163. package/compiler/feats.bat +0 -9
  164. package/compiler/feature_tests.clj +0 -192
  165. package/compiler/index.js +0 -2
  166. package/compiler/issue_57.clj +0 -25
  167. package/compiler/makefile_plugin.clj +0 -135
  168. package/compiler/markdown_plugin.clj +0 -386
  169. package/compiler/maven_plugin.clj +0 -162
  170. package/compiler/ng_AndroidPageWriter.clj +0 -299
  171. package/compiler/ng_CodeNode.clj +0 -756
  172. package/compiler/ng_CodeNodeCompilerExtensions.clj +0 -839
  173. package/compiler/ng_Compiler.clj +0 -49
  174. package/compiler/ng_CompilerGeneric.clj +0 -260
  175. package/compiler/ng_CompilerOrig.clj +0 -854
  176. package/compiler/ng_DictNode.clj +0 -346
  177. package/compiler/ng_DictNode2.clj +0 -316
  178. package/compiler/ng_Execute.clj +0 -138
  179. package/compiler/ng_Execute1.clj +0 -129
  180. package/compiler/ng_FlowWork.clj +0 -3951
  181. package/compiler/ng_LiveCompiler.clj +0 -1109
  182. package/compiler/ng_RagnerJavaScriptClassWriter.clj +0 -402
  183. package/compiler/ng_RangerActiveOperators.clj +0 -86
  184. package/compiler/ng_RangerAppClassDesc.clj +0 -400
  185. package/compiler/ng_RangerAppEnums.clj +0 -86
  186. package/compiler/ng_RangerAppFunctionDesc.clj +0 -127
  187. package/compiler/ng_RangerAppMessages.clj +0 -15
  188. package/compiler/ng_RangerAppOperatorDesc.clj +0 -20
  189. package/compiler/ng_RangerAppParamDesc.clj +0 -388
  190. package/compiler/ng_RangerAppWriterContext.clj +0 -1793
  191. package/compiler/ng_RangerArgMatch.clj +0 -638
  192. package/compiler/ng_RangerCSharpClassWriter.clj +0 -484
  193. package/compiler/ng_RangerCppClassWriter.clj +0 -1023
  194. package/compiler/ng_RangerDocGenerator.clj +0 -305
  195. package/compiler/ng_RangerFlowParser.clj +0 -4992
  196. package/compiler/ng_RangerFlowParserOrig.clj +0 -4002
  197. package/compiler/ng_RangerGenericClassWriter.clj +0 -573
  198. package/compiler/ng_RangerGolangClassWriter.clj +0 -1766
  199. package/compiler/ng_RangerImmutableExtension.clj +0 -77
  200. package/compiler/ng_RangerJava7ClassWriter.clj +0 -961
  201. package/compiler/ng_RangerJavaScriptClassWriter.clj +0 -1042
  202. package/compiler/ng_RangerKotlinClassWriter.clj +0 -372
  203. package/compiler/ng_RangerLanguageWriters.clj +0 -14
  204. package/compiler/ng_RangerLispParser.clj +0 -873
  205. package/compiler/ng_RangerPHPClassWriter.clj +0 -643
  206. package/compiler/ng_RangerPlugin.clj +0 -41
  207. package/compiler/ng_RangerRangerClassWriter.clj +0 -357
  208. package/compiler/ng_RangerRustClassWriter.clj +0 -420
  209. package/compiler/ng_RangerScalaClassWriter.clj +0 -818
  210. package/compiler/ng_RangerSerializeClass.clj +0 -502
  211. package/compiler/ng_RangerServiceBuilder.clj +0 -63
  212. package/compiler/ng_RangerSwift3ClassWriter.clj +0 -809
  213. package/compiler/ng_RangerSwiftClassWriter.clj +0 -0
  214. package/compiler/ng_RangerTypeClass.clj +0 -45
  215. package/compiler/ng_SourceParser.clj +0 -241
  216. package/compiler/ng_SourceParser2.clj +0 -214
  217. package/compiler/ng_WebPageWriter.clj +0 -39
  218. package/compiler/ng_jsonParser.clj +0 -340
  219. package/compiler/ng_p_test.clj +0 -1711
  220. package/compiler/ng_parser.clj +0 -911
  221. package/compiler/ng_parser2.clj +0 -735
  222. package/compiler/ng_parser2_backup.clj +0 -1679
  223. package/compiler/ng_parser_backup.clj +0 -886
  224. package/compiler/ng_parser_ok.clj +0 -1718
  225. package/compiler/ng_parser_ok2.clj +0 -1717
  226. package/compiler/ng_parser_std_match.clj +0 -687
  227. package/compiler/ng_parser_std_match2.clj +0 -1012
  228. package/compiler/ng_parser_v2.clj +0 -1251
  229. package/compiler/ng_ui.clj +0 -403
  230. package/compiler/ng_ui_test.clj +0 -18
  231. package/compiler/ng_writer.clj +0 -338
  232. package/compiler/ng_xmlParser.clj +0 -472
  233. package/compiler/ng_xmlParser2.clj +0 -317
  234. package/compiler/ng_xmlParser3.clj +0 -251
  235. package/compiler/opdoc.bat +0 -4
  236. package/compiler/operators.md +0 -290
  237. package/compiler/p.bat +0 -4
  238. package/compiler/package.json +0 -10
  239. package/compiler/pcmd.bat +0 -4
  240. package/compiler/pcmd2.bat +0 -3
  241. package/compiler/plaintext_plugin.clj +0 -69
  242. package/compiler/plugin.bat +0 -19
  243. package/compiler/plugin2.bat +0 -4
  244. package/compiler/plugin_app.bat +0 -3
  245. package/compiler/plugin_apps.clj +0 -27
  246. package/compiler/plugins.bat +0 -10
  247. package/compiler/reveal_plugin.clj +0 -409
  248. package/compiler/simplePlugin.clj +0 -780
  249. package/compiler/t.bat +0 -3
  250. package/compiler/test_any.clj +0 -43
  251. package/compiler/test_call.clj +0 -141
  252. package/compiler/test_chain.clj +0 -79
  253. package/compiler/test_json.clj +0 -10
  254. package/compiler/test_lambda.clj +0 -153
  255. package/compiler/test_pcmd.clj +0 -32
  256. package/compiler/test_pcmd2.clj +0 -29
  257. package/compiler/test_plugin.clj +0 -237
  258. package/compiler/test_readfile.clj +0 -13
  259. package/compiler/test_reveal.clj +0 -19
  260. package/compiler/test_slides.clj +0 -312
  261. package/compiler/test_types.clj +0 -143
  262. package/compiler/test_types2.clj +0 -49
  263. package/compiler/test_types3.clj +0 -53
  264. package/compiler/test_var.clj +0 -40
  265. package/compiler/tonpm.bat +0 -14
  266. package/compiler/tonpm2.bat +0 -12
  267. package/compiler/ui_plugin.clj +0 -507
  268. package/compiler/ui_plugin2.clj +0 -427
  269. package/compiler/update-git.bat +0 -3
  270. package/compiler/vcomp.bat +0 -4
  271. package/compiler/viewbuilder_Android.clj +0 -176
  272. package/compiler/viewbuilder_Web.clj +0 -105
  273. package/dist/bin/api.js +0 -32422
  274. package/dist/bin/api.js.map +0 -1
  275. package/dist/bin/compiler.d.ts +0 -1638
  276. package/dist/bin/compiler.js +0 -32444
  277. package/dist/bin/compiler.js.map +0 -1
  278. package/examples/3D/bin/test_3d.js +0 -329
  279. package/examples/3D/test_3d.clj +0 -385
  280. package/examples/EVGColor/EVGColor.clj +0 -310
  281. package/examples/EVGColor/EVGColorContext.clj +0 -176
  282. package/examples/EVGColor/bin/EVGColor.js +0 -286
  283. package/examples/EVGColor/bin/minimized.js +0 -286
  284. package/examples/SVGPath/SVGPath.clj +0 -625
  285. package/examples/SVGPath/Vec2.clj +0 -103
  286. package/examples/SVGPath/bin/SVGPath.cpp +0 -887
  287. package/examples/SVGPath/bin/SVGPath.js +0 -682
  288. package/examples/SVGPath/bin/minimized.js +0 -578
  289. package/examples/SVGPath/bin/variant.hpp +0 -2416
  290. package/examples/minification/Vec2.clj +0 -103
  291. package/examples/minification/bin/minified.js +0 -44
  292. package/examples/minification/bin/test.js +0 -117
  293. package/examples/minification/test.clj +0 -13
  294. package/fiddle/VirtualCompiler.js +0 -23495
  295. package/fiddle/browser_editor.js +0 -13240
  296. package/fiddle/compileEnv.js +0 -1
  297. package/fiddle/compileEnv.json +0 -1
  298. package/fiddle/lang_data.js +0 -1
  299. package/index.html +0 -18
  300. package/native/httpd/HttpTester.clj +0 -33
  301. package/native/httpd/RangerWebService.clj +0 -81
  302. package/operators.md +0 -290
  303. package/tsconfig.json +0 -29
  304. package/versions/cpp/compiler.cpp +0 -15032
  305. package/versions/es6/compiler.js +0 -12860
  306. package/versions/go/compiler.go +0 -21338
  307. package/versions/java/AfterCodeNode.java +0 -4
  308. package/versions/java/ClassJoinPoint.java +0 -6
  309. package/versions/java/CodeFile.java +0 -42
  310. package/versions/java/CodeFileSystem.java +0 -72
  311. package/versions/java/CodeNode.java +0 -807
  312. package/versions/java/CodeSlice.java +0 -13
  313. package/versions/java/CodeWriter.java +0 -185
  314. package/versions/java/ColorConsole.java +0 -8
  315. package/versions/java/CompilerInterface.java +0 -213
  316. package/versions/java/DictNode.java +0 -353
  317. package/versions/java/LiveCompiler.java +0 -772
  318. package/versions/java/NodeEvalState.java +0 -24
  319. package/versions/java/OpFindResult.java +0 -6
  320. package/versions/java/RangerAppArrayValue.java +0 -7
  321. package/versions/java/RangerAppClassDesc.java +0 -217
  322. package/versions/java/RangerAppEnum.java +0 -14
  323. package/versions/java/RangerAppFunctionDesc.java +0 -20
  324. package/versions/java/RangerAppHashValue.java +0 -11
  325. package/versions/java/RangerAppInterfaceImpl.java +0 -6
  326. package/versions/java/RangerAppMethodVariants.java +0 -6
  327. package/versions/java/RangerAppParamDesc.java +0 -321
  328. package/versions/java/RangerAppTodo.java +0 -6
  329. package/versions/java/RangerAppValue.java +0 -10
  330. package/versions/java/RangerAppWriterContext.java +0 -800
  331. package/versions/java/RangerArgMatch.java +0 -317
  332. package/versions/java/RangerBackReference.java +0 -7
  333. package/versions/java/RangerCSharpClassWriter.java +0 -287
  334. package/versions/java/RangerCompilerMessage.java +0 -9
  335. package/versions/java/RangerCppClassWriter.java +0 -725
  336. package/versions/java/RangerFlowParser.java +0 -2142
  337. package/versions/java/RangerGenericClassWriter.java +0 -367
  338. package/versions/java/RangerGolangClassWriter.java +0 -1379
  339. package/versions/java/RangerJava7ClassWriter.java +0 -652
  340. package/versions/java/RangerJavaScriptClassWriter.java +0 -305
  341. package/versions/java/RangerKotlinClassWriter.java +0 -380
  342. package/versions/java/RangerLispParser.java +0 -845
  343. package/versions/java/RangerNodeValue.java +0 -9
  344. package/versions/java/RangerPHPClassWriter.java +0 -527
  345. package/versions/java/RangerParamEventHandler.java +0 -6
  346. package/versions/java/RangerParamEventList.java +0 -5
  347. package/versions/java/RangerParamEventMap.java +0 -27
  348. package/versions/java/RangerRangerClassWriter.java +0 -268
  349. package/versions/java/RangerRefForce.java +0 -7
  350. package/versions/java/RangerScalaClassWriter.java +0 -365
  351. package/versions/java/RangerSerializeClass.java +0 -148
  352. package/versions/java/RangerSwift3ClassWriter.java +0 -548
  353. package/versions/java/RangerTypeClass.java +0 -17
  354. package/versions/java/SourceCode.java +0 -65
  355. package/versions/php/compiler.php +0 -13830
  356. package/versions/swift3/compiler.swift +0 -12542
  357. /package/{lib/ACEEditor.clj → dist/lib/ACEEditor.rgr} +0 -0
  358. /package/{lib/SQL.clj → dist/lib/SQL.rgr} +0 -0
  359. /package/{lib/ServiceLib.clj → dist/lib/ServiceLib.rgr} +0 -0
  360. /package/{lib/Time.clj → dist/lib/Time.rgr} +0 -0
  361. /package/{lib/TypedArrays.clj → dist/lib/TypedArrays.rgr} +0 -0
  362. /package/{lib/WebLib.clj → dist/lib/WebLib.rgr} +0 -0
  363. /package/{lib/WebServerLib.clj → dist/lib/WebServerLib.rgr} +0 -0
@@ -1,873 +0,0 @@
1
-
2
-
3
- class SourceCode {
4
- def code:string ""
5
- def sp:int 0
6
- def ep:int 0
7
-
8
- Constructor ( code_str:string ) {
9
- code = code_str
10
- }
11
- }
12
-
13
- class RangerLispParser {
14
- def code@(optional):SourceCode
15
- def buff@(optional):charbuffer
16
- def len:int 0
17
- def i:int 0
18
- def parents@(weak):[CodeNode]
19
- def next@(optional):CodeNode
20
- def paren_cnt:int 0
21
- def get_op_pred:int 0
22
- def rootNode@(optional):CodeNode
23
- def curr_node@(optional weak):CodeNode
24
- def had_error:boolean false
25
-
26
- Constructor ( code_module:SourceCode ) {
27
- buff = (to_charbuffer code_module.code)
28
- code = code_module
29
- len = (length (( unwrap buff)))
30
- rootNode = (new CodeNode(( unwrap code), 0, 0))
31
- rootNode.is_block_node = true
32
- rootNode.expression = true
33
- curr_node = rootNode
34
- push parents ( unwrap curr_node)
35
- paren_cnt = 1
36
- }
37
-
38
- fn getCode:string () {
39
- return (rootNode.getCode())
40
- }
41
-
42
- fn parse_raw_annotation:CodeNode () {
43
- def sp:int i
44
- def ep:int i
45
- i = i + 1
46
- sp = i
47
- ep = i
48
- if i < len {
49
- def a_node2:CodeNode (new CodeNode(( unwrap code), sp, ep))
50
- a_node2.expression = true
51
- curr_node = a_node2
52
- push parents a_node2
53
- i = i + 1
54
- paren_cnt = paren_cnt + 1
55
- this.parse()
56
- return a_node2
57
- } {
58
- }
59
- return (new CodeNode(( unwrap code), sp, ep))
60
- }
61
-
62
- fn skip_space:boolean ( is_block_parent@(lives):boolean) {
63
- def s:charbuffer ( unwrap buff)
64
- def did_break:boolean false
65
- if i >= len {
66
- return true
67
- }
68
- def c:char (charAt s i)
69
- def bb:boolean c == ((charcode ".")
70
- while ((i < len) && (c <= 32)) {
71
- if is_block_parent && ((c == 10) || (c == 13)) {
72
- this.end_expression()
73
- did_break = true
74
- break
75
- }
76
- i = 1 + i
77
- if i >= len {
78
- return true
79
- }
80
- c = (charAt s i)
81
- }
82
- return did_break
83
- }
84
-
85
- fn end_expression:boolean () {
86
- i = 1 + i
87
- if i >= len {
88
- return false
89
- }
90
- paren_cnt = paren_cnt - 1
91
- if paren_cnt < 0 {
92
- print "Parser error ) mismatch"
93
- }
94
- removeLast parents
95
- if (!null? curr_node) {
96
- curr_node.ep = i
97
- curr_node.infix_operator = false
98
- }
99
- if ((array_length parents)) > 0 {
100
- curr_node = (itemAt parents (((array_length parents)) - 1))
101
- } {
102
- curr_node = rootNode
103
- }
104
- curr_node.infix_operator = false
105
- return true
106
- }
107
-
108
- fn getOperator:int () {
109
- def s:charbuffer ( unwrap buff)
110
- if (i + 2) >= len {
111
- return 0
112
- }
113
- def c:char (charAt s i)
114
- def c2:char (charAt s (i + 1))
115
- switch (c ) {
116
- case (charcode "*" {
117
- i = i + 1
118
- return 14
119
- }
120
- case (charcode "/" {
121
- i = i + 1
122
- return 14
123
- }
124
- case (charcode "+" {
125
- i = i + 1
126
- return 13
127
- }
128
- case (charcode "-" {
129
- i = i + 1
130
- return 13
131
- }
132
- case (charcode "<" {
133
- if c2 == ((charcode "=") {
134
- i = i + 2
135
- return 11
136
- }
137
- i = i + 1
138
- return 11
139
- }
140
- case (charcode ">" {
141
- if c2 == ((charcode "=") {
142
- i = i + 2
143
- return 11
144
- }
145
- i = i + 1
146
- return 11
147
- }
148
- case (charcode "!" {
149
- if c2 == ((charcode "=") {
150
- i = i + 2
151
- return 10
152
- }
153
- return 0
154
- }
155
- case (charcode "=" {
156
- if c2 == ((charcode "=") {
157
- i = i + 2
158
- return 10
159
- }
160
- i = i + 1
161
- return 3
162
- }
163
- case (charcode "&" {
164
- if c2 == ((charcode "&") {
165
- i = i + 2
166
- return 6
167
- }
168
- return 0
169
- }
170
- case (charcode "|" {
171
- if c2 == ((charcode "|") {
172
- i = i + 2
173
- return 5
174
- }
175
- return 0
176
- }
177
- default {
178
- }
179
- }
180
- return 0
181
- }
182
-
183
- fn isOperator:int () {
184
- def s:charbuffer ( unwrap buff)
185
- if (i - 2) > len {
186
- return 0
187
- }
188
- def c:char (charAt s i)
189
- def c2:char (charAt s (i + 1))
190
- switch (c ) {
191
- case (charcode "*" {
192
- return 1
193
- }
194
- case (charcode "/" {
195
- return 14
196
- }
197
- case (charcode "+" {
198
- return 13
199
- }
200
- case (charcode "-" {
201
- return 13
202
- }
203
- case (charcode "<" {
204
- if c2 == ((charcode "=") {
205
- return 11
206
- }
207
- return 11
208
- }
209
- case (charcode ">" {
210
- if c2 == ((charcode "=") {
211
- return 11
212
- }
213
- return 11
214
- }
215
- case (charcode "!" {
216
- if c2 == ((charcode "=") {
217
- return 10
218
- }
219
- return 0
220
- }
221
- case (charcode "=" {
222
- if c2 == ((charcode "=") {
223
- return 10
224
- }
225
- return 3
226
- }
227
- case (charcode "&" {
228
- if c2 == ((charcode "&") {
229
- return 6
230
- }
231
- return 0
232
- }
233
- case (charcode "|" {
234
- if c2 == ((charcode "|") {
235
- return 5
236
- }
237
- return 0
238
- }
239
- default {
240
- }
241
- }
242
- return 0
243
- }
244
-
245
- fn getOperatorPred:int ( str@(lives):string) {
246
- switch (str ) {
247
- case "<" {
248
- return 11
249
- }
250
- case ">" {
251
- return 11
252
- }
253
- case "<=" {
254
- return 11
255
- }
256
- case ">=" {
257
- return 11
258
- }
259
- case "==" {
260
- return 10
261
- }
262
- case "!=" {
263
- return 10
264
- }
265
- case "=" {
266
- return 3
267
- }
268
- case "&&" {
269
- return 6
270
- }
271
- case "||" {
272
- return 5
273
- }
274
- case "+" {
275
- return 13
276
- }
277
- case "-" {
278
- return 13
279
- }
280
- case "*" {
281
- return 14
282
- }
283
- case "/" {
284
- return 14
285
- }
286
- default {
287
- }
288
- }
289
- return 0
290
- }
291
-
292
- fn insert_node:void ( p_node@(strong lives):CodeNode) {
293
- def push_target@(optional weak lives):CodeNode curr_node
294
- if curr_node.infix_operator {
295
- push_target = curr_node.infix_node
296
- if push_target.to_the_right {
297
- push_target = push_target.right_node
298
- p_node.parent = push_target
299
- }
300
- }
301
- push push_target.children p_node
302
- }
303
-
304
- fn parse:void () {
305
- def s:charbuffer ( unwrap buff)
306
- def c:char (charAt s 0)
307
- def next_c:char 0
308
- def fc:char 0
309
- def new_node@(optional):CodeNode
310
- def sp:int 0
311
- def ep:int 0
312
- def last_i:int 0
313
- def had_lf:boolean false
314
- while (i < len) {
315
- if had_error {
316
- break
317
- }
318
- last_i = i
319
- def is_block_parent:boolean false
320
- if had_lf {
321
- had_lf = false
322
- this.end_expression()
323
- break
324
- }
325
- if (!null? curr_node) {
326
- if (!null? curr_node.parent) {
327
- def nodeParent@(optional):CodeNode curr_node.parent
328
- if nodeParent.is_block_node {
329
- is_block_parent = true
330
- }
331
- }
332
- }
333
- if (this.skip_space(is_block_parent)) {
334
- break
335
- }
336
- had_lf = false
337
- c = (charAt s i)
338
- if i < len {
339
- c = (charAt s i)
340
- if c == 59 {
341
- sp = i + 1
342
- while ((i < len) && (((charAt s i)) > 31)) {
343
- i = 1 + i
344
- }
345
- if i >= len {
346
- break
347
- }
348
- new_node = (new CodeNode(( unwrap code), sp, i))
349
- new_node.value_type = RangerNodeType.Comment
350
- new_node.string_value = (substring s sp i)
351
- push curr_node.comments ( unwrap new_node)
352
- continue
353
- }
354
- if i < (len - 1) {
355
- fc = (charAt s (i + 1))
356
- if (c == 40) || (c == ((charcode "{")) || ((c == 39) && (fc == 40)) || ((c == 96) && (fc == 40)) {
357
- paren_cnt = paren_cnt + 1
358
- if (null? curr_node) {
359
- rootNode = (new CodeNode(( unwrap code), i, i))
360
- curr_node = rootNode
361
- if c == 96 {
362
- curr_node.value_type = RangerNodeType.Quasiliteral
363
- }
364
- if c == 39 {
365
- curr_node.value_type = RangerNodeType.Literal
366
- }
367
- curr_node.expression = true
368
- push parents ( unwrap curr_node)
369
- } {
370
- def new_qnode@(lives):CodeNode (new CodeNode(( unwrap code), i, i))
371
- if c == 96 {
372
- new_qnode.value_type = RangerNodeType.Quasiliteral
373
- }
374
- if c == 39 {
375
- new_qnode.value_type = RangerNodeType.Literal
376
- }
377
- new_qnode.expression = true
378
- this.insert_node(new_qnode)
379
- push parents new_qnode
380
- curr_node = new_qnode
381
- }
382
- if c == ((charcode "{") {
383
- curr_node.is_block_node = true
384
- }
385
- i = 1 + i
386
- this.parse()
387
- continue
388
- }
389
- }
390
- sp = i
391
- ep = i
392
- fc = (charAt s i)
393
- if ((fc == 45) && (((charAt s (i + 1))) >= 46) && (((charAt s (i + 1))) <= 57)) || ((fc >= 48) && (fc <= 57)) {
394
- def is_double:boolean false
395
- sp = i
396
- i = 1 + i
397
- c = (charAt s i)
398
- while ((i < len) && (((c >= 48) && (c <= 57)) || (c == ((charcode ".")) || ((i == sp) && ((c == ((charcode "+")) || (c == ((charcode "-")))))) {
399
- if c == ((charcode ".") {
400
- is_double = true
401
- }
402
- i = 1 + i
403
- c = (charAt s i)
404
- }
405
- ep = i
406
- def new_num_node:CodeNode (new CodeNode(( unwrap code), sp, ep))
407
- if is_double {
408
- new_num_node.value_type = RangerNodeType.Double
409
- new_num_node.double_value = ( unwrap ((str2double ((substring s sp ep))))
410
- } {
411
- new_num_node.value_type = RangerNodeType.Integer
412
- new_num_node.int_value = ( unwrap ((str2int ((substring s sp ep))))
413
- }
414
- this.insert_node(new_num_node)
415
- continue
416
- }
417
- if fc == 34 {
418
- sp = i + 1
419
- ep = sp
420
- c = (charAt s i)
421
- def must_encode:boolean false
422
- while (i < len) {
423
- i = 1 + i
424
- c = (charAt s i)
425
- if c == 34 {
426
- break
427
- }
428
- if c == 92 {
429
- i = 1 + i
430
- if i < len {
431
- must_encode = true
432
- c = (charAt s i)
433
- } {
434
- break
435
- }
436
- }
437
- }
438
- ep = i
439
- if i < len {
440
- def encoded_str:string ""
441
- if must_encode {
442
- def orig_str:charbuffer (to_charbuffer ((substring s sp ep)))
443
- def str_length:int (length orig_str)
444
- def ii:int 0
445
- while (ii < str_length) {def cc:char (charAt orig_str ii)
446
- if cc == 92 {
447
- def next_ch:char (charAt orig_str (ii + 1))
448
- switch (next_ch ) {
449
- case 34 {
450
- encoded_str = encoded_str + ((strfromcode 34)
451
- }
452
- case 92 {
453
- encoded_str = encoded_str + ((strfromcode 92)
454
- }
455
- case 47 {
456
- encoded_str = encoded_str + ((strfromcode 47)
457
- }
458
- case 98 {
459
- encoded_str = encoded_str + ((strfromcode 8)
460
- }
461
- case 102 {
462
- encoded_str = encoded_str + ((strfromcode 12)
463
- }
464
- case 110 {
465
- encoded_str = encoded_str + ((strfromcode 10)
466
- }
467
- case 114 {
468
- encoded_str = encoded_str + ((strfromcode 13)
469
- }
470
- case 116 {
471
- encoded_str = encoded_str + ((strfromcode 9)
472
- }
473
- case 117 {
474
- ii = ii + 4
475
- }
476
- default {
477
- }
478
- }
479
- ii = ii + 2
480
- } {
481
- encoded_str = encoded_str + ((substring orig_str ii (1 + ii)))
482
- ii = ii + 1
483
- }
484
- }
485
- }
486
- def new_str_node:CodeNode (new CodeNode(( unwrap code), sp, ep))
487
- new_str_node.value_type = RangerNodeType.String
488
- if must_encode {
489
- new_str_node.string_value = encoded_str
490
- } {
491
- new_str_node.string_value = (substring s sp ep)
492
- }
493
- this.insert_node(new_str_node)
494
- i = 1 + i
495
- continue
496
- }
497
- }
498
- if (fc == ((charcode "t")) && (((charAt s (i + 1))) == ((charcode "r")) && (((charAt s (i + 2))) == ((charcode "u")) && (((charAt s (i + 3))) == ((charcode "e")) {
499
- def new_true_node:CodeNode (new CodeNode(( unwrap code), sp, sp + 4))
500
- new_true_node.value_type = RangerNodeType.Boolean
501
- new_true_node.boolean_value = true
502
- this.insert_node(new_true_node)
503
- i = i + 4
504
- continue
505
- }
506
- if (fc == ((charcode "f")) && (((charAt s (i + 1))) == ((charcode "a")) && (((charAt s (i + 2))) == ((charcode "l")) && (((charAt s (i + 3))) == ((charcode "s")) && (((charAt s (i + 4))) == ((charcode "e")) {
507
- def new_f_node:CodeNode (new CodeNode(( unwrap code), sp, sp + 5))
508
- new_f_node.value_type = RangerNodeType.Boolean
509
- new_f_node.boolean_value = false
510
- this.insert_node(new_f_node)
511
- i = i + 5
512
- continue
513
- }
514
- if fc == ((charcode "@") {
515
- i = i + 1
516
- sp = i
517
- ep = i
518
- c = (charAt s i)
519
- while ((i < len) && (((charAt s i)) > 32) && (c != 40) && (c != 41) && (c != ((charcode "}"))) {
520
- i = 1 + i
521
- c = (charAt s i)
522
- }
523
- ep = i
524
- if (i < len) && (ep > sp) {
525
- def a_node2@(lives):CodeNode (new CodeNode(( unwrap code), sp, ep))
526
- def a_name:string (substring s sp ep)
527
- a_node2.expression = true
528
- curr_node = a_node2
529
- push parents a_node2
530
- i = i + 1
531
- paren_cnt = paren_cnt + 1
532
- this.parse()
533
- def use_first:boolean false
534
- if 1 == ((array_length a_node2.children)) {
535
- def ch1:CodeNode (itemAt a_node2.children 0)
536
- use_first = (ch1.isPrimitive())
537
- }
538
- if use_first {
539
- def theNode:CodeNode (array_extract a_node2.children 0)
540
- set curr_node.props a_name theNode
541
- } {
542
- set curr_node.props a_name a_node2
543
- }
544
- push curr_node.prop_keys a_name
545
- continue
546
- }
547
- }
548
- def ns_list@(temp):[string]
549
- def last_ns:int i
550
- def ns_cnt:int 1
551
- def vref_had_type_ann:boolean false
552
- def vref_ann_node@(optional temp):CodeNode
553
- def vref_end:int i
554
- if (i < len) && (((charAt s i)) > 32) && (c != 58) && (c != 40) && (c != 41) && (c != ((charcode "}")) {
555
- if curr_node.is_block_node == true {
556
- def new_expr_node:CodeNode (new CodeNode(( unwrap code), sp, ep))
557
- new_expr_node.parent = curr_node
558
- new_expr_node.expression = true
559
- push curr_node.children new_expr_node
560
- curr_node = new_expr_node
561
- push parents new_expr_node
562
- paren_cnt = 1 + paren_cnt
563
- this.parse()
564
- continue
565
- }
566
- }
567
- def op_c:int 0
568
- if ((array_length curr_node.children)) >= 0 {
569
- op_c = (this.getOperator())
570
- }
571
- def last_was_newline:boolean false
572
- if op_c > 0 {
573
- } {
574
- while ((i < len) && (((charAt s i)) > 32) && (c != 58) && (c != 40) && (c != 41) && (c != ((charcode "}"))) {
575
- if i > sp {
576
- def is_opchar:int (this.isOperator())
577
- if is_opchar > 0 {
578
- break
579
- }
580
- }
581
- i = 1 + i
582
- c = (charAt s i)
583
- if (c == 10) || (c == 13) {
584
- last_was_newline = true
585
- break
586
- }
587
- if c == ((charcode ".") {
588
- push ns_list (substring s last_ns i)
589
- last_ns = i + 1
590
- ns_cnt = 1 + ns_cnt
591
- }
592
- if (i > vref_end) && (c == ((charcode "@")) {
593
- vref_had_type_ann = true
594
- vref_end = i
595
- vref_ann_node = (this.parse_raw_annotation())
596
- c = (charAt s i)
597
- break
598
- }
599
- }
600
- }
601
- ep = i
602
- if vref_had_type_ann {
603
- ep = vref_end
604
- }
605
- push ns_list (substring s last_ns ep)
606
- c = (charAt s i)
607
- while ((i < len) && (c <= 32) && (false == last_was_newline)) {
608
- i = 1 + i
609
- c = (charAt s i)
610
- if is_block_parent && ((c == 10) || (c == 13)) {
611
- i = i - 1
612
- c = (charAt s i)
613
- had_lf = true
614
- break
615
- }
616
- }
617
- if c == 58 {
618
- i = i + 1
619
- while ((i < len) && (((charAt s i)) <= 32)) {
620
- i = 1 + i
621
- }
622
- def vt_sp:int i
623
- def vt_ep:int i
624
- c = (charAt s i)
625
- if c == ((charcode "(") {
626
- def a_node3@(lives):CodeNode (new CodeNode(( unwrap code), sp, ep))
627
- a_node3.expression = true
628
- curr_node = a_node3
629
- push parents a_node3
630
- i = i + 1
631
- this.parse()
632
- def new_expr_node:CodeNode (new CodeNode(( unwrap code), sp, vt_ep))
633
- new_expr_node.vref = (substring s sp ep)
634
- new_expr_node.ns = ns_list
635
- new_expr_node.expression_value = a_node3
636
- new_expr_node.value_type = RangerNodeType.ExpressionType
637
- if vref_had_type_ann {
638
- new_expr_node.vref_annotation = vref_ann_node
639
- new_expr_node.has_vref_annotation = true
640
- }
641
- push curr_node.children new_expr_node
642
- continue
643
- }
644
- if c == ((charcode "[") {
645
- i = i + 1
646
- vt_sp = i
647
- def hash_sep:int 0
648
- def had_array_type_ann:boolean false
649
- c = (charAt s i)
650
- while ((i < len) && (c > 32) && (c != 93)) {
651
- i = 1 + i
652
- c = (charAt s i)
653
- if c == ((charcode ":") {
654
- hash_sep = i
655
- }
656
- if c == ((charcode "@") {
657
- had_array_type_ann = true
658
- break
659
- }
660
- }
661
- vt_ep = i
662
- if hash_sep > 0 {
663
- vt_ep = i
664
- def type_name:string (substring s (1 + hash_sep) vt_ep)
665
- def key_type_name:string (substring s vt_sp hash_sep)
666
- def new_hash_node:CodeNode (new CodeNode(( unwrap code), sp, vt_ep))
667
- new_hash_node.vref = (substring s sp ep)
668
- new_hash_node.ns = ns_list
669
- new_hash_node.value_type = RangerNodeType.Hash
670
- new_hash_node.array_type = type_name
671
- new_hash_node.key_type = key_type_name
672
- if vref_had_type_ann {
673
- new_hash_node.vref_annotation = vref_ann_node
674
- new_hash_node.has_vref_annotation = true
675
- }
676
- if had_array_type_ann {
677
- def vann_hash:CodeNode (this.parse_raw_annotation())
678
- new_hash_node.type_annotation = vann_hash
679
- new_hash_node.has_type_annotation = true
680
- print "--> parsed HASH TYPE annotation"
681
- }
682
- new_hash_node.parent = curr_node
683
- push curr_node.children new_hash_node
684
- i = 1 + i
685
- continue
686
- } {
687
- vt_ep = i
688
- def type_name:string (substring s vt_sp vt_ep)
689
- def new_arr_node:CodeNode (new CodeNode(( unwrap code), sp, vt_ep))
690
- new_arr_node.vref = (substring s sp ep)
691
- new_arr_node.ns = ns_list
692
- new_arr_node.value_type = RangerNodeType.Array
693
- new_arr_node.array_type = type_name
694
- new_arr_node.parent = curr_node
695
- push curr_node.children new_arr_node
696
- if vref_had_type_ann {
697
- new_arr_node.vref_annotation = vref_ann_node
698
- new_arr_node.has_vref_annotation = true
699
- }
700
- if had_array_type_ann {
701
- def vann_arr:CodeNode (this.parse_raw_annotation())
702
- new_arr_node.type_annotation = vann_arr
703
- new_arr_node.has_type_annotation = true
704
- print "--> parsed ARRAY TYPE annotation"
705
- }
706
- i = 1 + i
707
- continue
708
- }
709
- }
710
- def had_type_ann:boolean false
711
- while ((i < len) && (((charAt s i)) > 32) && (c != 58) && (c != 40) && (c != 41) && (c != ((charcode "}")) && (c != ((charcode ","))) {
712
- i = 1 + i
713
- c = (charAt s i)
714
- if c == ((charcode "@") {
715
- had_type_ann = true
716
- break
717
- }
718
- }
719
- if i < len {
720
- vt_ep = i
721
- def type_name:string (substring s vt_sp vt_ep)
722
- def new_ref_node:CodeNode (new CodeNode(( unwrap code), sp, ep))
723
- new_ref_node.vref = (substring s sp ep)
724
- new_ref_node.ns = ns_list
725
- new_ref_node.value_type = RangerNodeType.VRef
726
- new_ref_node.type_name = (substring s vt_sp vt_ep)
727
- new_ref_node.parent = curr_node
728
- if vref_had_type_ann {
729
- new_ref_node.vref_annotation = vref_ann_node
730
- new_ref_node.has_vref_annotation = true
731
- }
732
- push curr_node.children new_ref_node
733
- if had_type_ann {
734
- def vann:CodeNode (this.parse_raw_annotation())
735
- new_ref_node.type_annotation = vann
736
- new_ref_node.has_type_annotation = true
737
- }
738
- continue
739
- }
740
- } {
741
- if (i < len) && (ep > sp) {
742
- def new_vref_node:CodeNode (new CodeNode(( unwrap code), sp, ep))
743
- new_vref_node.vref = (substring s sp ep)
744
- new_vref_node.value_type = RangerNodeType.VRef
745
- new_vref_node.ns = ns_list
746
- new_vref_node.parent = curr_node
747
- def op_pred:int (this.getOperatorPred(new_vref_node.vref))
748
- if new_vref_node.vref == "," {
749
- curr_node.infix_operator = false
750
- continue
751
- }
752
- def pTarget@(optional weak):CodeNode curr_node
753
- if curr_node.infix_operator {
754
- def iNode@(optional):CodeNode curr_node.infix_node
755
- if (op_pred > 0) || (iNode.to_the_right == false) {
756
- pTarget = iNode
757
- } {
758
- def rn@(optional lives):CodeNode iNode.right_node
759
- new_vref_node.parent = rn
760
- pTarget = rn
761
- }
762
- }
763
- push pTarget.children new_vref_node
764
- if vref_had_type_ann {
765
- new_vref_node.vref_annotation = vref_ann_node
766
- new_vref_node.has_vref_annotation = true
767
- }
768
- if (((charAt s (i + 1))) == ((charcode "(")) || (((charAt s (i + 0))) == ((charcode "(")) {
769
- if (0 == op_pred) && curr_node.infix_operator && (1 == ((array_length curr_node.children))) {
770
- }
771
- }
772
- if ((op_pred > 0) && curr_node.infix_operator) || ((op_pred > 0) && (((array_length curr_node.children)) >= 2)) {
773
- if (op_pred == 3) && (2 == ((array_length curr_node.children))) {
774
- def n_ch:CodeNode (array_extract curr_node.children 0)
775
- push curr_node.children n_ch
776
- } {
777
- if false == curr_node.infix_operator {
778
- def if_node@(temp lives):CodeNode (new CodeNode(( unwrap code), sp, ep))
779
- curr_node.infix_node = if_node
780
- curr_node.infix_operator = true
781
- if_node.infix_subnode = true
782
- curr_node.value_type = RangerNodeType.NoType
783
- curr_node.expression = true
784
- if_node.expression = true
785
- def ch_cnt:int (array_length curr_node.children)
786
- def ii:int 0
787
- def start_from:int ch_cnt - 2
788
- def keep_nodes:CodeNode (new CodeNode(( unwrap code), sp, ep))
789
- while (ch_cnt > 0) {def n_ch:CodeNode (array_extract curr_node.children 0)
790
- def p_target:CodeNode if_node
791
- if (ii < start_from) || n_ch.infix_subnode {
792
- p_target = keep_nodes
793
- }
794
- push p_target.children n_ch
795
- ch_cnt = ch_cnt - 1
796
- ii = 1 + ii
797
- }
798
- for keep_nodes.children keep:CodeNode i {
799
- push curr_node.children keep
800
- }
801
- push curr_node.children if_node
802
- }
803
- def ifNode@(optional lives):CodeNode curr_node.infix_node
804
- def new_op_node:CodeNode (new CodeNode(( unwrap code), sp, ep))
805
- new_op_node.expression = true
806
- new_op_node.parent = ifNode
807
- def until_index:int ((array_length ifNode.children)) - 1
808
- def to_right:boolean false
809
- def just_continue:boolean false
810
- if (ifNode.operator_pred > 0) && (ifNode.operator_pred < op_pred) {
811
- to_right = true
812
- }
813
- if (ifNode.operator_pred > 0) && (ifNode.operator_pred > op_pred) {
814
- ifNode.to_the_right = false
815
- }
816
- if (ifNode.operator_pred > 0) && (ifNode.operator_pred == op_pred) {
817
- to_right = ifNode.to_the_right
818
- }
819
- def opTarget@(optional):CodeNode ifNode
820
- if to_right {
821
- def op_node:CodeNode (array_extract ifNode.children until_index)
822
- def last_value:CodeNode (array_extract ifNode.children (until_index - 1))
823
- push new_op_node.children op_node
824
- push new_op_node.children last_value
825
- } {
826
- if false == just_continue {
827
- while (until_index > 0) {def what_to_add:CodeNode (array_extract ifNode.children 0)
828
- push new_op_node.children what_to_add
829
- until_index = until_index - 1
830
- }
831
- }
832
- }
833
- if to_right || (false == just_continue) {
834
- push ifNode.children new_op_node
835
- }
836
- if to_right {
837
- ifNode.right_node = new_op_node
838
- ifNode.to_the_right = true
839
- }
840
- ifNode.operator_pred = op_pred
841
- continue
842
- }
843
- }
844
- continue
845
- }
846
- }
847
- if (c == 41) || (c == ((charcode "}")) {
848
- if (c == ((charcode "}")) && is_block_parent && (((array_length curr_node.children)) > 0) {
849
- this.end_expression()
850
- }
851
- i = 1 + i
852
- paren_cnt = paren_cnt - 1
853
- if paren_cnt < 0 {
854
- break
855
- }
856
- removeLast parents
857
- if (!null? curr_node) {
858
- curr_node.ep = i
859
- }
860
- if ((array_length parents)) > 0 {
861
- curr_node = (itemAt parents (((array_length parents)) - 1))
862
- } {
863
- curr_node = rootNode
864
- }
865
- break
866
- }
867
- if last_i == i {
868
- i = 1 + i
869
- }
870
- }
871
- }
872
- }
873
- }