ranger-compiler 2.1.70 → 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 +956 -133
- 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/{compiler/bin/output.js → dist/rgrc.js} +15377 -7936
- package/dist/stdops.rgr +168 -0
- package/package.json +196 -39
- 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/bin/output.js +0 -23819
- 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 -807
- 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 -1040
- 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/compiler.d.ts +0 -1638
- package/dist/bin/compiler.js +0 -32444
- 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/SVGPath.ts +0 -711
- 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
|
@@ -0,0 +1,838 @@
|
|
|
1
|
+
|
|
2
|
+
Import "JSON.rgr"
|
|
3
|
+
Import "Timers.rgr"
|
|
4
|
+
; Import "immutableVector.rgr"
|
|
5
|
+
|
|
6
|
+
systemunion ProcessTypeUnion ( JinxProcess )
|
|
7
|
+
|
|
8
|
+
Enum processType ( Process Attribute Block Exithandler )
|
|
9
|
+
|
|
10
|
+
operators {
|
|
11
|
+
http_get _:void ( path:string port:int cb:(_:void (data:string) )) {
|
|
12
|
+
templates {
|
|
13
|
+
es6 (
|
|
14
|
+
"require('http').get({ host : " (e 1) ", path: " (e 2) ", port:" (e 3) "}, (response) => {" nl I
|
|
15
|
+
"var body='';" nl
|
|
16
|
+
"response.on('data', (d) => { body += d });" nl
|
|
17
|
+
"response.on('end', () => { (" (e 4)")(body) }) " nl
|
|
18
|
+
i
|
|
19
|
+
"})" nl i
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
operator type:string es6 {
|
|
27
|
+
fn http_get:void ( path:string port:int cb:(_:void (data:string) )) (
|
|
28
|
+
"require('http').get({ host : " (e 1) ", path: " (e 2) ", port:" (e 3) "}, (response) => {" nl I
|
|
29
|
+
"var body='';" nl
|
|
30
|
+
"response.on('data', (d) => { body += d });" nl
|
|
31
|
+
"response.on('end', () => { (" (e 4)")(body) }) " nl
|
|
32
|
+
i
|
|
33
|
+
"})" nl i
|
|
34
|
+
)
|
|
35
|
+
fn https_get:void ( path:string cb:(_:void (data:string) )) (
|
|
36
|
+
"require('https').get({ host : " (e 1) ", path: " (e 2) "}, (response) => {" nl I
|
|
37
|
+
"var body='';" nl
|
|
38
|
+
"response.on('data', (d) => { body += d });" nl
|
|
39
|
+
"response.on('end', () => { (" (e 3)")(body) }) " nl
|
|
40
|
+
i
|
|
41
|
+
"})" nl i
|
|
42
|
+
)
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
operator type:string all {
|
|
46
|
+
fn createProcess:JinxProcess () {
|
|
47
|
+
def p (new JinxProcess)
|
|
48
|
+
p.name = self
|
|
49
|
+
return p
|
|
50
|
+
}
|
|
51
|
+
fn process:JinxProcess ( ) {
|
|
52
|
+
def p (new JinxProcess)
|
|
53
|
+
p.name = self
|
|
54
|
+
return p
|
|
55
|
+
}
|
|
56
|
+
; (process (task ))
|
|
57
|
+
; (task ...)
|
|
58
|
+
; (process ...)
|
|
59
|
+
; (process ...)
|
|
60
|
+
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
operator type:JinxProcess all {
|
|
64
|
+
fn add@(weak):JinxProcess ( task@(strong):JinxProcess ) {
|
|
65
|
+
push self.children task
|
|
66
|
+
return self
|
|
67
|
+
}
|
|
68
|
+
fn wait@(weak):JinxProcess ( ms:int ) {
|
|
69
|
+
def t (new JinxWaitTask)
|
|
70
|
+
t.ms = ms
|
|
71
|
+
push self.children t
|
|
72
|
+
return self
|
|
73
|
+
}
|
|
74
|
+
fn func@(weak):JinxProcess ( cb@(strong):(_:JinxProcessCtx (ctx:JinxProcessCtx))) {
|
|
75
|
+
def t (new JinxFuncCallBack)
|
|
76
|
+
t.callback = cb
|
|
77
|
+
push self.children t
|
|
78
|
+
return self
|
|
79
|
+
}
|
|
80
|
+
fn call@(weak):JinxProcess ( cb@(strong):(_:void (ctx:JinxProcessCtx))) {
|
|
81
|
+
def t (new JinxCallBack)
|
|
82
|
+
t.callback = cb
|
|
83
|
+
push self.children t
|
|
84
|
+
return self
|
|
85
|
+
}
|
|
86
|
+
fn async@(weak):JinxProcess ( cb@(strong):(_:void (process:JinxProcess ctx:JinxProcessCtx))) {
|
|
87
|
+
def t (new JinxAsyncCallBack)
|
|
88
|
+
t.callback = cb
|
|
89
|
+
push self.children t
|
|
90
|
+
return self
|
|
91
|
+
}
|
|
92
|
+
fn fetch@(weak):JinxProcess ( server:string path:string port:int cb@(strong):(_:JinxProcessCtx (res:JSONDataObject ctx:JinxProcessCtx))) {
|
|
93
|
+
def t (new JinxAjaxHttpFetchTask)
|
|
94
|
+
t.callback = cb
|
|
95
|
+
t.server = server
|
|
96
|
+
t.path = path
|
|
97
|
+
t.port = port
|
|
98
|
+
push self.children t
|
|
99
|
+
return self
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
;operators {
|
|
106
|
+
; process _:JinxProcess (name:string) {
|
|
107
|
+
; templates {
|
|
108
|
+
; * @macro(true) ("( json_obj " nl I ( repeat 1 ( (block 1) ) ) i nl ")")
|
|
109
|
+
; }
|
|
110
|
+
; }
|
|
111
|
+
; attr cmdvdomEL:vdomAttr ( name:string value:string ) {
|
|
112
|
+
; templates {
|
|
113
|
+
; * @macro(true) ("vdom.newAttr(" (e 1) " " (e 2) ")")
|
|
114
|
+
; }
|
|
115
|
+
; }
|
|
116
|
+
;}
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
class JinxCtxEventHandler {
|
|
120
|
+
def callback@(weak):(_:void ( ctx:JinxProcessCtx ))
|
|
121
|
+
fn fire(ctx:JinxProcessCtx) {
|
|
122
|
+
def cb:(_:void ( ctx:JinxProcessCtx )) (unwrap callback)
|
|
123
|
+
if(!null? callback) {
|
|
124
|
+
cb(ctx)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
class JinxEventHandlerCollection@(immutable) {
|
|
130
|
+
def list:Vector@(JinxCtxEventHandler) (new Vector@(JinxCtxEventHandler))
|
|
131
|
+
fn add:JinxEventHandlerCollection (handler@(strong):JinxCtxEventHandler) {
|
|
132
|
+
list = (push list handler)
|
|
133
|
+
return this
|
|
134
|
+
}
|
|
135
|
+
fn fire (ctx:JinxProcessCtx) {
|
|
136
|
+
list.forEach({
|
|
137
|
+
item.fire(ctx)
|
|
138
|
+
})
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
; tasks can have the context information and use it to signal things
|
|
142
|
+
class JinxProcessCtx@(immutable) {
|
|
143
|
+
|
|
144
|
+
def allKeys:Map@(string boolean) (new Map@(string boolean))
|
|
145
|
+
def strValues:Map@(string string) (new Map@(string string))
|
|
146
|
+
def intValues:Map@(string int) (new Map@(string int))
|
|
147
|
+
; def dictValues:Map@(string JSONDataObject) (new Map@(string JSONDataObject))
|
|
148
|
+
def subCtxs:Map@(string JinxProcessCtx) (new Map@(string JinxProcessCtx))
|
|
149
|
+
def handlers:Map@(string JinxEventHandlerCollection) (new Map@(string JinxEventHandlerCollection))
|
|
150
|
+
def anyValues:Map@(string Any) (new Map@(string Any))
|
|
151
|
+
|
|
152
|
+
fn fire (name:string) {
|
|
153
|
+
if( has handlers name ) {
|
|
154
|
+
def h (get handlers name)
|
|
155
|
+
h.fire(this)
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
fn onValue:JinxProcessCtx (name:string cb@(strong lives):(_:void (ctx:JinxProcessCtx))) {
|
|
159
|
+
def result this
|
|
160
|
+
def hdlrs:JinxEventHandlerCollection
|
|
161
|
+
if( false == (has result.handlers name)) {
|
|
162
|
+
def h (new JinxCtxEventHandler)
|
|
163
|
+
h.callback = cb
|
|
164
|
+
def newHandler@(temp) (new JinxEventHandlerCollection)
|
|
165
|
+
newHandler.list = (push newHandler.list h)
|
|
166
|
+
result = (result.set_handlers( (set result.handlers name newHandler) ))
|
|
167
|
+
} {
|
|
168
|
+
def h (new JinxCtxEventHandler)
|
|
169
|
+
h.callback = cb
|
|
170
|
+
def coll (unwrap ( get handlers name ))
|
|
171
|
+
coll.list = (push coll.list h)
|
|
172
|
+
result = (result.set_handlers( (set result.handlers name coll) ))
|
|
173
|
+
}
|
|
174
|
+
return result
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
operator type:JinxProcessCtx all {
|
|
181
|
+
fn has:boolean (name:string) {
|
|
182
|
+
return (has self.allKeys name)
|
|
183
|
+
}
|
|
184
|
+
fn keys:[string] () {
|
|
185
|
+
return (keys self.allKeys)
|
|
186
|
+
}
|
|
187
|
+
fn set:JinxProcessCtx (name:string value:JinxProcessCtx) {
|
|
188
|
+
def c ( self.set_subCtxs( (set self.subCtxs name value) ) )
|
|
189
|
+
c = (c.set_allKeys( (set self.allKeys name true)) )
|
|
190
|
+
c.fire(name)
|
|
191
|
+
return c
|
|
192
|
+
}
|
|
193
|
+
fn getCtx@(optional):JinxProcessCtx (name:string ) {
|
|
194
|
+
return ( get self.subCtxs name )
|
|
195
|
+
}
|
|
196
|
+
fn set:JinxProcessCtx (name:string value:string) {
|
|
197
|
+
def c ( self.set_strValues( (set self.strValues name value) ) )
|
|
198
|
+
c = (c.set_allKeys( (set self.allKeys name true)) )
|
|
199
|
+
c.fire(name)
|
|
200
|
+
return c
|
|
201
|
+
}
|
|
202
|
+
fn getStr@(optional):string (name:string ) {
|
|
203
|
+
return ( get self.strValues name )
|
|
204
|
+
}
|
|
205
|
+
fn getString@(optional):string (name:string ) {
|
|
206
|
+
return ( get self.strValues name )
|
|
207
|
+
}
|
|
208
|
+
fn set:JinxProcessCtx (name:string value:int) {
|
|
209
|
+
def c ( self.set_intValues( (set self.intValues name value) ) )
|
|
210
|
+
c = (c.set_allKeys( (set self.allKeys name true)) )
|
|
211
|
+
c.fire(name)
|
|
212
|
+
return c
|
|
213
|
+
}
|
|
214
|
+
fn getInt@(optional):int (name:string ) {
|
|
215
|
+
return ( get self.intValues name )
|
|
216
|
+
}
|
|
217
|
+
fn set:JinxProcessCtx (name:string value:JSONDataObject) {
|
|
218
|
+
def c ( self.set_dictValues( (set self.dictValues name value) ) )
|
|
219
|
+
c = (c.set_allKeys( (set self.allKeys name true)) )
|
|
220
|
+
c.fire(name)
|
|
221
|
+
return c
|
|
222
|
+
}
|
|
223
|
+
fn getDict@(optional):JSONDataObject (name:string ) {
|
|
224
|
+
return ( get self.dictValues name )
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
trait task {
|
|
231
|
+
fn isProcess:boolean () {
|
|
232
|
+
return false
|
|
233
|
+
}
|
|
234
|
+
fn isTask:boolean () {
|
|
235
|
+
return true
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
class JinxProcess {
|
|
240
|
+
|
|
241
|
+
def pType:processType processType.Process
|
|
242
|
+
def attrs:[string:string]
|
|
243
|
+
|
|
244
|
+
def is_cleaned false
|
|
245
|
+
def is_running:boolean false
|
|
246
|
+
def is_background false
|
|
247
|
+
def is_aborted false
|
|
248
|
+
def is_loop false
|
|
249
|
+
def is_exithandler false
|
|
250
|
+
def is_exit_run false
|
|
251
|
+
def is_persistent false
|
|
252
|
+
def index -1
|
|
253
|
+
def buffer_index 0
|
|
254
|
+
def name ""
|
|
255
|
+
|
|
256
|
+
; different process types on this process...
|
|
257
|
+
def backgroundProcesses@(weak):[JinxProcess]
|
|
258
|
+
def errorHandlers:[JinxProcess]
|
|
259
|
+
def exitHandlers:[JinxProcess]
|
|
260
|
+
|
|
261
|
+
def children:[JinxProcess]
|
|
262
|
+
def parent@(weak):JinxProcess
|
|
263
|
+
def myCtx@(weak):JinxProcessCtx
|
|
264
|
+
; if returns true exits immediately
|
|
265
|
+
|
|
266
|
+
fn getName:string() {
|
|
267
|
+
return ""
|
|
268
|
+
}
|
|
269
|
+
fn getValue:string() {
|
|
270
|
+
return ""
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
; --> dispatch change to the processes running things...
|
|
274
|
+
; fn sendChange( method:(_:JinxProcessCtx (previous:JinxProcessCtx))) {
|
|
275
|
+
; if(!null? myCtx) {
|
|
276
|
+
; myCtx = (method( (unwrap myCtx)))
|
|
277
|
+
; }
|
|
278
|
+
; if(!null? parent) {
|
|
279
|
+
; parent.sendChange(method)
|
|
280
|
+
; }
|
|
281
|
+
; }
|
|
282
|
+
|
|
283
|
+
; --------- error handler -------
|
|
284
|
+
fn generateError ( ctx:JinxProcessCtx ) {
|
|
285
|
+
if( ( array_length errorHandlers) > 0 ) {
|
|
286
|
+
this.abort(ctx)
|
|
287
|
+
for errorHandlers pc:JinxProcess i {
|
|
288
|
+
pc.start( ctx )
|
|
289
|
+
}
|
|
290
|
+
} {
|
|
291
|
+
this.abort(ctx)
|
|
292
|
+
if(!null? parent) {
|
|
293
|
+
parent.generateError(ctx)
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
fn isProcess:boolean () {
|
|
299
|
+
return true
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
fn isTask:boolean () {
|
|
303
|
+
return false
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
fn isGenerator:boolean () {
|
|
307
|
+
return false
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
fn generate:JinxProcess ( ctx:JinxProcessCtx ) {
|
|
311
|
+
return (new JinxProcess)
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
fn isBackgroundProcess:boolean () {
|
|
315
|
+
return is_background
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
; funtion to override
|
|
319
|
+
fn cleanup() {
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
fn cancelTask () {
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
fn start (ctx:JinxProcessCtx) {
|
|
327
|
+
if(is_running) {
|
|
328
|
+
if( index < buffer_index) {
|
|
329
|
+
this.abort(ctx)
|
|
330
|
+
} {
|
|
331
|
+
return
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
myCtx = ctx
|
|
335
|
+
is_running = true
|
|
336
|
+
is_aborted = false
|
|
337
|
+
for children ch:JinxProcess i {
|
|
338
|
+
if(ch.is_exithandler) {
|
|
339
|
+
ch.is_exit_run = false
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
this.step(ctx)
|
|
343
|
+
}
|
|
344
|
+
fn done:void (ctx:JinxProcessCtx) {
|
|
345
|
+
def findLast:JinxProcess (this)
|
|
346
|
+
while( (!null? findLast.parent) ) {
|
|
347
|
+
if(findLast.is_persistent) {
|
|
348
|
+
break
|
|
349
|
+
}
|
|
350
|
+
findLast = (unwrap findLast.parent)
|
|
351
|
+
}
|
|
352
|
+
findLast.returnSuccess(ctx)
|
|
353
|
+
}
|
|
354
|
+
fn run:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
355
|
+
parent = execParent
|
|
356
|
+
this.start( ctx )
|
|
357
|
+
return false
|
|
358
|
+
}
|
|
359
|
+
fn runTask:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
360
|
+
if( is_exithandler ) {
|
|
361
|
+
return true
|
|
362
|
+
}
|
|
363
|
+
parent = execParent
|
|
364
|
+
if(this.isProcess()) {
|
|
365
|
+
this.start( ctx )
|
|
366
|
+
return false
|
|
367
|
+
}
|
|
368
|
+
if(is_running) {
|
|
369
|
+
return false
|
|
370
|
+
}
|
|
371
|
+
myCtx = ctx
|
|
372
|
+
is_running = true
|
|
373
|
+
is_aborted = false
|
|
374
|
+
def is_done ( this.run( ctx execParent ) )
|
|
375
|
+
if( is_done ) {
|
|
376
|
+
is_running = false
|
|
377
|
+
is_aborted = false
|
|
378
|
+
}
|
|
379
|
+
return is_done
|
|
380
|
+
}
|
|
381
|
+
fn returnSuccess (ctx:JinxProcessCtx) {
|
|
382
|
+
if(is_running == false || is_aborted) {
|
|
383
|
+
return
|
|
384
|
+
}
|
|
385
|
+
this.endStep(ctx)
|
|
386
|
+
if(!null? parent) {
|
|
387
|
+
def p (unwrap parent)
|
|
388
|
+
p.step(ctx)
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
fn canRun:boolean () {
|
|
392
|
+
if(null? parent) {
|
|
393
|
+
return false
|
|
394
|
+
}
|
|
395
|
+
def p (unwrap parent)
|
|
396
|
+
if( p.index >= 0) {
|
|
397
|
+
def activeTask (itemAt p.children p.index)
|
|
398
|
+
if( this == activeTask ) {
|
|
399
|
+
return true
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
return false
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
fn spawnBackground ( ctx:JinxProcessCtx p:JinxProcess ) {
|
|
406
|
+
if( (p.isProcess()) && is_running ) {
|
|
407
|
+
p.is_background = true
|
|
408
|
+
print ">>> background process is starting"
|
|
409
|
+
p.parent = this
|
|
410
|
+
push backgroundProcesses p
|
|
411
|
+
p.start(ctx)
|
|
412
|
+
return
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
; process is immutable and context contains the parameters which the process tasks need for the
|
|
417
|
+
; actual processing...
|
|
418
|
+
fn step(ctx:JinxProcessCtx) {
|
|
419
|
+
if ( is_aborted || (is_running == false ) ) {
|
|
420
|
+
return
|
|
421
|
+
}
|
|
422
|
+
if( index >= (array_length children) ) {
|
|
423
|
+
print "*** TASK ERROR ***"
|
|
424
|
+
is_aborted = true
|
|
425
|
+
is_running = false
|
|
426
|
+
return
|
|
427
|
+
}
|
|
428
|
+
if (index >= 0) {
|
|
429
|
+
def activeTask (itemAt children index)
|
|
430
|
+
if(activeTask.is_running && (activeTask.is_background == false)) {
|
|
431
|
+
print "--- active task was running... sorry"
|
|
432
|
+
return
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
index = index + 1
|
|
436
|
+
if( index >= (array_length children) ) {
|
|
437
|
+
; print "--> should exit the process " + name
|
|
438
|
+
if is_loop {
|
|
439
|
+
index = -1
|
|
440
|
+
this.step((unwrap myCtx))
|
|
441
|
+
return
|
|
442
|
+
}
|
|
443
|
+
if(is_persistent) {
|
|
444
|
+
; do not exit persistent process until it has specific exit command...
|
|
445
|
+
return
|
|
446
|
+
}
|
|
447
|
+
this.returnSuccess(ctx)
|
|
448
|
+
return
|
|
449
|
+
}
|
|
450
|
+
def p@(lives) (itemAt children index)
|
|
451
|
+
|
|
452
|
+
; the generator task or process
|
|
453
|
+
if(p.isGenerator()) {
|
|
454
|
+
p = p.generate(ctx)
|
|
455
|
+
}
|
|
456
|
+
p.parent = this
|
|
457
|
+
if( (p.isProcess()) && (p.isBackgroundProcess()) ) {
|
|
458
|
+
push backgroundProcesses p
|
|
459
|
+
p.runTask( ctx this)
|
|
460
|
+
this.step(ctx)
|
|
461
|
+
return
|
|
462
|
+
}
|
|
463
|
+
; if run return "true" continue immediately
|
|
464
|
+
if( p.runTask( ctx this) ) {
|
|
465
|
+
this.step(ctx)
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
fn callExitHandlers(ctx:JinxProcessCtx) {
|
|
469
|
+
for children ch:JinxProcess i {
|
|
470
|
+
if(ch.is_exithandler && (false == ch.is_exit_run)) {
|
|
471
|
+
ch.is_exit_run = true
|
|
472
|
+
ch.start(ctx)
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
fn cancel(ctx:JinxProcessCtx) {
|
|
477
|
+
is_aborted = true
|
|
478
|
+
if is_running {
|
|
479
|
+
this.end(ctx)
|
|
480
|
+
is_aborted = true
|
|
481
|
+
for children ch:JinxProcess i {
|
|
482
|
+
ch.cancel(ctx)
|
|
483
|
+
; cleanup the task event handlers
|
|
484
|
+
if(ch.isTask()) {
|
|
485
|
+
ch.doTaskCleanup()
|
|
486
|
+
ch.cancelTask()
|
|
487
|
+
ch.is_running = false
|
|
488
|
+
ch.is_aborted = true
|
|
489
|
+
} {
|
|
490
|
+
is_running = false
|
|
491
|
+
}
|
|
492
|
+
this.callExitHandlers(ctx)
|
|
493
|
+
}
|
|
494
|
+
for backgroundProcesses bProcess:JinxProcess i {
|
|
495
|
+
bProcess.cancel(ctx)
|
|
496
|
+
}
|
|
497
|
+
is_running = false
|
|
498
|
+
} {
|
|
499
|
+
print "stopped, clearing bg processes..."
|
|
500
|
+
for backgroundProcesses bProcess:JinxProcess i {
|
|
501
|
+
bProcess.cancel(ctx)
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
fn doTaskCleanup() {
|
|
506
|
+
if( (this.isTask()) && (is_cleaned == false ) ) {
|
|
507
|
+
is_cleaned = true
|
|
508
|
+
this.cleanup()
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
; after a step ends run this...
|
|
513
|
+
fn endStep(ctx:JinxProcessCtx) {
|
|
514
|
+
if(is_running == false) {
|
|
515
|
+
return
|
|
516
|
+
}
|
|
517
|
+
is_running = false
|
|
518
|
+
index = -1
|
|
519
|
+
for backgroundProcesses bProcess:JinxProcess i {
|
|
520
|
+
bProcess.cancel(ctx)
|
|
521
|
+
}
|
|
522
|
+
for children ch:JinxProcess i {
|
|
523
|
+
ch.end(ctx)
|
|
524
|
+
this.callExitHandlers(ctx)
|
|
525
|
+
}
|
|
526
|
+
clear backgroundProcesses
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
fn end(ctx:JinxProcessCtx) {
|
|
530
|
+
if(is_running == false) {
|
|
531
|
+
this.doTaskCleanup()
|
|
532
|
+
return
|
|
533
|
+
}
|
|
534
|
+
is_running = false
|
|
535
|
+
index = -1
|
|
536
|
+
|
|
537
|
+
this.doTaskCleanup()
|
|
538
|
+
|
|
539
|
+
; shutdown the background processing
|
|
540
|
+
for backgroundProcesses bProcess:JinxProcess i {
|
|
541
|
+
bProcess.cancel(ctx)
|
|
542
|
+
}
|
|
543
|
+
; cleaning up the child processes...
|
|
544
|
+
for children ch:JinxProcess i {
|
|
545
|
+
ch.end(ctx)
|
|
546
|
+
}
|
|
547
|
+
this.callExitHandlers(ctx)
|
|
548
|
+
clear backgroundProcesses
|
|
549
|
+
}
|
|
550
|
+
fn abort(ctx:JinxProcessCtx) {
|
|
551
|
+
if(is_running) {
|
|
552
|
+
this.cancel(ctx)
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
fn addItem (pItem:JinxProcess) {
|
|
557
|
+
switch pItem.pType {
|
|
558
|
+
case processType.Attribute {
|
|
559
|
+
if( (pItem.getName()) == "background") {
|
|
560
|
+
this.is_background = true
|
|
561
|
+
}
|
|
562
|
+
if( (pItem.getName()) == "loop") {
|
|
563
|
+
this.is_loop = true
|
|
564
|
+
}
|
|
565
|
+
if( (pItem.getName()) == "exit") {
|
|
566
|
+
this.is_exithandler = true
|
|
567
|
+
}
|
|
568
|
+
if( (pItem.getName()) == "persistent") {
|
|
569
|
+
this.is_persistent = true
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
case processType.Process {
|
|
573
|
+
this.add(pItem)
|
|
574
|
+
}
|
|
575
|
+
case processType.Block {
|
|
576
|
+
pItem.children.forEach({
|
|
577
|
+
this.add(item)
|
|
578
|
+
})
|
|
579
|
+
; this.add(pItem)
|
|
580
|
+
}
|
|
581
|
+
default {
|
|
582
|
+
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
sfn p1:JinxProcess (name:string) {
|
|
588
|
+
def p (new JinxProcess)
|
|
589
|
+
p.name = name
|
|
590
|
+
return p
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
sfn p2:JinxProcess (name:string childP:JinxProcess) {
|
|
594
|
+
def p (new JinxProcess)
|
|
595
|
+
p.name = name
|
|
596
|
+
p.addItem( childP )
|
|
597
|
+
return p
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
sfn fromList:JinxProcess (list:[JinxProcess]) {
|
|
601
|
+
def p (new JinxProcess)
|
|
602
|
+
for list task:JinxProcess i {
|
|
603
|
+
p.addItem( task )
|
|
604
|
+
}
|
|
605
|
+
return p
|
|
606
|
+
}
|
|
607
|
+
sfn fromList2:JinxProcess (name:string list:[JinxProcess]) {
|
|
608
|
+
def p (new JinxProcess)
|
|
609
|
+
p.name = name
|
|
610
|
+
for list task:JinxProcess i {
|
|
611
|
+
p.addItem( task )
|
|
612
|
+
}
|
|
613
|
+
return p
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
; fetch data from "somewhere"
|
|
618
|
+
|
|
619
|
+
; fn fetch:JSONDataObject (url:string)
|
|
620
|
+
; -> just set the value to "__R"
|
|
621
|
+
; -> then read the "__R"
|
|
622
|
+
; -> if many calls just pick the __R from several calls when they arrive
|
|
623
|
+
; callsomeFn( (fetch url1) (fetch url2))
|
|
624
|
+
; -> task should have it's own context set
|
|
625
|
+
; -> you can then read the return values
|
|
626
|
+
|
|
627
|
+
|
|
628
|
+
; fn wait (amount:double)
|
|
629
|
+
class JinxWaitTask {
|
|
630
|
+
def ms 0
|
|
631
|
+
def waitTimeout:TimeOutID
|
|
632
|
+
Extends (JinxProcess)
|
|
633
|
+
does task
|
|
634
|
+
fn cancelTask () {
|
|
635
|
+
if(!null? this.waitTimeout) {
|
|
636
|
+
clearTimeout (unwrap this.waitTimeout)
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
fn run:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
640
|
+
def timeout (setTimeout ms {
|
|
641
|
+
if( is_aborted == false) {
|
|
642
|
+
this.returnSuccess( ctx )
|
|
643
|
+
}
|
|
644
|
+
})
|
|
645
|
+
this.waitTimeout = timeout
|
|
646
|
+
return false
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
; TODO: callback as member variable does not work currently....
|
|
651
|
+
class JinxGeneratorTask {
|
|
652
|
+
def callback:(_:JinxProcess (ctx:JinxProcessCtx ))
|
|
653
|
+
does task
|
|
654
|
+
Extends (JinxProcess)
|
|
655
|
+
fn generate:JinxProcess (ctx:JinxProcessCtx) {
|
|
656
|
+
def cbFn (unwrap callback)
|
|
657
|
+
return ( cbFn( ctx ) )
|
|
658
|
+
}
|
|
659
|
+
fn isGenerator:boolean () {
|
|
660
|
+
return true
|
|
661
|
+
}
|
|
662
|
+
fn run:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
663
|
+
return true
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
|
|
667
|
+
class JinxFuncCallBack {
|
|
668
|
+
def callback:(_:JinxProcessCtx (ctx:JinxProcessCtx))
|
|
669
|
+
does task
|
|
670
|
+
Extends (JinxProcess)
|
|
671
|
+
fn run:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
672
|
+
def cb (unwrap callback)
|
|
673
|
+
def nextCtx (cb(ctx))
|
|
674
|
+
this.returnSuccess( nextCtx )
|
|
675
|
+
return false
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
class JinxCallBack {
|
|
679
|
+
def callback:(_:void (ctx:JinxProcessCtx process:JinxProcess))
|
|
680
|
+
does task
|
|
681
|
+
Extends (JinxProcess)
|
|
682
|
+
fn run:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
683
|
+
def cb (unwrap callback)
|
|
684
|
+
cb(ctx execParent)
|
|
685
|
+
return true
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
class JinxAsyncCallBack {
|
|
690
|
+
def callback:(_:void ( process:JinxAsyncCallBack ctx:JinxProcessCtx ))
|
|
691
|
+
does task
|
|
692
|
+
Extends (JinxProcess)
|
|
693
|
+
fn run:boolean (ctx:JinxProcessCtx execParent:JinxProcess) {
|
|
694
|
+
print "callback is called "
|
|
695
|
+
def cb (unwrap callback)
|
|
696
|
+
cb(this ctx)
|
|
697
|
+
return false
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
|
|
702
|
+
class processAttr {
|
|
703
|
+
Extends (JinxProcess)
|
|
704
|
+
def name ""
|
|
705
|
+
def value ""
|
|
706
|
+
fn getName:string () {
|
|
707
|
+
return name
|
|
708
|
+
}
|
|
709
|
+
fn getValue:string () {
|
|
710
|
+
return value
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
|
|
714
|
+
class JinxProcessBlock {
|
|
715
|
+
|
|
716
|
+
Extends (JinxProcess)
|
|
717
|
+
; def items@(weak):[JinxProcess]
|
|
718
|
+
|
|
719
|
+
static fn fromList:JinxProcess ( list:[JinxProcess]) {
|
|
720
|
+
def o (new JinxProcessBlock)
|
|
721
|
+
o.pType = processType.Block
|
|
722
|
+
def list2@(lives temp) list
|
|
723
|
+
o.children = list2
|
|
724
|
+
return o
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
|
|
729
|
+
operators {
|
|
730
|
+
process _:JinxProcess ( n:string ) {
|
|
731
|
+
templates {
|
|
732
|
+
* @macro(true) ("JinxProcess.p1(" (e 1) ")")
|
|
733
|
+
}
|
|
734
|
+
}
|
|
735
|
+
process _:JinxProcess ( n:string v:vdom ) {
|
|
736
|
+
templates {
|
|
737
|
+
* @macro(true) ("JinxProcess.p2(" (e 1) " " (e 2) ")")
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
process _@(expands):JinxProcess ( v:JinxProcess el2:JinxProcess ) {
|
|
741
|
+
templates {
|
|
742
|
+
* @macro(true) ("(JinxProcess.fromList( ([] _:JinxProcess (" nl I
|
|
743
|
+
( repeat 1 ( nl (e 1) nl ) ) i nl
|
|
744
|
+
"))))")
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
process _@(expands):JinxProcess ( n:string el2:JinxProcess ) {
|
|
748
|
+
templates {
|
|
749
|
+
* @macro(true) ("(JinxProcess.fromList2( " (e 1) " ([] _:JinxProcess (" nl I
|
|
750
|
+
( repeat 2 ( nl (e 1) nl ) ) i nl
|
|
751
|
+
"))))")
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
process.block _@(expands):JinxProcess ( el2:[JinxProcess] ) {
|
|
755
|
+
templates {
|
|
756
|
+
* @macro(true) ("(JinxProcessBlock.fromList( " (e 1) " ))")
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
process.block _@(expands):JinxProcess ( el2:JinxProcess ) {
|
|
760
|
+
templates {
|
|
761
|
+
* @macro(true) ("(JinxProcessBlock.fromList( " (e 1) " ([] _:JinxProcess (" nl I
|
|
762
|
+
( repeat 2 ( nl (e 1) nl ) ) i nl
|
|
763
|
+
"))))")
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
operator type:JinxProcess all {
|
|
768
|
+
fn getAttr:string (name:string) {
|
|
769
|
+
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
operator type:void all {
|
|
773
|
+
fn task.func:JinxProcess ( callback@(strong):(_:JinxProcessCtx (ctx:JinxProcessCtx)) ) {
|
|
774
|
+
def t (new JinxFuncCallBack)
|
|
775
|
+
t.callback = callback
|
|
776
|
+
return t
|
|
777
|
+
}
|
|
778
|
+
; JinxGeneratorTask
|
|
779
|
+
fn task.generate:JinxProcess ( callback@(strong):(_:JinxProcess (ctx:JinxProcessCtx) ) ) {
|
|
780
|
+
def t (new JinxGeneratorTask)
|
|
781
|
+
t.callback = callback
|
|
782
|
+
return t
|
|
783
|
+
}
|
|
784
|
+
fn task.call:JinxProcess ( callback@(strong):(_:void (ctx:JinxProcessCtx process:JinxProcess)) ) {
|
|
785
|
+
def t (new JinxCallBack)
|
|
786
|
+
t.callback = callback
|
|
787
|
+
return t
|
|
788
|
+
}
|
|
789
|
+
fn task.callback:JinxProcess ( callback@(strong):(_:void (ctx:JinxProcessCtx)) ) {
|
|
790
|
+
def t (new JinxCallBack)
|
|
791
|
+
t.callback = callback
|
|
792
|
+
return t
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
operator type:string all {
|
|
796
|
+
fn process () {
|
|
797
|
+
def p (new JinxProcess)
|
|
798
|
+
p.name = self
|
|
799
|
+
return p
|
|
800
|
+
}
|
|
801
|
+
fn process.attr:JinxProcess (value:string) {
|
|
802
|
+
def pa (new processAttr)
|
|
803
|
+
pa.name = self
|
|
804
|
+
pa.value = value
|
|
805
|
+
pa.pType = processType.Attribute
|
|
806
|
+
return pa
|
|
807
|
+
}
|
|
808
|
+
fn task.func:JinxProcess ( callback@(strong):(_:JinxProcessCtx (ctx:JinxProcessCtx)) ) {
|
|
809
|
+
def t (new JinxFuncCallBack)
|
|
810
|
+
t.callback = callback
|
|
811
|
+
return t
|
|
812
|
+
}
|
|
813
|
+
fn task_func:JinxProcess ( callback@(strong):(_:JinxProcessCtx (ctx:JinxProcessCtx)) ) {
|
|
814
|
+
def t (new JinxFuncCallBack)
|
|
815
|
+
t.callback = callback
|
|
816
|
+
return t
|
|
817
|
+
}
|
|
818
|
+
fn task.callback:JinxProcess ( callback@(strong):(_:void (ctx:JinxProcessCtx)) ) {
|
|
819
|
+
def t (new JinxCallBack)
|
|
820
|
+
t.callback = callback
|
|
821
|
+
return t
|
|
822
|
+
}
|
|
823
|
+
fn task.fancy:JinxProcess () {
|
|
824
|
+
return (process
|
|
825
|
+
"OK task...."
|
|
826
|
+
(task.wait 0.4)
|
|
827
|
+
)
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
operator type:void all {
|
|
833
|
+
fn task.wait:JinxProcess ( ms:double ) {
|
|
834
|
+
def t (new JinxWaitTask)
|
|
835
|
+
t.ms = (to_int (1000.0 * ms ))
|
|
836
|
+
return t
|
|
837
|
+
}
|
|
838
|
+
}
|