JavaScript foreign function interface working
This commit is contained in:
parent
fb1d42d910
commit
ad0e6843b7
553
package-lock.json
generated
553
package-lock.json
generated
@ -4,554 +4,25 @@
|
|||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"ansi-regex": {
|
"bindings": {
|
||||||
"version": "2.1.1",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
|
||||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
|
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
|
||||||
},
|
|
||||||
"ansi-styles": {
|
|
||||||
"version": "2.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
|
|
||||||
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
|
|
||||||
},
|
|
||||||
"archiver": {
|
|
||||||
"version": "1.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/archiver/-/archiver-1.3.0.tgz",
|
|
||||||
"integrity": "sha1-TyGU1tj5nfP1MeaIHxTxXVX6ryI=",
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"archiver-utils": "^1.3.0",
|
"file-uri-to-path": "1.0.0"
|
||||||
"async": "^2.0.0",
|
|
||||||
"buffer-crc32": "^0.2.1",
|
|
||||||
"glob": "^7.0.0",
|
|
||||||
"lodash": "^4.8.0",
|
|
||||||
"readable-stream": "^2.0.0",
|
|
||||||
"tar-stream": "^1.5.0",
|
|
||||||
"walkdir": "^0.0.11",
|
|
||||||
"zip-stream": "^1.1.0"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"archiver-utils": {
|
"file-uri-to-path": {
|
||||||
"version": "1.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz",
|
|
||||||
"integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=",
|
|
||||||
"requires": {
|
|
||||||
"glob": "^7.0.0",
|
|
||||||
"graceful-fs": "^4.1.0",
|
|
||||||
"lazystream": "^1.0.0",
|
|
||||||
"lodash": "^4.8.0",
|
|
||||||
"normalize-path": "^2.0.0",
|
|
||||||
"readable-stream": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"async": {
|
|
||||||
"version": "2.6.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
|
||||||
"integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==",
|
|
||||||
"requires": {
|
|
||||||
"lodash": "^4.17.14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"balanced-match": {
|
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
|
||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
|
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
|
||||||
},
|
},
|
||||||
"base64-js": {
|
"wasi": {
|
||||||
"version": "1.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
|
|
||||||
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
|
|
||||||
},
|
|
||||||
"bl": {
|
|
||||||
"version": "1.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
|
|
||||||
"integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==",
|
|
||||||
"requires": {
|
|
||||||
"readable-stream": "^2.3.5",
|
|
||||||
"safe-buffer": "^5.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"block-stream": {
|
|
||||||
"version": "0.0.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
|
|
||||||
"integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
|
|
||||||
"requires": {
|
|
||||||
"inherits": "~2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bluebird": {
|
|
||||||
"version": "2.11.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
|
|
||||||
"integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
|
|
||||||
},
|
|
||||||
"brace-expansion": {
|
|
||||||
"version": "1.1.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
||||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
|
||||||
"requires": {
|
|
||||||
"balanced-match": "^1.0.0",
|
|
||||||
"concat-map": "0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buffer": {
|
|
||||||
"version": "5.7.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
|
|
||||||
"integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
|
|
||||||
"requires": {
|
|
||||||
"base64-js": "^1.3.1",
|
|
||||||
"ieee754": "^1.1.13"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buffer-alloc": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
|
|
||||||
"requires": {
|
|
||||||
"buffer-alloc-unsafe": "^1.1.0",
|
|
||||||
"buffer-fill": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buffer-alloc-unsafe": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="
|
|
||||||
},
|
|
||||||
"buffer-crc32": {
|
|
||||||
"version": "0.2.13",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
|
||||||
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
|
|
||||||
},
|
|
||||||
"buffer-fill": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw="
|
|
||||||
},
|
|
||||||
"buffer-from": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
|
|
||||||
},
|
|
||||||
"chalk": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
|
||||||
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^2.2.1",
|
|
||||||
"escape-string-regexp": "^1.0.2",
|
|
||||||
"has-ansi": "^2.0.0",
|
|
||||||
"strip-ansi": "^3.0.0",
|
|
||||||
"supports-color": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commander": {
|
|
||||||
"version": "2.20.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
|
||||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
|
|
||||||
},
|
|
||||||
"compress-commons": {
|
|
||||||
"version": "1.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
|
|
||||||
"integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
|
|
||||||
"requires": {
|
|
||||||
"buffer-crc32": "^0.2.1",
|
|
||||||
"crc32-stream": "^2.0.0",
|
|
||||||
"normalize-path": "^2.0.0",
|
|
||||||
"readable-stream": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"concat-map": {
|
|
||||||
"version": "0.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
|
|
||||||
},
|
|
||||||
"concat-stream": {
|
|
||||||
"version": "1.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
|
|
||||||
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
|
|
||||||
"requires": {
|
|
||||||
"buffer-from": "^1.0.0",
|
|
||||||
"inherits": "^2.0.3",
|
|
||||||
"readable-stream": "^2.2.2",
|
|
||||||
"typedarray": "^0.0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"core-util-is": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
|
|
||||||
},
|
|
||||||
"crc": {
|
|
||||||
"version": "3.8.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
|
|
||||||
"integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==",
|
|
||||||
"requires": {
|
|
||||||
"buffer": "^5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"crc32-stream": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
|
|
||||||
"requires": {
|
|
||||||
"crc": "^3.4.4",
|
|
||||||
"readable-stream": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"debug": {
|
|
||||||
"version": "2.6.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
|
||||||
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
|
||||||
"requires": {
|
|
||||||
"ms": "2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"end-of-stream": {
|
|
||||||
"version": "1.4.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
|
||||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
|
||||||
"requires": {
|
|
||||||
"once": "^1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"escape-string-regexp": {
|
|
||||||
"version": "1.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
|
||||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
|
|
||||||
},
|
|
||||||
"extract-zip": {
|
|
||||||
"version": "1.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
|
|
||||||
"integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
|
|
||||||
"requires": {
|
|
||||||
"concat-stream": "^1.6.2",
|
|
||||||
"debug": "^2.6.9",
|
|
||||||
"mkdirp": "^0.5.4",
|
|
||||||
"yauzl": "^2.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fd-slicer": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
|
|
||||||
"requires": {
|
|
||||||
"pend": "~1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"follow-redirects": {
|
|
||||||
"version": "1.13.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz",
|
|
||||||
"integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA=="
|
|
||||||
},
|
|
||||||
"fs-constants": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
|
|
||||||
},
|
|
||||||
"fs.realpath": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
|
|
||||||
},
|
|
||||||
"fstream": {
|
|
||||||
"version": "1.0.12",
|
|
||||||
"resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz",
|
|
||||||
"integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==",
|
|
||||||
"requires": {
|
|
||||||
"graceful-fs": "^4.1.2",
|
|
||||||
"inherits": "~2.0.0",
|
|
||||||
"mkdirp": ">=0.5 0",
|
|
||||||
"rimraf": "2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"glob": {
|
|
||||||
"version": "7.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
|
||||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
|
||||||
"requires": {
|
|
||||||
"fs.realpath": "^1.0.0",
|
|
||||||
"inflight": "^1.0.4",
|
|
||||||
"inherits": "2",
|
|
||||||
"minimatch": "^3.0.4",
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"path-is-absolute": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"graceful-fs": {
|
|
||||||
"version": "4.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
|
|
||||||
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
|
|
||||||
},
|
|
||||||
"has-ansi": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
|
|
||||||
"requires": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ieee754": {
|
|
||||||
"version": "1.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
|
|
||||||
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
|
|
||||||
},
|
|
||||||
"inflight": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
||||||
"requires": {
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
|
||||||
},
|
|
||||||
"isarray": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
|
|
||||||
},
|
|
||||||
"lazystream": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
|
|
||||||
"requires": {
|
|
||||||
"readable-stream": "^2.0.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.20",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
|
|
||||||
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA=="
|
|
||||||
},
|
|
||||||
"minimatch": {
|
|
||||||
"version": "3.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
|
||||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
|
||||||
"requires": {
|
|
||||||
"brace-expansion": "^1.1.7"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"minimist": {
|
|
||||||
"version": "1.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
|
|
||||||
},
|
|
||||||
"mkdirp": {
|
|
||||||
"version": "0.5.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
|
|
||||||
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
|
|
||||||
"requires": {
|
|
||||||
"minimist": "^1.2.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mout": {
|
|
||||||
"version": "0.11.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz",
|
|
||||||
"integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k="
|
|
||||||
},
|
|
||||||
"ms": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
|
||||||
},
|
|
||||||
"normalize-path": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
|
|
||||||
"requires": {
|
|
||||||
"remove-trailing-separator": "^1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"requires": {
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"os-tmpdir": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
|
|
||||||
},
|
|
||||||
"path-is-absolute": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
|
|
||||||
},
|
|
||||||
"pend": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA="
|
|
||||||
},
|
|
||||||
"process-nextick-args": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
|
||||||
},
|
|
||||||
"readable-stream": {
|
|
||||||
"version": "2.3.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
|
||||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
|
||||||
"requires": {
|
|
||||||
"core-util-is": "~1.0.0",
|
|
||||||
"inherits": "~2.0.3",
|
|
||||||
"isarray": "~1.0.0",
|
|
||||||
"process-nextick-args": "~2.0.0",
|
|
||||||
"safe-buffer": "~5.1.1",
|
|
||||||
"string_decoder": "~1.1.1",
|
|
||||||
"util-deprecate": "~1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"remove-trailing-separator": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8="
|
|
||||||
},
|
|
||||||
"rimraf": {
|
|
||||||
"version": "2.7.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
|
|
||||||
"integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
|
|
||||||
"requires": {
|
|
||||||
"glob": "^7.1.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
|
||||||
},
|
|
||||||
"string_decoder": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
|
||||||
"requires": {
|
|
||||||
"safe-buffer": "~5.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"strip-ansi": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
|
||||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
|
||||||
"requires": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
|
|
||||||
},
|
|
||||||
"tar": {
|
|
||||||
"version": "2.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz",
|
|
||||||
"integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==",
|
|
||||||
"requires": {
|
|
||||||
"block-stream": "*",
|
|
||||||
"fstream": "^1.0.12",
|
|
||||||
"inherits": "2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tar-stream": {
|
|
||||||
"version": "1.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
|
|
||||||
"integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
|
|
||||||
"requires": {
|
|
||||||
"bl": "^1.0.0",
|
|
||||||
"buffer-alloc": "^1.2.0",
|
|
||||||
"end-of-stream": "^1.0.0",
|
|
||||||
"fs-constants": "^1.0.0",
|
|
||||||
"readable-stream": "^2.3.0",
|
|
||||||
"to-buffer": "^1.1.1",
|
|
||||||
"xtend": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tar.gz": {
|
|
||||||
"version": "1.0.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz",
|
|
||||||
"integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==",
|
|
||||||
"requires": {
|
|
||||||
"bluebird": "^2.9.34",
|
|
||||||
"commander": "^2.8.1",
|
|
||||||
"fstream": "^1.0.8",
|
|
||||||
"mout": "^0.11.0",
|
|
||||||
"tar": "^2.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tmp": {
|
|
||||||
"version": "0.0.31",
|
|
||||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
|
|
||||||
"integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
|
|
||||||
"requires": {
|
|
||||||
"os-tmpdir": "~1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"to-buffer": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg=="
|
|
||||||
},
|
|
||||||
"typedarray": {
|
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/wasi/-/wasi-0.0.6.tgz",
|
||||||
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
|
"integrity": "sha512-D3f4Q/3LojW1uMloOC1OuFlGy2u22hLqpskAz0OkmoYeWIwVYf8XBuc9ihDGJnNf3lfNvqM4s0030sN0UUXExw==",
|
||||||
},
|
|
||||||
"util-deprecate": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
|
||||||
},
|
|
||||||
"walkdir": {
|
|
||||||
"version": "0.0.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz",
|
|
||||||
"integrity": "sha1-oW0CXrkxvQO1LzCMrtD0D86+lTI="
|
|
||||||
},
|
|
||||||
"webassembly": {
|
|
||||||
"version": "0.11.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/webassembly/-/webassembly-0.11.0.tgz",
|
|
||||||
"integrity": "sha1-BtIcg7vZKxc+2kTQhuL1ENIOjRQ=",
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"archiver": "^1.3.0",
|
"bindings": "^1.5.0"
|
||||||
"chalk": "^1.1.3",
|
|
||||||
"extract-zip": "^1.6.5",
|
|
||||||
"follow-redirects": "^1.2.3",
|
|
||||||
"glob": "^7.1.1",
|
|
||||||
"minimist": "^1.2.0",
|
|
||||||
"tar.gz": "^1.0.5",
|
|
||||||
"tmp": "0.0.31"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
|
||||||
},
|
|
||||||
"xtend": {
|
|
||||||
"version": "4.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
|
||||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
|
||||||
},
|
|
||||||
"yauzl": {
|
|
||||||
"version": "2.10.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
|
||||||
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
|
|
||||||
"requires": {
|
|
||||||
"buffer-crc32": "~0.2.3",
|
|
||||||
"fd-slicer": "~1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"zip-stream": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-qLxF9MG0lpnGuQGYuqyqzbzUugQ=",
|
|
||||||
"requires": {
|
|
||||||
"archiver-utils": "^1.3.0",
|
|
||||||
"compress-commons": "^1.2.0",
|
|
||||||
"lodash": "^4.8.0",
|
|
||||||
"readable-stream": "^2.0.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
"description": "Pivot is a new programming language built with Rust by Garen Tyler. Pivot is currently in the alpha stage of development.",
|
"description": "Pivot is a new programming language built with Rust by Garen Tyler. Pivot is currently in the alpha stage of development.",
|
||||||
"main": "test.js",
|
"main": "test.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"webassembly": "^0.11.0"
|
"wasi": "0.0.6"
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
12
src/ast.rs
12
src/ast.rs
@ -26,6 +26,8 @@ pub enum AstNodeKind {
|
|||||||
VariableDefinition,
|
VariableDefinition,
|
||||||
VariableDeclaration,
|
VariableDeclaration,
|
||||||
Assign,
|
Assign,
|
||||||
|
// Import
|
||||||
|
Import,
|
||||||
// Blank node
|
// Blank node
|
||||||
Null,
|
Null,
|
||||||
}
|
}
|
||||||
@ -191,6 +193,16 @@ impl AstNode {
|
|||||||
subnodes: vec![value],
|
subnodes: vec![value],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Import
|
||||||
|
pub fn import(num_args: AstNode, returns_value: AstNode, mut fn_path: Vec<AstNode>) -> AstNode {
|
||||||
|
let mut data = vec![num_args, returns_value];
|
||||||
|
data.append(&mut fn_path);
|
||||||
|
AstNode {
|
||||||
|
kind: AstNodeKind::Import,
|
||||||
|
value: "import".into(),
|
||||||
|
subnodes: data,
|
||||||
|
}
|
||||||
|
}
|
||||||
// Blank node
|
// Blank node
|
||||||
pub fn null() -> AstNode {
|
pub fn null() -> AstNode {
|
||||||
AstNode {
|
AstNode {
|
||||||
|
@ -154,6 +154,30 @@ impl Wasm for AstNode {
|
|||||||
}
|
}
|
||||||
VariableDeclaration => format!("(local ${} i32)", self.value),
|
VariableDeclaration => format!("(local ${} i32)", self.value),
|
||||||
Assign => format!("(set_local ${} {})", self.value, self.subnodes[0].emit(s)),
|
Assign => format!("(set_local ${} {})", self.value, self.subnodes[0].emit(s)),
|
||||||
|
// Import
|
||||||
|
Import => {
|
||||||
|
r#"(import "console" "log" (func $log (param i32)))"#.into()
|
||||||
|
// let mut out = String::new();
|
||||||
|
// out += "(import";
|
||||||
|
// let num_args = self.subnodes[0].clone().value.parse::<u32>().unwrap();
|
||||||
|
// let returns_value = self.subnodes[1].clone().value.parse::<u32>().unwrap() > 0;
|
||||||
|
// // (import "console" "log" (func $log (param i32)))
|
||||||
|
// out += &format!(" \"{}\"", self.subnodes[2].value.clone());
|
||||||
|
// let mut combined_name = self.subnodes[2].value.clone();
|
||||||
|
// for path in self.subnodes[3..].iter() {
|
||||||
|
// out += &format!(" \"{}\"", path.value.clone());
|
||||||
|
// combined_name += &format!("_{}", path.value.clone());
|
||||||
|
// }
|
||||||
|
// out += &format!(" (func ${}", combined_name);
|
||||||
|
// for _ in 0..num_args {
|
||||||
|
// out += " (param i32)";
|
||||||
|
// }
|
||||||
|
// if returns_value {
|
||||||
|
// out += " (result i32)";
|
||||||
|
// }
|
||||||
|
// out += "))";
|
||||||
|
// out
|
||||||
|
}
|
||||||
// Blank node / other
|
// Blank node / other
|
||||||
Null | _ => "".into(),
|
Null | _ => "".into(),
|
||||||
}
|
}
|
||||||
|
@ -12,5 +12,9 @@ pub fn compile<T: Into<String>>(src: T) -> Vec<u8> {
|
|||||||
|
|
||||||
pub fn compile_wat<T: Into<String>>(src: T) -> String {
|
pub fn compile_wat<T: Into<String>>(src: T) -> String {
|
||||||
let mut s = SymbolGenerator::new();
|
let mut s = SymbolGenerator::new();
|
||||||
parse::parse(src).emit(&mut s)
|
let ast = parse::parse(src);
|
||||||
|
println!("{}", ast);
|
||||||
|
let wasm = ast.emit(&mut s);
|
||||||
|
println!("{}", wasm);
|
||||||
|
wasm
|
||||||
}
|
}
|
||||||
|
@ -45,13 +45,53 @@ fn parse_statement(src: String) -> Result<(String, String), String> {
|
|||||||
let right_brace = token(r"[}]");
|
let right_brace = token(r"[}]");
|
||||||
let while_token = token(r"while\b");
|
let while_token = token(r"while\b");
|
||||||
let var = token(r"var\b");
|
let var = token(r"var\b");
|
||||||
|
let number = token(r"[0-9]+").map(|matched| {
|
||||||
|
Ok(to_string(&AstNode::integer(
|
||||||
|
matched.parse::<i64>().unwrap(),
|
||||||
|
))?)
|
||||||
|
});
|
||||||
let identifier = token(r"[a-zA-Z_][a-zA-Z0-9_]*")
|
let identifier = token(r"[a-zA-Z_][a-zA-Z0-9_]*")
|
||||||
.map(|matched| Ok(to_string(&AstNode::identifier(matched))?));
|
.map(|matched| Ok(to_string(&AstNode::identifier(matched))?));
|
||||||
let assign =
|
let assign =
|
||||||
token(r"=").map(|_matched| Ok(to_string(&AstNode::assign("".into(), AstNode::null()))?));
|
token(r"=").map(|_matched| Ok(to_string(&AstNode::assign("".into(), AstNode::null()))?));
|
||||||
let comma = token(r"[,]");
|
let comma = token(r"[,]");
|
||||||
|
let period = token(r"[.]");
|
||||||
let expression = Parser::custom(parse_expression);
|
let expression = Parser::custom(parse_expression);
|
||||||
let statement = Parser::custom(parse_statement);
|
let statement = Parser::custom(parse_statement);
|
||||||
|
let import = token(r"import\b");
|
||||||
|
// Statement parsers.
|
||||||
|
let import_statement = import
|
||||||
|
.clone()
|
||||||
|
.ignore()
|
||||||
|
.and(identifier.clone())
|
||||||
|
.and(
|
||||||
|
period
|
||||||
|
.clone()
|
||||||
|
.ignore()
|
||||||
|
.and(identifier.clone())
|
||||||
|
.repeat_range(0..usize::MAX),
|
||||||
|
)
|
||||||
|
.and(number.clone())
|
||||||
|
.and(number.clone())
|
||||||
|
.and(semicolon.clone().ignore())
|
||||||
|
.map(|matched| {
|
||||||
|
let data = from_str::<Vec<String>>(&matched)?;
|
||||||
|
let import_fn_returns_value = from_str::<AstNode>(&data[1])?;
|
||||||
|
let data = from_str::<Vec<String>>(&data[0])?;
|
||||||
|
let num_import_fn_args = from_str::<AstNode>(&data[1])?;
|
||||||
|
let data = from_str::<Vec<String>>(&data[0])?;
|
||||||
|
let mut import_fn_path = vec![];
|
||||||
|
import_fn_path.push(from_str::<AstNode>(&data[0])?);
|
||||||
|
let data = from_str::<Vec<String>>(&data[1])?;
|
||||||
|
for d in data {
|
||||||
|
import_fn_path.push(from_str::<AstNode>(&d)?);
|
||||||
|
}
|
||||||
|
Ok(to_string(&AstNode::import(
|
||||||
|
num_import_fn_args,
|
||||||
|
import_fn_returns_value,
|
||||||
|
import_fn_path,
|
||||||
|
))?)
|
||||||
|
});
|
||||||
let return_statement = return_token
|
let return_statement = return_token
|
||||||
.clone()
|
.clone()
|
||||||
.ignore()
|
.ignore()
|
||||||
@ -216,6 +256,7 @@ fn parse_statement(src: String) -> Result<(String, String), String> {
|
|||||||
});
|
});
|
||||||
return_statement
|
return_statement
|
||||||
.clone()
|
.clone()
|
||||||
|
.or(import_statement.clone())
|
||||||
.or(if_statement.clone())
|
.or(if_statement.clone())
|
||||||
.or(while_statement.clone())
|
.or(while_statement.clone())
|
||||||
.or(var_statement.clone())
|
.or(var_statement.clone())
|
||||||
@ -276,9 +317,8 @@ fn parse_expression(src: String) -> Result<(String, String), String> {
|
|||||||
AstNode::null(),
|
AstNode::null(),
|
||||||
))?)
|
))?)
|
||||||
});
|
});
|
||||||
// Expression parser.
|
// Expression parsers.
|
||||||
let expression = Parser::custom(parse_expression);
|
let expression = Parser::custom(parse_expression);
|
||||||
// Call parser.
|
|
||||||
let args = expression
|
let args = expression
|
||||||
.clone()
|
.clone()
|
||||||
.and(
|
.and(
|
||||||
@ -316,7 +356,6 @@ fn parse_expression(src: String) -> Result<(String, String), String> {
|
|||||||
}
|
}
|
||||||
Ok(to_string(&AstNode::function_call(callee, ast_args))?)
|
Ok(to_string(&AstNode::function_call(callee, ast_args))?)
|
||||||
});
|
});
|
||||||
// Atom parser.
|
|
||||||
let atom = call
|
let atom = call
|
||||||
.clone()
|
.clone()
|
||||||
.or(identifier.clone())
|
.or(identifier.clone())
|
||||||
@ -326,7 +365,6 @@ fn parse_expression(src: String) -> Result<(String, String), String> {
|
|||||||
.ignore()
|
.ignore()
|
||||||
.and(expression.clone())
|
.and(expression.clone())
|
||||||
.and(right_paren.clone().ignore()));
|
.and(right_paren.clone().ignore()));
|
||||||
// Unary operator parsers.
|
|
||||||
let unary = not.clone().optional().and(atom.clone()).map(|matched| {
|
let unary = not.clone().optional().and(atom.clone()).map(|matched| {
|
||||||
let data = from_str::<Vec<String>>(&matched)?;
|
let data = from_str::<Vec<String>>(&matched)?;
|
||||||
let atom_data = from_str::<AstNode>(&data[1])?;
|
let atom_data = from_str::<AstNode>(&data[1])?;
|
||||||
@ -335,7 +373,6 @@ fn parse_expression(src: String) -> Result<(String, String), String> {
|
|||||||
_ => atom_data,
|
_ => atom_data,
|
||||||
})?)
|
})?)
|
||||||
});
|
});
|
||||||
// Infix operator parsers.
|
|
||||||
let infix = |operator_parser: Parser, term_parser: Parser| {
|
let infix = |operator_parser: Parser, term_parser: Parser| {
|
||||||
term_parser
|
term_parser
|
||||||
.clone()
|
.clone()
|
||||||
|
26
test.js
26
test.js
@ -1,5 +1,21 @@
|
|||||||
require("webassembly")
|
'use strict';
|
||||||
.load("out.wasm")
|
const fs = require('fs');
|
||||||
.then(module => {
|
const WASI = require('wasi');
|
||||||
console.log("3 + 2 is " + module.exports.main());
|
const wasi = new WASI({
|
||||||
});
|
args: process.argv,
|
||||||
|
env: process.env,
|
||||||
|
preopens: {
|
||||||
|
'/sandbox': __dirname
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const importObject = {
|
||||||
|
wasi_snapshot_preview1: wasi.wasiImport,
|
||||||
|
console,
|
||||||
|
};
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
const wasm = await WebAssembly.compile(fs.readFileSync('./out.wasm'));
|
||||||
|
const instance = await WebAssembly.instantiate(wasm, importObject);
|
||||||
|
|
||||||
|
instance.exports.main();
|
||||||
|
})();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user