diff --git a/Cargo.toml b/Cargo.toml index 593142f..b66f034 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,6 +6,6 @@ version = "0.1.4" # follows argus version crate-type = ["cdylib"] [dependencies] -argus = { git="https://deemz.org/git/research/argus.git", branch="dev" } +argus = { git = "https://deemz.org/git/research/argus.git", branch = "dev" } wasm-bindgen = "0.2.105" diff --git a/pkg/argus_wasm.d.ts b/pkg/argus_wasm.d.ts new file mode 100644 index 0000000..485cfc4 --- /dev/null +++ b/pkg/argus_wasm.d.ts @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ +export function parse_str(s: string): WrappedExpr; +export class WrappedExpr { + private constructor(); + free(): void; + [Symbol.dispose](): void; +} diff --git a/pkg/argus_wasm.js b/pkg/argus_wasm.js new file mode 100644 index 0000000..b79de6a --- /dev/null +++ b/pkg/argus_wasm.js @@ -0,0 +1,5 @@ +import * as wasm from "./argus_wasm_bg.wasm"; +export * from "./argus_wasm_bg.js"; +import { __wbg_set_wasm } from "./argus_wasm_bg.js"; +__wbg_set_wasm(wasm); +wasm.__wbindgen_start(); diff --git a/pkg/argus_wasm_bg.js b/pkg/argus_wasm_bg.js new file mode 100644 index 0000000..a3f278d --- /dev/null +++ b/pkg/argus_wasm_bg.js @@ -0,0 +1,143 @@ +let wasm; +export function __wbg_set_wasm(val) { + wasm = val; +} + + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +const MAX_SAFARI_DECODE_BYTES = 2146435072; +let numBytesDecoded = 0; +function decodeText(ptr, len) { + numBytesDecoded += len; + if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) { + cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + cachedTextDecoder.decode(); + numBytesDecoded = len; + } + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return decodeText(ptr, len); +} + +let WASM_VECTOR_LEN = 0; + +const cachedTextEncoder = new TextEncoder(); + +if (!('encodeInto' in cachedTextEncoder)) { + cachedTextEncoder.encodeInto = function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; + } +} + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = cachedTextEncoder.encodeInto(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} +/** + * @param {string} s + * @returns {WrappedExpr} + */ +export function parse_str(s) { + const ptr0 = passStringToWasm0(s, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parse_str(ptr0, len0); + return WrappedExpr.__wrap(ret); +} + +const WrappedExprFinalization = (typeof FinalizationRegistry === 'undefined') + ? { register: () => {}, unregister: () => {} } + : new FinalizationRegistry(ptr => wasm.__wbg_wrappedexpr_free(ptr >>> 0, 1)); + +export class WrappedExpr { + + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(WrappedExpr.prototype); + obj.__wbg_ptr = ptr; + WrappedExprFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + WrappedExprFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_wrappedexpr_free(ptr, 0); + } +} +if (Symbol.dispose) WrappedExpr.prototype[Symbol.dispose] = WrappedExpr.prototype.free; + +export function __wbg___wbindgen_throw_b855445ff6a94295(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +export function __wbindgen_init_externref_table() { + const table = wasm.__wbindgen_externrefs; + const offset = table.grow(4); + table.set(0, undefined); + table.set(offset + 0, undefined); + table.set(offset + 1, null); + table.set(offset + 2, true); + table.set(offset + 3, false); + ; +}; + diff --git a/pkg/argus_wasm_bg.wasm b/pkg/argus_wasm_bg.wasm new file mode 100644 index 0000000..13893dc Binary files /dev/null and b/pkg/argus_wasm_bg.wasm differ diff --git a/pkg/argus_wasm_bg.wasm.d.ts b/pkg/argus_wasm_bg.wasm.d.ts new file mode 100644 index 0000000..2d215e3 --- /dev/null +++ b/pkg/argus_wasm_bg.wasm.d.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export const __wbg_wrappedexpr_free: (a: number, b: number) => void; +export const parse_str: (a: number, b: number) => number; +export const __wbindgen_externrefs: WebAssembly.Table; +export const __wbindgen_malloc: (a: number, b: number) => number; +export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; +export const __wbindgen_start: () => void; diff --git a/pkg/package.json b/pkg/package.json new file mode 100644 index 0000000..6ebca31 --- /dev/null +++ b/pkg/package.json @@ -0,0 +1,17 @@ +{ + "name": "argus-wasm", + "type": "module", + "version": "0.1.4", + "files": [ + "argus_wasm_bg.wasm", + "argus_wasm.js", + "argus_wasm_bg.js", + "argus_wasm.d.ts" + ], + "main": "argus_wasm.js", + "types": "argus_wasm.d.ts", + "sideEffects": [ + "./argus_wasm.js", + "./snippets/*" + ] +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index e7a11a9..800e5c8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,3 +1,33 @@ -fn main() { - println!("Hello, world!"); +extern crate wasm_bindgen; +extern crate argus; + +use wasm_bindgen::prelude::*; +use argus::expr::Expr; + +// use chumsky::prelude::Rich; + + +// macro_rules! wasmbind_fn { +// ($name:ident($($arg:ident: $t:ty),*) -> $ret:ty) => { +// #[wasm_bindgen] +// pub fn $name($($arg: $t),*) -> $ret { +// my_lib::$name($($arg),*) +// } +// }; +// } + +// wasmbind_fn!(parse_str(s: &str) -> Result>>); + +#[wasm_bindgen] +pub struct WrappedExpr { + expr: Expr, } + +#[wasm_bindgen] +pub fn parse_str(s: &str) -> WrappedExpr { + let expr = argus::parse_str(s); + return WrappedExpr{ + expr: expr.expect("fuck!!!!"), + }; +} +