ranger-compiler 2.1.70 → 3.0.4

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 +114 -0
  2. package/README.md +956 -133
  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/{compiler/bin/output.js → dist/rgrc.js} +15377 -7936
  46. package/dist/stdops.rgr +168 -0
  47. package/package.json +196 -39
  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/bin/output.js +0 -23819
  150. package/compiler/ColorConsole.clj +0 -22
  151. package/compiler/ContextOperators.clj +0 -75
  152. package/compiler/FlowEnterVarDef.clj +0 -223
  153. package/compiler/InputFileSystem.clj +0 -276
  154. package/compiler/RangerDocs.clj +0 -7
  155. package/compiler/TFactory.clj +0 -146
  156. package/compiler/TFiles.clj +0 -23
  157. package/compiler/TFlow.clj +0 -39
  158. package/compiler/TNodeFactory.clj +0 -84
  159. package/compiler/TTypes.clj +0 -188
  160. package/compiler/VirtualCompiler.clj +0 -807
  161. package/compiler/bin/ng_Compiler.js +0 -23779
  162. package/compiler/commonmark_plugin.clj +0 -359
  163. package/compiler/feat2.bat +0 -2
  164. package/compiler/feats.bat +0 -9
  165. package/compiler/feature_tests.clj +0 -192
  166. package/compiler/index.js +0 -2
  167. package/compiler/issue_57.clj +0 -25
  168. package/compiler/makefile_plugin.clj +0 -135
  169. package/compiler/markdown_plugin.clj +0 -386
  170. package/compiler/maven_plugin.clj +0 -162
  171. package/compiler/ng_AndroidPageWriter.clj +0 -299
  172. package/compiler/ng_CodeNode.clj +0 -756
  173. package/compiler/ng_CodeNodeCompilerExtensions.clj +0 -839
  174. package/compiler/ng_Compiler.clj +0 -49
  175. package/compiler/ng_CompilerGeneric.clj +0 -260
  176. package/compiler/ng_CompilerOrig.clj +0 -854
  177. package/compiler/ng_DictNode.clj +0 -346
  178. package/compiler/ng_DictNode2.clj +0 -316
  179. package/compiler/ng_Execute.clj +0 -138
  180. package/compiler/ng_Execute1.clj +0 -129
  181. package/compiler/ng_FlowWork.clj +0 -3951
  182. package/compiler/ng_LiveCompiler.clj +0 -1109
  183. package/compiler/ng_RagnerJavaScriptClassWriter.clj +0 -402
  184. package/compiler/ng_RangerActiveOperators.clj +0 -86
  185. package/compiler/ng_RangerAppClassDesc.clj +0 -400
  186. package/compiler/ng_RangerAppEnums.clj +0 -86
  187. package/compiler/ng_RangerAppFunctionDesc.clj +0 -127
  188. package/compiler/ng_RangerAppMessages.clj +0 -15
  189. package/compiler/ng_RangerAppOperatorDesc.clj +0 -20
  190. package/compiler/ng_RangerAppParamDesc.clj +0 -388
  191. package/compiler/ng_RangerAppWriterContext.clj +0 -1793
  192. package/compiler/ng_RangerArgMatch.clj +0 -638
  193. package/compiler/ng_RangerCSharpClassWriter.clj +0 -484
  194. package/compiler/ng_RangerCppClassWriter.clj +0 -1023
  195. package/compiler/ng_RangerDocGenerator.clj +0 -305
  196. package/compiler/ng_RangerFlowParser.clj +0 -4992
  197. package/compiler/ng_RangerFlowParserOrig.clj +0 -4002
  198. package/compiler/ng_RangerGenericClassWriter.clj +0 -573
  199. package/compiler/ng_RangerGolangClassWriter.clj +0 -1766
  200. package/compiler/ng_RangerImmutableExtension.clj +0 -77
  201. package/compiler/ng_RangerJava7ClassWriter.clj +0 -961
  202. package/compiler/ng_RangerJavaScriptClassWriter.clj +0 -1040
  203. package/compiler/ng_RangerKotlinClassWriter.clj +0 -372
  204. package/compiler/ng_RangerLanguageWriters.clj +0 -14
  205. package/compiler/ng_RangerLispParser.clj +0 -873
  206. package/compiler/ng_RangerPHPClassWriter.clj +0 -643
  207. package/compiler/ng_RangerPlugin.clj +0 -41
  208. package/compiler/ng_RangerRangerClassWriter.clj +0 -357
  209. package/compiler/ng_RangerRustClassWriter.clj +0 -420
  210. package/compiler/ng_RangerScalaClassWriter.clj +0 -818
  211. package/compiler/ng_RangerSerializeClass.clj +0 -502
  212. package/compiler/ng_RangerServiceBuilder.clj +0 -63
  213. package/compiler/ng_RangerSwift3ClassWriter.clj +0 -809
  214. package/compiler/ng_RangerSwiftClassWriter.clj +0 -0
  215. package/compiler/ng_RangerTypeClass.clj +0 -45
  216. package/compiler/ng_SourceParser.clj +0 -241
  217. package/compiler/ng_SourceParser2.clj +0 -214
  218. package/compiler/ng_WebPageWriter.clj +0 -39
  219. package/compiler/ng_jsonParser.clj +0 -340
  220. package/compiler/ng_p_test.clj +0 -1711
  221. package/compiler/ng_parser.clj +0 -911
  222. package/compiler/ng_parser2.clj +0 -735
  223. package/compiler/ng_parser2_backup.clj +0 -1679
  224. package/compiler/ng_parser_backup.clj +0 -886
  225. package/compiler/ng_parser_ok.clj +0 -1718
  226. package/compiler/ng_parser_ok2.clj +0 -1717
  227. package/compiler/ng_parser_std_match.clj +0 -687
  228. package/compiler/ng_parser_std_match2.clj +0 -1012
  229. package/compiler/ng_parser_v2.clj +0 -1251
  230. package/compiler/ng_ui.clj +0 -403
  231. package/compiler/ng_ui_test.clj +0 -18
  232. package/compiler/ng_writer.clj +0 -338
  233. package/compiler/ng_xmlParser.clj +0 -472
  234. package/compiler/ng_xmlParser2.clj +0 -317
  235. package/compiler/ng_xmlParser3.clj +0 -251
  236. package/compiler/opdoc.bat +0 -4
  237. package/compiler/operators.md +0 -290
  238. package/compiler/p.bat +0 -4
  239. package/compiler/package.json +0 -10
  240. package/compiler/pcmd.bat +0 -4
  241. package/compiler/pcmd2.bat +0 -3
  242. package/compiler/plaintext_plugin.clj +0 -69
  243. package/compiler/plugin.bat +0 -19
  244. package/compiler/plugin2.bat +0 -4
  245. package/compiler/plugin_app.bat +0 -3
  246. package/compiler/plugin_apps.clj +0 -27
  247. package/compiler/plugins.bat +0 -10
  248. package/compiler/reveal_plugin.clj +0 -409
  249. package/compiler/simplePlugin.clj +0 -780
  250. package/compiler/t.bat +0 -3
  251. package/compiler/test_any.clj +0 -43
  252. package/compiler/test_call.clj +0 -141
  253. package/compiler/test_chain.clj +0 -79
  254. package/compiler/test_json.clj +0 -10
  255. package/compiler/test_lambda.clj +0 -153
  256. package/compiler/test_pcmd.clj +0 -32
  257. package/compiler/test_pcmd2.clj +0 -29
  258. package/compiler/test_plugin.clj +0 -237
  259. package/compiler/test_readfile.clj +0 -13
  260. package/compiler/test_reveal.clj +0 -19
  261. package/compiler/test_slides.clj +0 -312
  262. package/compiler/test_types.clj +0 -143
  263. package/compiler/test_types2.clj +0 -49
  264. package/compiler/test_types3.clj +0 -53
  265. package/compiler/test_var.clj +0 -40
  266. package/compiler/tonpm.bat +0 -14
  267. package/compiler/tonpm2.bat +0 -12
  268. package/compiler/ui_plugin.clj +0 -507
  269. package/compiler/ui_plugin2.clj +0 -427
  270. package/compiler/update-git.bat +0 -3
  271. package/compiler/vcomp.bat +0 -4
  272. package/compiler/viewbuilder_Android.clj +0 -176
  273. package/compiler/viewbuilder_Web.clj +0 -105
  274. package/dist/bin/api.js +0 -32422
  275. package/dist/bin/compiler.d.ts +0 -1638
  276. package/dist/bin/compiler.js +0 -32444
  277. package/examples/3D/bin/test_3d.js +0 -329
  278. package/examples/3D/test_3d.clj +0 -385
  279. package/examples/EVGColor/EVGColor.clj +0 -310
  280. package/examples/EVGColor/EVGColorContext.clj +0 -176
  281. package/examples/EVGColor/bin/EVGColor.js +0 -286
  282. package/examples/EVGColor/bin/minimized.js +0 -286
  283. package/examples/SVGPath/SVGPath.clj +0 -625
  284. package/examples/SVGPath/Vec2.clj +0 -103
  285. package/examples/SVGPath/bin/SVGPath.cpp +0 -887
  286. package/examples/SVGPath/bin/SVGPath.js +0 -682
  287. package/examples/SVGPath/bin/SVGPath.ts +0 -711
  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,1109 +0,0 @@
1
-
2
- Import "ng_RangerFlowParser.clj"
3
- Import "ng_CodeNodeCompilerExtensions.clj"
4
- Import "ng_RangerLanguageWriters.clj"
5
- Import "ng_RangerActiveOperators.clj"
6
-
7
- extension RangerAppWriterContext {
8
- def rootFile:string "--not-defined--"
9
- fn getRootFile:string () {
10
- def root:RangerAppWriterContext (this.getRoot())
11
- return root.rootFile
12
- }
13
- fn setRootFile:void (file_name:string) {
14
- def root:RangerAppWriterContext (this.getRoot())
15
- root.rootFile = file_name
16
- }
17
- }
18
-
19
- class LiveCompiler {
20
-
21
- def parser@(weak):RangerFlowParser
22
- def langWriter:RangerGenericClassWriter
23
- def hasCreatedPolyfill:[string:boolean]
24
- def lastProcessedNode@(weak):CodeNode
25
- def repeat_index:int 0
26
- def installedFile:[string:boolean]
27
-
28
- fn initWriter:void (ctx:RangerAppWriterContext) {
29
- if (!null? langWriter) {
30
- return
31
- }
32
- ; def root:RangerAppWriterContext (ctx.getRoot())
33
- def langName (ctx.getTargetLang())
34
- print "Livecompiler starting with language => " + langName
35
- switch langName {
36
- case "go" {
37
- langWriter = (new RangerGolangClassWriter ())
38
- }
39
- case "scala" {
40
- langWriter = (new RangerScalaClassWriter ())
41
- }
42
- case "java7" {
43
- langWriter = (new RangerJava7ClassWriter ())
44
- }
45
- case "swift3" {
46
- langWriter = (new RangerSwift3ClassWriter ())
47
- }
48
- case "kotlin" {
49
- langWriter = (new RangerKotlinClassWriter ())
50
- }
51
- case "php" {
52
- langWriter = (new RangerPHPClassWriter ())
53
- }
54
- case "cpp" {
55
- langWriter = (new RangerCppClassWriter())
56
- }
57
- case "csharp" {
58
- langWriter = (new RangerCSharpClassWriter ())
59
- }
60
- case "es6" {
61
- langWriter = (new RangerJavaScriptClassWriter ())
62
- }
63
- case "ranger" {
64
- langWriter = (new RangerRangerClassWriter ())
65
- }
66
- }
67
- if (!null? langWriter) {
68
- langWriter.compiler = this
69
- } {
70
- langWriter = (new RangerGenericClassWriter ())
71
- langWriter.compiler = this
72
- }
73
- }
74
- fn EncodeString:string (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
75
-
76
- ; TODO: check the encoding rules for the language...
77
-
78
- def encoded_str:string ""
79
- def str_length:int (strlen node.string_value)
80
-
81
- def encoded_str:string ""
82
-
83
- def ii:int 0
84
-
85
- while (< ii str_length) {
86
-
87
- def ch:int (charAt node.string_value ii)
88
- def cc:int ch
89
-
90
- switch cc {
91
- case 8 {
92
- encoded_str = encoded_str + (strfromcode 92 ) + (strfromcode 98 )
93
- }
94
- case 9 {
95
- encoded_str = encoded_str + (strfromcode 92 ) + (strfromcode 116 )
96
- }
97
- case 10 {
98
- ( = encoded_str ( encoded_str + (strfromcode 92 ) + (strfromcode 110 ) ) )
99
- }
100
- case 12 {
101
- ( = encoded_str ( encoded_str + (strfromcode 92 ) + (strfromcode 102 ) ) )
102
- }
103
- case 13 {
104
- ( = encoded_str ( encoded_str + (strfromcode 92 ) + (strfromcode 114 ) ) )
105
- }
106
-
107
- case 34 {
108
- ( = encoded_str ( encoded_str + (strfromcode 92 ) + (strfromcode 34 ) ) )
109
- }
110
- case 92 {
111
- = encoded_str ( encoded_str + (strfromcode 92 ) + (strfromcode 92 ) )
112
- }
113
-
114
- default {
115
- ( = encoded_str ( encoded_str + (strfromcode ch) ) )
116
- }
117
- }
118
- ii = ii + 1
119
- }
120
-
121
- return encoded_str
122
-
123
- }
124
-
125
- fn WriteScalarValue:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
126
- langWriter.WriteScalarValue(node ctx wr)
127
- }
128
- fn adjustType:string (tn:string) {
129
- if (tn == "this") {
130
- return "self"
131
- }
132
- return tn
133
- }
134
- fn WriteVRef:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
135
- langWriter.WriteVRef(node ctx wr)
136
- }
137
- fn writeTypeDef:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
138
- langWriter.writeTypeDef(node ctx wr)
139
- }
140
- fn CreateLambdaCall:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
141
- langWriter.CreateLambdaCall(node ctx wr)
142
- }
143
- fn CreateCallExpression:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
144
- langWriter.CreateCallExpression(node ctx wr)
145
- }
146
- fn CreateLambda:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
147
- langWriter.CreateLambda(node ctx wr)
148
- }
149
- fn getTypeString:string (str:string ctx:RangerAppWriterContext) {
150
- return ""
151
- }
152
- fn createPolyfill ( code:string ctx:RangerAppWriterContext wr:CodeWriter ) {
153
- def p_write:CodeWriter (wr.getTag("utilities"))
154
- if ((has p_write.compiledTags code) == false) {
155
- p_write.raw(code true)
156
- set p_write.compiledTags code true
157
- }
158
- }
159
- fn installFile (filename:string ctx:RangerAppWriterContext wr:CodeWriter) {
160
- if( has installedFile filename ) {
161
- return
162
- }
163
- def env (unwrap (ctx.getEnv()))
164
- set installedFile filename true
165
- def fName ( (install_directory env) + "/" + filename) )
166
- if( (file_exists env ( (install_directory env ) + "/") filename ) ) {
167
- def fileData (read_file ( (install_directory env ) + "/") filename)
168
- if(!null? fileData) {
169
- def file_wr:CodeWriter ( wr.getFileWriter("." (filename)))
170
- file_wr.raw( (unwrap fileData) false )
171
- } {
172
- print "did not get contents of " + (filename)
173
- }
174
- } {
175
- print "did not find installed file " + (install_directory env) + (filename)
176
- }
177
- }
178
- fn findOpCode:void (op:CodeNode node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
179
- def fnName@(lives):CodeNode (itemAt op.children 1)
180
- def args:CodeNode (itemAt op.children 2)
181
-
182
- if ( (array_length op.children ) > 3 ) {
183
- def details:CodeNode (itemAt op.children 3)
184
- for details.children det:CodeNode i {
185
- if ( (array_length det.children ) > 0 ) {
186
- def fc:CodeNode (itemAt det.children 0)
187
- if (fc.vref == "code") {
188
- def match:RangerArgMatch (new RangerArgMatch ())
189
- def all_matched:boolean (match.matchArguments(args node ctx 1))
190
- if (all_matched == false) {
191
- return
192
- }
193
- def origCode:CodeNode (itemAt det.children 1)
194
- def theCode@(lives):CodeNode (origCode.rebuildWithType(match true))
195
- def appCtx:RangerAppWriterContext (ctx.getRoot())
196
- def stdFnName:string (appCtx.createSignature(fnName.vref (fnName.vref + (theCode.getCode()))))
197
- def stdClass:RangerAppClassDesc (ctx.findClass("RangerStaticMethods"))
198
- def runCtx:RangerAppWriterContext (appCtx.fork())
199
- def b_failed:boolean false
200
- if (false == (has stdClass.defined_static_methods stdFnName)) {
201
- runCtx.setInMethod()
202
- def m@(lives):RangerAppFunctionDesc (new RangerAppFunctionDesc ())
203
- m.name = stdFnName
204
- m.node = op
205
- m.is_static = true
206
- m.nameNode = fnName
207
- m.fnBody = theCode
208
- for args.children arg@(lives):CodeNode ii {
209
- def p:RangerAppParamDesc (new RangerAppParamDesc ())
210
- p.name = arg.vref
211
- p.value_type = arg.value_type
212
- p.node = arg
213
- p.nameNode = arg
214
- p.refType = RangerNodeRefType.Weak
215
- p.varType = RangerContextVarType.FunctionParameter
216
- push m.params p
217
- arg.hasParamDesc = true
218
- arg.paramDesc = p
219
- arg.eval_type = arg.value_type
220
- arg.eval_type_name = arg.type_name
221
- runCtx.defineVariable(p.name p)
222
- }
223
- stdClass.addStaticMethod(m)
224
- def err_cnt:int (array_length ctx.compilerErrors)
225
- def flowParser:RangerFlowParser (new RangerFlowParser ())
226
- def TmpWr:CodeWriter (new CodeWriter ())
227
- flowParser.WalkNode(theCode runCtx TmpWr)
228
- runCtx.unsetInMethod()
229
- def err_delta:int ((array_length ctx.compilerErrors) - err_cnt)
230
- if (err_delta > 0) {
231
- b_failed = true
232
- print "Had following compiler errors:"
233
- for ctx.compilerErrors e:RangerCompilerMessage i {
234
- if (i < err_cnt) {
235
- continue _
236
- }
237
- def line_index:int (e.node.getLine())
238
- print ((e.node.getFilename()) + " Line: " + line_index)
239
- print e.description
240
- print (e.node.getLineString(line_index))
241
- }
242
- } {
243
- print 'no errors found'
244
- }
245
- }
246
- if b_failed {
247
- wr.out('/* custom operator compilation failed */ ' false)
248
- } {
249
- wr.out((('RangerStaticMethods.' + stdFnName) + '(') false)
250
- for node.children cc:CodeNode i {
251
- if (i == 0) {
252
- continue _
253
- }
254
- if (i > 1) {
255
- wr.out(', ' false)
256
- }
257
- this.WalkNode(cc ctx wr)
258
- }
259
- wr.out(')' false)
260
- }
261
- return
262
- }
263
- }
264
- }
265
- }
266
- }
267
- fn findOpTemplate@(weak optional):CodeNode (op:CodeNode node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
268
- def fnName:CodeNode (itemAt op.children 1)
269
- def root:RangerAppWriterContext (ctx.getRoot())
270
- def langName:string (ctx.getTargetLang())
271
- def rv@(optional):CodeNode
272
- def opDef op
273
- if ( (array_length op.children ) > 3) {
274
- def details:CodeNode (itemAt op.children 3)
275
- for details.children det:CodeNode i {
276
- if ( (array_length det.children ) > 0) {
277
- def fc:CodeNode (itemAt det.children 0)
278
- if (fc.vref == "templates") {
279
- def tplList:CodeNode (itemAt det.children 1)
280
- for tplList.children tpl:CodeNode i {
281
- def tplName:CodeNode (tpl.getFirst())
282
- def tplImpl@(optional):CodeNode
283
- tplImpl = (tpl.getSecond())
284
-
285
- def is_ts (ctx.hasCompilerFlag('typescript'))
286
- if( is_ts && ( tplName.vref == 'typescript' || tplName.vref == 'ts') ) {
287
- rv = tplImpl
288
- return rv
289
- }
290
- if ((tplName.vref != "*") && (tplName.vref != langName)) {
291
- continue _
292
- }
293
- if (tplName.hasFlag("mutable")) {
294
- if (false == (node.hasFlag("mutable"))) {
295
- continue _
296
- }
297
- }
298
- rv = tplImpl
299
- return rv
300
- }
301
-
302
- if(langName == 'ranger') {
303
- def opNameNode (opDef.getFirst())
304
- def opArgs (opDef.getThird())
305
- def rangerTpl (r.expression (r.value ('(' + opNameNode.vref + ' ' ) ) ) )
306
- def cnt 1
307
- opArgs.children.forEach({
308
- if(item.type_name == 'block') {
309
- push rangerTpl.children (r.expression (r.vref 'block') (r.value cnt ))
310
- } {
311
- push rangerTpl.children (r.expression (r.vref 'e') (r.value cnt ))
312
- }
313
- cnt = cnt + 1
314
- })
315
- push rangerTpl.children (r.value ')')
316
- rv = rangerTpl
317
- }
318
-
319
- }
320
- }
321
- }
322
- }
323
- return rv
324
- }
325
- fn localCall:boolean (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
326
- if node.hasFnCall {
327
- if (!null? langWriter) {
328
- langWriter.writeFnCall(node ctx wr)
329
- return true
330
- }
331
- }
332
- if node.hasNewOper {
333
- langWriter.writeNewCall(node ctx wr)
334
- return true
335
- }
336
- if node.hasVarDef {
337
- if node.disabled_node {
338
- langWriter.disabledVarDef(node ctx wr)
339
- } {
340
- langWriter.writeVarDef(node ctx wr)
341
- }
342
-
343
- return true
344
- }
345
- if node.hasClassDescription {
346
- langWriter.writeClass(node ctx wr)
347
- return true
348
- }
349
- return false
350
- }
351
- fn WalkNode:void (node:CodeNode in_ctx:RangerAppWriterContext wr:CodeWriter) {
352
-
353
- this.initWriter(in_ctx)
354
-
355
- if(node.disabled_node) {
356
- return
357
- }
358
- def ctx (in_ctx)
359
-
360
- if(!null? node.evalCtx) {
361
- ctx = (unwrap node.evalCtx)
362
- }
363
-
364
- ; if! node.flow_done {
365
- ; print "^^ flow not done here"
366
- ; }
367
- ; if(node.hasFnCall) {
368
- ; print "^ 3rd has hasFnCall " + (node.getCode())
369
- ; }
370
-
371
- ; if( (ctx.hasCompilerFlag('new')) ) {
372
- if(has node.register_name ) {
373
- if( (ctx.expressionLevel()) > 0) {
374
- if( has node.reg_compiled_name ) {
375
- wr.out(node.reg_compiled_name false)
376
- } {
377
- print "Could not find compiled name for " + node.register_name + " at " + (node.getCode())
378
- }
379
- }
380
- return
381
- }
382
-
383
- ; if( (ctx.hasCompilerFlag('new')) ) {
384
- def liveNodes@(weak):[CodeNode]
385
- def rootItem node
386
- if( has node.register_expressions) {
387
- node.register_expressions.forEach({
388
- ; print (item.getCode())
389
- push liveNodes item
390
- })
391
- }
392
- liveNodes.forEach({
393
- if( item.register_set == false ) {
394
- item.register_set = true
395
- this.WalkNode(item ctx wr)
396
- }
397
- })
398
- clear liveNodes
399
- ; }
400
-
401
-
402
- if(node.value_type == RangerNodeType.Comment) {
403
- return
404
- }
405
-
406
- if (node.isPrimitive()) {
407
- this.WriteScalarValue(node ctx wr)
408
- return
409
- }
410
- this.lastProcessedNode = node
411
-
412
- if(node.isFirstVref('property')) {
413
- langWriter.CreatePropertyGet( node ctx wr)
414
- return
415
- }
416
-
417
- if( node.is_plugin ) {
418
- return
419
- }
420
- if( node.is_array_literal ) {
421
- langWriter.writeArrayLiteral( node ctx wr)
422
- return
423
- }
424
-
425
- if (node.value_type == RangerNodeType.VRef || node.value_type == RangerNodeType.Hash || node.value_type == RangerNodeType.Array) {
426
- this.WriteVRef(node ctx wr)
427
- return
428
- }
429
-
430
- if (node.value_type == RangerNodeType.Lambda) {
431
- this.WriteVRef(node ctx wr)
432
- return
433
- }
434
- if ((array_length node.children) > 0) {
435
- if node.has_operator {
436
- def op:CodeNode (ctx.findOperator(node))
437
- def fc:CodeNode (op.getFirst())
438
- def tplImpl@(optional):CodeNode (this.findOpTemplate(op node ctx wr))
439
- def evalCtx:RangerAppWriterContext ctx
440
- if (!null? node.evalCtx) {
441
- evalCtx = (unwrap node.evalCtx)
442
- }
443
- if (!null? tplImpl) {
444
- def opName:CodeNode (op.getSecond())
445
- if (opName.hasFlag("returns")) {
446
- langWriter.release_local_vars(node evalCtx wr)
447
- }
448
- this.walkCommandList( (unwrap tplImpl) node evalCtx wr)
449
- } {
450
- this.findOpCode(op node evalCtx wr)
451
- }
452
- return
453
- }
454
- if( node.is_direct_method_call) {
455
- langWriter.CreateMethodCall(node ctx wr)
456
- return
457
- }
458
- if (node.has_lambda) {
459
- this.CreateLambda(node ctx wr)
460
- return
461
- }
462
- if (node.has_lambda_call) {
463
- this.CreateLambdaCall(node ctx wr)
464
- return
465
- }
466
- ; skip elents which are part of the chain...
467
- if(node.is_part_of_chain) {
468
- return
469
- }
470
- if (node.has_call) {
471
- this.CreateCallExpression(node ctx wr)
472
- return
473
- }
474
- if ((array_length node.children) > 1) {
475
- if (this.localCall(node ctx wr)) {
476
- return
477
- }
478
- }
479
- def fc:CodeNode (node.getFirst())
480
- }
481
- if node.expression {
482
-
483
- ; wr.out( ("/* did return at index == " + node.didReturnAtIndex + "*/" ) false)
484
- for node.children item:CodeNode i {
485
- if ((node.didReturnAtIndex >= 0) && (node.didReturnAtIndex < i)) {
486
- break _
487
- }
488
- ; if( (ctx.hasCompilerFlag('new')) ) {
489
- if(node.is_block_node) {
490
- def liveNodes@(weak):[CodeNode]
491
- def rootItem item
492
- if( has item.register_expressions) {
493
- item.register_expressions.forEach({
494
- push liveNodes item
495
- })
496
- }
497
- item.walkTreeUntil({
498
- if(item.is_block_node) {
499
- return false
500
- }
501
- return true
502
- })
503
- liveNodes.forEach({
504
- if( item.register_set == false ) {
505
- item.register_set = true
506
- this.WalkNode(item ctx wr)
507
- }
508
- })
509
- }
510
- ; }
511
- this.WalkNode(item ctx wr)
512
- }
513
- } {
514
- ; print "no expression, exiting"
515
- if(node.value_type == RangerNodeType.ExpressionType) {
516
- this.WriteVRef(node ctx wr)
517
- }
518
-
519
- }
520
- }
521
- fn walkCommandList:void (cmd:CodeNode node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
522
- if ((ctx.expressionLevel()) == 0) {
523
- wr.newline()
524
- if( (ctx.getTargetLang()) == 'swift3') {
525
- def opn (unwrap node.operator_node)
526
- def nn (opn.getSecond())
527
-
528
- if( nn.type_name != 'void' ) {
529
- wr.out('_ = ' false)
530
- }
531
- ; def cmdNode
532
- ;
533
- }
534
- }
535
- if ((ctx.expressionLevel()) > 1) {
536
- wr.out('(' false)
537
- }
538
- for cmd.children c:CodeNode i {
539
- this.walkCommand(c node ctx wr)
540
- }
541
- if ((ctx.expressionLevel()) > 1) {
542
- wr.out(')' false)
543
- }
544
- if ((ctx.expressionLevel()) == 0) {
545
- wr.line_end( (langWriter.lineEnding()) )
546
- wr.newline()
547
- }
548
- }
549
- fn walkCommand:void (cmd:CodeNode node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
550
- if ( cmd.expression ) {
551
-
552
- if( ( array_length cmd.children) < 2) {
553
- ctx.addError( node "Invalid command")
554
- ctx.addError( cmd "Invalid command")
555
- return
556
- }
557
-
558
- def cmdE:CodeNode (cmd.getFirst())
559
- def cmdArg@(lives):CodeNode (cmd.getSecond())
560
- switch cmdE.vref {
561
- case "service_id" {
562
- def idx:int cmdArg.int_value
563
- if ((array_length node.children) >= idx) {
564
- def arg:CodeNode (itemAt node.children idx)
565
- def root (ctx.getRoot())
566
- def sNode (get root.appServices arg.vref)
567
- if(!null? sNode) {
568
- wr.out( sNode.appGUID false)
569
- } {
570
- ctx.addError( arg "Service not found")
571
- }
572
- } {
573
- ctx.addError( node "Service not found")
574
- }
575
- }
576
-
577
- case "log" {
578
- print cmdArg.string_value
579
- }
580
- case "str" {
581
- def idx:int cmdArg.int_value
582
- if ((array_length node.children) > idx) {
583
- def arg:CodeNode (itemAt node.children idx)
584
- wr.out(arg.string_value false)
585
- }
586
- }
587
- case "block" {
588
- def idx:int cmdArg.int_value
589
- if ((array_length node.children) > idx) {
590
- def arg:CodeNode (itemAt node.children idx)
591
- def sCtx (ctx.fork())
592
- sCtx.restartExpressionLevel()
593
- this.WalkNode(arg sCtx wr)
594
- }
595
- }
596
- case "varname" {
597
- if (ctx.isVarDefined(cmdArg.vref)) {
598
- def p:RangerAppParamDesc (ctx.getVariableDef(cmdArg.vref))
599
- wr.out(p.compiledName false)
600
- }
601
- }
602
- case "defvar" {
603
- def p@(lives):RangerAppParamDesc (new RangerAppParamDesc ())
604
- p.name = cmdArg.vref
605
- p.value_type = cmdArg.value_type
606
- p.node = cmdArg
607
- p.nameNode = cmdArg
608
- p.is_optional = false
609
- ctx.defineVariable(p.name p)
610
- }
611
- case "cc" {
612
- def idx:int cmdArg.int_value
613
- if ((array_length node.children) > idx) {
614
- def arg:CodeNode (itemAt node.children idx)
615
- def cc:char (charcode arg.string_value)
616
- wr.out(("" + (to_int cc)) false)
617
- }
618
- }
619
- case "optional_option" {
620
- def idx:int cmdArg.int_value
621
- if ((array_length node.children) > idx) {
622
- def arg:CodeNode (itemAt node.children idx)
623
- if( ctx.hasCompilerSetting(arg.string_value) ) {
624
- def setting (ctx.getCompilerSetting(arg.string_value))
625
- wr.out( setting false)
626
- }
627
- }
628
- }
629
- case "required_option" {
630
- def idx:int cmdArg.int_value
631
- if ((array_length node.children) > idx) {
632
- def arg:CodeNode (itemAt node.children idx)
633
- if( ctx.hasCompilerSetting(arg.string_value) ) {
634
- def setting (ctx.getCompilerSetting(arg.string_value))
635
- wr.out( setting false)
636
- } {
637
- ctx.addError( node ("This source code requires compiler option -" + arg.string_value + "=<> to be set ") )
638
- }
639
- }
640
- }
641
- case "java_case" {
642
- def idx:int cmdArg.int_value
643
- if ((array_length node.children) > idx) {
644
- def arg:CodeNode (itemAt node.children idx)
645
- this.WalkNode(arg ctx wr)
646
- if (arg.didReturnAtIndex < 0) {
647
- wr.newline()
648
- wr.out("break;" true)
649
- }
650
- }
651
- }
652
-
653
- ; fn addPluginNode ( name:string op@(temp):CodeNode ) {
654
- case 'plugin' {
655
- ; --> (plugin 'maven')
656
- if( (size cmd.children) > 2) {
657
- def cmdData@(lives):CodeNode (cmd.getThird())
658
- def name cmdArg.string_value
659
- ctx.addPluginNode( name cmdData)
660
- }
661
- }
662
-
663
- case "lambda" {
664
- def idx:int cmdArg.int_value
665
- if ((array_length node.children) > idx) {
666
- def arg:CodeNode (itemAt node.children idx)
667
- ctx.setInExpr()
668
- this.WalkNode(arg ctx wr)
669
- ctx.unsetInExpr()
670
- }
671
- }
672
- case "e" {
673
- def idx:int cmdArg.int_value
674
- if ((array_length node.children) > idx) {
675
- def arg:CodeNode (itemAt node.children idx)
676
- ctx.setInExpr()
677
- this.WalkNode(arg ctx wr)
678
- ctx.unsetInExpr()
679
- }
680
- }
681
- case "goset" {
682
- def idx:int cmdArg.int_value
683
- if ((array_length node.children) > idx) {
684
- def arg:CodeNode (itemAt node.children idx)
685
- ctx.setInExpr()
686
- langWriter.WriteSetterVRef(arg ctx wr)
687
- ctx.unsetInExpr()
688
- }
689
- }
690
- case "pe" {
691
- def idx:int cmdArg.int_value
692
- if ((array_length node.children) > idx) {
693
- def arg:CodeNode (itemAt node.children idx)
694
- this.WalkNode(arg ctx wr)
695
- }
696
- }
697
- case "ptr" {
698
- def idx:int cmdArg.int_value
699
- if ((array_length node.children) > idx) {
700
- def arg:CodeNode (itemAt node.children idx)
701
- if arg.hasParamDesc {
702
- if ((arg.paramDesc.nameNode.isAPrimitiveType()) == false) {
703
- wr.out("*" false)
704
- }
705
- } {
706
- if ((arg.isAPrimitiveType()) == false) {
707
- wr.out("*" false)
708
- }
709
- }
710
- }
711
- }
712
- case "ptrsrc" {
713
- def idx:int cmdArg.int_value
714
- if ((array_length node.children) > idx) {
715
- def arg:CodeNode (itemAt node.children idx)
716
- if (((arg.isPrimitiveType()) == false) && ((arg.isPrimitive()) == false)) {
717
- wr.out("&" false)
718
- }
719
- }
720
- }
721
- case "nameof" {
722
- def idx:int cmdArg.int_value
723
- if ((array_length node.children) > idx) {
724
- def arg:CodeNode (itemAt node.children idx)
725
- wr.out(arg.vref false)
726
- }
727
- }
728
- case "list" {
729
- def idx:int cmdArg.int_value
730
- if ((array_length node.children) > idx) {
731
- def arg:CodeNode (itemAt node.children idx)
732
- for arg.children ch:CodeNode i {
733
- if (i > 0) {
734
- wr.out(' ' false)
735
- }
736
- ctx.setInExpr()
737
- this.WalkNode(ch ctx wr)
738
- ctx.unsetInExpr()
739
- }
740
- }
741
- }
742
-
743
- case "repeat" {
744
- def idx:int cmdArg.int_value
745
- repeat_index = idx
746
- if ((array_length node.children) >= idx) {
747
- def cmdToRepeat@(lives):CodeNode (cmd.getThird())
748
- def i:int (idx)
749
- while ( i < (array_length node.children)) {
750
- if(i >= idx) {
751
- for cmdToRepeat.children cc:CodeNode ii {
752
- if( (array_length cc.children ) > 0) {
753
- def fc (cc.getFirst())
754
- if(fc.vref == "e") {
755
- def dc (cc.getSecond())
756
- dc.int_value = i
757
- }
758
- if(fc.vref == "block") {
759
- def dc (cc.getSecond())
760
- dc.int_value = i
761
- }
762
- }
763
- }
764
- this.walkCommandList(cmdToRepeat node ctx wr)
765
- ; if( (i + 1 ) < (array_length node.children)) {
766
- ; wr.out("," false)
767
- ; }
768
- }
769
- i = i + 1
770
- }
771
- }
772
- }
773
-
774
- case "repeat_from" {
775
- def idx:int cmdArg.int_value
776
- repeat_index = idx
777
- if ((array_length node.children) >= idx) {
778
- def cmdToRepeat@(lives):CodeNode (cmd.getThird())
779
- def i:int (idx)
780
- while ( i < (array_length node.children)) {
781
- if(i >= idx) {
782
- for cmdToRepeat.children cc:CodeNode ii {
783
- if( (array_length cc.children ) > 0) {
784
- def fc (cc.getFirst())
785
- if(fc.vref == "e") {
786
- def dc (cc.getSecond())
787
- dc.int_value = i
788
- }
789
- if(fc.vref == "block") {
790
- def dc (cc.getSecond())
791
- dc.int_value = i
792
- }
793
- }
794
- }
795
- this.walkCommandList(cmdToRepeat node ctx wr)
796
- if( (i + 1 ) < (array_length node.children)) {
797
- wr.out("," false)
798
- }
799
- }
800
- i = i + 1
801
- }
802
- }
803
- }
804
- case "comma" {
805
- def idx:int cmdArg.int_value
806
- if ((array_length node.children) > idx) {
807
- def arg:CodeNode (itemAt node.children idx)
808
- for arg.children ch:CodeNode i {
809
- if (i > 0) {
810
- wr.out("," false)
811
- }
812
- ctx.setInExpr()
813
- this.WalkNode(ch ctx wr)
814
- ctx.unsetInExpr()
815
- }
816
- }
817
- }
818
- case "swift_rc" {
819
- def idx:int cmdArg.int_value
820
- if ((array_length node.children) > idx) {
821
- def arg:CodeNode (itemAt node.children idx)
822
- if arg.hasParamDesc {
823
- if (arg.paramDesc.ref_cnt == 0) {
824
- wr.out("_" false)
825
- } {
826
- def p:RangerAppParamDesc (ctx.getVariableDef(arg.vref))
827
- wr.out(p.compiledName false)
828
- }
829
- } {
830
- wr.out(arg.vref false)
831
- }
832
- }
833
- }
834
- case "r_ktype" {
835
- def idx:int cmdArg.int_value
836
- if ((array_length node.children) > idx) {
837
- def arg:CodeNode (itemAt node.children idx)
838
- if arg.hasParamDesc {
839
- def ss:string (langWriter.getObjectTypeString(arg.paramDesc.nameNode.key_type ctx))
840
- wr.out(ss false)
841
- } {
842
- def ss:string (langWriter.getObjectTypeString(arg.key_type ctx))
843
- wr.out(ss false)
844
- }
845
- }
846
- }
847
- case "r_atype" {
848
- def idx:int cmdArg.int_value
849
- if ((array_length node.children) > idx) {
850
- def arg:CodeNode (itemAt node.children idx)
851
- if arg.hasParamDesc {
852
- def ss:string (langWriter.getObjectTypeString(arg.paramDesc.nameNode.array_type ctx))
853
- wr.out(ss false)
854
- } {
855
- def ss:string (langWriter.getObjectTypeString(arg.array_type ctx))
856
- wr.out(ss false)
857
- }
858
- }
859
- }
860
- case "r_atype_fname" {
861
- def idx:int cmdArg.int_value
862
- if ((array_length node.children) > idx) {
863
- def arg:CodeNode (itemAt node.children idx)
864
- if arg.hasParamDesc {
865
- def ss:string (langWriter.getObjectTypeString(arg.paramDesc.nameNode.array_type ctx))
866
- if(ss == "interface{}") {
867
- ss = "interface"
868
- }
869
- wr.out(ss false)
870
- } {
871
- def ss:string (langWriter.getObjectTypeString(arg.array_type ctx))
872
- if(ss == "interface{}") {
873
- ss = "interface"
874
- }
875
- wr.out(ss false)
876
- }
877
- }
878
- }
879
-
880
- case "custom" {
881
- langWriter.CustomOperator(node ctx wr)
882
- }
883
-
884
- case "arraytype" {
885
- def idx:int cmdArg.int_value
886
- if ((array_length node.children) > idx) {
887
- def arg:CodeNode (itemAt node.children idx)
888
- if arg.hasParamDesc {
889
- langWriter.writeArrayTypeDef( (unwrap arg.paramDesc.nameNode) ctx wr)
890
- } {
891
- langWriter.writeArrayTypeDef(arg ctx wr)
892
- }
893
- }
894
- }
895
-
896
- case "java_class" {
897
- ; (java_class 'className' '<code>')
898
- try {
899
- def fName (cmdArg.string_value + ".java")
900
- def p_write:CodeWriter (wr.getTag("utilities"))
901
- if ((has p_write.compiledTags fName) == false) {
902
- def code (cmd.getThird())
903
- def classWr (wr.getFileWriter( "." fName))
904
- if( has (classWr.getCode())) {
905
-
906
- } {
907
- def package_name (ctx.getCompilerSetting("package"))
908
- classWr.out("package " + package_name + ";" , true)
909
- classWr.raw( code.string_value false)
910
- set p_write.compiledTags fName true
911
- }
912
- }
913
- } {
914
-
915
- }
916
- }
917
-
918
- case "rawtype" {
919
- def idx:int cmdArg.int_value
920
- if ((array_length node.children) > idx) {
921
- def arg:CodeNode (itemAt node.children idx)
922
- if arg.hasParamDesc {
923
- langWriter.writeRawTypeDef( (unwrap arg.paramDesc.nameNode) ctx wr)
924
- } {
925
- langWriter.writeRawTypeDef(arg ctx wr)
926
- }
927
- }
928
- }
929
- case "macro" {
930
- ; compiledTags
931
-
932
- def p_write:CodeWriter (wr.getTag("utilities"))
933
- def newWriter:CodeWriter (new CodeWriter ())
934
- def testCtx:RangerAppWriterContext (ctx.fork())
935
- testCtx.restartExpressionLevel()
936
- testCtx.targetLangName = "ranger"
937
-
938
- this.walkCommandList(cmdArg node testCtx newWriter)
939
- def p_str:string (newWriter.getCode())
940
- def root:RangerAppWriterContext (ctx.getRoot())
941
-
942
- if ((has p_write.compiledTags p_str) == false) {
943
- set p_write.compiledTags p_str true
944
-
945
- def mCtx:RangerAppWriterContext (ctx.fork())
946
- mCtx.restartExpressionLevel()
947
- mCtx.targetLangName = "ranger"
948
- this.walkCommandList(cmdArg node mCtx p_write)
949
-
950
- }
951
- }
952
- case "install_file" {
953
- this.installFile( cmdArg.string_value ctx wr)
954
- }
955
- case "create_polyfill" {
956
- this.createPolyfill( cmdArg.string_value ctx wr)
957
- }
958
- case "typeof" {
959
- def idx:int cmdArg.int_value
960
- if ((array_length node.children) >= idx) {
961
- def arg:CodeNode (itemAt node.children idx)
962
- if arg.hasParamDesc {
963
- this.writeTypeDef( (unwrap arg.paramDesc.nameNode) ctx wr)
964
- } {
965
- this.writeTypeDef(arg ctx wr)
966
- }
967
- }
968
- }
969
- case "imp" {
970
- langWriter.import_lib(cmdArg.string_value ctx wr)
971
- }
972
- case "atype" {
973
- def idx:int cmdArg.int_value
974
- if ((array_length node.children) >= idx) {
975
- def arg:CodeNode (itemAt node.children idx)
976
- def p@(optional):RangerAppParamDesc (this.findParamDesc( arg ctx wr))
977
- def nameNode:CodeNode (unwrap p.nameNode)
978
-
979
- def tn:string nameNode.array_type
980
- wr.out((this.getTypeString(tn ctx)) false)
981
-
982
-
983
- }
984
- }
985
- }
986
- } {
987
- if (cmd.value_type == RangerNodeType.VRef) {
988
- switch cmd.vref {
989
- case "nl" {
990
- wr.newline()
991
- }
992
- case 'space' {
993
- wr.out(' ' false)
994
- }
995
- case 'I' {
996
- wr.indent(1)
997
- }
998
- case 'i' {
999
- wr.indent(-1)
1000
- }
1001
- case 'op' {
1002
- def fc:CodeNode (node.getFirst())
1003
- wr.out(fc.vref false)
1004
- }
1005
- }
1006
- } {
1007
- if (cmd.value_type == RangerNodeType.String) {
1008
- wr.out(cmd.string_value false)
1009
- }
1010
- }
1011
- }
1012
- }
1013
- fn compile:void (node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
1014
- }
1015
-
1016
-
1017
- fn findParamDesc@(weak optional):RangerAppParamDesc (obj:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
1018
- def varDesc@(lives):RangerAppParamDesc
1019
- def set_nsp:boolean false
1020
- def classDesc@(lives optional):RangerAppClassDesc
1021
- if (0 == (array_length obj.nsp)) {
1022
- set_nsp = true
1023
- }
1024
- if (obj.vref != "this") {
1025
- if ((array_length obj.ns) > 1) {
1026
- def cnt:int (array_length obj.ns)
1027
- def classRefDesc@(lives):RangerAppParamDesc
1028
- for obj.ns strname:string i {
1029
- if (i == 0) {
1030
-
1031
- if (strname == "this") {
1032
- classDesc = (ctx.getCurrentClass())
1033
- if set_nsp {
1034
- push obj.nsp (unwrap classDesc)
1035
- }
1036
- } {
1037
- if (ctx.isDefinedClass(strname)) {
1038
- classDesc = (ctx.findClass(strname))
1039
- if set_nsp {
1040
- push obj.nsp (unwrap classDesc)
1041
- }
1042
- continue _
1043
- }
1044
- classRefDesc = (ctx.getVariableDef(strname))
1045
- if (null? classRefDesc) {
1046
- ctx.addError(obj ('Error, no description for called object: ' + strname))
1047
- break _
1048
- }
1049
- if set_nsp {
1050
- push obj.nsp (unwrap classRefDesc)
1051
- }
1052
- classRefDesc.ref_cnt = (1 + classRefDesc.ref_cnt)
1053
- classDesc = (ctx.findClass(classRefDesc.nameNode.type_name))
1054
- }
1055
- } {
1056
- if (i < (cnt - 1)) {
1057
- varDesc = (classDesc.findVariable(strname))
1058
- if (null? varDesc) {
1059
- ctx.addError(obj ('Error, no description for refenced obj: ' + strname))
1060
- }
1061
- def subClass:string (varDesc.getTypeName())
1062
- classDesc = (ctx.findClass(subClass))
1063
- if set_nsp {
1064
- push obj.nsp (unwrap varDesc)
1065
- }
1066
- continue _
1067
- }
1068
- if (!null? classDesc) {
1069
- varDesc = (classDesc.findVariable(strname))
1070
- if (null? varDesc) {
1071
- def classMethod@(lives optional):RangerAppFunctionDesc (classDesc.findMethod(strname))
1072
- if (null? classMethod) {
1073
- classMethod = (classDesc.findStaticMethod(strname))
1074
- if (null? classMethod) {
1075
- ctx.addError(obj ('variable not found ' + strname))
1076
- }
1077
- }
1078
- if (!null? classMethod) {
1079
- if set_nsp {
1080
- push obj.nsp (unwrap classMethod)
1081
- }
1082
- return classMethod
1083
- }
1084
- }
1085
- if set_nsp {
1086
- push obj.nsp (unwrap varDesc)
1087
- }
1088
- }
1089
- }
1090
- }
1091
- return varDesc
1092
- }
1093
- varDesc = (ctx.getVariableDef(obj.vref))
1094
- if (!null? varDesc.nameNode) {
1095
- } {
1096
- print ('findParamDesc : description not found for ' + obj.vref)
1097
- if (!null? varDesc) {
1098
- print ('Vardesc was found though...' + varDesc.name)
1099
- }
1100
- ctx.addError(obj ('Error, no description for called object: ' + obj.vref))
1101
- }
1102
- return varDesc
1103
- }
1104
- def cc@(optional):RangerAppClassDesc (ctx.getCurrentClass())
1105
- return cc
1106
- }
1107
-
1108
- }
1109
-