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 +0,0 @@
1
- var lang_data = "language {\r\n\r\n name \"Ranger\"\r\n\r\n ; compilation targets might be defined here like this\r\n targets {\r\n ; short common name file extension\r\n es5 ES5 js \r\n es6 JavaScript js\r\n java7 Java7 java\r\n kotlin Kotlin kt\r\n scala Scala scala\r\n cpp Cpp cpp\r\n csharp CSharp cs\r\n swift3 Swift3 swift\r\n ts TypeScript ts\r\n flow Flow flow\r\n go Golang go\r\n php PHP php\r\n python Python py\r\n nim Nim nim\r\n }\r\n\r\n toplevel_keywords (class systemclass Constructor fn sfn Import Extend Enum def let operators)\r\n annotation_keywors (weak strong lives temp)\r\n \r\n ; transformations for the reserved words for function names or other keywords\r\n reserved_words {\r\n map FnMap\r\n forEach forEachItem\r\n }\r\n\r\n commands {\r\n\r\n M_PI mathPi:double () {\r\n templates {\r\n es6 (\"Math.PI\")\r\n go ( \"math.Pi\" (imp \"math\")) \r\n swift3 ( \"Double.pi\" (imp \"Foundation\")) \r\n java7 ( \"Math.PI\" (imp \"java.lang.Math\")) \r\n php (\"pi()\") \r\n cpp (\"M_PI\" (imp \"<math.h>\")) \r\n }\r\n }\r\n\r\n fabs fabs:double ( v:double ) {\r\n templates {\r\n es6 (\"Math.abs(\" (e 1) \")\")\r\n go ( \"math.Abs(\" (e 1) \")\" (imp \"math\")) \r\n swift3 ( \"abs(\" (e 1) \")\" (imp \"Foundation\")) \r\n java7 ( \"Math.abs(\" (e 1) \")\" (imp \"java.lang.Math\")) \r\n php ( \"abs(\" (e 1) \")\") \r\n cpp (\"fabs(\" (e 1) \")\" (imp \"<cmath>\")) \r\n }\r\n }\r\n tan tan:double ( v:double ) {\r\n templates {\r\n es6 (\"Math.tan(\" (e 1) \")\")\r\n go ( \"math.Tan(\" (e 1) \")\" (imp \"math\")) \r\n swift3 ( \"tan(\" (e 1) \")\" (imp \"Foundation\")) \r\n java7 ( \"Math.tan(\" (e 1) \")\" (imp \"java.lang.Math\")) \r\n php ( \"tan(\" (e 1) \")\") \r\n cpp (\"tan(\" (e 1) \")\" (imp \"<math.h>\")) \r\n }\r\n }\r\n\r\n golang_wait waiter:void (seconds:double ) {\r\n templates {\r\n go ( \"time.Sleep(time.Duration(\" (e 1) \" * float64(time.Second) )) \" (imp \"time\") )\r\n * ()\r\n }\r\n }\r\n\r\n wait cmdWait:void ( seconds:double ) {\r\n templates {\r\n es6 ( \"\" )\r\n * ()\r\n }\r\n }\r\n\r\n wait cmdWait:void ( seconds:double after:block) {\r\n templates {\r\n es6 ( \"setTimeout( () => { \" nl I (block 2) i nl \" }, 1000 * \" (e 1) \")\" )\r\n go ( \"go func() {\" nl I \"time.Sleep(time.Duration(\" (e 1) \" * float64(time.Second) )) \" nl (block 2) i nl \"}()\" nl (imp \"time\") )\r\n cpp ( \"std::this_thread::sleep_for(std::chrono::milliseconds((int)(\" (e 1) \" * 1000)));\" nl (block 2) nl (imp \"<chrono>\" ) (imp \"<thread>\" ) )\r\n php ( \"sleep(\" (e 1) \");\" nl (block 2) nl )\r\n swift3 ( \"usleep(UInt32(1000000*\" (e 1) \"));\" nl (block 2) nl )\r\n }\r\n }\r\n \r\n\r\n ; Profiling\r\n timer cmdTimerBlock:void (name:string code:block) {\r\n templates {\r\n ; start := time.Now()\r\n go ( (defvar _start:int) \"for {\" nl I nl (varname _start) \" := time.Now()\" nl (block 2) nl \"fmt.Println(\" (e 1) \", time.Since(\" (varname _start) \") )\" nl \"break;\" i nl \"}\" (imp \"time\") (imp \"fmt\") )\r\n swift3 ( \"do {\" nl I nl \"let _start = CFAbsoluteTimeGetCurrent()\" nl (block 2) nl \"print(\" (e 1) \", CFAbsoluteTimeGetCurrent() - _start )\" i nl \"}\" (imp \"CoreFoundation\") )\r\n es6 ( \"console.time(\" (e 1) \");\" nl (block 2) nl \"console.timeEnd(\" (e 1) \");\" )\r\n php ( nl \"$time_start = microtime(true);\" nl (block 2) nl \"$time_end = microtime(true);\" nl \"echo(\" (e 1) \".($time_end - $time_start).\\\"\\\\n\\\");\" nl)\r\n java7 (\r\n nl \"long startTime = System.nanoTime();\" nl\r\n (block 2 )\r\n nl \"long elapsedTime = System.nanoTime() - startTime;\" nl\r\n nl \"System.out.println( \" (e 1) \"+ String.valueOf((double)elapsedTime / 1000000000.0));\" nl \r\n )\r\n ranger ( nl \"timer \" (e 1) \" {\" nl I (block 2) i nl \"}\" nl)\r\n cpp ( ( imp \"<ctime>\" )\r\n nl \"std::clock_t __begin = std::clock();\" nl\r\n (block 2)\r\n nl \"std::clock_t __end = std::clock();\" \r\n nl \"std::cout << \" (e 1) \" << ( double(__end - __begin) / CLOCKS_PER_SEC ) << std::endl;\" nl \r\n )\r\n * ( (block 2) )\r\n }\r\n }\r\n\r\n ; Command line arguments\r\n shell_arg cmdArg:string (index:int) {\r\n templates {\r\n cpp ( \"std::string(argv[\" (e 1) \" + 1])\")\r\n php ( \"$argv[\" (e 1) \" + 1]\" )\r\n java7 ( \"args[\" (e 1) \"]\")\r\n go ( \"os.Args[\" (e 1) \" + 1]\" (imp \"os\"))\r\n swift3 (\"CommandLine.arguments[\" (e 1) \" + 1]\")\r\n es6 ( \"process.argv[ 2 + process.execArgv.length + \" (e 1) \"]\")\r\n ranger (\"( shell_arg \" (e 1) \" )\")\r\n }\r\n }\r\n\r\n shell_arg_cnt cmdArg:int () {\r\n templates {\r\n cpp ( \"argc - 1\")\r\n swift3 (\"CommandLine.arguments.count - 1\")\r\n php ( \"(count($argv) - 1)\" )\r\n java7 ( \"args.length\")\r\n go ( \"int64( len( os.Args) - 1 )\" (imp \"os\"))\r\n es6 ( \"(process.argv.length - 2 - process.execArgv.length)\" )\r\n ranger (\"( shell_arg_cnt )\")\r\n }\r\n } \r\n\r\n ; I/O\r\n install_directory cmdArg:string () {\r\n templates {\r\n es6 ( \"__dirname\" )\r\n ranger (\"( install_directory )\")\r\n * ( \"\\\".\\\"\")\r\n }\r\n } \r\n\r\n current_directory cmdArg:string () {\r\n templates {\r\n es6 ( \"process.cwd()\" )\r\n ranger (\"( current_directory )\")\r\n * ( \"\\\".\\\"\")\r\n }\r\n } \r\n\r\n file_exists cmdIsDir:boolean (path:string filename:string) {\r\n templates {\r\n cpp ( \"r_cpp_file_exists( \" (e 1) \" + \\\"/\\\" + \" (e 2) \")\" (imp \"<sys/stat.h>\") (imp \"<string>\")\r\n(create_polyfill \"\r\nbool r_cpp_file_exists(std::string name) \r\n{\r\n struct stat buffer;\r\n return (stat (name.c_str(), &buffer) == 0);\r\n} \r\n \") )\r\n swift3 ( \"r_file_exists(fileName:\" (e 1) \" + \\\"/\\\" + \" (e 2) \" )\" \r\n\r\n(create_polyfill \"\r\nfunc r_file_exists ( fileName:String ) -> Bool {\r\n let fileManager = FileManager.default\r\n var isDir : ObjCBool = false\r\n if fileManager.fileExists(atPath: fileName, isDirectory:&isDir) {\r\n if isDir.boolValue {\r\n return false\r\n } else {\r\n return true\r\n }\r\n } else {\r\n return false\r\n } \r\n}\r\n \") \r\n )\r\n es6 (\"require(\\\"fs\\\").existsSync(process.cwd() + \\\"/\\\" + \" (e 1) \" + \\\"/\\\" + \" (e 2) \" )\")\r\n ranger (\"( file_exists \" (e 1) \" + \\\"/\\\" + \" (e 2) \" )\")\r\n java7 ( \"new File(\" (e 1) \" + '/' + \" (e 2) \").exists()\" (imp \"java.io.File\") )\r\n php ( \"file_exists(\" (e 1) \".'/'.\" (e 2) \")\" )\r\n go ( \"r_file_exists(\" (e 1) \", \" (e 2) \")\"\r\n(create_polyfill\r\n\"\r\nfunc r_file_exists(pathName string, fileName string) bool {\r\n if _, err := os.Stat(pathName + \\\"/\\\" + fileName); os.IsNotExist(err) {\r\n return false\r\n }\r\n return true\r\n}\r\n\"\r\n) \r\n )\r\n }\r\n }\r\n\r\n dir_exists cmdIsDir:boolean (path:string) {\r\n templates {\r\n swift3 ( \"r_dir_exists( dirName: \" (e 1) \")\" \r\n\r\n(create_polyfill \"\r\nfunc r_dir_exists ( dirName:String ) -> Bool {\r\n let fileManager = FileManager.default\r\n var isDir : ObjCBool = false\r\n if fileManager.fileExists(atPath: dirName, isDirectory:&isDir) {\r\n if isDir.boolValue {\r\n return true\r\n } else {\r\n return false\r\n }\r\n } else {\r\n return false\r\n } \r\n}\r\n \") \r\n )\r\n cpp ( \"r_cpp_dir_exists( \" (e 1) \" )\" (imp \"<sys/stat.h>\") (imp \"<string>\")\r\n(create_polyfill \"\r\nbool r_cpp_dir_exists(std::string name) \r\n{\r\n struct stat buffer;\r\n return (stat (name.c_str(), &buffer) == 0);\r\n} \r\n \") ) \r\n java7 ( \"new File(\" (e 1) \").exists()\" (imp \"java.io.File\") )\r\n es6 (\"require(\\\"fs\\\").existsSync(process.cwd() + \\\"/\\\" + \" \r\n (e 1) \" + \\\"/\\\" \" (e 2) \")\")\r\n ranger (\"( dir_exists \" (e 1) \" )\")\r\n php ( \"is_dir(\" (e 1) \")\" )\r\n go ( \"r_dir_exists(\" (e 1) \")\"\r\n(create_polyfill\r\n\"\r\nfunc r_dir_exists(pathName string) bool {\r\n if _, err := os.Stat(pathName); os.IsNotExist(err) {\r\n return false\r\n }\r\n return true\r\n}\r\n\"\r\n) \r\n ) \r\n }\r\n }\r\n\r\n create_dir cmdCreateDir:void (path:string) {\r\n templates {\r\n\r\n cpp ( \"r_cpp_create_dir( \" (e 1) \" );\" nl (imp \"<sys/stat.h>\") (imp \"<sys/types.h>\") (imp \"<string>\")\r\n(create_polyfill \"\r\nvoid r_cpp_create_dir(std::string name) \r\n{\r\n mkdir( name.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH );\r\n} \r\n \") )\r\n swift3 ( nl ) \r\n php ( nl \"mkdir(\" (e 1) \");\" nl )\r\n es6 (\"require(\\\"fs\\\").mkdirSync(process.cwd() + \\\"/\\\" + \" \r\n (e 1) \")\")\r\n go ( nl \"_ = os.Mkdir( \" (e 1 ) \" , os.ModePerm)\" nl (imp \"os\") )\r\n\r\n ranger ( nl \"create_dir \" (e 1) nl)\r\n java7 ( nl \"createDir(\" (e 1) \");\" nl \r\n (imp \"java.io.File\")\r\n(create_polyfill \"\r\nstatic void createDir(String path) \r\n{\r\n try{\r\n File theDir = new File(path);\r\n if (!theDir.exists()) {\r\n theDir.mkdir();\r\n }\r\n } catch(SecurityException se) {\r\n\r\n }\r\n} \r\n \") ) \r\n\r\n }\r\n }\r\n; try text.write(to: path, atomically: false, encoding: String.Encoding.utf8)\r\n write_file cmdWriteFile:void (path:string file:string data:string) {\r\n templates {\r\n\r\n swift3 (\"r_write_file(dirName: \" (e 1) \" + \\\"/\\\" + \" (e 2) \", dataToWrite: \" (e 3) \") \" \r\n\r\n(create_polyfill \"\r\nfunc r_write_file ( dirName:String, dataToWrite:String ) {\r\n do {\r\n let fileManager = FileManager.default\r\n let url = NSURL(fileURLWithPath: fileManager.currentDirectoryPath)\r\n let path = url.appendingPathComponent(dirName)\r\n try dataToWrite.write(to:path!, atomically: false, encoding: String.Encoding.utf8)\r\n } catch {\r\n\r\n }\r\n}\r\n \") \r\n \r\n ) \r\n cpp_old ( nl \"/* write file not yet implemented */\" nl)\r\n\r\n cpp ( \"r_cpp_write_file( \" (e 1) \" , \" (e 2) \" , \" (e 3) \" );\" nl (imp \"<iostream>\") (imp \"<string>\") \r\n(create_polyfill \"\r\nvoid r_cpp_write_file(std::string path, std::string filename, std::string text) \r\n{\r\n std::ofstream outputFile;\r\n outputFile.open(path + \\\"/\\\" + filename);\r\n outputFile << text;\r\n outputFile.close();\r\n} \r\n \") ) \r\n ranger ( nl \"write_file \" (e 1) \" \" (e 2) \" \" (e 3) nl)\r\n es6 (\"require(\\\"fs\\\").writeFileSync(process.cwd() + \\\"/\\\" + \" \r\n (e 1) \" + \\\"/\\\" + \" (e 2) \", \" (e 3) \")\")\r\n\r\n php ( nl \"file_put_contents(\" (e 1) \".'/'.\" (e 2) \" , \" (e 3) \");\" nl )\r\n\r\n\r\n java7 ( nl \"writeFile(\" (e 1) \" + \\\"/\\\" + \" (e 2) \" , \" (e 3)\" );\" nl \r\n (imp \"java.io.PrintWriter\")\r\n(create_polyfill \"\r\nstatic void writeFile(String path, String text) \r\n{\r\n try{\r\n PrintWriter out = new PrintWriter( path);\r\n out.print( text );\r\n out.close();\r\n } catch ( FileNotFoundException e) {\r\n\r\n }\r\n} \r\n \") ) \r\n \r\n\r\n go ( \"r_write_text_file(\" (e 1) \", \" (e 2) \", \" (e 3) \")\"\r\n (imp \"os\")\r\n(create_polyfill\r\n\"\r\nfunc r_write_text_file(pathName string, fileName string, txtData string) {\r\n f, e := os.Create(pathName + \\\"/\\\" + fileName)\r\n if e != nil {\r\n panic(e)\r\n }\r\n defer f.Close()\r\n\r\n _ , err := f.WriteString(txtData)\r\n if err != nil {\r\n panic(err)\r\n }\r\n f.Sync()\r\n}\r\n\"\r\n) ) \r\n\r\n }\r\n }\r\n \r\n\r\n read_file cmdReadFile@(optional):string (path:string filename:string) {\r\n\r\n templates {\r\n ranger ( \"(read_file \" (e 1) \" \" (e 2) \")\" )\r\n cpp ( \"r_cpp_readFile( \" (e 1) \" , \" (e 2) \")\" (imp \"<fstream>\")\r\n(create_polyfill \"\r\nstd::string r_cpp_readFile(std::string path, std::string filename) \r\n{\r\n std::ifstream ifs(path + \\\"/\\\" + filename);\r\n std::string content( (std::istreambuf_iterator<char>(ifs) ),\r\n (std::istreambuf_iterator<char>() ) );\r\n return content;\r\n} \r\n \") \r\n \r\n )\r\n php (\"file_get_contents(\" (e 1) \" . \\\"/\\\" . \" (e 2) \") \" )\r\n swift3 (\"r_read_file(dirName: \" (e 1) \" + \\\"/\\\" + \" (e 2) \") \" \r\n(create_polyfill \"\r\nfunc r_read_file ( dirName:String ) -> String? {\r\n let res: String?\r\n do {\r\n res = try String(contentsOfFile:dirName)\r\n } catch {\r\n res = nil\r\n }\r\n return res\r\n}\r\n \") \r\n )\r\n java7 ( \"Optional.of(readFile(\" (e 1) \" + \\\"/\\\" + \" (e 2) \" , StandardCharsets.UTF_8 ))\" \r\n (imp \"java.util.Optional\")\r\n (imp \"java.nio.file.Paths\") \r\n (imp \"java.io.File\")\r\n (imp \"java.nio.file.Files\") \r\n (imp \"java.nio.charset.Charset\")\r\n (imp \"java.nio.charset.StandardCharsets\")\r\n(create_polyfill \"\r\nstatic String readFile(String path, Charset encoding) \r\n{\r\n try {\r\n byte[] encoded = Files.readAllBytes(Paths.get(path));\r\n return new String(encoded, encoding);\r\n } catch(IOException e) { \r\n return \\\"\\\";\r\n }\r\n} \r\n \") \r\n \r\n )\r\n scala ( \"Try(Source.fromFile(\" (e 1) \" + \\\"/\\\" + \" (e 2) \").getLines.mkString).toOption\" (imp \"scala.io.Source\") (imp \"scala.util.Try\"))\r\n go ( \"r_io_read_file(\" (e 1) \", \" (e 2) \")\" (imp \"io/ioutil\")\r\n(create_polyfill \"\r\n\r\n// polyfill for reading files\r\nfunc r_io_read_file( path string , fileName string ) *GoNullable {\r\n res := new(GoNullable);\r\n if v, err := ioutil.ReadFile(path + \\\"/\\\" + fileName); err == nil {\r\n res.has_value = true\r\n res.value = string(v)\r\n } else {\r\n res.has_value = false\r\n }\r\n return res \r\n}\r\n\"))\r\n es6 ( \"(require('fs').readFileSync( process.cwd() + '/' + \" (e 1) \" + '/' + \" (e 2) \" , 'utf8'))\" )\r\n }\r\n }\r\n\r\n ; \r\n = cmdAssign@(moves@( 2 1 ) ):void ( left:T right:T ) { \r\n templates { \r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n scala ( nl (e 1) \" = \" (e 2) nl ) \r\n go ( (custom _ ) ) \r\n * ( nl (e 1) \" = \" (e 2) \";\" nl ) \r\n } \r\n } \r\n\r\n\r\n = cmdAssign@(moves@( 2 1 ) ):void ( left@(optional):T right:T ) { \r\n templates { \r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n scala ( nl (e 1) \" = Some(\" (e 2) \")\" nl ) \r\n swift ( nl (e 1) \" = Optional(\" (e 2) \");\" nl ) \r\n java7 ( nl (e 1) \" = Optional.of(\" (e 2) \");\" nl (imp \"java.util.Optional\") ) \r\n go ( nl (goset 1) \".value = \" (e 2) \";\" nl nl (goset 1) \".has_value = true; /* detected as non-optional */\" nl ) \r\n cpp ( nl ( e 1) \" = \" (e 2) \";\" nl ) \r\n * ( nl (e 1) \" = \" (e 2) \";\" nl ) \r\n } \r\n } \r\n\r\n = cmdAssign@(moves@( 2 1 ) ):void ( left@(optional):T right@(optional):T ) { \r\n templates { \r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n scala ( nl (e 1) \" = \" (e 2) nl ) \r\n go ( nl (goset 1) \".value = \" (e 2) \".value;\" nl nl (goset 1) \".has_value = false; \" nl \r\n \"if \" (goset 1) \".value != nil {\" nl I (goset 1) \".has_value = true\" nl i \"}\" nl\r\n ) \r\n cpp ( nl ( e 1) \" = \" (e 2) \";\" nl ) \r\n java7 ( nl (e 1) \" = \" (e 2) \";\" nl (imp \"java.util.Optional\") ) \r\n * ( nl (e 1) \" = \" (e 2) \";\" nl ) \r\n } \r\n } \r\n\r\n empty cmdEmpty@(optional):T ( node@(ignore):T ) {\r\n templates {\r\n scala ( \"Option.empty[(\" (e 1) \")\" )\r\n swift3 ( \"nil\" )\r\n csharp ( \"(\" (typeof 1) \"?)\" (e 1) )\r\n cpp ( (e 1) )\r\n java7 ( \"Optional.of(\" (e 1 ) \")\")\r\n go ( (e 1 ) )\r\n * ( \"undefined\")\r\n }\r\n }\r\n\r\n wrap cmdWrap@(optional):T ( arg:T ) {\r\n templates {\r\n ranger ( \"( wrap \" (e 1) \")\" ) \r\n scala ( \"Some(\" (e 1) \")\" )\r\n swift3 ( \"Optional(\" (e 1) \")\" )\r\n csharp ( \"(\" (typeof 1) \"?)\" (e 1) )\r\n cpp ( (e 1) )\r\n java7 ( \"Optional.of(\" (e 1 ) \")\" (imp \"java.util.Optional\"))\r\n go ( (e 1 ) )\r\n php ( (e 1 ) )\r\n * ( (e 1) )\r\n }\r\n }\r\n\r\n\r\n !! cmdUnwrap:T ( arg@(optional):T ) {\r\n templates {\r\n ranger ( \"( unwrap \" (e 1) \")\" )\r\n scala ( (e 1) \".get\" )\r\n csharp ( (e 1) \".Value\" )\r\n java7 ( (e 1) \".get()\" )\r\n rust ( (e 1) \".unwrap()\" )\r\n php ( (e 1 ) )\r\n kotlin ( (e 1) \"!!\" )\r\n swift3 ( (e 1) \"!\" )\r\n go ( (e 1) \".value.(\" (typeof 1) \")\" )\r\n cpp ( (e 1) )\r\n\r\n * ( (e 1) )\r\n }\r\n } \r\n unwrap cmdUnwrap:int ( arg@(optional):int ) {\r\n templates {\r\n cpp ( (e 1) \".value\" )\r\n }\r\n } \r\n unwrap cmdUnwrap:double ( arg@(optional):double ) {\r\n templates {\r\n cpp ( (e 1) \".value\" )\r\n }\r\n } \r\n\r\n unwrap cmdUnwrap:T ( arg@(optional):T ) {\r\n templates {\r\n ranger ( \"( unwrap \" (e 1) \")\" )\r\n scala ( (e 1) \".get\" )\r\n csharp ( (e 1) \".Value\" )\r\n java7 ( (e 1) \".get()\" (imp \"java.util.Optional\") )\r\n rust ( (e 1) \".unwrap()\" )\r\n php ( (e 1 ) )\r\n kotlin ( (e 1) \"!!\" )\r\n swift3 ( (e 1) \"!\" )\r\n go ( (e 1) \".value.(\" (typeof 1) \")\" )\r\n cpp ( (e 1) )\r\n\r\n * ( (e 1) )\r\n }\r\n }\r\n\r\n\r\n\r\n ; TODO: could be varname@(mutable), but the compiler may not be able to determine the\r\n ; mutability before the code has been processed through... \r\n\r\n def cmdDef:void ( varname:[T] ) { \r\n templates { \r\n * ( nl \"var \" (nameof 1) \" = [];\" nl )\r\n } \r\n } \r\n\r\n def cmdDef:void ( varname:[K:T] ) { \r\n templates { \r\n * ( nl \"var \" (nameof 1) \" = {};\" nl )\r\n } \r\n } \r\n\r\n\r\n def cmdDef:void ( varname:T ) { \r\n templates { \r\n scala@(mutable) ( nl \"var \" (e 1) \":\" (typeof 1 ) \" /* mutable uninitialized value */\" nl ) \r\n scala ( nl \"val \" (e 1) \":\" (typeof 1 ) \" /* immutable uninitialized value */\" nl ) \r\n java7 (nl (typeof 1) \" \" (e 1) \";\" nl) \r\n es6@(mutable) ( nl \"let \" (e 1) \";\" nl ) \r\n es5@(mutable) ( nl \"var \" (e 1) \";\" nl ) \r\n * ( nl \"const \" (e 1) \";\" nl ) \r\n } \r\n } \r\n\r\n def cmdDef:void ( varname:T value:T ) { \r\n templates { \r\n scala@(mutable) ( nl \"var \" (e 1) \":\" (typeof 1 )\" = \" (e 2) \" /* mutable value */\" nl ) \r\n scala ( nl \"val \" (e 1) \":\" (typeof 1 )\" = \" (e 2) \" /* immutable value */\" nl ) \r\n java7 (nl (typeof 1) \" \" (e 1) \" = \" (e 2) \";\" nl)\r\n es6@(mutable) ( nl \"let \" (e 1) \" = \" (e 2) \";\" nl )\r\n es6 ( nl \"const \" (e 1) \" = \" (e 2) \";\" nl )\r\n * ( nl \"var \" (e 1) \" = \" (e 2) \";\" nl )\r\n } \r\n } \r\n\r\n \r\n\r\n def cmdDef:void ( varname@(mutable):T value:T ) { \r\n templates { \r\n scala( nl \"var \" (e 1) \":\" (typeof 1 )\" = \" (e 2) \" /* mutable def value */\" nl ) \r\n java7 (nl (typeof 1) \" \" (e 1) \" = \" (e 2) \";\" nl)\r\n es6 ( nl \"let \" (e 1) \" = \" (e 2) \";\" nl )\r\n * ( nl \"var \" (e 1) \" = \" (e 2) \";\" nl )\r\n } \r\n } \r\n\r\n return cmdReturn@(optional returns@(1)):T ( value@(optional):T ) {\r\n templates {\r\n java7 ( (custom _) )\r\n ranger ( nl \"return \" (e 1) nl ) \r\n * ( \"return \" (ifa 1 \";\") (e 1) (eif _) \";\" )\r\n }\r\n } \r\n \r\n return cmdReturn@(returns@(1)):T ( value:T ) {\r\n templates {\r\n ranger ( nl \"return \" (e 1) nl ) \r\n * ( \"return \" (ifa 1 \";\") (e 1) (eif _) \";\" )\r\n }\r\n } \r\n\r\n return cmdReturn@():void ( ) {\r\n templates {\r\n cpp ( (custom _ ) )\r\n ranger ( nl \"return\" nl ) \r\n * ( \"return;\" )\r\n }\r\n } \r\n \r\n\r\n = cmdAssign:void ( left@(optional):T right:T ) { \r\n templates {\r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n scala ( nl (e 1) \" = \" (e 2) \".get /* scala optional assigment of values * / \" nl ) \r\n * ( nl (e 1) \" = \" (e 2) \";\" nl ) \r\n } \r\n } \r\n\r\n = cmdAssign:void ( left:T right@(optional):T ) { \r\n templates {\r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n swift3 ( nl (e 1) \" = Optional(\" (e 2) \")\" )\r\n \r\n scala ( nl (e 1) \" = \" (e 2) \".get /* scala optional assigment of values * / \" nl ) \r\n * ( nl (e 1) \" = \" (e 2) \";\" nl ) \r\n } \r\n } \r\n\r\n = cmdAssign:void ( left@(optional):T right@(optional):T ) { \r\n templates {\r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n scala ( nl (e 1) \" = \" (e 2) \" /* scala optional assigment of values * / \" nl ) \r\n * ( nl (e 1) \" = \" (e 2) \";\" nl ) \r\n } \r\n } \r\n \r\n\r\n ; numeric - operations\r\n - cmdMinusOp:double ( left:double right:double ) { templates { * ( (e 1) \" - \" (e 2) ) } } \r\n - cmdMinusOp:int ( left:int right:int ) { templates { * ( (e 1) \" - \" (e 2) ) } } \r\n\r\n ; numeric + operations\r\n + cmdPlusOp:double ( left:double right:double ) { templates { * ( (e 1) \" + \" (e 2) ) } }\r\n\r\n ; random tests, remove these later:\r\n + cmdUnwrappingPlusOp:int ( left:int right@(optional):int ) {\r\n \r\n code {\r\n return left + (unwrap right)\r\n }\r\n\r\n }\r\n\r\n + cmdPlusOp:int ( left:int right@(optional):int ) { \r\n templates { * ( (e 1) \" + \" (e 2) \"? /* optional add*/\" ) } \r\n }\r\n \r\n + cmdPlusOp:int ( left@(mutable):int right@(optional):int ) { \r\n templates { * ( (e 1) \" + \" (e 2) \"? /* optional add*/\" ) } \r\n }\r\n + cmdPlusOp:int ( left@(mutable):int right:int ) { templates { * ( (e 1) \" + \" (e 2) ) } }\r\n + cmdPlusOp:int ( left@(mutable):int right:int ) { templates { * ( (e 1) \" + \" (e 2) ) } }\r\n\r\n ; random tests end\r\n + cmdPlusOp:int ( left:int right:int ) { templates { * ( (e 1) \" + \" (e 2) ) } }\r\n\r\n ; string + operations\r\n + cmdPlusOp:string ( left:string right:enum ) { \r\n templates { \r\n go ( \"strings.Join([]string{ \" (e 1) \",strconv.FormatInt(\" (e 2) \", 10) }, \\\"\\\")\" (imp \"strings\") (imp \"strconv\"))\r\n swift3 ( (e 1) \" + String(\" (e 2)\")\" )\r\n rust ( \"[\" (e 1) \" , (\" (e 2)\".to_string()) ].join(\\\"\\\")\" )\r\n php ( (e 1) \" . \" (e 2) ) \r\n cpp ( (e 1 ) \" + std::to_string(\" (e 2) \")\")\r\n * ( (e 1) \" + \" (e 2) ) \r\n } \r\n }\r\n\r\n + cmdPlusOp:string ( left:string right:string ) { \r\n templates { \r\n go ( \"strings.Join([]string{ \" (e 1) \",\" (e 2) \" }, \\\"\\\")\" (imp \"strings\"))\r\n php ( (e 1) \" . \" (e 2) )\r\n * ( (e 1) \" + \" (e 2) ) \r\n } \r\n }\r\n \r\n + cmdPlusOp:string ( left:string right:double ) { \r\n templates { \r\n go ( \"strings.Join([]string{ \" (e 1) \",strconv.FormatFloat(\" (e 2) \",'f', 6, 64) }, \\\"\\\")\" (imp \"strings\") (imp \"strconv\"))\r\n rust ( \"[\" (e 1) \" , (\" (e 2)\".to_string()) ].join(\\\"\\\")\" )\r\n swift3 ( (e 1) \" + String(\" (e 2)\")\" )\r\n cpp ( (e 1 ) \" + std::to_string(\" (e 2) \")\")\r\n php ( (e 1) \" . \" (e 2) ) \r\n * ( (e 1) \" + \" (e 2) ) \r\n } \r\n }\r\n ; Go;\r\n ; strconv.Itoa\r\n + cmdPlusOp:string ( left:string right:int ) { \r\n templates { \r\n go ( \"strings.Join([]string{ \" (e 1) \",strconv.FormatInt(\" (e 2) \", 10) }, \\\"\\\")\" (imp \"strings\") (imp \"strconv\"))\r\n swift3 ( (e 1) \" + String(\" (e 2)\")\" )\r\n rust ( \"[\" (e 1) \" , (\" (e 2)\".to_string()) ].join(\\\"\\\")\" )\r\n cpp ( (e 1 ) \" + std::to_string(\" (e 2) \")\")\r\n php ( (e 1) \" . \" (e 2) ) \r\n * ( (e 1) \" + \" (e 2) ) \r\n } \r\n }\r\n \r\n + cmdPlusOp:string ( left:double right:string ) { \r\n templates { \r\n * ( (e 1) \" + \" (e 2) ) \r\n php ( (e 1) \" . \" (e 2) ) \r\n rust ( \"[\" (e 1) \" , \" (e 2) \" ].join()\" )\r\n } \r\n }\r\n\r\n + cmdPlusOp:string ( left:int right:string ) { \r\n templates { * ( (e 1) \" + \" (e 2) ) \r\n php ( (e 1) \" . \" (e 2) ) \r\n } }\r\n\r\n\r\n * cmdMulOp:double ( left:double right:double ) { templates { * ( (e 1) \" * \" (e 2) ) } }\r\n * cmdMulOp:int ( left:int right:int ) { templates { * ( (e 1) \" * \" (e 2) ) } }\r\n\r\n / cmdDivOp:double ( left:double right:double ) { templates { * ( (e 1) \" / \" (e 2) ) } }\r\n / cmdDivOp:double ( left:int right:int ) { templates { * ( (e 1) \" / \" (e 2) ) } }\r\n\r\n ? cmdTernary:T ( condition:boolean left:T right:T ) { \r\n templates { \r\n go ( \"(func() \" (typeof 2) \" { if \" (e 1) \" { return \" (e 2) \" } else { return \" (e 3) \"} }())\" ) \r\n * ( (e 1) \" ? \" (e 2) \" : \" (e 3) ) \r\n } \r\n }\r\n\r\n ?? cmdNullCoalesce:T ( left@(optional):T right:T ) { \r\n templates { \r\n * @macro(true) ( \"(? (!null? \" (e 1) \") (unwrap \" (e 1) \") \" (e 2) \")\" ) \r\n } \r\n } \r\n\r\n = cmdAssign:void ( target:vref expr:expression ) {\r\n templates {\r\n ranger ( nl (e 1) \" = \" (e 2) nl ) \r\n go ( (custom _ ) )\r\n scala ( (e 1) \" = \" (e 2) ) ; <-- scala does not require ; here \r\n * ( (e 1) \" = \" (e 2) \";\" )\r\n }\r\n }\r\n\r\n int2double cmdIntToDouble:double ( value:int ) { \r\n templates {\r\n ranger ( \"(int2double \" (e 1) \")\" ) \r\n * ( \"parseFloat(\" (e 1) \")\" ) \r\n } \r\n }\r\n\r\n gitdoc cmdGitDoc:void ( value:string ) { \r\n templates { \r\n * ( \"/* git doc */\" ) \r\n } \r\n }\r\n\r\n\r\n\r\n\r\n; TODO: add the rest ....(case (\"sin\" \"cos\" \"tan\" \"atan\" \"log\" \"abs\" \"acos\" \"asin\" \"floor\" \"round\" \"sqrt\")\r\n ;\"<cmath>\"\r\n acos cmdCos:double ( value:double ) {\r\n templates {\r\n ranger ( \"(acos \" (e 1) \")\" ) \r\n swift3 ( \"acos(\" (e 1) \")\" (imp \"Foundation\")) \r\n cpp ( \"acos(\" (e 1) \")\" (imp \"<cmath>\"))\r\n csharp ( \"Math.Acos(\" (e 1) \")\" (imp \"System\")) \r\n go ( \"math.Acos(\" (e 1) \")\" (imp \"math\")) \r\n php ( \"acos(\" (e 1) \")\" ) \r\n rust ( \"\" (e 1) \".acos()\" ) \r\n scala ( \"math.acos(\" (e 1) \")\" (imp \"scala.math\")) \r\n java7 ( \"Math.acos(\" (e 1) \")\" (imp \"java.lang.Math\"))\r\n * ( \"Math.acos(\" (e 1) \")\")\r\n }\r\n }\r\n\r\n cos cmdCos:double ( value:double ) {\r\n templates {\r\n ranger ( \"(cos \" (e 1) \")\" )\r\n swift3 ( \"cos(\" (e 1) \")\" (imp \"Foundation\")) \r\n cpp ( \"cos(\" (e 1) \")\" (imp \"<cmath>\"))\r\n csharp ( \"Math.Cos(\" (e 1) \")\" (imp \"System\")) \r\n go ( \"math.Cos(\" (e 1) \")\" (imp \"math\")) \r\n php ( \"cos(\" (e 1) \")\" ) \r\n rust ( \"\" (e 1) \".cos()\" ) \r\n scala ( \"math.cos(\" (e 1) \")\" (imp \"scala.math\")) \r\n java7 ( \"Math.cos(\" (e 1) \")\" (imp \"java.lang.Math\"))\r\n * ( \"Math.cos(\" (e 1) \")\")\r\n }\r\n }\r\n \r\n sin cmdSin:double ( value:double ) {\r\n templates {\r\n ranger ( \"(sin \" (e 1) \")\" )\r\n swift3 ( \"sin(\" (e 1) \")\" (imp \"Foundation\")) \r\n cpp ( \"sin(\" (e 1) \")\" (imp \"<cmath>\"))\r\n csharp ( \"Math.Sin(\" (e 1) \")\" (imp \"System\")) \r\n go ( \"math.Sin(\" (e 1) \")\" (imp \"math\")) \r\n php ( \"sin(\" (e 1) \")\" ) \r\n rust ( \"\" (e 1) \".sin()\" ) \r\n scala ( \"math.sin(\" (e 1) \")\" (imp \"scala.math\")) \r\n java7 ( \"Math.sin(\" (e 1) \")\" (imp \"java.lang.Math\"))\r\n * ( \"Math.sin(\" (e 1) \")\")\r\n }\r\n }\r\n\r\n sqrt cmdSqrt:double ( value:double ) {\r\n templates {\r\n ranger ( \"(sqrt \" (e 1) \")\" )\r\n swift3 ( \"sqrt(\" (e 1) \")\" (imp \"Foundation\")) \r\n cpp ( \"sqrt(\" (e 1) \")\" (imp \"<cmath>\"))\r\n csharp ( \"Math.Sqrt(\" (e 1) \")\" (imp \"System\")) \r\n php ( \"sqrt(\" (e 1) \")\" ) \r\n go ( \"math.Sqrt(\" (e 1) \")\" (imp \"math\")) \r\n rust ( \"\" (e 1) \".sqrt()\" ) \r\n scala ( \"math.sqrt(\" (e 1) \")\" (imp \"scala.math\")) \r\n java7 ( \"Math.sqrt(\" (e 1) \")\" (imp \"java.lang.Math\"))\r\n rust ( (e 1) \".sqrt()\" )\r\n * ( \"Math.sqrt(\" (e 1) \")\")\r\n }\r\n } \r\n\r\n if cmdIf:void ( condition:boolean then_block:block else_block:block ) {\r\n templates {\r\n ranger ( \"if (\" (e 1) \" ) {\" I nl (block 2) i nl \"}\" (ifa 3) \" {\" I nl (block 3) i \"}\" nl)\r\n rust ( \"if \" (e 1) \" {\" I nl (block 2) i nl \"}\" (ifa 3) \" else {\" I nl (block 3) i \"}\" nl)\r\n go ( \"if \" (e 1) \" {\" I nl (block 2) i nl \"}\" (ifa 3) \" else {\" I nl (block 3) i \"}\" nl)\r\n * ( \"if ( \" (e 1) \" ) {\" I nl (block 2) i nl \"}\" (ifa 3) \" else {\" I nl (block 3) i \"}\" nl)\r\n }\r\n } \r\n \r\n if cmdIf:void ( condition:boolean then_block:block ) {\r\n templates {\r\n ranger ( \"if (\" (e 1) \") {\" I nl (block 2) nl i \"}\" nl )\r\n rust ( \"if \" (e 1) \" {\" I nl (block 2) nl i \"}\" nl )\r\n go ( \"if \" (e 1) \" {\" I nl (block 2) nl i \"}\" nl )\r\n * ( \"if ( \" (e 1) \" ) {\" I nl (block 2) nl i \"}\" nl )\r\n }\r\n }\r\n\r\n if cmdIf:void ( condition@(optional):int then_block:block ) {\r\n templates {\r\n cpp ( \"if ( \" (e 1) \".has_value ) {\" nl I (block 2) i nl \"}\" nl )\r\n }\r\n } \r\n\r\n if cmdIf:void ( condition@(optional):double then_block:block ) {\r\n templates {\r\n cpp ( \"if ( \" (e 1) \".has_value ) {\" nl I (block 2) i nl \"}\" nl )\r\n }\r\n } \r\n\r\n if cmdIf:void ( condition@(optional):T then_block:block ) {\r\n templates {\r\n ranger ( \"if ( \" (e 1) \") ) {\" I nl (block 2) i nl \"} {\" nl I (block 3) i \"}\" nl)\r\n scala ( \"if ( \" (e 1) \".isDefined ) {\" nl I (block 2) i nl \"}\" nl )\r\n swift3 ( \"if ( \" (e 1) \" != nil ) {\" nl I (block 2) i nl \"}\" nl )\r\n kotlin ( \"if ( \" (e 1) \" != null ) {\" nl I (block 2) i nl \"}\" nl )\r\n java7 ( \"if ( \" (e 1) \".isPresent()) {\" nl I (block 2) i nl \"}\" nl )\r\n csharp ( \"if ( \" (e 1) \".HasValue) {\" nl I (block 2) i nl \"}\" nl )\r\n ; go ( \"\" (e 1 ) \" == nil \" ) \r\n ; is_some\r\n php ( \"if ( isset( \" (e 1) \" ) ) {\" nl I (block 2) i nl \"}\" nl )\r\n go ( \"if ( \" (e 1) \".has_value) {\" nl I (block 2) i nl \"}\" nl )\r\n cpp ( \"if ( \" (e 1) \" != NULL ) {\" nl I (block 2) i nl \"}\" nl )\r\n rust ( \"if \" (e 1) \".is_some() {\" nl I (block 2) i nl \"}\" nl )\r\n * ( \"if ( typeof(\" ( e 1 ) \") != \\\"undefined\\\" ) {\" nl I (block 2) i nl \"}\" nl )\r\n\r\n }\r\n }\r\n\r\n if cmdIf:void ( condition@(optional):T then_block:block else_block ) {\r\n templates {\r\n ranger ( \"if ( \" (e 1) \" ) {\" I nl (block 2) i nl \"} {\" nl I (block 3) i \"}\" nl)\r\n php ( \"if ( isset(\" (e 1) \") ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n scala ( \"if ( \" (e 1) \".isDefined ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n java7 ( \"if ( \" (e 1) \".isPresent() ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n csharp ( \"if ( \" (e 1) \".HasValue ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n kotlin ( \"if ( \" (e 1) \" != null ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n rust ( \"if \" (e 1) \".is_some() {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n swift3 ( \"if ( \" (e 1) \" != nil ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n go ( \"if ( \" (e 1) \".has_value ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n cpp ( \"if ( \" (e 1) \" != NULL ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n * ( \"if ( typeof(\" ( e 1 ) \") != \\\"undefined\\\" ) {\" I nl (block 2) i nl \"} else {\" nl I (block 3) i \"}\" nl)\r\n }\r\n }\r\n\r\n switch cmdSwitch:void ( condition:T case_list:block ) {\r\n templates {\r\n swift3 ( (custom _ ) )\r\n }\r\n } \r\n\r\n switch cmdSwitch:void ( condition:int case_list:block ) {\r\n templates {\r\n scala ( (e 1) \" match { \" I (block 2) i \"}\" )\r\n kotlin ( \"when (\" (e 1) \") { \" I (block 2) i \"}\" )\r\n * ( \"switch (\" (e 1) \" ) { \" I (block 2) i \"}\" )\r\n }\r\n } \r\n\r\n case cmdCase:void ( condition:char case_block:block ) {\r\n templates {\r\n ranger ( nl \"case \" (e 1)\" { \" nl I (block 2) i nl \"}\" )\r\n scala ( nl \"case \" (e 1)\" => \" nl I (block 2) nl i )\r\n swift3 ( nl \"case \" (e 1)\" : \" nl I (block 2) nl i )\r\n java7 ( nl \"case \" (e 1)\" : \" nl I (java_case 2) nl i )\r\n go ( nl \"case \" (e 1)\" : \" nl I (block 2) nl i )\r\n kotlin ( nl (e 1) \" -> {\" nl I (block 2) nl i \"}\" )\r\n cpp ( nl \"case \" (e 1)\" : \" nl I \"{\" nl I (block 2) nl \"break;\" i nl \"}\" i )\r\n * ( nl \"case \" (e 1)\" : \" nl I (block 2) nl \"break;\" i )\r\n }\r\n } \r\n\r\n case cmdCase:void ( condition:int case_block:block ) {\r\n templates {\r\n ranger ( nl \"case \" (e 1)\" { \" nl I (block 2) i nl \"}\" )\r\n scala ( nl \"case \" (e 1)\" => \" nl I (block 2) nl i )\r\n swift3 ( nl \"case \" (e 1)\" : \" nl I (block 2) nl i )\r\n java7 ( nl \"case \" (e 1)\" : \" nl I (java_case 2) nl i )\r\n go ( nl \"case \" (e 1)\" : \" nl I (block 2) nl i )\r\n kotlin ( nl (e 1) \" -> {\" nl I (block 2) nl i \"}\" )\r\n cpp ( nl \"case \" (e 1)\" : \" nl I \"{\" nl I (block 2) nl \"break;\" i nl \"}\" i )\r\n * ( nl \"case \" (e 1)\" : \" nl I (block 2) nl \"break;\" i )\r\n }\r\n } \r\n\r\n switch cmdSwitch:void ( condition:string case_list:block ) {\r\n templates {\r\n cpp ( (custom _) ) \r\n scala ( (e 1) \" match { \" I (block 2) i \"}\" )\r\n kotlin ( \"when (\" (e 1) \") { \" I (block 2) i \"}\" )\r\n * ( \"switch (\" (e 1) \" ) { \" I (block 2) i \"}\" )\r\n }\r\n } \r\n\r\n switch cmdSwitch:void ( condition:T case_list:block ) {\r\n templates {\r\n\r\n scala ( (e 1) \" match { \" I (block 2) i \"}\" )\r\n kotlin ( \"when (\" (e 1) \") { \" I (block 2) i \"}\" )\r\n * ( \"switch (\" (e 1) \" ) { \" I (block 2) i \"}\" )\r\n }\r\n } \r\n\r\n case cmdCase:void ( condition:T case_block:block ) {\r\n templates {\r\n ranger ( nl \"case \" (e 1)\" { \" nl I (block 2) i nl \"}\" )\r\n scala ( nl \"case \" (e 1)\" => \" nl I (block 2) nl i )\r\n swift3 ( nl \"case \" (e 1)\" : \" nl I (block 2) nl i )\r\n java7 ( nl \"case \" (e 1)\" : \" nl I (java_case 2) nl i )\r\n go ( nl \"case \" (e 1)\" : \" nl I (block 2) nl i )\r\n kotlin ( nl (e 1) \" -> {\" nl I (block 2) nl i \"}\" )\r\n cpp ( nl \"case \" (e 1)\" : \" nl I \"{\" nl I (block 2) nl \"break;\" i nl \"}\" i )\r\n * ( nl \"case \" (e 1)\" : \" nl I (block 2) nl \"break;\" i )\r\n }\r\n } \r\n\r\n default cmdDefault:void ( default_block:block ) {\r\n templates {\r\n ranger ( nl \"default { \" nl I (block 1) i nl \"}\" )\r\n scala ( nl \"case _ => \" nl I (block 1) nl i )\r\n go ( nl \"default: \" nl I (block 1) nl i )\r\n kotlin ( nl \"else -> { \" nl I (block 2) nl i \"}\" )\r\n java7 ( nl \"default: \" nl I (java_case 1) nl i )\r\n * ( nl \"default: \" nl I (block 1) nl \"break;\" i )\r\n }\r\n }\r\n \r\n\r\n\r\n break cmdBreak:void ( ) {\r\n templates {\r\n ranger ( nl \"break\" nl )\r\n scala ( nl \"__b__.break;\" nl )\r\n * ( nl \"break;\" nl )\r\n }\r\n }\r\n\r\n break cmdBreak:void ( _:T ) {\r\n templates {\r\n ranger ( nl \"break\" nl )\r\n scala ( nl \"__b__.break;\" nl )\r\n * ( nl \"break;\" nl )\r\n }\r\n }\r\n\r\n continue cmdContinue:void ( ) {\r\n templates {\r\n ranger ( nl \"continue \" nl )\r\n scala ( nl \"__c__.break;\" nl )\r\n * ( nl \"continue;\" nl )\r\n }\r\n }\r\n \r\n continue cmdContinue:void ( _:T) {\r\n templates {\r\n ranger ( nl \"continue \" nl )\r\n scala ( nl \"__c__.break;\" nl )\r\n * ( nl \"continue;\" nl )\r\n }\r\n }\r\n\r\n\r\n while cmdWhile:void ( condition:boolean whileLoop:block ) {\r\n templates {\r\n go ( \"for \" (e 1) \" {\" I nl (block 2) nl i \"}\" )\r\n scala ( \r\n (forkctx _ ) (def 2) (def 3) \r\n \"try {\" nl I\r\n \"val __b__ = new Breaks;\" nl\r\n \"__b__.breakable { \" \r\n nl I \r\n \"while (\" (e 1) \") {\" nl\r\n I\r\n \"val __c__ = new Breaks;\" nl\r\n \"__c__.breakable {\" nl\r\n I nl (block 2) nl i \r\n \"}\" nl i\r\n \"}\"\r\n i nl\r\n \"}\" nl\r\n i nl \"} \" nl\r\n (imp \"scala.util.control._\")\r\n ) \r\n * ( \"while (\" (e 1) \") {\" nl I (block 2) i nl \"}\" )\r\n }\r\n }\r\n [] cmdArrayLiteral:[T] ( typeDef@(ignore):T listOf:expression ) {\r\n templates {\r\n ranger ( \"([] _:\" (typeof 1) \"(\" (list 2) \"))\")\r\n go ( \"[]\" (typeof 1) \"{\" (comma 2) \"}\")\r\n cpp ( \"{\" (comma 2) \"}\")\r\n java7 ( \"new ArrayList<\" (typeof 1) \">(Arrays.asList(\" (comma 2) \")) \" )\r\n * ( \"[\" (comma 2) \"]\")\r\n }\r\n }\r\n null? cmdIsNotNull:boolean ( arg@(optional):int ) {\r\n templates {\r\n cpp ((e 1) \".has_value == false\") \r\n }\r\n } \r\n null? cmdIsNotNull:boolean ( arg@(optional):double ) {\r\n templates {\r\n cpp ((e 1) \".has_value == false\") \r\n }\r\n } \r\n\r\n null? cmdIsNull:boolean ( arg@(optional):T ) {\r\n templates {\r\n ranger (\"(null? \" (e 1) \")\")\r\n php ( \"(!isset(\" (e 1) \"))\") \r\n cpp ((e 1) \" == NULL\") \r\n swift3 ((e 1) \" == nil\") \r\n java7 (\"!\" (e 1) \".isPresent()\") \r\n csharp ((e 1) \".HasValue\") \r\n rust ((e 1) \".is_null()\") \r\n go ( \"!\" (goset 1 ) \".has_value \" ) \r\n kotlin ((e 1) \"== null\") \r\n es6 ( \"typeof(\" ( e 1 ) \") === \\\"undefined\\\"\")\r\n * ((e 1) \"== null\")\r\n }\r\n } \r\n !null? cmdIsNotNull:boolean ( arg@(optional):int ) {\r\n templates {\r\n cpp ((e 1) \".has_value\") \r\n }\r\n } \r\n !null? cmdIsNotNull:boolean ( arg@(optional):double ) {\r\n templates {\r\n cpp ((e 1) \".has_value\") \r\n }\r\n } \r\n\r\n !null? cmdIsNotNull:boolean ( arg@(optional):T ) {\r\n templates {\r\n ranger (\"(!null? \" (e 1) \")\")\r\n php ( \"(isset(\" (e 1) \"))\")\r\n scala ((e 1) \".isDefined\") \r\n swift3 ((e 1) \" != nil \") \r\n cpp ((e 1) \" != NULL \") \r\n java7 ((e 1) \".isPresent()\") \r\n csharp (\"!\" (e 1) \".HasValue\")\r\n rust ((e 1) \".is_some()\") \r\n kotlin ((e 1) \" != null\") \r\n go ( (goset 1 ) \".has_value\" )\r\n * (\"typeof(\" ( e 1 ) \") !== \\\"undefined\\\"\")\r\n }\r\n } \r\n \r\n throw cmdThrow:void ( eInfo:T ) {\r\n templates {\r\n ranger ( nl \"throw \" (e 1) nl )\r\n * ( nl \"throw \" (e 1) \";\" nl )\r\n }\r\n } \r\n\r\n try cmdTry:void ( run_block:block catch_block:block ) {\r\n templates {\r\n ranger ( nl \"try {\" nl I (block 1) i nl \"} {\" nl I (block 2) i nl \"}\" nl ) \r\n php ( nl \"try {\" nl I (block 1) i nl \"} catch( Exception $e) {\" nl I (block 2) i nl \"}\" nl ) \r\n scala ( nl \"try {\" nl I (block 1) i nl \"} catch {\" nl I nl \"case e: Exception => {\" nl I (block 2) i nl \"}\" i nl \"}\" nl )\r\n java7 ( nl \"try {\" nl I (block 1) i nl \"} catch( Exception e) {\" nl I (block 2) i nl \"}\" nl )\r\n go ( nl (block 1) nl )\r\n ; with swift there is no do without try...\r\n swift3 ( nl (block 1) nl )\r\n cpp ( nl \"try {\" nl I (block 1) i nl \"} catch( ... ) {\" nl I (block 2) i nl \"}\" nl )\r\n * ( nl \"try {\" nl I (block 1) i nl \"} catch(e) {\" nl I (block 2) i nl \"}\" nl )\r\n }\r\n }\r\n\r\n\r\n ; T.name is a bit of a problem ?? \r\n for cmdFor@(newcontext):void ( list:[T] item@(define):T indexName@(define ignore):int repeat_block:block) {\r\n templates {\r\n ranger ( nl \"for \" (e 1) \" \" (e 2) \":\" (typeof 2) \" \" (e 3)\" {\" nl I (block 4) nl i \"}\" )\r\n swift3 ( (forkctx _ ) (def 2) (def 3) nl \"for ( \" (swift_rc 3) \" , \" (e 2) \" ) in \" (e 1) \".enumerated() {\" nl I (block 4) nl i \"}\" )\r\n kotlin ( (forkctx _ ) (def 2) (def 3) \"for ( \" (e 3) \" in \" (e 1) \".indices ) {\" nl I \"val \" (e 2) \" = \" (e 1) \"[\" (e 3) \"]\" nl (block 4) nl i \"}\" )\r\n\r\n rust ( (forkctx _ ) (def 2) (def 3) \"for (\" (e 3) \", \" (e 2) \" ) in \" (e 1) \".enumerate() {\" nl I (block 4) nl i \"}\" ) \r\n\r\n ; idea of go for macro implementation, not working yet... \r\n go_idea @macro(true) (nl \r\n \"def cnt:int 0\" nl\r\n \"def \" (e 3) \":int -1\" nl\r\n \"while (cnt < (array_length \" (e 1) \")) {\" nl I\r\n (e 3) \" = \" (e 3) \" + 1\" nl\r\n \" cnt = cnt + 1\" nl\r\n \"def \" (e 2) \":\" (typeof 2) \" (itemAt \" (e 1) \" (cnt - 1) );\" nl \r\n (block 4) nl\r\n i\r\n \"}\" nl\r\n )\r\n go ( (def 2) (def 3) \"var \" (e 3) \" int64 = 0; \" nl \"for ; \" (e 3) \" < int64(len(\" (e 1) \")) ; \" (e 3) \"++ {\" nl I nl (e 2) \" := \" (e 1) \"[\" (e 3) \"];\" nl (block 4) nl i \"}\" )\r\n\r\n php ( (forkctx _ ) (def 2) (def 3) \"for ( \" (e 3) \" = 0; \" (e 3) \" < count(\" (e 1) \"); \" (e 3) \"++) {\" nl I (e 2) \" = \" (e 1) \"[\" (e 3) \"];\" nl (block 4) nl i \"}\" )\r\n java7 ( (forkctx _ ) (def 2) (def 3) \"for ( int \" (e 3) \" = 0; \" (e 3) \" < \" (e 1) \".size(); \" (e 3) \"++) {\" nl I (typeof 2) \" \" (e 2) \" = \" (e 1) \".get(\" (e 3) \");\" nl (block 4) nl i \"}\" )\r\n scala ( \r\n (forkctx _ ) (def 2) (def 3) \r\n \"try {\" nl I\r\n \"val __break__ = new Breaks;\"\r\n \"__break__.breakable { \" \r\n nl I \r\n \"for ( \" (e 3) \" <- 0 until \" (e 1) \".length ) {\" nl I \"val \" (e 2) \" = \" (e 1) \"(\" (e 3) \")\" nl (block 4) nl i \"}\" \r\n i nl\r\n \"}\"\r\n i nl \"} \" nl\r\n (imp \"scala.util.control._\")\r\n ) \r\n cpp ( (forkctx _ ) (def 2) (def 3) \"for ( std::vector< \" (typeof 2) \">::size_type \" (e 3) \" = 0; \" (e 3) \" != \" (e 1) \".size(); \" (e 3) \"++) {\" nl \r\n I (typeof 2) \" \" (e 2) \" = \" (e 1) \".at(\" (e 3) \");\" nl (block 4) nl i \"}\" ) \r\n * ( (forkctx _ ) (def 2) (def 3) \"for ( let \" (e 3) \" = 0; \" (e 3) \" < \" (e 1) \".length; \" (e 3) \"++) {\" nl I \"var \" (e 2) \" = \" (e 1) \"[\" (e 3) \"];\" nl (block 4) nl i \"}\" )\r\n }\r\n }\r\n\r\n for cmdFor@(newcontext):void ( hash:[string:T] item@(define):T itemName@(define ignore):string repeat_block:block) {\r\n templates {\r\n es6 (\"for( var \" (e 3) \" in \" (e 1) \") {\" nl I \"if(\" (e 1) \".hasOwnProperty(\" (e 3) \")) {\" \r\n nl I \"var \" (e 2) \" = \" (e 1) \"[\" (e 3) \"] \" nl (block 4) \r\n nl i \"} }\"\r\n )\r\n }\r\n } \r\n\r\n for cmdFor@(newcontext):void ( hash:[string:T] itemName@(define ignore):string repeat_block:block) {\r\n templates {\r\n es6 (\"for( var \" (e 2) \" in \" (e 1) \") {\" nl I \"if(\" (e 1) \".hasOwnProperty(\" (e 2) \")) {\" \r\n nl I (block 3) \r\n nl i \"} \" nl i \"}\"\r\n )\r\n }\r\n } \r\n\r\n trim cmdTrim:string ( value:string ) { \r\n templates {\r\n ranger ( \"(trim \" (e 1 ) \")\") \r\n swift3 ( (e 1 ) \".trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)\" (imp \"Foundation\")) \r\n php ( \"trim(\" (e 1 ) \")\")\r\n cpp ( \"r_cpp_trim( \" (e 1) \")\" (imp \"<cctype>\") (imp \"<string>\") (imp \"<algorithm>\")\r\n(create_polyfill \"\r\ninline std::string r_cpp_trim(std::string &s) \r\n{\r\n auto wsfront=std::find_if_not(s.begin(),s.end(),[](int c){return std::isspace(c);});\r\n auto wsback=std::find_if_not(s.rbegin(),s.rend(),[](int c){return std::isspace(c);}).base();\r\n return (wsback<=wsfront ? std::string() : std::string(wsfront,wsback));\r\n} \r\n \") ) \r\n scala ( (e 1) \".trim\" )\r\n csharp ( (e 1) \".Trim()\" (imp \"System\"))\r\n go (\"strings.TrimSpace(\" (e 1) \")\" (imp \"strings\"))\r\n * ( (e 1) \".trim()\" )\r\n } \r\n } \r\n\r\n; wr.out (\").to[collection.mutable.ArrayBuffer]\" false\r\n; kotlin could use also something like: .split(Regex(\"(?<=[!?])|(?=[!?])\"))\r\n; swift : .components(separatedBy:\r\n strsplit cmdSplit:[string] ( strToSplit:string delimiter:string ) { \r\n templates {\r\n ranger ( \"( strsplit \" (e 1 ) \")\")\r\n ; TODO: C++ version, requires perhaps external lib to do it directly to vector<std::string>\r\n scala ( (e 1) \".split(\" (e 2) \").to[collection.mutable.ArrayBuffer]\") \r\n csharp ( (e 1) \".Split(\" (e 2) \")\")\r\n swift3 ( (e 1) \".components( separatedBy : \" (e 2) \")\")\r\n java7( \"new ArrayList<String>(Arrays.asList(\" (e 1) \".split(\" (e 2) \")))\" )\r\n php ( \"explode(\" (e 2) \", \" (e 1) \")\") \r\n go (\"strings.Split(\" (e 1) \", \" (e 2) \")\" (imp \"strings\"))\r\n\r\n cpp ( \"r_str_split( \" (e 1) \", \" (e 2) \")\" (imp \"<sstream>\")\r\n\r\n(create_polyfill\r\n\"\r\nstd::vector<std::string> r_str_split(std::string str, std::string delimiter) {\r\n size_t first_index = 0;\r\n size_t prev_index = 0;\r\n std::vector<std::string> res;\r\n while( std::string::npos != ( first_index = str.find_first_of( delimiter , prev_index ) )) {\r\n res.push_back( str.substr( prev_index, first_index - prev_index) );\r\n prev_index = first_index + 1;\r\n }\r\n if(res.size() == 0 ) {\r\n res.push_back(str);\r\n } \r\n return res;\r\n}\r\n\"\r\n) \r\n )\r\n\r\n * ( (e 1) \".split(\" (e 2) \")\")\r\n }\r\n }\r\n\r\n strlen cmdStrlen:int ( text:string ) { \r\n templates {\r\n ranger ( \"( strlen \" (e 1 ) \")\")\r\n cpp ( (e 1) \".length()\") \r\n java7 ( (e 1) \".length()\") \r\n scala ( (e 1) \".length()\") \r\n swift3 ( (e 1) \".characters.count\") \r\n csharp ( (e 1) \".Length\")\r\n php ( \"strlen(\" (e 1) \")\") \r\n go ( \"int64(len(\" (e 1) \"))\") \r\n * ( (e 1) \".length\")\r\n }\r\n }\r\n\r\n ; String s = new String(a, 2, 4)\r\n \r\n ; C#\r\n ; Encoding.ASCII.GetString(bytes)\r\n ; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);\r\n ; new List<string>(Source).GetRange(2, 2).ToArray();\r\n\r\n ; scala:\r\n ; new String(array.map(_.toChar)))\r\n ; array.slice()\r\n\r\n ; swift:\r\n ; String(data: Data(bytes: s[sp ..< i]) , encoding: .utf8)!\r\n\r\n substring cmdSubstring:string ( text:charbuffer start:int end:int ) { \r\n templates {\r\n ranger ( \"(substring \" (e 1) \" \" (e 2) \" \" (e 3) \")\") \r\n csharp ( \"Encoding.UTF.GetString(new List<byte>(\" (e 1) \").GetRange(\" (e 2) \", \" (e 3) \").toArray())\")\r\n scala ( \"new String(\" (e 1) \".slice(\" (e 2) \", \" (e 3) \").map(_.toChar) )\")\r\n java7 ( \"new String(\" (e 1) \",\" (e 2) \", \" (e 3) \" - \" (e 2) \" )\")\r\n swift3 ( \"String(data: Data(bytes:\" (e 1) \"[\" (e 2) \" ..< \" (e 3) \"]), encoding: .utf8)!\" (imp \"Foundation\"))\r\n kotlin ( \"String(\" (e 1) \",\" (e 2) \", \" (e 3) \" - \" (e 2) \" )\") \r\n go ( \"fmt.Sprintf(\\\"%s\\\", \" (e 1) \"[\" (e 2) \":\" (e 3) \"])\" \r\n (imp \"fmt\")\r\n )\r\n cpp ( \"std::string( \" (e 1) \" + \" (e 2) \", \" (e 3) \" - \" (e 2) \" )\")\r\n php ( \"substr(\" (e 1) \", \" (e 2) \", \" (e 3) \" - \" (e 2) \")\") \r\n * ( (e 1) \".substring(\" (e 2) \", \" (e 3) \" )\")\r\n }\r\n }\r\n\r\n to_string bufferToString:string ( text:charbuffer ) { \r\n templates { \r\n ranger ( \"(to_string \" (e 1) \")\")\r\n go ( \"string(\" (e 1) \")\" )\r\n * ( (e 1) )\r\n }\r\n } \r\n\r\n toString bufferToString:string ( text:charbuffer ) { \r\n templates { \r\n go ( \"string(\" (e 1) \")\" )\r\n * ( (e 1) )\r\n }\r\n } \r\n\r\n to_charbuffer cmdToCharBuffer:charbuffer ( text:string ) { \r\n templates {\r\n ranger ( \"(to_charbuffer \" (e 1) \")\") \r\n swift3 ( \"Array(\" (e 1) \".utf8)\" )\r\n scala ( (e 1) \".toCharArray.map(_.toByte)\")\r\n java7 ( (e 1) \".getBytes()\" )\r\n csharp ( \"Encoding.ASCII.GetBytes(\" (e 1) \")\")\r\n kotlin ( (e 1 ) \".toCharArray()\" )\r\n rust ( (e 1) \".into_bytes()\")\r\n cpp ( (e 1) \".c_str()\")\r\n php ( (e 1) )\r\n go(\"[]byte(\" (e 1) \")\")\r\n * ( (e 1) )\r\n }\r\n }\r\n\r\n to_int cmdToInt:int ( value:double ) { \r\n templates {\r\n ranger ( \"(to_int \" (e 1) \")\") \r\n csharp ( \"(int)\" (e 1 ) \"\" )\r\n swift3 ( \"Int(\" (e 1 ) \")\" )\r\n kotlin ( (e 1 ) \".toInt()\" )\r\n scala ( (e 1 ) \".toInt\" )\r\n rust ( (e 1 ) \" as i64 \" )\r\n go ( \"int64(\" (e 1) \")\")\r\n php ( \"floor(\" (e 1) \")\")\r\n java7 ( \"Double.valueOf(\" (e 1) \").intValue()\")\r\n cpp ( \"floor( \" (e 1) \")\" (imp \"<math.h>\"))\r\n * ( \"Math.floor( \" (e 1) \")\" )\r\n }\r\n } \r\n\r\n to_int cmdToInt:int ( ch:char ) { \r\n templates {\r\n ranger ( \"(to_int \" (e 1) \")\") \r\n csharp ( \"(int)\" (e 1 ) \"\" )\r\n swift3 ( \"Int(\" (e 1 ) \")\" )\r\n kotlin ( (e 1 ) \".toInt()\" )\r\n scala ( (e 1 ) \".toInt\" )\r\n rust ( (e 1 ) \" as i64 \" )\r\n go ( \"int64(\" (e 1) \")\")\r\n php ( \"ord(\" (e 1) \")\")\r\n * ( (e 1) )\r\n }\r\n } \r\n \r\n to_int cmdToInt@(optional):int (txt:string) {\r\n templates {\r\n * @macro(true) (\"str2int(\" (e 1) \")\")\r\n }\r\n }\r\n\r\n ; Length\r\n length cmdLength:int ( buffer:charbuffer ) { \r\n templates {\r\n ranger ( \"(length \" (e 1) \")\") \r\n csharp ( (e 1 ) \".Length\" )\r\n kotlin ( (e 1 ) \".size\" )\r\n scala ( (e 1 ) \".length\" )\r\n swift3 ( (e 1 ) \".count\" )\r\n rust ( (e 1 ) \".len()\" )\r\n java7 ( (e 1 ) \".length\" )\r\n cpp( \"strlen( \" (e 1) \" )\")\r\n go ( \"int64(len(\" (e 1 ) \"))\")\r\n php ( \"strlen(\" (e 1 ) \")\")\r\n * ( (e 1) \".length\" )\r\n }\r\n } \r\n\r\n charAt cmdCharAt:int ( text:string position:int ) { \r\n templates {\r\n ranger ( \"(charAt \" (e 1) \" \" ( e 2 ) \")\")\r\n cpp ( (e 1) \".at(\" (e 2) \")\") \r\n csharp ( (e 1) \"[\" (e 2) \"]\")\r\n php ( \"ord(\" (e 1) \"[\" (e 2) \"])\") \r\n java7 ( \"(int)\" (e 1) \".charAt(\" (e 2) \")\") \r\n kotlin ( (e 1) \"[\" (e 2) \"]\") \r\n scala ( (e 1) \"(\" (e 2) \")\") \r\n go ( \"int64(\" (e 1) \"[\" (e 2) \"])\") \r\n swift3 ( \"Int( ( \" (e 1) \" as NSString ).character( at: \" (e 2) \" ) )\")\r\n swift3 ( \"Int( String( \" (e 1) \".characters[\" (e 1) \".index(\" (e 1) \".startIndex, offsetBy: \" (e 2) \")]))!\") \r\n * ( (e 1) \".charCodeAt(\" (e 2) \" )\")\r\n }\r\n } \r\n\r\n charAt cmdCharAt:char ( text:charbuffer position:int ) { \r\n templates {\r\n ranger ( \"(charAt \" (e 1) \" \" ( e 2 ) \")\")\r\n cpp ( (e 1) \"[\" (e 2) \"]\") \r\n csharp ( (e 1) \"[\" (e 2) \"]\")\r\n php ( \"ord(\" (e 1) \"[\" (e 2) \"])\") \r\n java7 ( (e 1) \"[\" (e 2) \"]\") \r\n kotlin ( (e 1) \"[\" (e 2) \"]\") \r\n scala ( (e 1) \"(\" (e 2) \")\") \r\n go ( (e 1) \"[\" (e 2) \"]\") \r\n swift3 ( (e 1) \"[\" (e 2) \"]\") \r\n * ( (e 1) \".charCodeAt(\" (e 2) \" )\")\r\n }\r\n }\r\n\r\n substring cmdSubstring:string ( text:string start:int end:int ) { \r\n templates {\r\n ranger ( \"(substring \" (e 1) \" \" (e 2) \" \" (e 3) \")\")\r\n cpp ( \"\" (e 1) \".substr(\" (e 2) \", \" (e 3) \" - \" (e 2) \")\") \r\n csharp ( (e 1) \".Substring(\" (e 2) \", \" (e 3) \" - \" (e 2) \" )\")\r\n php ( \"substr(\" (e 1) \", \" (e 2) \", \" (e 3) \" - \" (e 2) \")\") \r\n go ( (e 1) \"[\" (e 2) \":\" (e 3) \"]\") \r\n swift3 ( (e 1) \"[\" (e 1) \".index(\" (e 1) \".startIndex, offsetBy:\" (e 2) \")..<\" (e 1) \".index(\" (e 1) \".startIndex, offsetBy:\" (e 3) \")]\" )\r\n * ( (e 1) \".substring(\" (e 2) \", \" (e 3) \" )\")\r\n }\r\n }\r\n\r\n ;(charcode \"A\")\r\n charcode cmdCharcode:char ( text:string ) { \r\n templates {\r\n ranger ( \"(charcode \" (e 1) \")\")\r\n go ( \"[]byte(\" (e 1) \")[0]\" )\r\n cpp( (e 1) \".at(0)\")\r\n php ( \"ord(\" (e 1) \"[0])\") \r\n java7 ( \"((\" (e 1) \".getBytes())[0])\") \r\n swift3 ( \"UInt8( ( \" (e 1) \" as NSString ).character( at: 0 ) )\")\r\n swift3 ( \"UInt8( String( \" (e 1) \".characters[\" (e 1) \".startIndex]))! \") \r\n * ( (e 1) \".charCodeAt(0)\" )\r\n }\r\n }\r\n\r\n ccode cmdCharCode:char ( text:string ) { \r\n templates {\r\n * ( (cc 1) )\r\n }\r\n }\r\n\r\n strfromcode cmdStrFromCode:string ( code:char ) { \r\n templates {\r\n ranger ( \"(strfromcode \" (e 1) \")\")\r\n csharp ( \"((char)\" (e 1) \").toString()\") \r\n java7 ( \"(new String( new char[] {\" (e 1) \" }))\") \r\n swift3 ( \"(String( Character( UnicodeScalar(\" (e 1) \" ) )))\") \r\n php ( \"chr(\" (e 1) \")\") \r\n scala ( \"(\" (e 1) \".toChar)\") \r\n go (\"string([] byte{byte(\" (e 1) \")})\") \r\n cpp ( \"std::string(1, char(\" (e 1) \"))\") \r\n * ( \"String.fromCharCode(\" (e 1) \")\")\r\n }\r\n }\r\n \r\n\r\n strfromcode cmdStrFromCode:string ( code:int ) { \r\n templates {\r\n ranger ( \"(strfromcode \" (e 1) \")\"))\r\n csharp ( \"((char)\" (e 1) \").toString()\") \r\n java7 ( \"(new String( Character.toChars(\" (e 1) \")))\") \r\n swift3 ( \"(String( Character( UnicodeScalar(\" (e 1) \" )! )))\") \r\n php ( \"chr(\" (e 1) \")\") \r\n scala ( \"(\" (e 1) \".toChar)\") \r\n go (\"string([] byte{byte(\" (e 1) \")})\") \r\n cpp ( \"std::string(1, char(\" (e 1) \"))\") \r\n * ( \"String.fromCharCode(\" (e 1) \")\")\r\n }\r\n }\r\n\r\n to_int cmdDoubleToString:string ( value:int ) { \r\n templates {\r\n ranger ( \"(to_int \" (e 1) \")\")\r\n cpp (\"std::to_string(\" (e 1) \")\" (imp \"<string>\"))\r\n java7 ( \"String.valueOf(\" (e 1) \" )\") \r\n php ( \"strval(\" (e 1) \")\") \r\n scala ( \"(\" (e 1) \".toString)\")\r\n go (\"strconv.FormatFloat(\" (e 1) \",'f', 6, 64)\" (imp \"strconv\"))\r\n swfit3 (\"String(\" (e 1) \")\") \r\n * ( \"(\" (e 1) \".toString())\")\r\n }\r\n } \r\n\r\n to_string cmdIntToString:string ( value:int ) { \r\n templates {\r\n ranger ( \"(to_string \" (e 1) \")\")\r\n cpp (\"std::to_string(\" (e 1) \")\" (imp \"<string>\"))\r\n java7 ( \"String.valueOf(\" (e 1) \" )\") \r\n php ( \"strval(\" (e 1) \")\") \r\n scala ( \"(\" (e 1) \".toString)\")\r\n go (\"strconv.Itoa(\" (e 1) \")\" (imp \"strconv\"))\r\n swfit3 (\"String(\" (e 1) \")\") \r\n * ( \"(\" (e 1) \").toString()\")\r\n }\r\n } \r\n \r\n ; std::to_string(myDoubleVar);\r\n double2str cmdDoubleToString:string ( value:double ) { \r\n templates {\r\n ranger ( \"(double2str \" (e 1) \")\")\r\n cpp (\"std::to_string(\" (e 1) \")\" (imp \"<string>\"))\r\n java7 ( \"String.valueOf(\" (e 1) \" )\") \r\n php ( \"strval(\" (e 1) \")\") \r\n scala ( \"(\" (e 1) \".toString)\")\r\n go (\"strconv.FormatFloat(\" (e 1) \",'f', 6, 64)\" (imp \"strconv\"))\r\n swift3 (\"String(\" (e 1) \")\") \r\n * ( \"(\" (e 1) \".toString())\")\r\n }\r\n }\r\n\r\n ; note: this has now different value, it is optional int...\r\n ; the optionality of the return value should be preserved \r\n ; can not do just\r\n ; def x:int (10 + (str2int \"hello\"))\r\n ; --> optional return value here...\r\n\r\n str2int cmdStringToInt@(optional):int ( value:string ) { \r\n templates {\r\n ranger ( \"(str2int \" (e 1) \")\")\r\n cpp (\"cpp_str_to_int(\" (e 1) \")\" (imp \"<string>\")\r\n \r\n(create_polyfill\r\n\"\r\ntemplate <class T>\r\nclass r_optional_primitive {\r\n public:\r\n bool has_value;\r\n T value;\r\n r_optional_primitive<T> & operator=(const r_optional_primitive<T> & rhs) {\r\n has_value = rhs.has_value;\r\n value = rhs.value;\r\n return *this;\r\n }\r\n r_optional_primitive<T> & operator=(const T a_value) {\r\n has_value = true;\r\n value = a_value;\r\n return *this;\r\n }\r\n};\r\n\"\r\n) \r\n(create_polyfill\r\n\"r_optional_primitive<int> cpp_str_to_int(std::string s) {\r\n r_optional_primitive<int> result;\r\n try {\r\n result.value = std::stoi(s);\r\n result.has_value = true;\r\n } catch (...) {\r\n \r\n }\r\n return result;\r\n}\"\r\n) \r\n \r\n )\r\n java7 ( \"Optional.of(Integer.parseInt(\" (e 1) \" ))\") \r\n go (\"r_str_2_i64(\" (e 1) \")\"\r\n\r\n(create_polyfill\r\n\"\r\nfunc r_str_2_i64(s string) *GoNullable {\r\n res := new(GoNullable);\r\n if v, err := strconv.ParseInt(s, 10, 64); err == nil {\r\n res.has_value = true\r\n res.value = v\r\n } else {\r\n res.has_value = false\r\n }\r\n return res\r\n}\r\n\"\r\n) \r\n \r\n )\r\n php ( \"intval(\" (e 1) \")\")\r\n scala ( \"Try(\" (e 1) \".toInt).toOption\" (imp \"scala.util.Try\"))\r\n kotlin ( (e 1) \".toInt()\")\r\n swift3 (\"Int(\" (e 1) \")\") \r\n * ( \"isNaN( parseInt(\" (e 1) \") ) ? undefined : parseInt(\" (e 1) \")\")\r\n }\r\n }\r\n\r\n str2double cmdStringToDouble@(optional):double ( value:string ) { \r\n templates {\r\n ranger ( \"(str2double \" (e 1) \")\")\r\n cpp (\"cpp_str_to_double(\" (e 1) \")\" (imp \"<string>\")\r\n(create_polyfill\r\n\"\r\ntemplate <class T>\r\nclass r_optional_primitive {\r\n public:\r\n bool has_value;\r\n T value;\r\n r_optional_primitive<T> & operator=(const r_optional_primitive<T> & rhs) {\r\n has_value = rhs.has_value;\r\n value = rhs.value;\r\n return *this;\r\n }\r\n r_optional_primitive<T> & operator=(const T a_value) {\r\n has_value = true;\r\n value = a_value;\r\n return *this;\r\n }\r\n};\r\n\"\r\n) \r\n(create_polyfill\r\n\"r_optional_primitive<double> cpp_str_to_double(std::string s) {\r\n r_optional_primitive<double> result;\r\n try {\r\n result.value = std::stod(s);\r\n result.has_value = true;\r\n } catch (...) {\r\n \r\n }\r\n return result;\r\n}\"\r\n) \r\n \r\n )\r\n java7 ( \"Optional.of(Double.parseDouble(\" (e 1) \" ))\") \r\n go (\"r_str_2_d64(\" (e 1) \")\"\r\n (imp \"strconv\")\r\n(create_polyfill\r\n\"func r_str_2_d64(s string) *GoNullable {\r\n res := new(GoNullable);\r\n if v, err := strconv.ParseFloat(s, 64); err == nil {\r\n res.has_value = true\r\n res.value = v\r\n } else {\r\n res.has_value = false\r\n }\r\n return res\r\n}\"\r\n) \r\n )\r\n php ( \"floatval(\" (e 1) \")\")\r\n scala ( \"Try(\" (e 1) \".toDouble).toOption\" (imp \"scala.util.Try\"))\r\n kotlin ( (e 1) \".toDouble()\")\r\n swift3 (\"Double(\" (e 1) \")\") \r\n * ( \"isNaN( parseFloat(\" (e 1) \") ) ? undefined : parseFloat(\" (e 1) \")\")\r\n }\r\n }\r\n\r\n to_double cmdToDbl@(optional):double (value:string) {\r\n templates {\r\n * @macro(true) (\"str2double(\" (e 1) \")\")\r\n }\r\n }\r\n \r\n ; scala: .mkString(\r\n join cmdJoin:string ( array:[string] delimiter:string ) { \r\n templates { \r\n ranger ( \"(join \" (e 1) \" \" (e 2) \")\") \r\n java7 ( \"joinStrings(\" (e 1 ) \", \" (e 2) \")\" \r\n (imp \"java.lang.StringBuilder\")\r\n(create_polyfill \"\r\nstatic String joinStrings(ArrayList<String> list, String delimiter) \r\n{\r\n StringBuilder b = new StringBuilder();\r\n for(int i=0; i < list.size() ; i++) {\r\n if( i > 0 ) {\r\n b.append(delimiter);\r\n }\r\n b.append(list.get(i));\r\n }\r\n return b.toString();\r\n} \r\n \") \r\n \r\n )\r\n\r\n cpp ( \"join( \" (e 1) \" , \" (e 2) \")\" (imp \"<sstream>\") (imp \"<string>\") (imp \"<iostream>\")\r\n(create_polyfill \"\r\ntemplate <typename T>\r\nstd::string join(const T& v, const std::string& delim) {\r\n std::ostringstream s;\r\n for (const auto& i : v) {\r\n if (&i != &v[0]) {\r\n s << delim;\r\n }\r\n s << i;\r\n }\r\n return s.str();\r\n} \r\n \") ) \r\n\r\n go ( \"strings.Join(\" (e 1) \", \" (e 2) \")\")\r\n scala ( (e 1) \".mkString(\" (e 2) \")\" )\r\n php ( \"implode(\" (e 2) \", \" (e 1) \")\")\r\n swift3 ( (e 1) \".joined(separator:\" (e 2) \")\")\r\n * ( (e 1) \".join(\" (e 2) \")\" )\r\n } \r\n } \r\n \r\n has cmdHas:boolean ( map:[K:T] key:K ) { \r\n templates { \r\n ranger ( \"(has \" (e 1) \" \" (e 2) \")\") \r\n es5 ( \"typeof(\" (e 1) \"[\" (e 2) \"] ) != \\\"undefined\\\"\" )\r\n es6 ( \"( typeof(\" (e 1) \"[\" (e 2) \"] ) != \\\"undefined\\\" && \" (e 1) \".hasOwnProperty(\" (e 2) \") )\" )\r\n ts ( \"typeof(\" (e 1) \"[\" (e 2) \"] ) != \\\"undefined\\\"\" )\r\n flow ( \"typeof(\" (e 1) \"[\" (e 2) \"] ) != \\\"undefined\\\"\" )\r\n cpp ( (e 1) \".count(\" (e 2) \")\" )\r\n php ( \"array_key_exists(\" (e 2) \" , \" (e 1) \" )\" )\r\n java7 ( (e 1) \".containsKey(\" (e 2) \")\" )\r\n kotlin ( (e 1) \".containsKey(\" (e 2) \")\" )\r\n go ( \r\n\r\n(macro (nl \"func r_has_key_\" (r_ktype 1) \"_\" (r_atype 1) \"( a \" (typeof 1) \", key \" (r_ktype 1) \" ) bool { \" nl I \r\n \"_, ok := a[key]\" nl \"return ok\" nl i \"\r\n}\" nl )) \r\n \"r_has_key_\" (r_ktype 1) \"_\" (r_atype 1) \"(\" (e 1) \", \" (e 2) \")\"\r\n )\r\n rust ( (e 1 ) \".contains_key(&\" (e 2) \")\")\r\n csharp ( (e 1) \".ContainsKey(\" (e 2) \")\" )\r\n scala ( (e 1) \".contains(\" (e 2) \")\" )\r\n swift3 ( (e 1) \"[\" (e 2) \"] != nil\" )\r\n * ( (e 1) \"[\" (e 2) \"] != null\" )\r\n } \r\n } \r\n\r\n get cmdGet@(optional weak):int ( map:[K:int] key:K ) { \r\n templates {\r\n cpp( \"cpp_get_map_int_value<\" (r_ktype 1) \">(\" (e 1) \", \" (e 2) \")\"\r\n(create_polyfill\r\n\"\r\ntemplate <class T>\r\nclass r_optional_primitive {\r\n public:\r\n bool has_value;\r\n T value;\r\n r_optional_primitive<T> & operator=(const r_optional_primitive<T> & rhs) {\r\n has_value = rhs.has_value;\r\n value = rhs.value;\r\n return *this;\r\n }\r\n r_optional_primitive<T> & operator=(const T a_value) {\r\n has_value = true;\r\n value = a_value;\r\n return *this;\r\n }\r\n};\r\n\"\r\n) \r\n(macro\r\n(\"\r\ntemplate<typename T>\r\nr_optional_primitive<int> cpp_get_map_int_value( std::map<\" (r_ktype 1) \", int> m , \" (typeof 2) space \" key) {\r\n r_optional_primitive<int> result;\r\n try {\r\n result.value = m[key];\r\n result.has_value = true;\r\n } catch (...) {\r\n \r\n }\r\n return result;\r\n}\")\r\n) \r\n\r\n )\r\n }\r\n }\r\n\r\n \r\n\r\n get cmdGet@(optional weak):T ( map:[K:T] key:K ) { \r\n templates {\r\n ranger ( \"(get \" (e 1) \" \" (e 2) \")\") \r\n java7 ( \"Optional.ofNullable(\" (e 1) \".get(\" (e 2) \"))\" (imp \"java.util.Optional\"))\r\n rust ( (e 1) \".get(\" (e 2) \")\" )\r\n scala ( (e 1) \".get(\" (e 2) \").asInstanceOf[\" (atype 1) \"]\" )\r\n\r\n go ( \r\n\r\n(macro (nl \"func r_get_\" (r_ktype 1) \"_\" (r_atype 1) \"( a \" (typeof 1) \", key \" (r_ktype 1) \" ) *GoNullable { \" nl I \r\n \"res := new(GoNullable)\" nl \r\n \"v, ok := a[key]\" nl \r\n \"if ok { \" nl\r\n I \r\n \"res.has_value = true\" nl\r\n \"res.value = v\" nl\r\n \"return res\" nl\r\n i\r\n \"}\" nl\r\n \"res.has_value = false\" nl\r\n \"return res\" nl\r\ni \"}\" nl )) \r\n \"r_get_\" (r_ktype 1) \"_\" (r_atype 1) \"(\" (e 1) \", \" (e 2) \")\"\r\n ) \r\n * ( (e 1) \"[\" (e 2) \"]\" )\r\n } \r\n } \r\n\r\n set cmdSet@(moves@( 3 1 ) ):void ( map@(mutates):[K:T] key:K value@( refto@(1) ):T ) { \r\n templates {\r\n ranger ( \"set \" (e 1) \" \" (e 2) \" \" (e 3) ) \r\n java7 ( (e 1) \".put(\" (e 2) \", \" (e 3) \");\" )\r\n rust ( (e 1) \".insert(\" (e 2) \", \" (e 3) \");\" )\r\n scala ( (e 1) \".put(\" (e 2) \", \" (e 3) \")\" )\r\n kotlin ( (e 1) \".set(\" (e 2) \", \" (e 3) \")\" )\r\n php ( (e 1) \"[\" (e 2) \"] = \" (e 3) \";\" )\r\n cpp ( (e 1) \"[\" (e 2) \"] = \" (e 3) \";\" )\r\n * ( (e 1) \"[\" (e 2) \"] = \" (e 3) )\r\n } \r\n } \r\n\r\n lift cmdLift@(optional):T ( array:[T] index:int ) { \r\n templates {\r\n ranger ( \"(set \" (e 1) \" \" (e 2) \")\")\r\n cpp ( (e 1) \".at( \" (e 2) \")\" (imp \"<vector>\")) \r\n java7 ( (e 1) \".get(\" (e 2) \")\" ) \r\n ; lift return optional type => safer \r\n scala ( (e 1) \".lift(\" (e 2) \")\" ) \r\n swift3 ( (e 1) \"[\" (e 2) \"]\" ) \r\n * ( (e 1) \"[\" (e 2) \"]\" ) \r\n }\r\n }\r\n\r\n itemAt cmdItemAt@(weak):T ( array:[T] index:int ) { \r\n templates {\r\n ranger ( \"(itemAt \" (e 1) \" \" (e 2) \")\" )\r\n cpp ( (e 1) \".at(\" (e 2) \")\" (imp \"<vector>\")) \r\n java7 ( (e 1) \".get(\" (e 2) \")\" ) \r\n ; lift return optional type => safer \r\n scala ( (e 1) \"(\" (e 2) \")\" ) \r\n * ( (e 1) \"[\" (e 2) \"]\" ) \r\n }\r\n }\r\n\r\n indexOf cmdIndexOf:int ( array:[T] element:T ) { \r\n templates {\r\n ranger ( \"(indexOf \" (e 1) \" \" (e 2) \")\")\r\n\r\n cpp ( \"r_arr_index_of<\" (typeof 2) \">(\" (e 1) \", \" (e 2) \")\" (imp \"<vector>\") (imp \"<iterator>\") (imp \"<algorithm>\")\r\n\r\n(create_polyfill\r\n\"\r\ntemplate< typename T >\r\nint r_arr_index_of( std::vector<T> vec, T elem ) { \r\n auto it = std::find(vec.begin(),vec.end(),elem);\r\n if(it!=vec.end()) {\r\n return it - vec.begin();\r\n } \r\n return -1;\r\n}\r\n\" ) \r\n \r\n ) \r\n cpp ( \"std::distance( std::find( \" (e 1) \".begin(), \" (e 1) \".end(), \" (e 2) \") )\" (imp \"<vector>\") (imp \"<iterator>\")) \r\n rust ( (e 1) \".iter().position( |&r| r == \" (e 2) \" ).unwrap()\" ) \r\n php ( \"array_search(\" (e 2) \", \" (e 1) \", true)\")\r\n go ( \"r_indexof_arr_\" (rawtype 1) \"(\" (e 1) \", \" (e 2) \")\"\r\n(macro (\"func r_indexof_arr_\" (rawtype 1) \"( a []\" (ptr 1) (rawtype 1) \", item \" (ptr 1) (rawtype 1) \" ) ( int64 ) { \" nl I \r\n \"for i, v := range a {\" nl I \"if item == v { \" nl I \"return int64(i) \" nl i \" } \" nl i \" } \" nl i\r\n \"return -1\" nl\r\n\"}\" nl )) \r\n\r\n )\r\n swift3( \"r_index_of(arr:\" (e 1) \", elem:\" (e 2)\")\"\r\n(macro (\"\r\nfunc r_index_of ( arr:\" (typeof 1) \" , elem: \" (typeof 2) \") -> Int { \" nl I\r\n \"if let idx = arr.index(of: elem) { \" nl\r\n \" return idx \" nl\r\n \"} else { \" nl\r\n I \" return -1 \" nl i\r\n \"} \" nl\r\n i\r\n\"}\" nl ) ) \r\n )\r\n * ( (e 1) \".indexOf(\" (e 2) \")\" ) \r\n }\r\n }\r\n\r\n remove_index cmdRemoveIndex:void ( array:[T] index:int ) { \r\n templates {\r\n ranger ( \"(remove_index \" (e 1) \" \" (e 2) \")\")\r\n cpp ( (e 1) \".erase( \"(e 1)\".begin() + \" (e 2) \" )\")\r\n swift3 ( (e 1) \".remove(at:\" (e 2)\")\")\r\n php ( \"array_splice(\" (e 1) \", \" (e 2 )\", 1)[0]\")\r\n kotlin ( (e 1) \".removeAt(\" (e 2) \")\" ) \r\n java7 ( (e 1) \".remove(\" (e 2) \")\" )\r\n scala ( (e 1) \".remove(\" (e 2) \")\" )\r\n * ( (e 1) \".splice(\" (e 2) \", 1).pop();\" ) \r\n }\r\n }\r\n\r\n ; TODO: optional push to list....\r\n push cmdPush@(moves@( 2 1 ) ):void ( array@(mutates):[T] item@(optional):T ) { \r\n templates {\r\n ranger ( nl \"push \" (e 1) \" \" (e 2) \"\" nl)\r\n cpp ( (e 1) \".push_back( \"(e 2)\" );\")\r\n swift3 ( (e 1) \".append(\" (e 2)\")\")\r\n php ( \"array_push(\" (e 1) \", \" (e 2 )\");\")\r\n java7 ( (e 1) \".add(\" (e 2) \");\" )\r\n go ( (custom _) )\r\n go ( (e 1) \" = append(\" (e 1) \",\" (e 2) \");\" )\r\n kotlin ( (e 1) \".add(\" (e 2) \");\" )\r\n csharp ( (e 1) \".Add(\" (e 2) \")\" ) \r\n scala ( (e 1) \".append(\" (e 2) \")\" )\r\n * ( (e 1) \".push(\" (e 2) \");\" ) \r\n }\r\n }\r\n\r\n push cmdPush@(moves@( 2 1 ) ):void ( array@(mutates):[T] item:T ) { \r\n templates {\r\n ranger ( nl \"push \" (e 1) \" \" (e 2) \"\" nl)\r\n cpp ( (e 1) \".push_back( \"(e 2)\" );\")\r\n swift3 ( (e 1) \".append(\" (e 2)\")\")\r\n php ( \"array_push(\" (e 1) \", \" (e 2 )\");\")\r\n java7 ( (e 1) \".add(\" (e 2) \");\" )\r\n go ( (custom _) )\r\n go ( (e 1) \" = append(\" (e 1) \",\" (e 2) \");\" )\r\n kotlin ( (e 1) \".add(\" (e 2) \");\" )\r\n csharp ( (e 1) \".Add(\" (e 2) \")\" ) \r\n scala ( (e 1) \".append(\" (e 2) \")\" )\r\n * ( (e 1) \".push(\" (e 2) \");\" ) \r\n }\r\n }\r\n\r\n ; think: how to release the strong array\r\n removeLast cmdRemoveLast:void ( array@(mutates):[T] ) { \r\n templates {\r\n ranger ( \"removeLast \" (e 1) \"\")\r\n cpp ( (e 1) \".pop_back();\")\r\n swift3 ( (e 1) \".removeLast();\")\r\n php ( \"array_pop(\" (e 1) \" );\")\r\n java7 ( (e 1) \".remove(\" (e 1) \".size() - 1);\" )\r\n csharp ( \"Array.Resize(ref \"(e 1) \", \" (e 1 )\".Length - 1);\" ) \r\n scala ( (e 1) \".remove(\" (e 1) \".length - 1)\" )\r\n go ( (custom _) )\r\n go ( (e 1) \"= \" (e 1)\"[:len(\" (e 1)\") - 1]\")\r\n * ( (e 1) \".pop();\" ) \r\n }\r\n }\r\n\r\n length cmdArrayLength:int ( array:[T] ) { \r\n templates {\r\n ranger ( \"(length \" (e 1) \")\")\r\n cpp ( (e 1) \".size()\" ) \r\n swift3 ( (e 1) \".count\")\r\n php ( \"count(\" (e 1) \")\")\r\n java7 ( (e 1) \".size()\" ) \r\n scala ( (e 1) \".length\" )\r\n kotlin ( (e 1) \".size\" ) \r\n * ( (e 1) \".length\" ) \r\n }\r\n }\r\n\r\n length cmdStrlen:int ( text:string ) { \r\n templates {\r\n ranger ( \"(length \" (e 1) \")\")\r\n cpp ( (e 1) \".length()\") \r\n java7 ( (e 1) \".length()\") \r\n scala ( (e 1) \".length()\") \r\n swift3 ( (e 1) \".characters.count\") \r\n csharp ( (e 1) \".Length\")\r\n rust ( (e 1 ) \".len()\" )\r\n go( \"int64(len([]rune(\" (e 1) \")))\")\r\n php ( \"strlen(\" (e 1) \")\") \r\n * ( (e 1) \".length\")\r\n }\r\n }\r\n \r\n\r\n array_length cmdArrayLength:int ( array:[T] ) { \r\n templates {\r\n ranger ( \"(array_length \" (e 1) \")\")\r\n cpp ( (e 1) \".size()\" ) \r\n swift3 ( (e 1) \".count\")\r\n php ( \"count(\" (e 1) \")\")\r\n java7 ( (e 1) \".size()\" ) \r\n scala ( (e 1) \".length\" )\r\n rust ( (e 1 ) \".len()\" )\r\n go ( \"int64(len(\" (e 1 ) \"))\" )\r\n kotlin ( (e 1) \".size\" ) \r\n * ( (e 1) \".length\" ) \r\n }\r\n }\r\n\r\n; vec.erase(vec.begin() + index);\r\n array_extract cmdArrayExtract@(strong):T ( array@(mutates):[T] position:int ) { \r\n templates {\r\n ranger ( \"(array_extract \" (e 1) \" \" (e 2) \")\")\r\n ; TODO: C++ version does not seem to have a clear functino to extrace element from std::vector\r\n swift3 ( (e 1) \".remove(at:\" (e 2)\")\")\r\n php ( \"array_splice(\" (e 1) \", \" (e 2 )\", 1)[0]\")\r\n go ( \"r_m_arr_\" (rawtype 1) \"_extract(\" (e 1) \", \" (e 2 )\")\"\r\n\r\n(macro (\"func r_m_arr_\" (rawtype 1) \"_extract( a \" (typeof 1) \", i int64 ) (\" (arraytype 1) \", \" (typeof 1) \" ) { \" nl I \r\n \"item := a[i]\" nl \"res := append(a[:i], a[(i+1):]...)\" nl \"return item, res \" nl i \"\r\n}\" nl )) \r\n \r\n )\r\n\r\n cpp ( \"r_m_arr_extract<\" (typeof 1) \">(\" (e 1) \", \" (e 2 )\")\"\r\n\r\n(create_polyfill\r\n\"template< typename T >\r\nauto r_m_arr_extract( T & a, int i ) { \r\n auto elem = a.at(i); \r\n a.erase(a.begin() + i);\r\n return elem;\r\n}\" ) \r\n \r\n ) \r\n kotlin ( (e 1) \".removeAt(\" (e 2) \")\" ) \r\n java7 ( (e 1) \".remove(\" (e 2) \")\" )\r\n scala ( (e 1) \".remove(\" (e 2) \")\" )\r\n * ( (e 1) \".splice(\" (e 2) \", 1).pop()\" ) \r\n }\r\n }\r\n\r\n\r\n \r\n print cmdPrint:void ( text:string) { \r\n templates {\r\n ranger ( nl \"print \" (e 1) nl)\r\n cpp (ln \"std::cout << \" (e 1) \" << std::endl;\" nl (imp \"<iostream>\"))\r\n kotlin ( nl \"println( \" (e 1) \" )\" nl ) \r\n scala ( nl \"println( \" (e 1) \" )\" nl ) \r\n go ( nl \"fmt.Println( \" (e 1) \" )\" nl (imp \"fmt\") ) \r\n rust ( nl \"println!( \\\"{}\\\", \" (e 1) \" );\" nl ) \r\n java7 ( nl \"System.out.println(String.valueOf( \" (e 1) \" ) );\" nl (imp \"java.io.*\")) \r\n php ( nl \"echo( \" (e 1) \" . \\\"\\\\n\\\");\" nl ) \r\n csharp ( nl \"Console.Writeline(\" (e 1) \")\" nl (imp \"System\"))\r\n swift3 ( nl \"print(\" (e 1) \")\" nl)\r\n * ( nl \"console.log(\" (e 1) \")\" nl) \r\n }\r\n }\r\n\r\n ; ----------------------------------------------------------------------------------------------------------\r\n ; conversions\r\n\r\n to_double toDouble:double ( input:int ) {\r\n templates {\r\n ranger (\"( to_double \" (e 1) \" )\")\r\n go (\"float64( \" (e 1) \" )\")\r\n es6 ( (e 1) )\r\n swift3 (\"Double(\" (e 1) \")\")\r\n java7 (\"Double.valueOf(\" (e 1) \")\")\r\n cpp (\"(double)(\" (e 1) \")\")\r\n php ( (e 1) )\r\n }\r\n }\r\n\r\n ; ----------------------------------------------------------------------------------------------------------\r\n\r\n == cmdEqual:boolean ( left:string right:string ) { \r\n templates { \r\n java7 ( (e 1) \".equals(\" (e 2) \")\" ) \r\n * ( (e 1) \" == \" (e 2) ) \r\n } \r\n }\r\n\r\n == cmdEqual:boolean ( left:T right:T ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n == cmdEqual:boolean ( left:enum right:enum ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n\r\n == cmdEqual:boolean ( left:int right:char ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n == cmdEqual:boolean ( left:char right:int ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n\r\n == cmdEqual:boolean ( left:int right:int ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n == cmdEqual:boolean ( left:double right:double ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n == cmdEqual:boolean ( left:boolean right:boolean ) { templates { * ( (e 1) \" == \" (e 2) ) } }\r\n \r\n \r\n > cmdGt:boolean ( left:double right:double ) { templates { * ( (e 1) \" > \" (e 2) ) } }\r\n > cmdGt:boolean ( left:int right:int ) { templates { * ( (e 1) \" > \" (e 2) ) } }\r\n\r\n ; ----------------------------------------------------------------------------------------------------------\r\n ; TODO: expression to cast the types comparing to character\r\n\r\n <= cmdLte:boolean ( left:char right:int ) { \r\n templates { * ( (e 1) \" <= \" (e 2) ) } \r\n }\r\n <= cmdLte:boolean ( left:int right:char ) { \r\n templates { * ( (e 1) \" <= \" (e 2) ) } \r\n }\r\n <= cmdLte:boolean ( left:char right:char ) { \r\n templates { * ( (e 1) \" <= \" (e 2) ) } \r\n }\r\n\r\n < cmdLt:boolean ( left:int right:char ) { \r\n templates { * ( (e 1) \" < \" (e 2) ) } \r\n }\r\n\r\n < cmdLt:boolean ( left:char right:int ) { \r\n templates { * ( (e 1) \" < \" (e 2) ) } \r\n }\r\n\r\n < cmdLt:boolean ( left:char right:char ) { \r\n templates { * ( (e 1) \" < \" (e 2) ) } \r\n }\r\n\r\n == cmdEq:boolean ( left:int right:char ) { \r\n templates { * ( (e 1) \" == \" (e 2) ) } \r\n }\r\n\r\n == cmdEq:boolean ( left:char right:int ) { \r\n templates { * ( (e 1) \" == \" (e 2) ) } \r\n }\r\n\r\n == cmdEq:boolean ( left:char right:char ) { \r\n templates { * ( (e 1) \" == \" (e 2) ) } \r\n }\r\n\r\n != cmdNeq:boolean ( left:string right:string ) { \r\n templates { \r\n java7 ( \"!\" (e 1) \".equals(\" (e 2) \")\") \r\n * ( (e 1) \" != \" (e 2) ) \r\n } \r\n } \r\n\r\n != cmdNeq:boolean ( left:int right:char ) { \r\n templates { * ( (e 1) \" != \" (e 2) ) } \r\n }\r\n\r\n != cmdNeq:boolean ( left:char right:int ) { \r\n templates { * ( (e 1) \" != \" (e 2) ) } \r\n }\r\n\r\n != cmdNeq:boolean ( left:char right:char ) { \r\n templates { * ( (e 1) \" != \" (e 2) ) } \r\n }\r\n\r\n\r\n != cmdNeq:boolean ( left:T right:T ) { \r\n templates { * ( (e 1) \" != \" (e 2) ) } \r\n }\r\n \r\n >= cmdGte:boolean ( left:int right:char ) { \r\n templates { * ( (e 1) \" >= \" (e 2) ) } \r\n }\r\n >= cmdGte:boolean ( left:char right:int ) { \r\n templates { * ( (e 1) \" >= \" (e 2) ) } \r\n }\r\n >= cmdGte:boolean ( left:char right:char ) { \r\n templates { * ( (e 1) \" >= \" (e 2) ) } \r\n }\r\n \r\n > cmdGt:boolean ( left:int right:char ) { \r\n templates { * ( (e 1) \" > \" (e 2) ) } \r\n }\r\n > cmdGt:boolean ( left:char right:int ) { \r\n templates { * ( (e 1) \" > \" (e 2) ) } \r\n }\r\n > cmdGt:boolean ( left:char right:char ) { \r\n templates { * ( (e 1) \" > \" (e 2) ) } \r\n }\r\n\r\n ;------------------------------------------------------------------------------------------------------------\r\n\r\n < cmdLt:boolean ( left:int right:int ) { templates { * ( (e 1) \" < \" (e 2) ) } }\r\n < cmdLt:boolean ( left:double right:double ) { templates { * ( (e 1) \" < \" (e 2) ) } }\r\n\r\n <= cmdLte:boolean ( left:int right:int ) { templates { * ( (e 1) \" <= \" (e 2) ) } }\r\n <= cmdLte:boolean ( left:double right:double ) { templates { * ( (e 1) \" <= \" (e 2) ) } }\r\n\r\n >= cmdGte:boolean ( left:int right:int ) { templates { * ( (e 1) \" >= \" (e 2) ) } }\r\n >= cmdGte:boolean ( left:double right:double ) { templates { * ( (e 1) \" >= \" (e 2) ) } }\r\n\r\n ; optional testing\r\n && cmdLogicAnd:boolean ( left@(optional):T right@(optional):S ) { \r\n templates { \r\n ranger ( \"(\" (e 1) \" && \" (e 2) \")\" ) \r\n scala ( (e 1) \".isDefined && \" (e 2) \".isDefined\") \r\n csharp ( (e 1) \".HasValue && \" (e 2) \".HasValue\") \r\n\r\n php ( \"isset(\"(e 1) \") && isset(\" (e 2) \")\") \r\n java7 ( (e 1) \".isPresent() && \" (e 2) \".isPresent()\") \r\n rust ( (e 1) \".is_some() && \" (e 2) \".is_some()\") \r\n swift3 ( (e 1) \" != nil && \" (e 2) \" != nil\") \r\n go ( \"\" (e 1) \".has_value && \" \"\" (e 2) \".has_value\")\r\n cpp ( \"\" (e 1) \"->has_value && \" \"\" (e 2) \"->has_value\") \r\n kotlin ( (e 1) \" != null && \" (e 2) \" != null\") \r\n\r\n * ( \"typeof(\" ( e 1 ) \") != \\\"undefined\\\" && typeof(\" ( e 2 ) \") != \\\"undefined\\\"\" ) \r\n } \r\n }\r\n && cmdLogicAnd:boolean ( left:boolean right@(optional):S ) { \r\n templates {\r\n ranger ( \"(\" (e 1) \" && \" (e 2) \")\" ) \r\n php ( (e 1) \" && isset(\" (e 2) \")\") \r\n scala ( (e 1) \" && \" (e 2) \".isDefined\") \r\n java7 ( (e 1) \" && \" (e 2) \".isPresent()\") \r\n csharp ( (e 1) \" && \" (e 2) \"HasValue\") \r\n\r\n rust ( (e 1) \" && \" (e 2) \".is_some()\") \r\n swift3 ( (e 1) \" && \" (e 2) \" != nil\") \r\n go ( (e 1) \" && \" \"\" (e 2) \".has_value\") \r\n cpp ( (e 1) \" && \" \"\" (e 2) \"->has_value\") \r\n kotlin ( (e 1) \" && \" (e 2) \" != null\") \r\n cpp (e 1) \" && \" (e 2) \r\n * ( (e 1) \" && \" \"typeof(\" ( e 2 ) \") != \\\"undefined\\\"\") \r\n } \r\n }\r\n && cmdLogicAnd:boolean ( left@(optional):T right:boolean ) { \r\n templates { \r\n ranger ( \"(\" (e 1) \" && \" (e 2) \")\" ) \r\n php ( \"isset(\"(e 1) \") && \" (e 2) ) \r\n scala ( \"\"(e 1) \".isDefined && \" (e 2) ) \r\n java7 ( \"\"(e 1) \".isPresent() && \" (e 2) ) \r\n csharp ( \"\"(e 1) \".HasValue && \" (e 2) ) \r\n\r\n rust ( \"\"(e 1) \".is_some() && \" (e 2) ) \r\n swift3 ( \"\"(e 1) \" != nil && \" (e 2) ) \r\n go ( \"\" (e 1) \".has_value && \" (e 2) ) \r\n cpp ( \"\" (e 1) \"->has_value && \" (e 2) ) \r\n kotlin ( \"\"(e 1) \" != null && \" (e 2) ) \r\n cpp (e 1) \" && \" (e 2) \r\n * ( \"typeof(\" ( e 1 ) \") != \\\"undefined\\\"\" \" && \" (e 2) ) \r\n } \r\n }\r\n\r\n\r\n\r\n && cmdLogicAnd:boolean ( left:boolean right:boolean ) { templates { * ( (e 1) \" && \" (e 2) ) } }\r\n && cmdLogicAnd:boolean ( p1:boolean p2:boolean p3:boolean) { templates { * ( (e 1) \" && \" (e 2) \" && \" (e 3) ) } }\r\n && cmdLogicAnd:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean ) { templates { * ( (e 1) \" && \" (e 2) \" && \" (e 3) \" && \" (e 4) ) } }\r\n && cmdLogicAnd:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean p5:boolean ) { templates { * ( (e 1) \" && \" (e 2) \" && \" (e 3) \" && \" (e 4) \" && \" (e 5) ) } }\r\n && cmdLogicAnd:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean p5:boolean p6:boolean ) { templates { * ( (e 1) \" && \" (e 2) \" && \" (e 3) \" && \" (e 4) \" && \" (e 5) \" && \" (e 6) ) } }\r\n && cmdLogicAnd:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean p5:boolean p6:boolean p7:boolean ) { templates { * ( (e 1) \" && \" (e 2) \" && \" (e 3) \" && \" (e 4) \" && \" (e 5) \" && \" (e 6) \" && \" (e 7) ) } }\r\n\r\n || cmdLogicOr:boolean ( left:boolean right:boolean ) { templates { * ( (e 1) \" || \" (e 2) ) } }\r\n || cmdLogicOr:boolean ( p1:boolean p2:boolean p3:boolean ) { templates { * ( (e 1) \" || \" (e 2) \" || \" (e 3) ) } }\r\n || cmdLogicOr:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean ) { templates { * ( (e 1) \" || \" (e 2) \" || \" (e 3) \" || \" (e 4) ) } }\r\n || cmdLogicOr:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean p5:boolean ) { templates { * ( (e 1) \" || \" (e 2) \" || \" (e 3) \" || \" (e 4) \" || \" (e 5) ) } } \r\n || cmdLogicOr:boolean ( p1:boolean p2:boolean p3:boolean p4:boolean p5:boolean p6:boolean ) { templates { * ( (e 1) \" || \" (e 2) \" || \" (e 3) \" || \" (e 4) \" || \" (e 5) \" || \" (e 6) ) } }\r\n\r\n\r\n }\r\n\r\n\r\n\r\n}\r\n"
package/index.html DELETED
@@ -1,18 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <style>
6
- html, body {
7
- margin:0px;
8
- padding:0px;
9
- }
10
- </style>
11
- </head>
12
- <body>
13
- <script src="https://cdnjs.cloudflare.com/ajax/libs/redom/3.2.1/redom.js"></script>
14
- <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.8/ace.js"></script>
15
- <script src="fiddle/lang_data.js"></script>
16
- <script src="fiddle/browser_editor.js"></script>
17
- </body>
18
- </html>
@@ -1,33 +0,0 @@
1
-
2
- Import "RangerWebService.clj"
3
-
4
- class HttpTester {
5
-
6
- fn tester:void () {
7
- listen (new HTTPServer (1999)) {
8
-
9
- def path_to_route:string (get_url_path)
10
- write_header "text/html"
11
- switch path_to_route {
12
- case "/koodiklinikka" {
13
- respond "<!DOCTYPE html>
14
- <html>
15
- <body style='background-color:#39a'>
16
- <div> Served from " + path_to_route + " </div>
17
- <img src='https://raw.githubusercontent.com/koodiklinikka/koodiklinikka.fi/master/src/assets/images/logo.png'/>
18
- </body>
19
- </html>"
20
- }
21
- default {
22
- respond "nothing to see here!"
23
- }
24
- }
25
- }
26
- }
27
-
28
- sfn main@(main):void () {
29
- def testObj:HttpTester (new HttpTester ())
30
- testObj.tester()
31
- }
32
- }
33
-
@@ -1,81 +0,0 @@
1
-
2
- ; --------------------------------------------------------------------------------------
3
- ; Web service for Go
4
-
5
-
6
- ; --------------------------------------------------------------------------------------
7
- ; Support classes
8
-
9
- class HTTPServer {
10
-
11
- def port:int 80
12
-
13
- Constructor (p:int) {
14
- port = p
15
- }
16
-
17
- }
18
-
19
- class RequestResponse {
20
- def res:HTTPResponse
21
- Constructor( r:HTTPResponse ) {
22
- res = r
23
- }
24
- }
25
-
26
- ; --------------------------------------------------------------------------------------
27
- ; system classes
28
-
29
- systemclass HTTPResponse {
30
- go http.ResponseWriter
31
- }
32
-
33
- systemclass HTTPRequest {
34
- go http.Request
35
- }
36
-
37
-
38
-
39
-
40
- ; --------------------------------------------------------------------------------------
41
- ; operators
42
-
43
- operators {
44
-
45
- get_url_path http:string () {
46
- templates {
47
- go ("__r.URL.Path")
48
- }
49
- }
50
-
51
- write_header http:void ( txt:string) {
52
- templates {
53
- go ( "__w.Header().Set(\"Content-Type\", " (e 1) ") " nl )
54
- }
55
- }
56
-
57
- respond http:void ( txt:string) {
58
- templates {
59
- go ( "__w.Write([]byte(" (e 1) ")) " nl )
60
- }
61
- }
62
-
63
- get_response http:HTTPResponse () {
64
- templates {
65
- go ( "&__w" )
66
- }
67
- }
68
-
69
- listen http:void (server:HTTPServer handler:block) {
70
- templates {
71
- go (
72
- "http.HandleFunc(\"/\", func(__w http.ResponseWriter, __r *http.Request) {" nl
73
- I (e 2) i nl "})" nl
74
- "http.ListenAndServe(\":\"+fmt.Sprintf(\"%v\"," (e 1) ".port), nil)" (imp "net/http")
75
- (imp "fmt")
76
- )
77
- }
78
- }
79
-
80
- }
81
-