functionalscript 0.3.4 → 0.3.6
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/com/cpp/module.f.d.ts +10 -0
- package/com/cpp/module.f.js +107 -0
- package/com/cpp/test.f.d.ts +2 -0
- package/com/cpp/{test.f.ts → test.f.js} +9 -11
- package/com/cpp/testlib.f.d.ts +2 -0
- package/com/cpp/testlib.f.js +5 -0
- package/com/cs/module.f.d.ts +12 -0
- package/com/cs/module.f.js +80 -0
- package/com/cs/test.f.d.ts +2 -0
- package/com/cs/{test.f.ts → test.f.js} +9 -11
- package/com/cs/testlib.f.d.ts +2 -0
- package/com/cs/testlib.f.js +5 -0
- package/com/rust/module.f.d.ts +15 -0
- package/com/rust/module.f.js +169 -0
- package/com/rust/test.f.d.ts +2 -0
- package/com/rust/{test.f.ts → test.f.js} +7 -7
- package/com/rust/testlib.f.d.ts +2 -0
- package/com/rust/testlib.f.js +5 -0
- package/com/test/build.f.d.ts +20 -0
- package/com/test/build.f.js +58 -0
- package/com/types/module.f.d.ts +28 -0
- package/com/types/module.f.js +8 -0
- package/com/types/testlib.f.d.ts +44 -0
- package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
- package/commonjs/build/module.f.d.ts +6 -0
- package/commonjs/build/module.f.js +69 -0
- package/commonjs/build/test.f.d.ts +2 -0
- package/commonjs/build/test.f.js +96 -0
- package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
- package/commonjs/module/function/module.f.js +4 -0
- package/commonjs/module/module.f.d.ts +18 -0
- package/commonjs/module/module.f.js +12 -0
- package/commonjs/module.f.d.ts +6 -0
- package/commonjs/module.f.js +1 -0
- package/commonjs/package/dependencies/module.f.d.ts +7 -0
- package/commonjs/package/dependencies/module.f.js +13 -0
- package/commonjs/package/dependencies/test.f.d.ts +2 -0
- package/commonjs/package/dependencies/test.f.js +15 -0
- package/commonjs/package/module.f.d.ts +17 -0
- package/commonjs/package/module.f.js +18 -0
- package/commonjs/package/test.f.d.ts +2 -0
- package/commonjs/package/test.f.js +27 -0
- package/commonjs/path/module.f.d.ts +24 -0
- package/commonjs/path/module.f.js +114 -0
- package/commonjs/path/test.f.d.ts +25 -0
- package/commonjs/path/{test.f.ts → test.f.js} +123 -89
- package/crypto/prime_field/module.f.d.ts +43 -0
- package/crypto/prime_field/module.f.js +78 -0
- package/crypto/prime_field/test.f.d.ts +13 -0
- package/crypto/prime_field/test.f.js +149 -0
- package/crypto/secp/module.f.d.ts +68 -0
- package/crypto/secp/module.f.js +127 -0
- package/crypto/secp/test.f.d.ts +5 -0
- package/crypto/secp/test.f.js +72 -0
- package/crypto/sha2/module.f.d.ts +13 -0
- package/crypto/sha2/module.f.js +145 -0
- package/crypto/sha2/test.f.d.ts +9 -0
- package/crypto/sha2/test.f.js +82 -0
- package/dev/module.f.d.ts +1 -0
- package/dev/module.f.js +1 -0
- package/dev/test/module.f.d.ts +20 -0
- package/dev/test/module.f.js +75 -0
- package/dev/test.f.d.ts +9 -0
- package/dev/{test.f.ts → test.f.js} +22 -24
- package/djs/module.f.d.ts +17 -0
- package/djs/module.f.js +63 -0
- package/djs/parser/module.f.d.ts +12 -0
- package/djs/parser/module.f.js +333 -0
- package/djs/parser/test.f.d.ts +12 -0
- package/djs/parser/test.f.js +717 -0
- package/djs/serializer/module.f.d.ts +9 -0
- package/djs/serializer/module.f.js +81 -0
- package/djs/test/input.f.d.ts +2 -0
- package/djs/test/input.f.js +4 -0
- package/djs/test/m.f.d.ts +2 -0
- package/djs/test/m.f.js +1 -0
- package/djs/test.f.d.ts +12 -0
- package/djs/test.f.js +84 -0
- package/djs/tokenizer/module.f.d.ts +8 -0
- package/djs/tokenizer/module.f.js +60 -0
- package/djs/tokenizer/test.f.d.ts +7 -0
- package/djs/tokenizer/test.f.js +529 -0
- package/fsc/module.f.d.ts +5 -0
- package/fsc/module.f.js +75 -0
- package/fsc/test.f.d.ts +4 -0
- package/fsc/test.f.js +19 -0
- package/fsm/module.f.d.ts +13 -0
- package/fsm/module.f.js +59 -0
- package/fsm/test.f.d.ts +5 -0
- package/fsm/test.f.js +137 -0
- package/html/module.f.d.ts +13 -0
- package/html/module.f.js +58 -0
- package/html/test.f.d.ts +9 -0
- package/html/test.f.js +42 -0
- package/issues/test.f.d.ts +16 -0
- package/issues/test.f.js +70 -0
- package/js/tokenizer/module.f.d.ts +86 -0
- package/js/tokenizer/module.f.js +503 -0
- package/js/tokenizer/test.f.d.ts +9 -0
- package/js/tokenizer/test.f.js +905 -0
- package/json/module.f.d.ts +20 -0
- package/json/module.f.js +68 -0
- package/json/parser/module.f.d.ts +5 -0
- package/json/parser/module.f.js +155 -0
- package/json/parser/test.f.d.ts +5 -0
- package/json/parser/test.f.js +328 -0
- package/json/serializer/module.f.d.ts +7 -0
- package/json/serializer/module.f.js +21 -0
- package/json/serializer/test.f.d.ts +8 -0
- package/json/serializer/test.f.js +87 -0
- package/json/test.f.d.ts +8 -0
- package/json/test.f.js +61 -0
- package/json/tokenizer/module.f.d.ts +8 -0
- package/json/tokenizer/module.f.js +52 -0
- package/json/tokenizer/test.f.d.ts +6 -0
- package/json/tokenizer/test.f.js +419 -0
- package/nanvm-lib/tests/test.f.d.ts +27 -0
- package/nanvm-lib/tests/test.f.js +84 -0
- package/nodejs/version/module.f.d.ts +11 -0
- package/nodejs/version/module.f.js +16 -0
- package/nodejs/version/test.f.d.ts +2 -0
- package/nodejs/version/{test.f.ts → test.f.js} +13 -22
- package/package.json +9 -5
- package/text/ascii/module.f.d.ts +129 -0
- package/text/ascii/module.f.js +148 -0
- package/text/ascii/test.f.d.ts +4 -0
- package/text/ascii/test.f.js +14 -0
- package/text/module.f.d.ts +8 -0
- package/text/module.f.js +10 -0
- package/text/sgr/module.f.d.ts +8 -0
- package/text/sgr/module.f.js +8 -0
- package/text/test.f.d.ts +2 -0
- package/text/test.f.js +18 -0
- package/text/utf16/module.f.d.ts +9 -0
- package/text/utf16/module.f.js +66 -0
- package/text/utf16/test.f.d.ts +6 -0
- package/text/utf16/test.f.js +144 -0
- package/text/utf8/module.f.d.ts +6 -0
- package/text/utf8/module.f.js +112 -0
- package/text/utf8/test.f.d.ts +6 -0
- package/text/utf8/test.f.js +175 -0
- package/types/array/module.f.d.ts +21 -0
- package/types/array/module.f.js +23 -0
- package/types/array/test.f.d.ts +10 -0
- package/types/array/test.f.js +116 -0
- package/types/bigfloat/module.f.d.ts +3 -0
- package/types/bigfloat/module.f.js +66 -0
- package/types/bigfloat/test.f.d.ts +6 -0
- package/types/bigfloat/test.f.js +349 -0
- package/types/bigint/module.f.d.ts +54 -0
- package/types/bigint/{module.f.ts → module.f.js} +42 -65
- package/types/bigint/test.f.d.ts +16 -0
- package/types/bigint/test.f.js +199 -0
- package/types/bit_vec/module.f.d.ts +134 -0
- package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
- package/types/bit_vec/test.f.d.ts +22 -0
- package/types/bit_vec/test.f.js +210 -0
- package/types/btree/find/module.f.d.ts +20 -0
- package/types/btree/find/module.f.js +84 -0
- package/types/btree/find/test.f.d.ts +2 -0
- package/types/btree/find/test.f.js +152 -0
- package/types/btree/module.f.d.ts +4 -0
- package/types/btree/module.f.js +31 -0
- package/types/btree/remove/module.f.d.ts +4 -0
- package/types/btree/remove/module.f.js +174 -0
- package/types/btree/remove/test.f.d.ts +5 -0
- package/types/btree/remove/test.f.js +634 -0
- package/types/btree/set/module.f.d.ts +3 -0
- package/types/btree/set/module.f.js +103 -0
- package/types/btree/set/test.f.d.ts +2 -0
- package/types/btree/set/test.f.js +360 -0
- package/types/btree/test.f.d.ts +8 -0
- package/types/btree/test.f.js +75 -0
- package/types/btree/types/module.f.d.ts +11 -0
- package/types/btree/types/module.f.js +1 -0
- package/types/byte_set/module.f.d.ts +16 -0
- package/types/byte_set/module.f.js +28 -0
- package/types/byte_set/test.f.d.ts +12 -0
- package/types/byte_set/test.f.js +122 -0
- package/types/function/compare/module.f.d.ts +10 -0
- package/types/function/compare/module.f.js +7 -0
- package/types/function/compare/test.f.d.ts +2 -0
- package/types/function/compare/test.f.js +8 -0
- package/types/function/module.f.d.ts +28 -0
- package/types/function/module.f.js +19 -0
- package/types/function/operator/module.f.d.ts +20 -0
- package/types/function/operator/module.f.js +18 -0
- package/types/function/test.f.d.ts +2 -0
- package/types/function/test.f.js +12 -0
- package/types/list/module.f.d.ts +50 -0
- package/types/list/module.f.js +171 -0
- package/types/list/test.f.d.ts +22 -0
- package/types/list/test.f.js +395 -0
- package/types/map/module.f.d.ts +14 -0
- package/types/map/module.f.js +31 -0
- package/types/map/test.f.d.ts +5 -0
- package/types/map/test.f.js +114 -0
- package/types/nibble_set/module.f.d.ts +10 -0
- package/types/nibble_set/module.f.js +9 -0
- package/types/nibble_set/test.f.d.ts +12 -0
- package/types/nibble_set/test.f.js +90 -0
- package/types/nullable/module.f.d.ts +3 -0
- package/types/nullable/module.f.js +2 -0
- package/types/nullable/test.f.d.ts +2 -0
- package/types/nullable/test.f.js +12 -0
- package/types/number/module.f.d.ts +6 -0
- package/types/number/module.f.js +8 -0
- package/types/number/test.f.d.ts +11 -0
- package/types/number/test.f.js +124 -0
- package/types/object/module.f.d.ts +10 -0
- package/types/object/module.f.js +12 -0
- package/types/object/test.f.d.ts +5 -0
- package/types/object/test.f.js +17 -0
- package/types/range/module.f.d.ts +3 -0
- package/types/range/module.f.js +2 -0
- package/types/range/test.f.d.ts +2 -0
- package/types/range/test.f.js +18 -0
- package/types/range_map/module.f.d.ts +14 -0
- package/types/range_map/module.f.js +51 -0
- package/types/range_map/test.f.d.ts +6 -0
- package/types/range_map/test.f.js +176 -0
- package/types/result/module.f.d.ts +7 -0
- package/types/result/module.f.js +8 -0
- package/types/sorted_list/module.f.d.ts +16 -0
- package/types/sorted_list/module.f.js +56 -0
- package/types/sorted_list/test.f.d.ts +5 -0
- package/types/sorted_list/test.f.js +64 -0
- package/types/sorted_set/module.f.d.ts +7 -0
- package/types/sorted_set/module.f.js +14 -0
- package/types/sorted_set/test.f.d.ts +6 -0
- package/types/sorted_set/test.f.js +78 -0
- package/types/string/module.f.d.ts +6 -0
- package/types/string/module.f.js +11 -0
- package/types/string/test.f.d.ts +15 -0
- package/types/string/test.f.js +58 -0
- package/types/string_set/module.f.d.ts +9 -0
- package/types/string_set/module.f.js +22 -0
- package/types/string_set/test.f.d.ts +5 -0
- package/types/string_set/test.f.js +65 -0
- package/.github/FUNDING.yml +0 -12
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -88
- package/.github/workflows/npm-publish.yml +0 -53
- package/CHANGELOG.md +0 -29
- package/Cargo.lock +0 -18
- package/Cargo.toml +0 -7
- package/com/README.md +0 -3
- package/com/cpp/README.md +0 -80
- package/com/cpp/module.f.ts +0 -180
- package/com/cpp/nanocom.hpp +0 -195
- package/com/cpp/testlib.f.ts +0 -8
- package/com/cs/module.f.ts +0 -145
- package/com/cs/testlib.f.ts +0 -8
- package/com/proposals.md +0 -28
- package/com/rust/module.f.ts +0 -287
- package/com/rust/nanocom/Cargo.lock +0 -7
- package/com/rust/nanocom/Cargo.toml +0 -15
- package/com/rust/nanocom/README.md +0 -56
- package/com/rust/nanocom/src/class.rs +0 -6
- package/com/rust/nanocom/src/cobject.rs +0 -90
- package/com/rust/nanocom/src/guid.rs +0 -15
- package/com/rust/nanocom/src/hresult.rs +0 -7
- package/com/rust/nanocom/src/interface.rs +0 -9
- package/com/rust/nanocom/src/iunknown.rs +0 -13
- package/com/rust/nanocom/src/lib.rs +0 -20
- package/com/rust/nanocom/src/object.rs +0 -34
- package/com/rust/nanocom/src/ref.rs +0 -57
- package/com/rust/nanocom/src/vmt.rs +0 -7
- package/com/rust/nanocom/tests/it.rs +0 -186
- package/com/rust/nanocom/tests/itmod.rs +0 -195
- package/com/rust/testlib.f.ts +0 -8
- package/com/test/build.f.ts +0 -111
- package/com/test/build.ts +0 -45
- package/com/test/cpp/main.cpp +0 -74
- package/com/test/cs/Program.cs +0 -31
- package/com/test/cs/cs.csproj +0 -16
- package/com/test/rust/Cargo.toml +0 -12
- package/com/test/rust/src/lib.rs +0 -56
- package/com/types/module.f.ts +0 -62
- package/commonjs/README.md +0 -94
- package/commonjs/build/module.f.ts +0 -100
- package/commonjs/build/test.f.ts +0 -107
- package/commonjs/module/module.f.ts +0 -41
- package/commonjs/module.f.ts +0 -7
- package/commonjs/module.ts +0 -31
- package/commonjs/package/dependencies/module.f.ts +0 -22
- package/commonjs/package/dependencies/test.f.ts +0 -8
- package/commonjs/package/module.f.ts +0 -31
- package/commonjs/package/test.f.ts +0 -12
- package/commonjs/path/README.md +0 -17
- package/commonjs/path/module.f.ts +0 -171
- package/commonjs/test.ts +0 -64
- package/crypto/README.md +0 -3
- package/crypto/prime_field/module.f.ts +0 -114
- package/crypto/prime_field/test.f.ts +0 -95
- package/crypto/secp/module.f.ts +0 -182
- package/crypto/secp/test.f.ts +0 -68
- package/crypto/sha2/module.f.ts +0 -215
- package/crypto/sha2/test.f.ts +0 -83
- package/deno.json +0 -71
- package/dev/README.md +0 -8
- package/dev/index.ts +0 -3
- package/dev/module.f.ts +0 -1
- package/dev/module.ts +0 -195
- package/dev/test/module.f.ts +0 -135
- package/dev/test.ts +0 -53
- package/djs/README.md +0 -54
- package/djs/module.f.ts +0 -76
- package/djs/parser/module.f.ts +0 -509
- package/djs/parser/test.f.ts +0 -461
- package/djs/serializer/module.f.ts +0 -90
- package/djs/test.f.ts +0 -67
- package/djs/tokenizer/module.f.ts +0 -99
- package/djs/tokenizer/test.f.ts +0 -364
- package/doc/LANGUAGE.md +0 -255
- package/doc/README.md +0 -61
- package/doc/byte-code.md +0 -59
- package/doc/fa.md +0 -174
- package/doc/predefined.md +0 -143
- package/doc/proposals.md +0 -21
- package/doc/vm/README.md +0 -24
- package/doc/vm-rearchitecture.md +0 -129
- package/doc/vm.md +0 -150
- package/fsc/README.md +0 -111
- package/fsc/module.f.ts +0 -122
- package/fsc/test.f.ts +0 -21
- package/fsm/README.md +0 -113
- package/fsm/module.f.ts +0 -107
- package/fsm/test.f.ts +0 -139
- package/funding.json +0 -61
- package/html/README.md +0 -32
- package/html/module.f.ts +0 -109
- package/html/test.f.ts +0 -37
- package/issues/01-test-debug.md +0 -3
- package/issues/02-esm.md +0 -8
- package/issues/03-djs.md +0 -57
- package/issues/05-publish.md +0 -40
- package/issues/11-fs-load.md +0 -13
- package/issues/17-djs-extension.md +0 -6
- package/issues/README.md +0 -42
- package/issues/lang/1000-json.md +0 -50
- package/issues/lang/2110-default-export.md +0 -11
- package/issues/lang/2120-const.md +0 -14
- package/issues/lang/2130-default-import.md +0 -10
- package/issues/lang/2210-block-comment.md +0 -12
- package/issues/lang/2220-namespace-import.md +0 -25
- package/issues/lang/2310-undefined.md +0 -7
- package/issues/lang/2320-bigint.md +0 -7
- package/issues/lang/2330-property-accessor.md +0 -225
- package/issues/lang/2340-operators.md +0 -41
- package/issues/lang/2350-grouping.md +0 -11
- package/issues/lang/2360-built-in.md +0 -81
- package/issues/lang/2410-identifier-property.md +0 -9
- package/issues/lang/2420-line-comment.md +0 -10
- package/issues/lang/2430-trailing-comma.md +0 -13
- package/issues/lang/2440-shorthand.md +0 -8
- package/issues/lang/2450-destructuring.md +0 -12
- package/issues/lang/3110-function.md +0 -35
- package/issues/lang/3120-parameters.md +0 -9
- package/issues/lang/3130-body-const.md +0 -12
- package/issues/lang/3220-let.md +0 -11
- package/issues/lang/3240-export.md +0 -44
- package/issues/lang/3370-type-inference.md +0 -69
- package/issues/lang/3380-promise.md +0 -22
- package/issues/lang/3390-class.md +0 -3
- package/issues/lang/3410-expression.md +0 -12
- package/issues/lang/3420-one-parameter.md +0 -10
- package/issues/lang/3430-assignments.md +0 -23
- package/issues/lang/README.md +0 -193
- package/issues/test.f.ts +0 -58
- package/js/tokenizer/module.f.ts +0 -882
- package/js/tokenizer/test.f.ts +0 -617
- package/json/html/README.md +0 -49
- package/json/module.f.ts +0 -94
- package/json/parser/module.f.ts +0 -221
- package/json/parser/test.f.ts +0 -255
- package/json/serializer/module.f.ts +0 -74
- package/json/serializer/test.f.ts +0 -64
- package/json/test.f.ts +0 -48
- package/json/tokenizer/module.f.ts +0 -85
- package/json/tokenizer/test.f.ts +0 -290
- package/nanvm-lib/Cargo.toml +0 -6
- package/nanvm-lib/src/extension.rs +0 -130
- package/nanvm-lib/src/interface.rs +0 -133
- package/nanvm-lib/src/lib.rs +0 -7
- package/nanvm-lib/src/naive.rs +0 -236
- package/nanvm-lib/src/nanenum.rs +0 -236
- package/nanvm-lib/src/nullish.rs +0 -7
- package/nanvm-lib/src/sign.rs +0 -5
- package/nanvm-lib/src/simple.rs +0 -32
- package/nanvm-lib/tests/test.f.ts +0 -80
- package/nanvm-lib/tests/test.rs +0 -108
- package/nodejs/version/main.ts +0 -4
- package/nodejs/version/module.f.ts +0 -42
- package/text/README.md +0 -110
- package/text/ascii/module.f.ts +0 -219
- package/text/ascii/test.f.ts +0 -14
- package/text/module.f.ts +0 -30
- package/text/sgr/README.md +0 -3
- package/text/sgr/module.f.ts +0 -11
- package/text/test.f.ts +0 -19
- package/text/utf16/module.f.ts +0 -120
- package/text/utf16/test.f.ts +0 -107
- package/text/utf8/module.f.ts +0 -116
- package/text/utf8/test.f.ts +0 -125
- package/tsconfig.json +0 -104
- package/types/array/module.f.ts +0 -89
- package/types/array/test.f.ts +0 -88
- package/types/bigfloat/module.f.ts +0 -93
- package/types/bigfloat/test.f.ts +0 -218
- package/types/bigint/README.md +0 -35
- package/types/bigint/test.f.ts +0 -144
- package/types/bit_vec/README.md +0 -18
- package/types/bit_vec/test.f.ts +0 -129
- package/types/btree/README.md +0 -160
- package/types/btree/find/module.f.ts +0 -92
- package/types/btree/find/test.f.ts +0 -122
- package/types/btree/module.f.ts +0 -35
- package/types/btree/remove/module.f.ts +0 -151
- package/types/btree/remove/test.f.ts +0 -498
- package/types/btree/set/module.f.ts +0 -89
- package/types/btree/set/test.f.ts +0 -415
- package/types/btree/test.f.ts +0 -92
- package/types/btree/types/module.f.ts +0 -27
- package/types/byte_set/module.f.ts +0 -73
- package/types/byte_set/test.f.ts +0 -84
- package/types/function/compare/module.f.ts +0 -26
- package/types/function/compare/test.f.ts +0 -7
- package/types/function/module.f.ts +0 -43
- package/types/function/operator/module.f.ts +0 -65
- package/types/function/test.f.ts +0 -20
- package/types/list/module.f.ts +0 -350
- package/types/list/test.f.ts +0 -327
- package/types/map/module.f.ts +0 -65
- package/types/map/test.f.ts +0 -76
- package/types/nibble_set/module.f.ts +0 -34
- package/types/nibble_set/test.f.ts +0 -57
- package/types/nullable/module.f.ts +0 -9
- package/types/nullable/test.f.ts +0 -9
- package/types/number/module.f.ts +0 -20
- package/types/number/test.f.ts +0 -194
- package/types/object/module.f.ts +0 -30
- package/types/object/test.f.ts +0 -14
- package/types/range/module.f.ts +0 -10
- package/types/range/test.f.ts +0 -9
- package/types/range_map/module.f.ts +0 -70
- package/types/range_map/test.f.ts +0 -189
- package/types/result/module.f.ts +0 -20
- package/types/result/module.ts +0 -18
- package/types/sorted_list/module.f.ts +0 -83
- package/types/sorted_list/test.f.ts +0 -57
- package/types/sorted_set/module.f.ts +0 -36
- package/types/sorted_set/test.f.ts +0 -67
- package/types/string/module.f.ts +0 -26
- package/types/string/test.f.ts +0 -43
- package/types/string_set/module.f.ts +0 -37
- package/types/string_set/test.f.ts +0 -34
package/issues/lang/1000-json.md
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# JSON
|
|
2
|
-
|
|
3
|
-
JSON forms a tree of values.
|
|
4
|
-
|
|
5
|
-
```json
|
|
6
|
-
{
|
|
7
|
-
"a": null,
|
|
8
|
-
"b": [-42.5, false, "hello"]
|
|
9
|
-
}
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
File extension: `.json`.
|
|
13
|
-
|
|
14
|
-
## NPN (Normal Polish Notation)
|
|
15
|
-
|
|
16
|
-
We will use [NPN](https://en.wikipedia.org/wiki/Polish_notation) as a command format for our VM because it allows us to allocate required objects during streaming as a stack automata.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
```js
|
|
20
|
-
{2} "a" null "b" [3] -42.5 false "hello"
|
|
21
|
-
|
|
22
|
-
// evolution
|
|
23
|
-
<> {2} "a" null "b" [3] -42.5 false "hello"
|
|
24
|
-
{ ?: ?, ?: ? } <{4}> "a" null "b" [3] -42.5 false "hello"
|
|
25
|
-
{ "a": ?, ?: ? } <{3}> null "b" [3] -42.5 false "hello"
|
|
26
|
-
{ "a": null, ?: ? } <{2}> "b" [3] -42.5 false "hello"
|
|
27
|
-
{ "a": null, "b": ? } <{1}> [3] -42.5 false "hello"
|
|
28
|
-
{ "a": null, "b": [?, ?, ?] } <{0}[3]> -42.5 false "hello"
|
|
29
|
-
{ "a": null, "b": [-42.5, ?, ?] } <{0}[2]> false "hello"
|
|
30
|
-
{ "a": null, "b": [-42.5, false, ?] } <{0}[1]> "hello"
|
|
31
|
-
{ "a": null, "b": [-42.5, false, "hello"] } <>
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## RPN, just for fun
|
|
35
|
-
|
|
36
|
-
[Reverse Polish Notation](https://en.wikipedia.org/wiki/Reverse_Polish_notation):
|
|
37
|
-
|
|
38
|
-
```js
|
|
39
|
-
"a" null "b" -42.5 false "hello" [3] {2}
|
|
40
|
-
|
|
41
|
-
// evolution:
|
|
42
|
-
"a" <> null "b" -42.5 false "hello" [3] {2}
|
|
43
|
-
"a" null <> "b" -42.5 false "hello" [3] {2}
|
|
44
|
-
"a" null "b" <> -42.5 false "hello" [3] {2}
|
|
45
|
-
"a" null "b" -42.5 <> false "hello" [3] {2}
|
|
46
|
-
"a" null "b" -42.5 false <> "hello" [3] {2}
|
|
47
|
-
"a" null "b" -42.5 false "hello" <> [3] {2}
|
|
48
|
-
"a" null "b" [-42.5, false, "hello"] <> {2}
|
|
49
|
-
{ "a" : null, "b": [-42.5, false, "hello"] } <>
|
|
50
|
-
```
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Default Export
|
|
2
|
-
|
|
3
|
-
Parse `export default` and then JSON. This is enough to have the same functionality as JSON.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
export default 5
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Depends on [JSON](./1000-json.md)
|
|
10
|
-
|
|
11
|
-
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export#using_the_default_export.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Constants
|
|
2
|
-
|
|
3
|
-
This is enough to provide basic DJS graph and serialization.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
const a = null
|
|
7
|
-
export default {
|
|
8
|
-
"a": a,
|
|
9
|
-
}
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Depends on [default-export](./2110-default-export.md).
|
|
13
|
-
|
|
14
|
-
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Block Comment
|
|
2
|
-
|
|
3
|
-
We need it to declare JSDoc/TypeScript types.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
/** @type {number} */
|
|
7
|
-
export default -42.5
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
Depends on [default-export](./2110-default-export.md).
|
|
11
|
-
|
|
12
|
-
See <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#line_comments>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# Namespace Import
|
|
2
|
-
|
|
3
|
-
We need it to import types from other modules.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
import * as A from './a.d.mjs'
|
|
7
|
-
/** @type {A.Type} */
|
|
8
|
-
export default [5]
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Where `./a.d.mjs` may look like this:
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
// this type can be used in other modules
|
|
15
|
-
/** @typedef {readonly [number]} Type */
|
|
16
|
-
|
|
17
|
-
// export nothing
|
|
18
|
-
export default null
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
FunctionalScript should use namespace import only as a mechanism to reference type definitions. Since, VM doesn't analyze types, namespace import can be ignored be VM. However different linters, such as TypeScript, can use the information.
|
|
22
|
-
|
|
23
|
-
Depends on [default-import](./2110-default-export.md).
|
|
24
|
-
|
|
25
|
-
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#namespace_import
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
# Get Property
|
|
2
|
-
|
|
3
|
-
```js
|
|
4
|
-
const own_property = a => b => Object.getOwnPropertyDescriptor(obj, property)?.value
|
|
5
|
-
// Or
|
|
6
|
-
const own_property = a => b => Object.hasOwn(obj, property) ? obj[property] : void 0
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
It's translated into the VM command `own_property`:
|
|
10
|
-
|
|
11
|
-
```rust
|
|
12
|
-
struct OwnProperty {
|
|
13
|
-
obj: Expression
|
|
14
|
-
property: Expression
|
|
15
|
-
}
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Instance Property
|
|
19
|
-
|
|
20
|
-
```js
|
|
21
|
-
obj.property
|
|
22
|
-
obj.['property']
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
It's translated into the VM command `instance_property`:
|
|
26
|
-
|
|
27
|
-
```rust
|
|
28
|
-
struct InstanceProperty {
|
|
29
|
-
obj: Expression
|
|
30
|
-
index: u8
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
If the property name is one of the implemented property names, it should be translated into `index: u8`.
|
|
35
|
-
|
|
36
|
-
If a property name is one of the prohibited property names or one of the method names, then it's a compilation error.
|
|
37
|
-
|
|
38
|
-
All other property names generate `own_property` commands.
|
|
39
|
-
|
|
40
|
-
[Object Instance Properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#instance_properties),
|
|
41
|
-
|
|
42
|
-
|name |side-effect |
|
|
43
|
-
|-------------|------------------------------|
|
|
44
|
-
|`__proto__` |access to function constructor|
|
|
45
|
-
|`constructor`|access to function constructor|
|
|
46
|
-
|
|
47
|
-
```js
|
|
48
|
-
const f = () => {}
|
|
49
|
-
{
|
|
50
|
-
const c = f.constructor
|
|
51
|
-
const g = c(`console.log('hello')`)
|
|
52
|
-
g() // side effect
|
|
53
|
-
}
|
|
54
|
-
{
|
|
55
|
-
const p = f.__proto__
|
|
56
|
-
const c = Object.getOwnPropertyDescriptor(p, 'constructor').value
|
|
57
|
-
const g = c(`console.log('hello')`)
|
|
58
|
-
g() // side-effect
|
|
59
|
-
}
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
[Array Instance Properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#instance_properties).
|
|
63
|
-
|
|
64
|
-
| |name |side-effect|
|
|
65
|
-
|-|--------|-----------|
|
|
66
|
-
|0|`length`|no |
|
|
67
|
-
|
|
68
|
-
[Function Instance Properties](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function#instance_properties)
|
|
69
|
-
|
|
70
|
-
| |name |side-effect|run-time |
|
|
71
|
-
|-|-------------|-----------|---------|
|
|
72
|
-
| |`arguments` |no |error |
|
|
73
|
-
| |`caller` |no |error |
|
|
74
|
-
| |`displayName`|no | |
|
|
75
|
-
| |`name` |no |error |
|
|
76
|
-
| |`prototype` |no |undefined|
|
|
77
|
-
|
|
78
|
-
## Instance Method Call
|
|
79
|
-
|
|
80
|
-
```js
|
|
81
|
-
obj.property(parameters)
|
|
82
|
-
obj.['property'](parameters)
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
It's translated into VM command `instance_method_call`:
|
|
86
|
-
|
|
87
|
-
```rust
|
|
88
|
-
struct InstanceMethodCall {
|
|
89
|
-
obj: Expression
|
|
90
|
-
property: String16
|
|
91
|
-
parameters: Array<Expression>
|
|
92
|
-
}
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
**Note**: All known instance methods can't be used in `instance_property` command! Even if they don't have side effects.
|
|
96
|
-
|
|
97
|
-
[Object Instance Methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object#instance_methods)
|
|
98
|
-
|
|
99
|
-
|name |side-effect |
|
|
100
|
-
|----------------------|----------------|
|
|
101
|
-
|`__defineGetter__` |mutate |
|
|
102
|
-
|`__defineSetter__` |mutate |
|
|
103
|
-
|`__lookupGetter__` |'__proto__' |
|
|
104
|
-
|`__lookupSetter__` |'__proto__' |
|
|
105
|
-
|`hasOwnProperty` |no |
|
|
106
|
-
|`isPrototypeOf` |no |
|
|
107
|
-
|`propertyIsEnumerable`|no |
|
|
108
|
-
|`toLocaleString` |access to locale|
|
|
109
|
-
|`toString` |no |
|
|
110
|
-
|`valueOf` |no |
|
|
111
|
-
|
|
112
|
-
[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array#instance_methods)
|
|
113
|
-
|
|
114
|
-
|name |side-effect|notes |
|
|
115
|
-
|----------------------|-----------|--------|
|
|
116
|
-
|`at` |no | |
|
|
117
|
-
|`concat` |no | |
|
|
118
|
-
|`copyWith` |no | |
|
|
119
|
-
|`entries` |yes |iterator|
|
|
120
|
-
|`every` |no | |
|
|
121
|
-
|`fill` |yes |mutate |
|
|
122
|
-
|`filter` |no | |
|
|
123
|
-
|`find` |no | |
|
|
124
|
-
|`findIndex` |no | |
|
|
125
|
-
|`findLast` |no | |
|
|
126
|
-
|`findLastIndex` |no | |
|
|
127
|
-
|`flat` |no | |
|
|
128
|
-
|`flatMap` |no | |
|
|
129
|
-
|`forEach` |no | |
|
|
130
|
-
|`includes` |no | |
|
|
131
|
-
|`indexOf` |no | |
|
|
132
|
-
|`join` |no | |
|
|
133
|
-
|`keys` |yes |iterator|
|
|
134
|
-
|`lastIndexOf` |no | |
|
|
135
|
-
|`map` |no | |
|
|
136
|
-
|`pop` |yes |mutate |
|
|
137
|
-
|`push` |yes |mutate |
|
|
138
|
-
|`reduce` |no | |
|
|
139
|
-
|`reduceRight` |no | |
|
|
140
|
-
|`reverse` |yes |mutate |
|
|
141
|
-
|`shift` |yes |mutate |
|
|
142
|
-
|`slice` |no | |
|
|
143
|
-
|`some` |no | |
|
|
144
|
-
|`sort` |yes |mutate |
|
|
145
|
-
|`splice` |yes |mutate |
|
|
146
|
-
|`toReversed` |no | |
|
|
147
|
-
|`toSorted` |no | |
|
|
148
|
-
|`toSpliced` |no | |
|
|
149
|
-
|`unshift` |yes |mutate |
|
|
150
|
-
|`values` |yes |iterator|
|
|
151
|
-
|`with` |no | |
|
|
152
|
-
|
|
153
|
-
[Function Instance Methods](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function#instance_methods)
|
|
154
|
-
|
|
155
|
-
|name |side-effect|notes |
|
|
156
|
-
|-------|-----------|-----------------|
|
|
157
|
-
|`apply`|no |`this` is ignored|
|
|
158
|
-
|`bind` |no |`this` is ignored|
|
|
159
|
-
|`call` |no |`this` is ignored|
|
|
160
|
-
|
|
161
|
-
## At
|
|
162
|
-
|
|
163
|
-
```js
|
|
164
|
-
obj[42]
|
|
165
|
-
obj[+index]
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
It's translated into VM command `at`:
|
|
169
|
-
|
|
170
|
-
```rust
|
|
171
|
-
struct InstanceMethodCall {
|
|
172
|
-
obj: Expression
|
|
173
|
-
index: Expression
|
|
174
|
-
}
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
```js
|
|
178
|
-
import m from './m.f.mjs'
|
|
179
|
-
const a = [2, 3]
|
|
180
|
-
export default {
|
|
181
|
-
"a": a[0],
|
|
182
|
-
// we don't know what is the type of `m` so we force it to be a `number` or `bigint`.
|
|
183
|
-
"b": a[+m]
|
|
184
|
-
}
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
In `obj[index]`, `index` has to be a `number`. If we don't know what is `index`, `+` requires before `index`. It means the byte code for the expression inside the `[]` should be either the unary `+`, a number literal, or a string literal (excluding some strings). If it references an object, FS gives up. FS may try deeper analyses in the future, and type inference can help a lot.
|
|
188
|
-
|
|
189
|
-
## Iterators
|
|
190
|
-
|
|
191
|
-
Direct access to an object with the [`Iterator` protocol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) is not allowed in FunctionalScript.
|
|
192
|
-
|
|
193
|
-
```ts
|
|
194
|
-
type Value<T> = { done: true } | { done?: false, value: T }
|
|
195
|
-
type Iterator<T> = {
|
|
196
|
-
next: () => Value<T>
|
|
197
|
-
}
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
However, FunctionalScript allows access to objects with the `Iterable` protocol.
|
|
201
|
-
|
|
202
|
-
```ts
|
|
203
|
-
type Iterable<T> = {
|
|
204
|
-
[Symbol.iterator]: () => Iterator<T>
|
|
205
|
-
}
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
For example, JS Array implements the `Iterable` protocol.
|
|
209
|
-
|
|
210
|
-
If we need to implement support for [generators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Generator) in the FunctionalScript, the generator function has to be wrapped into `Iterable` interface. For example,
|
|
211
|
-
|
|
212
|
-
```js
|
|
213
|
-
// compilation error!
|
|
214
|
-
const iterator = *() {
|
|
215
|
-
yield 4
|
|
216
|
-
yield 2
|
|
217
|
-
}
|
|
218
|
-
// ok
|
|
219
|
-
const iterable = {
|
|
220
|
-
*[Symbol.iterator]() {
|
|
221
|
-
yield 4
|
|
222
|
-
yield 2
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
```
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# Operators
|
|
2
|
-
|
|
3
|
-
|Type |Operator |Priority |
|
|
4
|
-
|-----------|---------|-----------|
|
|
5
|
-
|Comparison |`==` |not allowed|
|
|
6
|
-
| |`!=` |not allowed|
|
|
7
|
-
| |`===` |1 |
|
|
8
|
-
| |`!==` |1 |
|
|
9
|
-
| |`>` |1 |
|
|
10
|
-
| |`>=` |1 |
|
|
11
|
-
| |`<` |1 |
|
|
12
|
-
| |`<=` |1 |
|
|
13
|
-
|Arithmetics|`+` |1 |
|
|
14
|
-
| |`-` |1 |
|
|
15
|
-
| |`*` |1 |
|
|
16
|
-
| |`/` |1 |
|
|
17
|
-
| |`%` |1 |
|
|
18
|
-
| |unary `-`|1 |
|
|
19
|
-
| |unary `+`|1 |
|
|
20
|
-
| |`**` |1 |
|
|
21
|
-
|Bitwise |`&` |1 |
|
|
22
|
-
| |`\|` |1 |
|
|
23
|
-
| |`^` |1 |
|
|
24
|
-
| |`~` |1 |
|
|
25
|
-
| |`<<` |1 |
|
|
26
|
-
| |`>>` |1 |
|
|
27
|
-
| |`>>>` |1 |
|
|
28
|
-
|Logical |`&&` |1 |
|
|
29
|
-
| |`\|\|` |1 |
|
|
30
|
-
| |`??` |1 |
|
|
31
|
-
| |`!` |1 |
|
|
32
|
-
|Conditional|`?:` |1 |
|
|
33
|
-
|Comma |`,` |not allowed|
|
|
34
|
-
|
|
35
|
-
[Comma operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_operator) is useful only when we want to mutate. We have only one case where we can mutate an object; it's [let](./3320-let.md), and we would like to keep it as simple as possible to track life-time. So, NO for the `,` comma operator.
|
|
36
|
-
|
|
37
|
-
Depends on [default-export](./2110-default-export.md) and [undefined](./2310-undefined.md).
|
|
38
|
-
|
|
39
|
-
For mutating operators, see [assignments](./3330-assignments.md).
|
|
40
|
-
|
|
41
|
-
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_operators
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# Built-in Objects and Functions
|
|
2
|
-
|
|
3
|
-
The built-in objects are special. We can call a function, like `Object.getOwnPropertyDescriptor()`, but not the `Object` or the function.
|
|
4
|
-
|
|
5
|
-
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
|
|
6
|
-
|
|
7
|
-
Some of the JS built-in objects and functions are "not allowed" in FS. It means, an FS compiler rejects code that contains "not allowed" objects and functions.
|
|
8
|
-
|
|
9
|
-
## Object
|
|
10
|
-
|
|
11
|
-
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
|
|
12
|
-
|
|
13
|
-
|Function |side-effect |
|
|
14
|
-
|-------------------------|---------------------------|
|
|
15
|
-
|assign |mutate |
|
|
16
|
-
|create |creates a special prototype|
|
|
17
|
-
|defineProperties |mutate |
|
|
18
|
-
|defineProperty |mutate |
|
|
19
|
-
|entries |no |
|
|
20
|
-
|freeze |mutate |
|
|
21
|
-
|fromEntries |no |
|
|
22
|
-
|getOwnPropertyDescriptor |no |
|
|
23
|
-
|getOwnPropertyDescriptors|no |
|
|
24
|
-
|getOwnPropertyNames |no |
|
|
25
|
-
|getOwnPropertySymbols |return symbols |
|
|
26
|
-
|getPrototypeOf |return prototypes |
|
|
27
|
-
|groupBy |return null-property object|
|
|
28
|
-
|hasOwn |no |
|
|
29
|
-
|is |no |
|
|
30
|
-
|isExtensible |no |
|
|
31
|
-
|isFrozen |no |
|
|
32
|
-
|isSealed |no |
|
|
33
|
-
|keys |no |
|
|
34
|
-
|preventExtensions |mutate |
|
|
35
|
-
|seal |mutate |
|
|
36
|
-
|setPrototypeOf |mutate |
|
|
37
|
-
|values |no |
|
|
38
|
-
|
|
39
|
-
## Array
|
|
40
|
-
|
|
41
|
-
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
|
|
42
|
-
|
|
43
|
-
|Function |side-effect|
|
|
44
|
-
|-------------------------|-----------|
|
|
45
|
-
|from |no |
|
|
46
|
-
|fromAsync |? |
|
|
47
|
-
|isArray |no |
|
|
48
|
-
|of |no |
|
|
49
|
-
|
|
50
|
-
## BigInt
|
|
51
|
-
|
|
52
|
-
|Function |side-effect|
|
|
53
|
-
|-------------------------|-----------|
|
|
54
|
-
|asIntN |no |
|
|
55
|
-
|asUintN |no |
|
|
56
|
-
|
|
57
|
-
## JSON
|
|
58
|
-
|
|
59
|
-
|Function |side-effects|
|
|
60
|
-
|-------------------------|-----------|
|
|
61
|
-
|`isRawJSON` |no |
|
|
62
|
-
|`parse` |no |
|
|
63
|
-
|`rawJSON` |no |
|
|
64
|
-
|`stringify` |no |
|
|
65
|
-
|
|
66
|
-
## Others
|
|
67
|
-
|
|
68
|
-
|Function |side-effect|
|
|
69
|
-
|-------------------------|-----------|
|
|
70
|
-
|`decodeURI()` |no |
|
|
71
|
-
|`decodeURIComponent()` |no |
|
|
72
|
-
|`encodeURI()` |no |
|
|
73
|
-
|`encodeURIComponent()` |no |
|
|
74
|
-
|`eval()` |no |
|
|
75
|
-
|
|
76
|
-
|Property |side-effect|
|
|
77
|
-
|------------|-----------|
|
|
78
|
-
|`Infinity` |no |
|
|
79
|
-
|`isFinite()`|no |
|
|
80
|
-
|`isNaN()` |no |
|
|
81
|
-
|`NaN` |no |
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Destructuring Assignment
|
|
2
|
-
|
|
3
|
-
```js
|
|
4
|
-
const { "a": a, "%": [c, d] } = { "a": null, "%": [true, false] }
|
|
5
|
-
export default {
|
|
6
|
-
"a": [a, c, d],
|
|
7
|
-
}
|
|
8
|
-
```
|
|
9
|
-
|
|
10
|
-
Depends on [const](./2120-const.md) and [function parameters](./3120-parameters.md).
|
|
11
|
-
|
|
12
|
-
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment.
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# Function
|
|
2
|
-
|
|
3
|
-
Parse a function that has no parameters and returns a constant.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
export default () => { return 6 }
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
Depends on [default export](./2110-default-export.md).
|
|
10
|
-
|
|
11
|
-
See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions.
|
|
12
|
-
|
|
13
|
-
## Recursive Functions
|
|
14
|
-
|
|
15
|
-
```js
|
|
16
|
-
const a = i => b(i + 3)
|
|
17
|
-
const b = i => i % 5 === 0 ? i : a(i)
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
```rust
|
|
21
|
-
fn a(frame: Array<Any>, param: Array<Any>) {
|
|
22
|
-
let i = param[0];
|
|
23
|
-
let b = frame[1];
|
|
24
|
-
b(frame, &[i + 3])
|
|
25
|
-
}
|
|
26
|
-
fn b(frame: Array<Any>, param: Array<Any>) {
|
|
27
|
-
let i = param[0];
|
|
28
|
-
if (i % 5 === 0) {
|
|
29
|
-
i
|
|
30
|
-
} else {
|
|
31
|
-
let a = frame[0];
|
|
32
|
-
a(frame, &[i])
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
```
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Body Constants
|
|
2
|
-
|
|
3
|
-
Parse a const definition in a function body; a const can be used within that body after it is defined.
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
export default () => {
|
|
7
|
-
const x = 43
|
|
8
|
-
return [3, x]
|
|
9
|
-
}
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
Depends on [function](./3110-function.md) and [const](./2120-const.md).
|
package/issues/lang/3220-let.md
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
# Non-default Export
|
|
2
|
-
|
|
3
|
-
In FunctionalScript we use `export default`:
|
|
4
|
-
|
|
5
|
-
```js
|
|
6
|
-
export default 17
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
The main reason is that it's compatible with other module types, such as JSON and CommonJS.
|
|
10
|
-
|
|
11
|
-
ECMAScript supports `export` of other non-default objects. We wouldn't have much reasons to support but systems as JSR doesn't really like `default` exports.
|
|
12
|
-
|
|
13
|
-
To implement `export` we should change our definition of a module from `unknown` to
|
|
14
|
-
|
|
15
|
-
```ts
|
|
16
|
-
type Module = {
|
|
17
|
-
readonly [k in string]?: unknonwn
|
|
18
|
-
readonly default?: unknown
|
|
19
|
-
}
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
Or, more strict version, which allows either `export` or `export default` but not both:
|
|
23
|
-
|
|
24
|
-
```ts
|
|
25
|
-
type Module = ExportMap | ExportDefault
|
|
26
|
-
type ExportMap = Omit<{
|
|
27
|
-
readonly[k in string]: unknown
|
|
28
|
-
}, 'default'>
|
|
29
|
-
type DefaultExport = {
|
|
30
|
-
readonly default: unknown
|
|
31
|
-
}
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
We don't need to change `import` for now if we implement `import * as X from ...`. For example
|
|
35
|
-
|
|
36
|
-
```js
|
|
37
|
-
// types/list/module.d.mjs
|
|
38
|
-
export const map = ...
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
```js
|
|
42
|
-
import * as List from 'types/list/module.f.mjs'
|
|
43
|
-
const { map } = List
|
|
44
|
-
```
|