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
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module generates C++ code blocks, including structs, interfaces, and method headers,
|
|
3
|
+
* based on a COM library of type definitions.
|
|
4
|
+
*/
|
|
5
|
+
import { type Library } from '../types/module.f.ts';
|
|
6
|
+
import * as text from '../../text/module.f.ts';
|
|
7
|
+
/**
|
|
8
|
+
* Generates the C++ code for a library.
|
|
9
|
+
*/
|
|
10
|
+
export declare const cpp: (name: string) => (lib: Library) => text.Block;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module generates C++ code blocks, including structs, interfaces, and method headers,
|
|
3
|
+
* based on a COM library of type definitions.
|
|
4
|
+
*/
|
|
5
|
+
import { paramList, result, } from "../types/module.f.js";
|
|
6
|
+
import * as text from "../../text/module.f.js";
|
|
7
|
+
import * as O from "../../types/object/module.f.js";
|
|
8
|
+
import { map, flatMap, flat } from "../../types/list/module.f.js";
|
|
9
|
+
import { join } from "../../types/string/module.f.js";
|
|
10
|
+
const { entries } = Object;
|
|
11
|
+
const struct = (name) => (body) => [`struct ${name}`, '{', body, '};'];
|
|
12
|
+
const baseTypeMap = {
|
|
13
|
+
u8: 'uint8_t',
|
|
14
|
+
i8: 'int8_t',
|
|
15
|
+
u16: 'uint16_t',
|
|
16
|
+
i16: 'int16_t',
|
|
17
|
+
u32: 'uint32_t',
|
|
18
|
+
i32: 'int32_t',
|
|
19
|
+
u64: 'uint64_t',
|
|
20
|
+
i64: 'int64_t',
|
|
21
|
+
usize: 'size_t',
|
|
22
|
+
isize: 'ptrdiff_t',
|
|
23
|
+
f32: 'float',
|
|
24
|
+
f64: 'double',
|
|
25
|
+
bool: 'bool',
|
|
26
|
+
};
|
|
27
|
+
const baseType = (t) => baseTypeMap[t];
|
|
28
|
+
const resultVoid = result('void');
|
|
29
|
+
const namespace = text.curly('namespace');
|
|
30
|
+
const comRef = (id) => `::nanocom::ref<${id}>`;
|
|
31
|
+
const ptr = (id) => `${id} const*`;
|
|
32
|
+
const ref = (id) => `${id} const&`;
|
|
33
|
+
const paramName = ([name]) => name;
|
|
34
|
+
const mapParamName = map(paramName);
|
|
35
|
+
const joinComma = join(', ');
|
|
36
|
+
/**
|
|
37
|
+
* Generates the C++ code for a library.
|
|
38
|
+
*/
|
|
39
|
+
export const cpp = (name) => (lib) => {
|
|
40
|
+
const interface_ = (t) => {
|
|
41
|
+
if (!(t instanceof Array) || t.length !== 1) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const [name] = t;
|
|
45
|
+
return 'interface' in lib[name] ? name : null;
|
|
46
|
+
};
|
|
47
|
+
const objectType = (i) => (t) => {
|
|
48
|
+
if (typeof (t) === 'string') {
|
|
49
|
+
return baseType(t);
|
|
50
|
+
}
|
|
51
|
+
if (t.length === 2) {
|
|
52
|
+
return `${type(t[1])} const*`;
|
|
53
|
+
}
|
|
54
|
+
const [id] = t;
|
|
55
|
+
return 'interface' in lib[id] ? i(id) : id;
|
|
56
|
+
};
|
|
57
|
+
const type = objectType(comRef);
|
|
58
|
+
const resultType = objectType(ptr);
|
|
59
|
+
const field = ([name, t]) => `${type(t)} ${name};`;
|
|
60
|
+
const mapField = map(field);
|
|
61
|
+
const defStruct = (s) => mapField(entries(s.struct));
|
|
62
|
+
const cppResult = resultVoid(resultType);
|
|
63
|
+
const param = ([name, t]) => `${objectType(ref)(t)} ${name}`;
|
|
64
|
+
const mapParam = map(param);
|
|
65
|
+
const methodHeader = (result) => (paramArrayStr) => (name) => `virtual ${result} ${name}${paramArrayStr} const noexcept = 0;`;
|
|
66
|
+
const method = ([name, paramArray]) => {
|
|
67
|
+
const result = cppResult(paramArray);
|
|
68
|
+
const paramL = paramList(paramArray);
|
|
69
|
+
const paramArrayStr = `(${joinComma(mapParam(paramL))})`;
|
|
70
|
+
const m = methodHeader(result)(paramArrayStr);
|
|
71
|
+
const resultName = interface_(paramArray._);
|
|
72
|
+
if (resultName === null) {
|
|
73
|
+
return [m(name)];
|
|
74
|
+
}
|
|
75
|
+
return [
|
|
76
|
+
m(`${name}_`),
|
|
77
|
+
`${comRef(resultName)} ${name}${paramArrayStr} const noexcept`,
|
|
78
|
+
'{',
|
|
79
|
+
[`return ::nanocom::move_to_ref(${name}_(${joinComma(mapParamName(paramL))}));`],
|
|
80
|
+
'}',
|
|
81
|
+
];
|
|
82
|
+
};
|
|
83
|
+
const mapMethod = flatMap(method);
|
|
84
|
+
const defInterface = ({ guid, interface: i }) => {
|
|
85
|
+
const g = guid.replaceAll('-', '');
|
|
86
|
+
const lo = g.substring(0, 16);
|
|
87
|
+
const hi = g.substring(16);
|
|
88
|
+
return flat([
|
|
89
|
+
[`constexpr static ::nanocom::GUID const guid = ::nanocom::GUID(0x${lo}, 0x${hi});`],
|
|
90
|
+
mapMethod(entries(i))
|
|
91
|
+
]);
|
|
92
|
+
};
|
|
93
|
+
const def = ([name, d]) => 'interface' in d ?
|
|
94
|
+
[`class ${name} : public ::nanocom::IUnknown`,
|
|
95
|
+
'{',
|
|
96
|
+
'public:',
|
|
97
|
+
defInterface(d),
|
|
98
|
+
'};'
|
|
99
|
+
] :
|
|
100
|
+
struct(name)(defStruct(d));
|
|
101
|
+
const forward = ([name]) => [`struct ${name};`];
|
|
102
|
+
const e = entries(lib);
|
|
103
|
+
return flat([
|
|
104
|
+
['#pragma once', ''],
|
|
105
|
+
namespace(name)(flat([flatMap(forward)(e), flatMap(def)(e)]))
|
|
106
|
+
]);
|
|
107
|
+
};
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import cpp from
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
{
|
|
5
|
-
const e =
|
|
6
|
-
'#pragma once\n' +
|
|
1
|
+
import cpp from "./testlib.f.js";
|
|
2
|
+
const f = () => {
|
|
3
|
+
const e = '#pragma once\n' +
|
|
7
4
|
'\n' +
|
|
8
5
|
'namespace My\n' +
|
|
9
6
|
'{\n' +
|
|
@@ -35,8 +32,9 @@ const f = () =>
|
|
|
35
32
|
' }\n' +
|
|
36
33
|
' virtual void SetManagedStruct(ManagedStruct a) const noexcept = 0;\n' +
|
|
37
34
|
' };\n' +
|
|
38
|
-
'}'
|
|
39
|
-
if (cpp() !== e) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
35
|
+
'}';
|
|
36
|
+
if (cpp() !== e) {
|
|
37
|
+
throw cpp;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export default f;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module generates C# code blocks for COM interop from a high-level type library definition.
|
|
3
|
+
*
|
|
4
|
+
* The module maps type definitions (e.g., structs, interfaces, and methods) into C# constructs
|
|
5
|
+
* with appropriate attributes for COM interop, such as `[StructLayout]`, `[Guid]`, and `[InterfaceType]`.
|
|
6
|
+
*/
|
|
7
|
+
import { type Library } from '../types/module.f.ts';
|
|
8
|
+
import { type Block } from '../../text/module.f.ts';
|
|
9
|
+
/**
|
|
10
|
+
* Generates the C# code for a library.
|
|
11
|
+
*/
|
|
12
|
+
export declare const cs: (name: string) => (library: Library) => Block;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module generates C# code blocks for COM interop from a high-level type library definition.
|
|
3
|
+
*
|
|
4
|
+
* The module maps type definitions (e.g., structs, interfaces, and methods) into C# constructs
|
|
5
|
+
* with appropriate attributes for COM interop, such as `[StructLayout]`, `[Guid]`, and `[InterfaceType]`.
|
|
6
|
+
*/
|
|
7
|
+
import { result, paramList, } from "../types/module.f.js";
|
|
8
|
+
import { curly } from "../../text/module.f.js";
|
|
9
|
+
import { flat, map, some, flatMap } from "../../types/list/module.f.js";
|
|
10
|
+
import { join } from "../../types/string/module.f.js";
|
|
11
|
+
import * as O from "../../types/object/module.f.js";
|
|
12
|
+
const { entries } = Object;
|
|
13
|
+
const using = (v) => `using ${v};`;
|
|
14
|
+
const typeDef = (attributes) => (type) => (name) => (body) => flat([
|
|
15
|
+
map(v => `[${v}]`)(attributes),
|
|
16
|
+
curly(`public ${type}`)(name)(body)
|
|
17
|
+
]);
|
|
18
|
+
const baseTypeMap = {
|
|
19
|
+
bool: 'byte',
|
|
20
|
+
f32: 'float',
|
|
21
|
+
f64: 'double',
|
|
22
|
+
i16: 'short',
|
|
23
|
+
i32: 'int',
|
|
24
|
+
i64: 'long',
|
|
25
|
+
i8: 'sbyte',
|
|
26
|
+
isize: 'IntPtr',
|
|
27
|
+
u16: 'ushort',
|
|
28
|
+
u32: 'uint',
|
|
29
|
+
u64: 'ulong',
|
|
30
|
+
u8: 'byte',
|
|
31
|
+
usize: 'UIntPtr',
|
|
32
|
+
};
|
|
33
|
+
const baseType = (t) => baseTypeMap[t];
|
|
34
|
+
const unsafe = isUnsafe => isUnsafe ? 'unsafe ' : '';
|
|
35
|
+
const fullType = t => typeof (t) === 'string' ?
|
|
36
|
+
[false, baseType(t)] :
|
|
37
|
+
t.length === 1 ?
|
|
38
|
+
[false, t[0]] :
|
|
39
|
+
[true, `${type(t[1])}*`];
|
|
40
|
+
const type = t => fullType(t)[1];
|
|
41
|
+
const param = ([name, t]) => `${type(t)} ${name}`;
|
|
42
|
+
const mapParam = map(param);
|
|
43
|
+
const field = ([name, comType]) => {
|
|
44
|
+
const [isUnsafe, t] = fullType(comType);
|
|
45
|
+
return `public ${unsafe(isUnsafe)}${t} ${name};`;
|
|
46
|
+
};
|
|
47
|
+
const isUnsafeField = field => fullType(field[1])[0];
|
|
48
|
+
const mapIsUnsafeField = map(isUnsafeField);
|
|
49
|
+
const resultVoid = result('void');
|
|
50
|
+
const joinComma = join(', ');
|
|
51
|
+
const method = ([name, m]) => {
|
|
52
|
+
const paramAndResultList = entries(m);
|
|
53
|
+
const pl = paramList(m);
|
|
54
|
+
const isUnsafe = some(mapIsUnsafeField(paramAndResultList));
|
|
55
|
+
return [
|
|
56
|
+
'[PreserveSig]',
|
|
57
|
+
`${unsafe(isUnsafe)}${resultVoid(type)(m)} ${name}(${joinComma(mapParam(pl))});`
|
|
58
|
+
];
|
|
59
|
+
};
|
|
60
|
+
const struct = typeDef(['StructLayout(LayoutKind.Sequential)'])('struct');
|
|
61
|
+
const mapField = map(field);
|
|
62
|
+
const flatMapMethod = flatMap(method);
|
|
63
|
+
const def = ([n, d]) => !('interface' in d) ?
|
|
64
|
+
struct(n)(mapField(entries(d.struct))) :
|
|
65
|
+
typeDef([`Guid("${d.guid}")`, 'InterfaceType(ComInterfaceType.InterfaceIsIUnknown)'])('interface')(n)(flatMapMethod(entries(d.interface)));
|
|
66
|
+
const flatMapDef = flatMap(def);
|
|
67
|
+
const namespace = curly('namespace');
|
|
68
|
+
const header = [
|
|
69
|
+
using('System'),
|
|
70
|
+
using('System.Runtime.InteropServices'),
|
|
71
|
+
''
|
|
72
|
+
];
|
|
73
|
+
/**
|
|
74
|
+
* Generates the C# code for a library.
|
|
75
|
+
*/
|
|
76
|
+
export const cs = name => library => {
|
|
77
|
+
const v = flatMapDef(entries(library));
|
|
78
|
+
const ns = namespace(name)(v);
|
|
79
|
+
return flat([header, ns]);
|
|
80
|
+
};
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import cs from
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
{
|
|
5
|
-
const e =
|
|
6
|
-
'using System;\n' +
|
|
1
|
+
import cs from "./testlib.f.js";
|
|
2
|
+
const f = () => {
|
|
3
|
+
const e = 'using System;\n' +
|
|
7
4
|
'using System.Runtime.InteropServices;\n' +
|
|
8
5
|
'\n' +
|
|
9
6
|
'namespace My\n' +
|
|
@@ -38,8 +35,9 @@ const f = () =>
|
|
|
38
35
|
' [PreserveSig]\n' +
|
|
39
36
|
' void SetManagedStruct(ManagedStruct a);\n' +
|
|
40
37
|
' }\n' +
|
|
41
|
-
'}'
|
|
42
|
-
if (cs !== e) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
'}';
|
|
39
|
+
if (cs !== e) {
|
|
40
|
+
throw cs;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
export default f;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module generates Rust code for COM interop from a high-level type library definition.
|
|
3
|
+
*
|
|
4
|
+
* The module provides functions to define structs, traits, and implementations in Rust,
|
|
5
|
+
* specifically tailored for `nanocom` interoperation.
|
|
6
|
+
*/
|
|
7
|
+
import { type Library } from '../types/module.f.ts';
|
|
8
|
+
import * as Text from '../../text/module.f.ts';
|
|
9
|
+
/**
|
|
10
|
+
* Generates Rust code for the given type library.
|
|
11
|
+
*
|
|
12
|
+
* @param library - The library of type definitions to generate Rust code for.
|
|
13
|
+
* @returns A block of Rust code representing the library.
|
|
14
|
+
*/
|
|
15
|
+
export declare const rust: (library: Library) => Text.Block;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This module generates Rust code for COM interop from a high-level type library definition.
|
|
3
|
+
*
|
|
4
|
+
* The module provides functions to define structs, traits, and implementations in Rust,
|
|
5
|
+
* specifically tailored for `nanocom` interoperation.
|
|
6
|
+
*/
|
|
7
|
+
import { paramList } from "../types/module.f.js";
|
|
8
|
+
import * as Text from "../../text/module.f.js";
|
|
9
|
+
import * as O from "../../types/object/module.f.js";
|
|
10
|
+
import * as list from "../../types/list/module.f.js";
|
|
11
|
+
const { flat, map, flatMap } = list;
|
|
12
|
+
const { entries } = Object;
|
|
13
|
+
import * as func from "../../types/function/module.f.js";
|
|
14
|
+
const { fn } = func;
|
|
15
|
+
import * as string from "../../types/string/module.f.js";
|
|
16
|
+
const { join } = string;
|
|
17
|
+
const rustField = field => `pub ${field},`;
|
|
18
|
+
const mapRustField = map(rustField);
|
|
19
|
+
const rustStruct = b => name => [`#[repr(C)]`, `pub struct ${name} {`, mapRustField(b), `}`];
|
|
20
|
+
const commaJoin = join(', ');
|
|
21
|
+
const ref = name => `${name}::Ref`;
|
|
22
|
+
const obj = name => `&${name}::Object`;
|
|
23
|
+
const self = ['&self'];
|
|
24
|
+
const paramName = ([n]) => n;
|
|
25
|
+
const callList = p => map(paramName)(paramList(p));
|
|
26
|
+
const call = p => commaJoin(callList(p));
|
|
27
|
+
const virtualCall = p => commaJoin(flat([['self'], callList(p)]));
|
|
28
|
+
const super_ = 'super::';
|
|
29
|
+
const assign = ([n]) => `${n}: Self::${n},`;
|
|
30
|
+
const mapAssign = map(assign);
|
|
31
|
+
const this_ = ['this: &Object'];
|
|
32
|
+
const rustType = n => `pub type ${n} = nanocom::${n}<Interface>;`;
|
|
33
|
+
const whereContent = h => wh => {
|
|
34
|
+
const w = 'where' in wh ? [
|
|
35
|
+
h,
|
|
36
|
+
`where`,
|
|
37
|
+
mapComma(wh.where),
|
|
38
|
+
'{'
|
|
39
|
+
] : [`${h} {`];
|
|
40
|
+
const x = [
|
|
41
|
+
wh.content,
|
|
42
|
+
'}',
|
|
43
|
+
];
|
|
44
|
+
return flat([w, x]);
|
|
45
|
+
};
|
|
46
|
+
const rustImpl = i => {
|
|
47
|
+
const p = 'param' in i ? `<${i.param}>` : '';
|
|
48
|
+
const header = `impl${p} ${i.trait} for ${i.type}`;
|
|
49
|
+
return whereContent(header)(i);
|
|
50
|
+
};
|
|
51
|
+
const comma = s => `${s},`;
|
|
52
|
+
const mapComma = map(comma);
|
|
53
|
+
const trait = t => {
|
|
54
|
+
const p = t.pub === true ? 'pub ' : '';
|
|
55
|
+
const h = `${p}trait ${t.type}`;
|
|
56
|
+
return whereContent(h)(t);
|
|
57
|
+
};
|
|
58
|
+
const traitImpl = t => {
|
|
59
|
+
const i = rustImpl({
|
|
60
|
+
param: 'T',
|
|
61
|
+
trait: t.type,
|
|
62
|
+
type: 'T',
|
|
63
|
+
where,
|
|
64
|
+
content: [],
|
|
65
|
+
});
|
|
66
|
+
return flat([trait({ ...t, where }), i]);
|
|
67
|
+
};
|
|
68
|
+
const where = ['Self: nanocom::Class<Interface = Interface>', 'nanocom::CObject<Self>: Ex'];
|
|
69
|
+
/**
|
|
70
|
+
* Generates Rust code for the given type library.
|
|
71
|
+
*
|
|
72
|
+
* @param library - The library of type definitions to generate Rust code for.
|
|
73
|
+
* @returns A block of Rust code representing the library.
|
|
74
|
+
*/
|
|
75
|
+
export const rust = (library) => {
|
|
76
|
+
const type = p => {
|
|
77
|
+
const f = o => t => {
|
|
78
|
+
if (typeof t === 'string') {
|
|
79
|
+
return t;
|
|
80
|
+
}
|
|
81
|
+
if (t.length === 2) {
|
|
82
|
+
return `*const ${f(ref)(t[1])}`;
|
|
83
|
+
}
|
|
84
|
+
const [id] = t;
|
|
85
|
+
const fullId = `${p}${id}`;
|
|
86
|
+
return 'interface' in library[id] ? o(fullId) : fullId;
|
|
87
|
+
};
|
|
88
|
+
return f;
|
|
89
|
+
};
|
|
90
|
+
const pf = p => o => ([name, t]) => `${name}: ${type(p)(o)(t)}`;
|
|
91
|
+
const param = pf(super_)(obj);
|
|
92
|
+
const mapParam = map(param);
|
|
93
|
+
const mapField = map(pf('')(ref));
|
|
94
|
+
const struct = fn(entries)
|
|
95
|
+
.then(mapField)
|
|
96
|
+
.then(rustStruct)
|
|
97
|
+
.result;
|
|
98
|
+
const func = first => p => {
|
|
99
|
+
const resultStr = '_' in p ? ` -> ${type(super_)(ref)(p._)}` : '';
|
|
100
|
+
const params = commaJoin(flat([first, mapParam(paramList(p))]));
|
|
101
|
+
return `(${params})${resultStr}`;
|
|
102
|
+
};
|
|
103
|
+
const virtualFnType = n => p => `extern "system" fn${n}${func(this_)(p)}`;
|
|
104
|
+
const virtualFn = ([n, p]) => `${n}: unsafe ${virtualFnType('')(p)}`;
|
|
105
|
+
const mapVirtualFn = map(virtualFn);
|
|
106
|
+
const headerFn = ([n, p]) => `fn ${n}${func(self)(p)}`;
|
|
107
|
+
const traitFn = m => `${headerFn(m)};`;
|
|
108
|
+
const mapTraitFn = map(traitFn);
|
|
109
|
+
const implFn = m => {
|
|
110
|
+
const [n, p] = m;
|
|
111
|
+
return [
|
|
112
|
+
`${headerFn(m)} {`,
|
|
113
|
+
[`unsafe { (self.interface().${n})(${virtualCall(p)}) }`],
|
|
114
|
+
'}'
|
|
115
|
+
];
|
|
116
|
+
};
|
|
117
|
+
const flatMapImplFn = flatMap(implFn);
|
|
118
|
+
const impl = ([n, p]) => {
|
|
119
|
+
const type = virtualFnType(` ${n}`)(p);
|
|
120
|
+
return [
|
|
121
|
+
`${type} {`,
|
|
122
|
+
[`unsafe { nanocom::CObject::from_object_unchecked(this) }.${n}(${call(p)})`],
|
|
123
|
+
'}'
|
|
124
|
+
];
|
|
125
|
+
};
|
|
126
|
+
const flatMapImpl = flatMap(impl);
|
|
127
|
+
const interface_ = ({ interface: i, guid }) => name => {
|
|
128
|
+
const e = entries(i);
|
|
129
|
+
return [
|
|
130
|
+
`pub mod ${name} {`,
|
|
131
|
+
[
|
|
132
|
+
rustType('Object'),
|
|
133
|
+
rustType('Ref'),
|
|
134
|
+
rustType('Vmt'),
|
|
135
|
+
],
|
|
136
|
+
rustStruct(mapVirtualFn(e))('Interface'),
|
|
137
|
+
rustImpl({
|
|
138
|
+
trait: 'nanocom::Interface',
|
|
139
|
+
type: 'Interface',
|
|
140
|
+
content: [`const GUID: nanocom::GUID = 0x${guid.replaceAll('-', '_')};`]
|
|
141
|
+
}),
|
|
142
|
+
trait({ pub: true, type: 'Ex', content: mapTraitFn(e) }),
|
|
143
|
+
rustImpl({
|
|
144
|
+
trait: 'Ex',
|
|
145
|
+
type: 'Object',
|
|
146
|
+
content: flatMapImplFn(e)
|
|
147
|
+
}),
|
|
148
|
+
traitImpl({
|
|
149
|
+
pub: true,
|
|
150
|
+
type: 'ClassEx',
|
|
151
|
+
content: ['const VMT: Vmt = Vmt {',
|
|
152
|
+
['iunknown: nanocom::CObject::<Self>::IUNKNOWN,',
|
|
153
|
+
'interface: Interface {',
|
|
154
|
+
mapAssign(e),
|
|
155
|
+
'},',
|
|
156
|
+
],
|
|
157
|
+
'};'
|
|
158
|
+
]
|
|
159
|
+
}),
|
|
160
|
+
traitImpl({
|
|
161
|
+
type: 'PrivateClassEx',
|
|
162
|
+
content: flatMapImpl(e)
|
|
163
|
+
}),
|
|
164
|
+
'}'
|
|
165
|
+
];
|
|
166
|
+
};
|
|
167
|
+
const def = ([name, type]) => ('interface' in type ? interface_(type) : struct(type.struct))(name);
|
|
168
|
+
return flat([['#![allow(non_snake_case)]'], flatMap(def)(entries(library))]);
|
|
169
|
+
};
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import rust from
|
|
2
|
-
|
|
1
|
+
import rust from "./testlib.f.js";
|
|
3
2
|
export default () => {
|
|
4
|
-
const e =
|
|
5
|
-
'#![allow(non_snake_case)]\n' +
|
|
3
|
+
const e = '#![allow(non_snake_case)]\n' +
|
|
6
4
|
'#[repr(C)]\n' +
|
|
7
5
|
'pub struct Slice {\n' +
|
|
8
6
|
' pub Start: *const u8,\n' +
|
|
@@ -118,6 +116,8 @@ export default () => {
|
|
|
118
116
|
' nanocom::CObject<Self>: Ex,\n' +
|
|
119
117
|
' {\n' +
|
|
120
118
|
' }\n' +
|
|
121
|
-
'}'
|
|
122
|
-
if (rust !== e) {
|
|
123
|
-
|
|
119
|
+
'}';
|
|
120
|
+
if (rust !== e) {
|
|
121
|
+
throw rust;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type List } from '../../types/list/module.f.ts';
|
|
2
|
+
type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd';
|
|
3
|
+
type NodeJs = {
|
|
4
|
+
readonly dirname: string;
|
|
5
|
+
readonly platform: Platform;
|
|
6
|
+
};
|
|
7
|
+
type Output = {
|
|
8
|
+
readonly file: {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly content: string;
|
|
11
|
+
};
|
|
12
|
+
readonly line: List<List<string>>;
|
|
13
|
+
};
|
|
14
|
+
export type Func = (nodejs: NodeJs) => Output;
|
|
15
|
+
declare const _default: {
|
|
16
|
+
cpp: Func;
|
|
17
|
+
cs: Func;
|
|
18
|
+
rust: Func;
|
|
19
|
+
};
|
|
20
|
+
export default _default;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { flat } from "../../types/list/module.f.js";
|
|
2
|
+
import cppContent from "../cpp/testlib.f.js";
|
|
3
|
+
import csContent from "../cs/testlib.f.js";
|
|
4
|
+
import rustContent from "../rust/testlib.f.js";
|
|
5
|
+
const flags = platform => {
|
|
6
|
+
switch (platform) {
|
|
7
|
+
case 'win32':
|
|
8
|
+
return [];
|
|
9
|
+
case 'linux':
|
|
10
|
+
return ['-std=c++17', '-lstdc++', '-fPIC'];
|
|
11
|
+
default:
|
|
12
|
+
return ['-std=c++17', '-lc++'];
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const output = platform => name => {
|
|
16
|
+
switch (platform) {
|
|
17
|
+
case 'win32': return `${name}.dll`;
|
|
18
|
+
case 'darwin': return `lib${name}.dylib`;
|
|
19
|
+
default: return `lib${name}.so`;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const cpp = ({ dirname, platform }) => ({
|
|
23
|
+
file: {
|
|
24
|
+
name: `${dirname}/cpp/_result.hpp`,
|
|
25
|
+
content: cppContent(),
|
|
26
|
+
},
|
|
27
|
+
line: [
|
|
28
|
+
flat([
|
|
29
|
+
['clang', '-shared', '-o', output(platform)('testc')],
|
|
30
|
+
flags(platform),
|
|
31
|
+
[`${dirname}/cpp/main.cpp`],
|
|
32
|
+
]),
|
|
33
|
+
],
|
|
34
|
+
});
|
|
35
|
+
const cs = ({ dirname, platform }) => ({
|
|
36
|
+
file: {
|
|
37
|
+
name: `${dirname}/cs/_result.cs`,
|
|
38
|
+
content: csContent,
|
|
39
|
+
},
|
|
40
|
+
line: [
|
|
41
|
+
platform === 'win32'
|
|
42
|
+
? ['dotnet', 'run', '--project', `${dirname}/cs/cs.csproj`]
|
|
43
|
+
// .Net on Linux and MacOS doesn't properly support COM object marshalling
|
|
44
|
+
: ['dotnet', 'build', `${dirname}/cs/cs.csproj`]
|
|
45
|
+
],
|
|
46
|
+
});
|
|
47
|
+
const rust = ({ dirname }) => ({
|
|
48
|
+
file: {
|
|
49
|
+
name: `${dirname}/rust/src/_result.rs`,
|
|
50
|
+
content: rustContent,
|
|
51
|
+
},
|
|
52
|
+
line: [['cargo', 'build' /**, '--locked' */]]
|
|
53
|
+
});
|
|
54
|
+
export default {
|
|
55
|
+
cpp,
|
|
56
|
+
cs,
|
|
57
|
+
rust,
|
|
58
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as O from '../../types/object/module.f.ts';
|
|
2
|
+
import { type List } from '../../types/list/module.f.ts';
|
|
3
|
+
export type Library = {
|
|
4
|
+
readonly [k in string]: Definition;
|
|
5
|
+
};
|
|
6
|
+
export type Definition = Struct | Interface;
|
|
7
|
+
export type Struct = {
|
|
8
|
+
readonly struct: FieldArray;
|
|
9
|
+
};
|
|
10
|
+
export type FieldArray = {
|
|
11
|
+
readonly [k in string]: Type;
|
|
12
|
+
};
|
|
13
|
+
export type Field = O.Entry<Type>;
|
|
14
|
+
export type Interface = {
|
|
15
|
+
readonly interface: MethodArray;
|
|
16
|
+
readonly guid: string;
|
|
17
|
+
};
|
|
18
|
+
type MethodArray = {
|
|
19
|
+
readonly [k in string]: FieldArray;
|
|
20
|
+
};
|
|
21
|
+
export type Method = O.Entry<FieldArray>;
|
|
22
|
+
export type Type = BaseType | Id | Pointer;
|
|
23
|
+
type Id = readonly [string];
|
|
24
|
+
export type BaseType = 'u8' | 'i8' | 'u16' | 'i16' | 'u32' | 'i32' | 'u64' | 'i64' | 'usize' | 'isize' | 'f32' | 'f64' | 'bool';
|
|
25
|
+
type Pointer = readonly ['*', Type];
|
|
26
|
+
export declare const paramList: (fa: FieldArray) => List<Field>;
|
|
27
|
+
export declare const result: <T>(v: T) => (f: (type: Type) => T) => (fa: FieldArray) => T;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as O from "../../types/object/module.f.js";
|
|
2
|
+
import { filter } from "../../types/list/module.f.js";
|
|
3
|
+
import { compose } from "../../types/function/module.f.js";
|
|
4
|
+
const { entries } = Object;
|
|
5
|
+
const isParam = ([name]) => name !== '_';
|
|
6
|
+
const filterParam = filter(isParam);
|
|
7
|
+
export const paramList = compose(entries)(filterParam);
|
|
8
|
+
export const result = v => f => fa => '_' in fa ? f(fa._) : v;
|