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.
- package/CHANGELOG.md +103 -0
- package/README.md +991 -96
- package/{compiler/Lang.clj → dist/Lang.rgr} +2345 -75
- package/dist/README.md +116 -0
- package/dist/{bin/api.d.ts → api.d.ts} +430 -154
- package/dist/api.js +34345 -0
- package/{lib/Ajax.clj → dist/lib/Ajax.rgr} +1 -1
- package/{lib/CmdParams.clj → dist/lib/CmdParams.rgr} +72 -72
- package/{lib/Crypto.clj → dist/lib/Crypto.rgr} +1 -1
- package/{lib/DOMLib.clj → dist/lib/DOMLib.rgr} +2 -2
- package/{lib/Engine3D.clj → dist/lib/Engine3D.rgr} +1 -1
- package/{lib/ImmutableVector.clj → dist/lib/ImmutableVector.rgr} +364 -364
- package/{lib/IndexedDB.clj → dist/lib/IndexedDB.rgr} +1 -1
- package/{lib/JSON.clj → dist/lib/JSON.rgr} +105 -2
- package/{lib/JinxProcess.clj → dist/lib/JinxProcess.rgr} +3 -3
- package/{lib/Storage.clj → dist/lib/Storage.rgr} +1 -1
- package/{lib/Timers.clj → dist/lib/Timers.rgr} +176 -170
- package/{lib/ViewLib.clj → dist/lib/ViewLib.rgr} +1 -1
- package/dist/lib/lib/ACEEditor.rgr +5 -0
- package/dist/lib/lib/Ajax.rgr +196 -0
- package/dist/lib/lib/CmdParams.rgr +72 -0
- package/dist/lib/lib/Crypto.rgr +90 -0
- package/dist/lib/lib/DOMLib.rgr +307 -0
- package/{examples/3D/Engine3D.clj → dist/lib/lib/Engine3D.rgr} +870 -857
- package/dist/lib/lib/ImmutableVector.rgr +364 -0
- package/dist/lib/lib/IndexedDB.rgr +32 -0
- package/{compiler/JSON.clj → dist/lib/lib/JSON.rgr} +106 -3
- package/dist/lib/lib/JinxProcess.rgr +838 -0
- package/dist/lib/lib/SQL.rgr +44 -0
- package/dist/lib/lib/ServiceLib.rgr +9 -0
- package/dist/lib/lib/Storage.rgr +89 -0
- package/dist/lib/lib/Time.rgr +75 -0
- package/dist/lib/lib/Timers.rgr +176 -0
- package/dist/lib/lib/TypedArrays.rgr +14 -0
- package/dist/lib/lib/ViewLib.rgr +851 -0
- package/dist/lib/lib/WebLib.rgr +47 -0
- package/dist/lib/lib/WebServerLib.rgr +137 -0
- package/{lib/ranger-dir.clj → dist/lib/lib/ranger-dir.rgr} +1 -1
- package/{compiler/stdlib.clj → dist/lib/lib/stdlib.rgr} +42 -19
- package/{lib/stdops.clj → dist/lib/lib/stdops.rgr} +1 -1
- package/dist/lib/ranger-dir.rgr +175 -0
- package/{lib/stdlib.clj → dist/lib/stdlib.rgr} +2 -2
- package/dist/lib/stdops.rgr +168 -0
- package/dist/package.json +47 -0
- package/{bin/output.js → dist/rgrc.js} +15377 -7935
- package/dist/stdops.rgr +168 -0
- package/package.json +196 -38
- package/adventofcode/day1/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day1/bin/LambdaSignature2.java +0 -3
- package/adventofcode/day1/bin/LambdaSignature3.java +0 -3
- package/adventofcode/day1/bin/day1.cpp +0 -124
- package/adventofcode/day1/bin/day1.go +0 -75
- package/adventofcode/day1/bin/day1.js +0 -45
- package/adventofcode/day1/bin/day1.php +0 -46
- package/adventofcode/day1/bin/day1.scala +0 -48
- package/adventofcode/day1/bin/day1.swift +0 -48
- package/adventofcode/day1/bin/day1_part2.cpp +0 -180
- package/adventofcode/day1/bin/day1_part2.go +0 -123
- package/adventofcode/day1/bin/day1_part2.js +0 -76
- package/adventofcode/day1/bin/day1_part2.php +0 -88
- package/adventofcode/day1/bin/day1_part2.scala +0 -81
- package/adventofcode/day1/bin/day1_part2.swift +0 -91
- package/adventofcode/day1/bin/day_one.java +0 -38
- package/adventofcode/day1/bin/day_one_part_two.java +0 -57
- package/adventofcode/day1/bin/operatorsOf.java +0 -37
- package/adventofcode/day1/bin/operatorsOf_5.java +0 -10
- package/adventofcode/day1/bin/operatorsOfboolean_5.java +0 -10
- package/adventofcode/day1/bin/variant.hpp +0 -2416
- package/adventofcode/day1/compile.bat +0 -7
- package/adventofcode/day1/compile2.bat +0 -7
- package/adventofcode/day1/day1.clj +0 -19
- package/adventofcode/day1/day1_part2.clj +0 -43
- package/adventofcode/day1/input1.txt +0 -1
- package/adventofcode/day2/bin/LambdaSignature1.class +0 -0
- package/adventofcode/day2/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day2/bin/LambdaSignature2.class +0 -0
- package/adventofcode/day2/bin/LambdaSignature2.java +0 -3
- package/adventofcode/day2/bin/day2.cpp +0 -133
- package/adventofcode/day2/bin/day2.go +0 -85
- package/adventofcode/day2/bin/day2.js +0 -45
- package/adventofcode/day2/bin/day2.php +0 -59
- package/adventofcode/day2/bin/day2.scala +0 -54
- package/adventofcode/day2/bin/day2.swift +0 -62
- package/adventofcode/day2/bin/day2_part2.cpp +0 -150
- package/adventofcode/day2/bin/day2_part2.go +0 -101
- package/adventofcode/day2/bin/day2_part2.js +0 -54
- package/adventofcode/day2/bin/day2_part2.php +0 -80
- package/adventofcode/day2/bin/day2_part2.scala +0 -68
- package/adventofcode/day2/bin/day2_part2.swift +0 -82
- package/adventofcode/day2/bin/day_two.java +0 -61
- package/adventofcode/day2/bin/day_two_part_two$1$1$1.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two$1$1.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two$1.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two.class +0 -0
- package/adventofcode/day2/bin/day_two_part_two.java +0 -80
- package/adventofcode/day2/bin/operatorsOf.class +0 -0
- package/adventofcode/day2/bin/operatorsOf.java +0 -18
- package/adventofcode/day2/bin/variant.hpp +0 -2416
- package/adventofcode/day2/compile.bat +0 -7
- package/adventofcode/day2/compile2.bat +0 -7
- package/adventofcode/day2/day2.clj +0 -60
- package/adventofcode/day2/day2_part2.clj +0 -69
- package/adventofcode/day2/input1.txt +0 -1
- package/adventofcode/day3/bin/Grid.java +0 -92
- package/adventofcode/day3/bin/GridRow.java +0 -5
- package/adventofcode/day3/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day3/bin/LambdaSignature2.java +0 -3
- package/adventofcode/day3/bin/LambdaSignature3.java +0 -3
- package/adventofcode/day3/bin/day3.cpp +0 -64
- package/adventofcode/day3/bin/day3.go +0 -55
- package/adventofcode/day3/bin/day3.js +0 -42
- package/adventofcode/day3/bin/day3.php +0 -41
- package/adventofcode/day3/bin/day3.scala +0 -52
- package/adventofcode/day3/bin/day3.swift +0 -43
- package/adventofcode/day3/bin/day3_part2.cpp +0 -216
- package/adventofcode/day3/bin/day3_part2.go +0 -188
- package/adventofcode/day3/bin/day3_part2.js +0 -123
- package/adventofcode/day3/bin/day3_part2.php +0 -135
- package/adventofcode/day3/bin/day3_part2.swift +0 -131
- package/adventofcode/day3/bin/day_three_part_two.java +0 -43
- package/adventofcode/day3/bin/day_two.java +0 -42
- package/adventofcode/day3/bin/operatorsOf.java +0 -14
- package/adventofcode/day3/bin/variant.hpp +0 -2416
- package/adventofcode/day3/compile.bat +0 -7
- package/adventofcode/day3/compile2.bat +0 -7
- package/adventofcode/day3/day3.clj +0 -42
- package/adventofcode/day3/day3_part2.clj +0 -112
- package/adventofcode/day4/bin/LambdaSignature1.java +0 -3
- package/adventofcode/day4/bin/day4.cpp +0 -118
- package/adventofcode/day4/bin/day4.go +0 -75
- package/adventofcode/day4/bin/day4.js +0 -40
- package/adventofcode/day4/bin/day4.php +0 -52
- package/adventofcode/day4/bin/day4.scala +0 -47
- package/adventofcode/day4/bin/day4.swift +0 -56
- package/adventofcode/day4/bin/day4_part2.go +0 -129
- package/adventofcode/day4/bin/day4_part2.js +0 -72
- package/adventofcode/day4/bin/day_four.java +0 -41
- package/adventofcode/day4/bin/inputData.java +0 -7
- package/adventofcode/day4/bin/operatorsOf.java +0 -11
- package/adventofcode/day4/bin/variant.hpp +0 -2416
- package/adventofcode/day4/compile.bat +0 -7
- package/adventofcode/day4/compile2.bat +0 -7
- package/adventofcode/day4/day4.clj +0 -32
- package/adventofcode/day4/day4_part2.clj +0 -44
- package/adventofcode/day4/input.clj +0 -519
- package/adventofcode/day4/input.txt +0 -512
- package/bin/api.ts +0 -24471
- package/bin/compiler.ts +0 -24482
- package/compiler/ColorConsole.clj +0 -22
- package/compiler/ContextOperators.clj +0 -75
- package/compiler/FlowEnterVarDef.clj +0 -223
- package/compiler/InputFileSystem.clj +0 -276
- package/compiler/RangerDocs.clj +0 -7
- package/compiler/TFactory.clj +0 -146
- package/compiler/TFiles.clj +0 -23
- package/compiler/TFlow.clj +0 -39
- package/compiler/TNodeFactory.clj +0 -84
- package/compiler/TTypes.clj +0 -188
- package/compiler/VirtualCompiler.clj +0 -800
- package/compiler/bin/ng_Compiler.js +0 -23779
- package/compiler/commonmark_plugin.clj +0 -359
- package/compiler/feat2.bat +0 -2
- package/compiler/feats.bat +0 -9
- package/compiler/feature_tests.clj +0 -192
- package/compiler/index.js +0 -2
- package/compiler/issue_57.clj +0 -25
- package/compiler/makefile_plugin.clj +0 -135
- package/compiler/markdown_plugin.clj +0 -386
- package/compiler/maven_plugin.clj +0 -162
- package/compiler/ng_AndroidPageWriter.clj +0 -299
- package/compiler/ng_CodeNode.clj +0 -756
- package/compiler/ng_CodeNodeCompilerExtensions.clj +0 -839
- package/compiler/ng_Compiler.clj +0 -49
- package/compiler/ng_CompilerGeneric.clj +0 -260
- package/compiler/ng_CompilerOrig.clj +0 -854
- package/compiler/ng_DictNode.clj +0 -346
- package/compiler/ng_DictNode2.clj +0 -316
- package/compiler/ng_Execute.clj +0 -138
- package/compiler/ng_Execute1.clj +0 -129
- package/compiler/ng_FlowWork.clj +0 -3951
- package/compiler/ng_LiveCompiler.clj +0 -1109
- package/compiler/ng_RagnerJavaScriptClassWriter.clj +0 -402
- package/compiler/ng_RangerActiveOperators.clj +0 -86
- package/compiler/ng_RangerAppClassDesc.clj +0 -400
- package/compiler/ng_RangerAppEnums.clj +0 -86
- package/compiler/ng_RangerAppFunctionDesc.clj +0 -127
- package/compiler/ng_RangerAppMessages.clj +0 -15
- package/compiler/ng_RangerAppOperatorDesc.clj +0 -20
- package/compiler/ng_RangerAppParamDesc.clj +0 -388
- package/compiler/ng_RangerAppWriterContext.clj +0 -1793
- package/compiler/ng_RangerArgMatch.clj +0 -638
- package/compiler/ng_RangerCSharpClassWriter.clj +0 -484
- package/compiler/ng_RangerCppClassWriter.clj +0 -1023
- package/compiler/ng_RangerDocGenerator.clj +0 -305
- package/compiler/ng_RangerFlowParser.clj +0 -4992
- package/compiler/ng_RangerFlowParserOrig.clj +0 -4002
- package/compiler/ng_RangerGenericClassWriter.clj +0 -573
- package/compiler/ng_RangerGolangClassWriter.clj +0 -1766
- package/compiler/ng_RangerImmutableExtension.clj +0 -77
- package/compiler/ng_RangerJava7ClassWriter.clj +0 -961
- package/compiler/ng_RangerJavaScriptClassWriter.clj +0 -1042
- package/compiler/ng_RangerKotlinClassWriter.clj +0 -372
- package/compiler/ng_RangerLanguageWriters.clj +0 -14
- package/compiler/ng_RangerLispParser.clj +0 -873
- package/compiler/ng_RangerPHPClassWriter.clj +0 -643
- package/compiler/ng_RangerPlugin.clj +0 -41
- package/compiler/ng_RangerRangerClassWriter.clj +0 -357
- package/compiler/ng_RangerRustClassWriter.clj +0 -420
- package/compiler/ng_RangerScalaClassWriter.clj +0 -818
- package/compiler/ng_RangerSerializeClass.clj +0 -502
- package/compiler/ng_RangerServiceBuilder.clj +0 -63
- package/compiler/ng_RangerSwift3ClassWriter.clj +0 -809
- package/compiler/ng_RangerSwiftClassWriter.clj +0 -0
- package/compiler/ng_RangerTypeClass.clj +0 -45
- package/compiler/ng_SourceParser.clj +0 -241
- package/compiler/ng_SourceParser2.clj +0 -214
- package/compiler/ng_WebPageWriter.clj +0 -39
- package/compiler/ng_jsonParser.clj +0 -340
- package/compiler/ng_p_test.clj +0 -1711
- package/compiler/ng_parser.clj +0 -911
- package/compiler/ng_parser2.clj +0 -735
- package/compiler/ng_parser2_backup.clj +0 -1679
- package/compiler/ng_parser_backup.clj +0 -886
- package/compiler/ng_parser_ok.clj +0 -1718
- package/compiler/ng_parser_ok2.clj +0 -1717
- package/compiler/ng_parser_std_match.clj +0 -687
- package/compiler/ng_parser_std_match2.clj +0 -1012
- package/compiler/ng_parser_v2.clj +0 -1251
- package/compiler/ng_ui.clj +0 -403
- package/compiler/ng_ui_test.clj +0 -18
- package/compiler/ng_writer.clj +0 -338
- package/compiler/ng_xmlParser.clj +0 -472
- package/compiler/ng_xmlParser2.clj +0 -317
- package/compiler/ng_xmlParser3.clj +0 -251
- package/compiler/opdoc.bat +0 -4
- package/compiler/operators.md +0 -290
- package/compiler/p.bat +0 -4
- package/compiler/package.json +0 -10
- package/compiler/pcmd.bat +0 -4
- package/compiler/pcmd2.bat +0 -3
- package/compiler/plaintext_plugin.clj +0 -69
- package/compiler/plugin.bat +0 -19
- package/compiler/plugin2.bat +0 -4
- package/compiler/plugin_app.bat +0 -3
- package/compiler/plugin_apps.clj +0 -27
- package/compiler/plugins.bat +0 -10
- package/compiler/reveal_plugin.clj +0 -409
- package/compiler/simplePlugin.clj +0 -780
- package/compiler/t.bat +0 -3
- package/compiler/test_any.clj +0 -43
- package/compiler/test_call.clj +0 -141
- package/compiler/test_chain.clj +0 -79
- package/compiler/test_json.clj +0 -10
- package/compiler/test_lambda.clj +0 -153
- package/compiler/test_pcmd.clj +0 -32
- package/compiler/test_pcmd2.clj +0 -29
- package/compiler/test_plugin.clj +0 -237
- package/compiler/test_readfile.clj +0 -13
- package/compiler/test_reveal.clj +0 -19
- package/compiler/test_slides.clj +0 -312
- package/compiler/test_types.clj +0 -143
- package/compiler/test_types2.clj +0 -49
- package/compiler/test_types3.clj +0 -53
- package/compiler/test_var.clj +0 -40
- package/compiler/tonpm.bat +0 -14
- package/compiler/tonpm2.bat +0 -12
- package/compiler/ui_plugin.clj +0 -507
- package/compiler/ui_plugin2.clj +0 -427
- package/compiler/update-git.bat +0 -3
- package/compiler/vcomp.bat +0 -4
- package/compiler/viewbuilder_Android.clj +0 -176
- package/compiler/viewbuilder_Web.clj +0 -105
- package/dist/bin/api.js +0 -32422
- package/dist/bin/api.js.map +0 -1
- package/dist/bin/compiler.d.ts +0 -1638
- package/dist/bin/compiler.js +0 -32444
- package/dist/bin/compiler.js.map +0 -1
- package/examples/3D/bin/test_3d.js +0 -329
- package/examples/3D/test_3d.clj +0 -385
- package/examples/EVGColor/EVGColor.clj +0 -310
- package/examples/EVGColor/EVGColorContext.clj +0 -176
- package/examples/EVGColor/bin/EVGColor.js +0 -286
- package/examples/EVGColor/bin/minimized.js +0 -286
- package/examples/SVGPath/SVGPath.clj +0 -625
- package/examples/SVGPath/Vec2.clj +0 -103
- package/examples/SVGPath/bin/SVGPath.cpp +0 -887
- package/examples/SVGPath/bin/SVGPath.js +0 -682
- package/examples/SVGPath/bin/minimized.js +0 -578
- package/examples/SVGPath/bin/variant.hpp +0 -2416
- package/examples/minification/Vec2.clj +0 -103
- package/examples/minification/bin/minified.js +0 -44
- package/examples/minification/bin/test.js +0 -117
- package/examples/minification/test.clj +0 -13
- package/fiddle/VirtualCompiler.js +0 -23495
- package/fiddle/browser_editor.js +0 -13240
- package/fiddle/compileEnv.js +0 -1
- package/fiddle/compileEnv.json +0 -1
- package/fiddle/lang_data.js +0 -1
- package/index.html +0 -18
- package/native/httpd/HttpTester.clj +0 -33
- package/native/httpd/RangerWebService.clj +0 -81
- package/operators.md +0 -290
- package/tsconfig.json +0 -29
- package/versions/cpp/compiler.cpp +0 -15032
- package/versions/es6/compiler.js +0 -12860
- package/versions/go/compiler.go +0 -21338
- package/versions/java/AfterCodeNode.java +0 -4
- package/versions/java/ClassJoinPoint.java +0 -6
- package/versions/java/CodeFile.java +0 -42
- package/versions/java/CodeFileSystem.java +0 -72
- package/versions/java/CodeNode.java +0 -807
- package/versions/java/CodeSlice.java +0 -13
- package/versions/java/CodeWriter.java +0 -185
- package/versions/java/ColorConsole.java +0 -8
- package/versions/java/CompilerInterface.java +0 -213
- package/versions/java/DictNode.java +0 -353
- package/versions/java/LiveCompiler.java +0 -772
- package/versions/java/NodeEvalState.java +0 -24
- package/versions/java/OpFindResult.java +0 -6
- package/versions/java/RangerAppArrayValue.java +0 -7
- package/versions/java/RangerAppClassDesc.java +0 -217
- package/versions/java/RangerAppEnum.java +0 -14
- package/versions/java/RangerAppFunctionDesc.java +0 -20
- package/versions/java/RangerAppHashValue.java +0 -11
- package/versions/java/RangerAppInterfaceImpl.java +0 -6
- package/versions/java/RangerAppMethodVariants.java +0 -6
- package/versions/java/RangerAppParamDesc.java +0 -321
- package/versions/java/RangerAppTodo.java +0 -6
- package/versions/java/RangerAppValue.java +0 -10
- package/versions/java/RangerAppWriterContext.java +0 -800
- package/versions/java/RangerArgMatch.java +0 -317
- package/versions/java/RangerBackReference.java +0 -7
- package/versions/java/RangerCSharpClassWriter.java +0 -287
- package/versions/java/RangerCompilerMessage.java +0 -9
- package/versions/java/RangerCppClassWriter.java +0 -725
- package/versions/java/RangerFlowParser.java +0 -2142
- package/versions/java/RangerGenericClassWriter.java +0 -367
- package/versions/java/RangerGolangClassWriter.java +0 -1379
- package/versions/java/RangerJava7ClassWriter.java +0 -652
- package/versions/java/RangerJavaScriptClassWriter.java +0 -305
- package/versions/java/RangerKotlinClassWriter.java +0 -380
- package/versions/java/RangerLispParser.java +0 -845
- package/versions/java/RangerNodeValue.java +0 -9
- package/versions/java/RangerPHPClassWriter.java +0 -527
- package/versions/java/RangerParamEventHandler.java +0 -6
- package/versions/java/RangerParamEventList.java +0 -5
- package/versions/java/RangerParamEventMap.java +0 -27
- package/versions/java/RangerRangerClassWriter.java +0 -268
- package/versions/java/RangerRefForce.java +0 -7
- package/versions/java/RangerScalaClassWriter.java +0 -365
- package/versions/java/RangerSerializeClass.java +0 -148
- package/versions/java/RangerSwift3ClassWriter.java +0 -548
- package/versions/java/RangerTypeClass.java +0 -17
- package/versions/java/SourceCode.java +0 -65
- package/versions/php/compiler.php +0 -13830
- package/versions/swift3/compiler.swift +0 -12542
- /package/{lib/ACEEditor.clj → dist/lib/ACEEditor.rgr} +0 -0
- /package/{lib/SQL.clj → dist/lib/SQL.rgr} +0 -0
- /package/{lib/ServiceLib.clj → dist/lib/ServiceLib.rgr} +0 -0
- /package/{lib/Time.clj → dist/lib/Time.rgr} +0 -0
- /package/{lib/TypedArrays.clj → dist/lib/TypedArrays.rgr} +0 -0
- /package/{lib/WebLib.clj → dist/lib/WebLib.rgr} +0 -0
- /package/{lib/WebServerLib.clj → dist/lib/WebServerLib.rgr} +0 -0
|
@@ -1,687 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
extension RangerFlowParser {
|
|
3
|
-
|
|
4
|
-
fn findLanguageOper@(optional weak):CodeNode (details:CodeNode ctx:RangerAppWriterContext) {
|
|
5
|
-
def langName:string (ctx.getTargetLang())
|
|
6
|
-
def rv:CodeNode
|
|
7
|
-
for details.children det:CodeNode i {
|
|
8
|
-
if ( (array_length det.children ) > 0) {
|
|
9
|
-
def fc:CodeNode (itemAt det.children 0)
|
|
10
|
-
if (fc.vref == "templates") {
|
|
11
|
-
def tplList:CodeNode (itemAt det.children 1)
|
|
12
|
-
for tplList.children tpl:CodeNode i {
|
|
13
|
-
def tplName:CodeNode (tpl.getFirst())
|
|
14
|
-
; def tplImpl@(optional):CodeNode
|
|
15
|
-
; tplImpl = (tpl.getSecond())
|
|
16
|
-
if ((tplName.vref != "*") && (tplName.vref != langName)) {
|
|
17
|
-
continue
|
|
18
|
-
}
|
|
19
|
-
rv = tpl
|
|
20
|
-
return rv
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return rv
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
fn buildMacro:CodeNode ( langOper@(optional):CodeNode args:CodeNode ctx:RangerAppWriterContext ) {
|
|
29
|
-
|
|
30
|
-
def subCtx:RangerAppWriterContext (ctx.fork())
|
|
31
|
-
def wr:CodeWriter (new CodeWriter ())
|
|
32
|
-
def lcc:LiveCompiler (new LiveCompiler())
|
|
33
|
-
|
|
34
|
-
lcc.langWriter = (new RangerRangerClassWriter ())
|
|
35
|
-
lcc.langWriter.compiler = lcc
|
|
36
|
-
|
|
37
|
-
subCtx.targetLangName = "ranger"
|
|
38
|
-
subCtx.restartExpressionLevel()
|
|
39
|
-
|
|
40
|
-
def macroNode:CodeNode (unwrap langOper)
|
|
41
|
-
def cmdList:CodeNode (macroNode.getSecond())
|
|
42
|
-
|
|
43
|
-
if false {
|
|
44
|
-
print ""
|
|
45
|
-
print "------------------------------------------------------------------------"
|
|
46
|
-
print " macro before generation : " + (cmdList.getCode())
|
|
47
|
-
print " given arguments : " + (args.getCode())
|
|
48
|
-
print "------------------------------------------------------------------------"
|
|
49
|
-
print ""
|
|
50
|
-
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if(ctx.hasCompilerFlag("show-macros")) {
|
|
54
|
-
print "Walking macro " + macroNode.vref + " : " + (cmdList.getCode())
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
;walkCommandList:void (cmd:CodeNode node:CodeNode ctx:RangerAppWriterContext wr:CodeWriter) {
|
|
58
|
-
lcc.walkCommandList( cmdList args subCtx wr )
|
|
59
|
-
|
|
60
|
-
def lang_str:string (wr.getCode())
|
|
61
|
-
if false {
|
|
62
|
-
print ""
|
|
63
|
-
print "------------------------------------------------------------------------"
|
|
64
|
-
print " macro generated code : " + lang_str
|
|
65
|
-
print "------------------------------------------------------------------------"
|
|
66
|
-
print ""
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
def lang_code:SourceCode (new SourceCode ( lang_str ) )
|
|
70
|
-
lang_code.filename = "<macro " + macroNode.vref + ">"
|
|
71
|
-
def lang_parser:RangerLispParser (new RangerLispParser (lang_code))
|
|
72
|
-
lang_parser.parse((ctx.hasCompilerFlag("no-op-transform")))
|
|
73
|
-
|
|
74
|
-
def node@(lives):CodeNode (unwrap lang_parser.rootNode)
|
|
75
|
-
return node
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
fn stdParamMatch:boolean (callArgs@(lives):CodeNode inCtx:RangerAppWriterContext wr:CodeWriter require_all_match:boolean) {
|
|
79
|
-
stdCommands = (inCtx.getStdCommands())
|
|
80
|
-
def callFnName:CodeNode (callArgs.getFirst())
|
|
81
|
-
def cmds:CodeNode stdCommands
|
|
82
|
-
def some_matched:boolean false
|
|
83
|
-
def found_fn:boolean false
|
|
84
|
-
def added_ns ""
|
|
85
|
-
def missed_args:[string]
|
|
86
|
-
def ctx:RangerAppWriterContext (inCtx.fork())
|
|
87
|
-
def lang_name:string (ctx.getTargetLang())
|
|
88
|
-
def expects_error:boolean false
|
|
89
|
-
def err_cnt:int (inCtx.getErrorCount())
|
|
90
|
-
def arg_eval_start 0
|
|
91
|
-
if( callArgs.hasBooleanProperty("error")) {
|
|
92
|
-
expects_error = true
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
; TODO: continue pushing the operators into the methodChain
|
|
96
|
-
; + add into the method chain the detected operator
|
|
97
|
-
; + check that chain can be a mix of actual operators or calls
|
|
98
|
-
; surround_static( (static_fn_foo()).map() ).filter()
|
|
99
|
-
def in_chain false
|
|
100
|
-
def call_arg_cnt 0
|
|
101
|
-
for callArgs.children ca:CodeNode i {
|
|
102
|
-
def name (ca.vref)
|
|
103
|
-
if( ( (strlen name) > 0 ) && ( ( charAt name 0) == (charcode ".")) ) {
|
|
104
|
-
in_chain = true
|
|
105
|
-
ca.is_part_of_chain = true
|
|
106
|
-
}
|
|
107
|
-
if in_chain {
|
|
108
|
-
ca.is_part_of_chain = true
|
|
109
|
-
} {
|
|
110
|
-
call_arg_cnt = call_arg_cnt + 1
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
if in_chain {
|
|
115
|
-
def fc (callArgs.getFirst())
|
|
116
|
-
def sc (callArgs.getSecond())
|
|
117
|
-
def thrd (callArgs.getThird())
|
|
118
|
-
def i call_arg_cnt
|
|
119
|
-
def chainRoot:CodeNode (callArgs)
|
|
120
|
-
def innerNode@(weak):CodeNode
|
|
121
|
-
def newNode (callArgs.newExpressionNode())
|
|
122
|
-
newNode.children.push( (fc.copy()) ) ;
|
|
123
|
-
newNode.children.push( (sc.copy()) ) ;
|
|
124
|
-
newNode.children.push( (thrd.copy()) ) ;
|
|
125
|
-
innerNode = newNode
|
|
126
|
-
def chain_cnt 0
|
|
127
|
-
def chlen (array_length callArgs.children)
|
|
128
|
-
|
|
129
|
-
while ( i < (chlen - 1) ) {
|
|
130
|
-
def fc (itemAt callArgs.children i)
|
|
131
|
-
def args@(lives) (itemAt callArgs.children (i + 1))
|
|
132
|
-
def name (fc.vref)
|
|
133
|
-
if( ( (strlen name) > 0 ) && ( ( charAt name 0) == (charcode ".")) ) {
|
|
134
|
-
def method_name (substring name 1 (strlen name))
|
|
135
|
-
def newNode (callArgs.newExpressionNode())
|
|
136
|
-
newNode.add( (callArgs.newVRefNode("call") ) )
|
|
137
|
-
newNode.add( (innerNode.copy() ) )
|
|
138
|
-
newNode.add( (callArgs.newVRefNode(method_name)) )
|
|
139
|
-
newNode.add( (args.copy()))
|
|
140
|
-
innerNode = newNode
|
|
141
|
-
chain_cnt = chain_cnt + 1
|
|
142
|
-
} {
|
|
143
|
-
ctx.addError(callArgs "Invalid chaining op")
|
|
144
|
-
}
|
|
145
|
-
i = i + 2
|
|
146
|
-
}
|
|
147
|
-
if ( chain_cnt > 0 ) {
|
|
148
|
-
callArgs.getChildrenFrom( (unwrap innerNode ) )
|
|
149
|
-
callArgs.tag = "chainroot"
|
|
150
|
-
callArgs.flow_done = false
|
|
151
|
-
this.WalkNode( callArgs ctx wr)
|
|
152
|
-
return true
|
|
153
|
-
} {
|
|
154
|
-
ctx.addError( callArgs "Invalid chain")
|
|
155
|
-
return true
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
; print "stdParamMatch -> " + callFnName.vref
|
|
160
|
-
def op_list (ctx.getOperators(callFnName.vref))
|
|
161
|
-
|
|
162
|
-
for op_list ch@(lives):CodeNode main_index {
|
|
163
|
-
def fc:CodeNode (ch.getFirst())
|
|
164
|
-
def nameNode:CodeNode (ch.getSecond())
|
|
165
|
-
def args:CodeNode (ch.getThird())
|
|
166
|
-
|
|
167
|
-
; if loop is done two times, remove the old NS definition
|
|
168
|
-
ctx.removeOpNs( added_ns )
|
|
169
|
-
ctx.addOpNs( fc.vref )
|
|
170
|
-
added_ns = fc.vref
|
|
171
|
-
|
|
172
|
-
def line_index:int (callArgs.getLine())
|
|
173
|
-
; def callerArgCnt:int (((array_length callArgs.children) - 1))
|
|
174
|
-
def callerArgCnt (call_arg_cnt - 1)
|
|
175
|
-
def fnArgCnt:int (array_length args.children)
|
|
176
|
-
def has_eval_ctx:boolean false
|
|
177
|
-
def is_macro:boolean false
|
|
178
|
-
def is_pure false
|
|
179
|
-
def is_static_fn false
|
|
180
|
-
def static_fn_name ""
|
|
181
|
-
def static_class_name ""
|
|
182
|
-
def static_nameNode@(weak):CodeNode
|
|
183
|
-
if (nameNode.hasFlag("newcontext")) {
|
|
184
|
-
ctx = (inCtx.fork())
|
|
185
|
-
has_eval_ctx = true
|
|
186
|
-
}
|
|
187
|
-
def expanding_node:boolean (nameNode.hasFlag("expands"))
|
|
188
|
-
if ( (callerArgCnt == fnArgCnt) || expanding_node) {
|
|
189
|
-
def details_list:CodeNode (itemAt ch.children 3)
|
|
190
|
-
def langOper:CodeNode (this.findLanguageOper( details_list ctx ))
|
|
191
|
-
if(null? langOper) {
|
|
192
|
-
; ctx.addError( callArgs "Did not find language based operator")
|
|
193
|
-
continue
|
|
194
|
-
}
|
|
195
|
-
is_pure = ( nameNode.hasFlag("pure"))
|
|
196
|
-
if( ( langOper.hasBooleanProperty("macro") ) || ( (nameNode.hasFlag("macro"))) ) {
|
|
197
|
-
is_macro = true
|
|
198
|
-
}
|
|
199
|
-
def codeDef (langOper.getSecond())
|
|
200
|
-
; if(codeDef.is_block_node) {
|
|
201
|
-
; args = (args.rebuildWithType( (new RangerArgMatch) false ))
|
|
202
|
-
; }
|
|
203
|
-
def match:RangerArgMatch (new RangerArgMatch ())
|
|
204
|
-
def last_walked:int 0
|
|
205
|
-
def last_was_block false
|
|
206
|
-
def walk_later:[WalkLater]
|
|
207
|
-
def not_enough_args false
|
|
208
|
-
def blocksToWalkLater@(weak):[CodeNode]
|
|
209
|
-
|
|
210
|
-
for args.children arg@(lives):CodeNode i {
|
|
211
|
-
|
|
212
|
-
if( i < arg_eval_start) {
|
|
213
|
-
continue
|
|
214
|
-
}
|
|
215
|
-
arg_eval_start = i
|
|
216
|
-
|
|
217
|
-
if( (array_length callArgs.children) <= (i + 1)) {
|
|
218
|
-
not_enough_args = true
|
|
219
|
-
break
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
def callArg@(lives):CodeNode (itemAt callArgs.children (i + 1))
|
|
223
|
-
if (arg.hasFlag("define")) {
|
|
224
|
-
def p@(lives):RangerAppParamDesc (new RangerAppParamDesc ())
|
|
225
|
-
p.name = callArg.vref
|
|
226
|
-
p.value_type = arg.value_type
|
|
227
|
-
p.node = callArg
|
|
228
|
-
p.nameNode = callArg
|
|
229
|
-
p.is_optional = false
|
|
230
|
-
p.init_cnt = 1
|
|
231
|
-
ctx.defineVariable(p.name p)
|
|
232
|
-
|
|
233
|
-
callArg.hasParamDesc = true
|
|
234
|
-
callArg.ownParamDesc = p
|
|
235
|
-
callArg.paramDesc = p
|
|
236
|
-
if ((strlen callArg.type_name) == 0) {
|
|
237
|
-
callArg.type_name = arg.type_name
|
|
238
|
-
callArg.value_type = arg.value_type
|
|
239
|
-
}
|
|
240
|
-
callArg.eval_type = arg.value_type
|
|
241
|
-
callArg.eval_type_name = arg.type_name
|
|
242
|
-
}
|
|
243
|
-
if (arg.hasFlag("ignore")) {
|
|
244
|
-
continue _
|
|
245
|
-
}
|
|
246
|
-
if (arg.hasFlag("noeval")) {
|
|
247
|
-
callArg.eval_type = callArg.value_type
|
|
248
|
-
callArg.eval_type_name = callArg.type_name
|
|
249
|
-
callArg.eval_array_type = callArg.array_type
|
|
250
|
-
callArg.eval_key_type = callArg.key_type
|
|
251
|
-
continue _
|
|
252
|
-
}
|
|
253
|
-
last_walked = (i + 1)
|
|
254
|
-
if( arg.value_type == RangerNodeType.ExpressionType ) {
|
|
255
|
-
if(codeDef.is_block_node == false) {
|
|
256
|
-
def later (new WalkLater)
|
|
257
|
-
later.arg = arg
|
|
258
|
-
later.callArg = callArg
|
|
259
|
-
push walk_later later
|
|
260
|
-
}
|
|
261
|
-
} {
|
|
262
|
-
; ctx = (inCtx.forkWithOps( (itemAt ch.children 3) ))
|
|
263
|
-
if(arg.type_name == "block" || (arg.hasFlag("block"))) {
|
|
264
|
-
;def sCtx (ctx.forkWithOps( (itemAt ch.children 3) ))
|
|
265
|
-
;print "-- walking block with context "
|
|
266
|
-
;print (sCtx.getContextInfo())
|
|
267
|
-
|
|
268
|
-
; push blocksToWalkLater callArg
|
|
269
|
-
def tmpCtx@(lives) ctx
|
|
270
|
-
callArg.evalCtx = tmpCtx
|
|
271
|
-
this.WalkNode(callArg ctx wr)
|
|
272
|
-
|
|
273
|
-
last_was_block = true
|
|
274
|
-
} {
|
|
275
|
-
; (inCtx.forkWithOps( (itemAt ch.children 3) ))
|
|
276
|
-
ctx.setInExpr()
|
|
277
|
-
this.WalkNode(callArg ctx wr)
|
|
278
|
-
ctx.unsetInExpr()
|
|
279
|
-
|
|
280
|
-
; union conversion...
|
|
281
|
-
if( (strlen arg.type_name) > 0 ) {
|
|
282
|
-
this.convertToUnion( arg.type_name callArg ctx wr)
|
|
283
|
-
}
|
|
284
|
-
last_was_block = false
|
|
285
|
-
}
|
|
286
|
-
if( arg.hasFlag("mutates")) {
|
|
287
|
-
if(callArg.hasParamDesc) {
|
|
288
|
-
if(callArg.paramDesc && (!null? callArg.paramDesc.propertyClass)) {
|
|
289
|
-
if(callArg.paramDesc.propertyClass.nameNode.hasFlag("immutable")) {
|
|
290
|
-
def propC (callArg.paramDesc.propertyClass)
|
|
291
|
-
def currC (ctx.getCurrentClass())
|
|
292
|
-
if( (unwrap currC) != (unwrap propC) ) {
|
|
293
|
-
; --> skip as if error
|
|
294
|
-
not_enough_args = true
|
|
295
|
-
; ctx.addError(callArg "Not possible to modify immutable class property")
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
if not_enough_args {
|
|
305
|
-
continue
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
if expanding_node {
|
|
309
|
-
for callArgs.children caCh:CodeNode i2 {
|
|
310
|
-
; do not walk immediately the blocks
|
|
311
|
-
if(caCh.is_block_node) {
|
|
312
|
-
def tmpCtx@(lives) ctx
|
|
313
|
-
caCh.evalCtx = tmpCtx
|
|
314
|
-
push blocksToWalkLater caCh
|
|
315
|
-
continue
|
|
316
|
-
}
|
|
317
|
-
if(i2 > last_walked) {
|
|
318
|
-
if last_was_block {
|
|
319
|
-
def sCtx (ctx.forkWithOps( (itemAt ch.children 3) ))
|
|
320
|
-
this.WalkNode(caCh sCtx wr)
|
|
321
|
-
} {
|
|
322
|
-
ctx.setInExpr()
|
|
323
|
-
this.WalkNode(caCh ctx wr)
|
|
324
|
-
ctx.unsetInExpr()
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
def all_matched:boolean (match.matchArguments(args callArgs ctx 1))
|
|
331
|
-
if( all_matched == false) {
|
|
332
|
-
continue
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
if all_matched {
|
|
336
|
-
|
|
337
|
-
for blocksToWalkLater b:CodeNode i {
|
|
338
|
-
def localFork (b.evalCtx.fork())
|
|
339
|
-
this.WalkNode(b localFork wr)
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
for walk_later later:WalkLater i {
|
|
343
|
-
def ca (unwrap later.callArg)
|
|
344
|
-
def aa (unwrap later.arg)
|
|
345
|
-
|
|
346
|
-
def newNode:CodeNode (new CodeNode ( (unwrap ca.code) ca.sp ca.ep))
|
|
347
|
-
|
|
348
|
-
; avoid re-transforming already transformed functions
|
|
349
|
-
if( ((ca.isFirstVref("fn")) == false ) && ((ca.isFirstVref("fun")) == false )) {
|
|
350
|
-
; def match:RangerArgMatch (new RangerArgMatch ())
|
|
351
|
-
def fnDef:CodeNode (unwrap aa.expression_value)
|
|
352
|
-
def copyOf:CodeNode (fnDef.rebuildWithType( match false ))
|
|
353
|
-
def ffc:CodeNode (itemAt copyOf.children 0)
|
|
354
|
-
ffc.vref = "fun"
|
|
355
|
-
def itemCopy:CodeNode (ca.rebuildWithType (match false))
|
|
356
|
-
push copyOf.children itemCopy
|
|
357
|
-
def cnt:int ( array_length ca.children )
|
|
358
|
-
while( cnt > 0) {
|
|
359
|
-
removeLast ca.children
|
|
360
|
-
cnt = cnt - 1
|
|
361
|
-
}
|
|
362
|
-
for copyOf.children ch@(lives):CodeNode i {
|
|
363
|
-
push ca.children ch
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
; -->
|
|
368
|
-
; def sCtx (ctx.forkWithOps( (itemAt ch.children 3) ))
|
|
369
|
-
def sCtx (ctx.fork())
|
|
370
|
-
|
|
371
|
-
this.WalkNode(ca sCtx wr)
|
|
372
|
-
; last_was_block = true
|
|
373
|
-
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
if(codeDef.is_block_node && (all_matched)) {
|
|
377
|
-
|
|
378
|
-
def pure_transform (ctx.hasCompilerFlag("pure"))
|
|
379
|
-
; -- could do a pure function transformation here ---
|
|
380
|
-
if ( is_pure && pure_transform ) {
|
|
381
|
-
def argDefs (CodeNode.blockFromList(
|
|
382
|
-
(args.children.map({
|
|
383
|
-
def callArg (itemAt callArgs.children (index + 1))
|
|
384
|
-
def arg item
|
|
385
|
-
def vName (item.copy())
|
|
386
|
-
def caCopy (callArg.copy())
|
|
387
|
-
def prms (this.transformParams2( ([] _:CodeNode (callArg) ) ([] _:CodeNode (arg) ) (ctx) ))
|
|
388
|
-
def first (itemAt prms 0)
|
|
389
|
-
def ad (r.op "def" vName first )
|
|
390
|
-
return ad
|
|
391
|
-
}))
|
|
392
|
-
))
|
|
393
|
-
def bodyStart (r.block
|
|
394
|
-
argDefs
|
|
395
|
-
codeDef
|
|
396
|
-
)
|
|
397
|
-
def newCtx (ctx.fork())
|
|
398
|
-
def bodyCopy (bodyStart.rebuildWithType(match true))
|
|
399
|
-
callArgs.flow_done = false
|
|
400
|
-
callArgs.getChildrenFrom( bodyCopy )
|
|
401
|
-
this.WalkNode ( callArgs newCtx wr)
|
|
402
|
-
return true
|
|
403
|
-
}
|
|
404
|
-
; -- could do a pure function transformation here ---
|
|
405
|
-
|
|
406
|
-
def nSig ""
|
|
407
|
-
if( (array_length args.children) > 0) {
|
|
408
|
-
def arg0 (args.getFirst())
|
|
409
|
-
nSig = ( (this.getNameSignature(arg0)) )
|
|
410
|
-
} {
|
|
411
|
-
nSig = ( (this.getVoidNameSignature()) )
|
|
412
|
-
}
|
|
413
|
-
;print "---- static method ----"
|
|
414
|
-
;print "arg0 " + (arg0.getCode())
|
|
415
|
-
def new_cl ( ctx.createOpStaticClass( nSig ) )
|
|
416
|
-
this.WalkNode( (unwrap new_cl.classNode ) ctx wr)
|
|
417
|
-
def bodyCopy (codeDef.rebuildWithType(match true))
|
|
418
|
-
def argsCopy (args.rebuildWithType(match true))
|
|
419
|
-
def nameCopy (nameNode.rebuildWithType(match true))
|
|
420
|
-
|
|
421
|
-
def sigN (ctx.transformOpNameWord( fc.vref ))
|
|
422
|
-
def argsSig ( sigN + (this.getArgsSignature(argsCopy)) )
|
|
423
|
-
|
|
424
|
-
; print "Args sig for " + nSig + " == " + (argsSig)
|
|
425
|
-
|
|
426
|
-
if( false == (new_cl.hasStaticMethod(argsSig))) {
|
|
427
|
-
def sMethod ( ctx.createStaticMethod( argsSig new_cl nameCopy argsCopy bodyCopy this) )
|
|
428
|
-
static_nameNode = nameCopy
|
|
429
|
-
def fCtx (unwrap sMethod.fnCtx)
|
|
430
|
-
fCtx.currentMethod = sMethod
|
|
431
|
-
fCtx.is_function = true
|
|
432
|
-
def m:RangerAppFunctionDesc sMethod
|
|
433
|
-
fCtx.in_static_method = true
|
|
434
|
-
if (nameCopy.hasFlag("weak")) {
|
|
435
|
-
m.changeStrength(0 1 nameNode)
|
|
436
|
-
} {
|
|
437
|
-
m.changeStrength(1 1 nameNode)
|
|
438
|
-
}
|
|
439
|
-
fCtx.setInMethod()
|
|
440
|
-
for m.params v@(lives):RangerAppParamDesc i {
|
|
441
|
-
fCtx.defineVariable(v.name v)
|
|
442
|
-
v.nameNode.eval_type = (v.nameNode.typeNameAsType(fCtx))
|
|
443
|
-
v.nameNode.eval_type_name = v.nameNode.type_name
|
|
444
|
-
}
|
|
445
|
-
this.WalkNodeChildren( bodyCopy fCtx wr)
|
|
446
|
-
fCtx.unsetInMethod()
|
|
447
|
-
fCtx.in_static_method = false
|
|
448
|
-
fCtx.function_level_context = true
|
|
449
|
-
;if (fnBody.didReturnAtIndex == -1) {
|
|
450
|
-
; if (cn.type_name != "void") {
|
|
451
|
-
; ctx.addError(node "Function does not return any values!")
|
|
452
|
-
; }
|
|
453
|
-
;}
|
|
454
|
-
for fCtx.localVarNames n:string i {
|
|
455
|
-
def p:RangerAppParamDesc (get fCtx.localVariables n)
|
|
456
|
-
if (p.set_cnt > 0) {
|
|
457
|
-
if(p.is_immutable) {
|
|
458
|
-
ctx.addError( callArgs "Immutable variable was assigned")
|
|
459
|
-
}
|
|
460
|
-
def defNode:CodeNode p.node
|
|
461
|
-
defNode.setFlag("mutable")
|
|
462
|
-
def nNode:CodeNode p.nameNode
|
|
463
|
-
nNode.setFlag("mutable")
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
} {
|
|
467
|
-
def sMethod ( new_cl.findStaticMethod( argsSig ) )
|
|
468
|
-
static_nameNode = sMethod.nameNode
|
|
469
|
-
}
|
|
470
|
-
is_static_fn = true
|
|
471
|
-
static_fn_name = argsSig
|
|
472
|
-
static_class_name = new_cl.name
|
|
473
|
-
}
|
|
474
|
-
if all_matched {
|
|
475
|
-
|
|
476
|
-
if is_static_fn {
|
|
477
|
-
|
|
478
|
-
; --> transfer code to static function call
|
|
479
|
-
|
|
480
|
-
;is_static_fn = true
|
|
481
|
-
;static_fn_name = sMethod.name
|
|
482
|
-
|
|
483
|
-
def firstArg (callArgs.getFirst())
|
|
484
|
-
firstArg.vref = static_class_name + "." + static_fn_name
|
|
485
|
-
|
|
486
|
-
firstArg.flow_done = false
|
|
487
|
-
firstArg.value_type = RangerNodeType.VRef
|
|
488
|
-
clear firstArg.ns
|
|
489
|
-
push firstArg.ns static_class_name
|
|
490
|
-
push firstArg.ns static_fn_name
|
|
491
|
-
|
|
492
|
-
def newArgs:CodeNode (new CodeNode ( (unwrap callArgs.code) callArgs.sp callArgs.ep) )
|
|
493
|
-
; note: noeval flag is used here to mark a parameter which is matched but not evaluated
|
|
494
|
-
; if(arg.hasFlag("noeval"))
|
|
495
|
-
for callArgs.children ca:CodeNode i {
|
|
496
|
-
if ca.is_part_of_chain {
|
|
497
|
-
continue
|
|
498
|
-
}
|
|
499
|
-
if( i > 0) {
|
|
500
|
-
def arg (itemAt args.children (i - 1))
|
|
501
|
-
if( arg.hasFlag("noeval")) {
|
|
502
|
-
continue
|
|
503
|
-
}
|
|
504
|
-
push newArgs.children ca
|
|
505
|
-
}
|
|
506
|
-
}
|
|
507
|
-
def arg_len:int (array_length callArgs.children)
|
|
508
|
-
while (arg_len > 1 ) {
|
|
509
|
-
removeLast callArgs.children
|
|
510
|
-
arg_len = arg_len - 1
|
|
511
|
-
}
|
|
512
|
-
push callArgs.children newArgs
|
|
513
|
-
|
|
514
|
-
callArgs.flow_done = false
|
|
515
|
-
this.WalkNode ( callArgs ctx wr)
|
|
516
|
-
match.setRvBasedOn((unwrap static_nameNode) callArgs)
|
|
517
|
-
ctx.removeOpNs( added_ns )
|
|
518
|
-
return true
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
if is_macro {
|
|
522
|
-
; TODO: check the effect of chaining here...
|
|
523
|
-
def macroNode:CodeNode ( this.buildMacro( langOper callArgs ctx ) )
|
|
524
|
-
; print "macro: " + (macroNode.getCode())
|
|
525
|
-
def arg_len:int (array_length callArgs.children)
|
|
526
|
-
while (arg_len > 0 ) {
|
|
527
|
-
removeLast callArgs.children
|
|
528
|
-
arg_len = arg_len - 1
|
|
529
|
-
}
|
|
530
|
-
push callArgs.children macroNode
|
|
531
|
-
macroNode.parent = callArgs
|
|
532
|
-
this.WalkNode( macroNode ctx wr)
|
|
533
|
-
match.setRvBasedOn(nameNode callArgs)
|
|
534
|
-
; print "--- macro was walked -- "
|
|
535
|
-
ctx.removeOpNs( added_ns )
|
|
536
|
-
return true
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
if (nameNode.hasFlag("moves")) {
|
|
540
|
-
def moves_opt@(optional):CodeNode (nameNode.getFlag("moves"))
|
|
541
|
-
def moves:CodeNode (unwrap moves_opt)
|
|
542
|
-
def ann:CodeNode moves.vref_annotation
|
|
543
|
-
def from:CodeNode (ann.getFirst())
|
|
544
|
-
def to:CodeNode (ann.getSecond())
|
|
545
|
-
def cA:CodeNode (itemAt callArgs.children from.int_value)
|
|
546
|
-
def cA2:CodeNode (itemAt callArgs.children to.int_value)
|
|
547
|
-
if cA.hasParamDesc {
|
|
548
|
-
def pp:RangerAppParamDesc cA.paramDesc
|
|
549
|
-
def pp2:RangerAppParamDesc cA2.paramDesc
|
|
550
|
-
pp.moveRefTo(callArgs (unwrap pp2) ctx)
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
if (nameNode.hasFlag("returns")) {
|
|
554
|
-
; print "==> returns flag for " + (callArgs.getLineAsString())
|
|
555
|
-
def activeFn:RangerAppFunctionDesc (ctx.getCurrentMethod())
|
|
556
|
-
if ( (activeFn.nameNode.type_name != "void") || (activeFn.nameNode.value_type == RangerNodeType.ExpressionType)) {
|
|
557
|
-
|
|
558
|
-
if ( (array_length callArgs.children) < 2 ) {
|
|
559
|
-
ctx.addError(callArgs " missing return value !!!")
|
|
560
|
-
} {
|
|
561
|
-
def returnedValue:CodeNode (itemAt callArgs.children 1)
|
|
562
|
-
def validated_returnvalue false
|
|
563
|
-
if(activeFn.nameNode.value_type == RangerNodeType.ExpressionType) {
|
|
564
|
-
validated_returnvalue = true
|
|
565
|
-
; lambda format of the called function
|
|
566
|
-
def fnExpr (activeFn.nameNode.expression_value)
|
|
567
|
-
if(null? fnExpr) {
|
|
568
|
-
ctx.addError( (unwrap activeFn.nameNode) "returned anonymous function should have a method signature")
|
|
569
|
-
} {
|
|
570
|
-
if( (returnedValue.value_type != RangerNodeType.ExpressionType ) &&
|
|
571
|
-
(returnedValue.eval_type != RangerNodeType.ExpressionType) ) {
|
|
572
|
-
ctx.addError(returnedValue "Function should return anonymous function!")
|
|
573
|
-
} {
|
|
574
|
-
|
|
575
|
-
if( returnedValue.hasParamDesc && (!null? returnedValue.paramDesc.nameNode)) {
|
|
576
|
-
def rExpr returnedValue.paramDesc.nameNode.expression_value
|
|
577
|
-
this.matchLambdaArgs( (unwrap fnExpr) (unwrap rExpr) ctx wr )
|
|
578
|
-
} {
|
|
579
|
-
def rExpr returnedValue.expression_value
|
|
580
|
-
this.matchLambdaArgs( (unwrap fnExpr) (unwrap rExpr) ctx wr )
|
|
581
|
-
}
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
|
|
586
|
-
if( validated_returnvalue == false ) {
|
|
587
|
-
if ((match.doesMatch( (unwrap activeFn.nameNode) returnedValue ctx)) == false) {
|
|
588
|
-
if(activeFn.nameNode.ifNoTypeSetToEvalTypeOf( returnedValue)) {
|
|
589
|
-
; sets the type
|
|
590
|
-
} {
|
|
591
|
-
ctx.addError(returnedValue "invalid return value type!!!")
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
}
|
|
595
|
-
def argNode:CodeNode (unwrap activeFn.nameNode)
|
|
596
|
-
if( returnedValue.hasFlag("optional")) {
|
|
597
|
-
if ( false == (argNode.hasFlag("optional")) ) {
|
|
598
|
-
ctx.addError(callArgs ( "function return value optionality does not match, expected non-optional return value, optional given at " + (argNode.getCode())) )
|
|
599
|
-
}
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
if( argNode.hasFlag("optional")) {
|
|
603
|
-
if ( false == (returnedValue.hasFlag("optional")) ) {
|
|
604
|
-
ctx.addError(callArgs ( "function return value optionality does not match, expected optional return value " + (argNode.getCode())) )
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
def pp:RangerAppParamDesc returnedValue.paramDesc
|
|
609
|
-
if (!null? pp) {
|
|
610
|
-
pp.moveRefTo(callArgs activeFn ctx)
|
|
611
|
-
}
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
if (null? callArgs.parent) {
|
|
617
|
-
ctx.addError(callArgs "did not have parent")
|
|
618
|
-
print ("no parent => " + (callArgs.getCode()))
|
|
619
|
-
}
|
|
620
|
-
callArgs.parent.didReturnAtIndex = (indexOf callArgs.parent.children callArgs)
|
|
621
|
-
}
|
|
622
|
-
if ((nameNode.hasFlag("returns")) == false) {
|
|
623
|
-
match.setRvBasedOn(nameNode callArgs)
|
|
624
|
-
}
|
|
625
|
-
if has_eval_ctx {
|
|
626
|
-
def tmpCtx@(lives) ctx
|
|
627
|
-
callArgs.evalCtx = tmpCtx
|
|
628
|
-
}
|
|
629
|
-
def nodeP:CodeNode callArgs.parent
|
|
630
|
-
if (!null? nodeP) {
|
|
631
|
-
} {
|
|
632
|
-
}
|
|
633
|
-
def sig:string (nameNode.buildTypeSignatureUsingMatch(match))
|
|
634
|
-
; def ts:RangerTypeClass (callArgs.createTypeSignatureForName(sig ctx))
|
|
635
|
-
; callArgs.typeClass = ts
|
|
636
|
-
some_matched = true
|
|
637
|
-
callArgs.has_operator = true
|
|
638
|
-
callArgs.op_index = main_index
|
|
639
|
-
callArgs.operator_node = ch
|
|
640
|
-
for args.children arg:CodeNode arg_index {
|
|
641
|
-
if arg.has_vref_annotation {
|
|
642
|
-
def anns:CodeNode arg.vref_annotation
|
|
643
|
-
for anns.children ann:CodeNode i {
|
|
644
|
-
if (ann.vref == "mutates") {
|
|
645
|
-
def theArg:CodeNode (itemAt callArgs.children (arg_index + 1))
|
|
646
|
-
if theArg.hasParamDesc {
|
|
647
|
-
theArg.paramDesc.set_cnt = (theArg.paramDesc.set_cnt + 1)
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
; print "some_matched for op operator_node -> " + (ch.getLineAsString())
|
|
654
|
-
break _
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
|
|
658
|
-
}
|
|
659
|
-
if ( require_all_match == true && some_matched == false) {
|
|
660
|
-
;print "===================== MATCH ERROR 2 ====================="
|
|
661
|
-
;print ("stdMatch -> Could not match argument types for " + callFnName.vref)
|
|
662
|
-
;print (callArgs.getCode())
|
|
663
|
-
;def line_index:int (callArgs.getLine())
|
|
664
|
-
;print ((callArgs.getFilename()) + " Line: " + line_index)
|
|
665
|
-
;for callArgs.children ca:CodeNode i {
|
|
666
|
-
; print ((((((("arg " + i) + " eval_type : ") + ca.eval_type) + " eval_type_name = ") + ca.eval_type_name) + " type : ") + ca.type_name)
|
|
667
|
-
;}
|
|
668
|
-
ctx.addError(callArgs ("Could not match argument types for " + callFnName.vref))
|
|
669
|
-
} {
|
|
670
|
-
; match OK
|
|
671
|
-
}
|
|
672
|
-
if(expects_error) {
|
|
673
|
-
def cnt_now:int (ctx.getErrorCount())
|
|
674
|
-
if (cnt_now == err_cnt) {
|
|
675
|
-
ctx.addParserError( callArgs "LANGUAGE_PARSER_ERROR: expected generated error, err counts : " + err_cnt + " : " +cnt_now)
|
|
676
|
-
}
|
|
677
|
-
} {
|
|
678
|
-
def cnt_now:int (ctx.getErrorCount())
|
|
679
|
-
if (cnt_now > err_cnt) {
|
|
680
|
-
ctx.addParserError( callArgs "LANGUAGE_PARSER_ERROR: did not expect generated error, err counts : " + err_cnt + " : " +cnt_now)
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
ctx.removeOpNs( added_ns )
|
|
684
|
-
return some_matched
|
|
685
|
-
}
|
|
686
|
-
|
|
687
|
-
}
|