mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-12-24 10:41:57 +03:00
Adds initial wasm template
This commit is contained in:
parent
1b99c42470
commit
b751e870e5
@ -1,5 +1,2 @@
|
|||||||
[build]
|
[target.'cfg(not(target_arch = "wasm32"))']
|
||||||
rustflags = ["-C", "target-cpu=native"]
|
rustflags = ["-C", "target-cpu=native"]
|
||||||
|
|
||||||
[net]
|
|
||||||
git-fetch-with-cli = true
|
|
||||||
|
79
Cargo.lock
generated
79
Cargo.lock
generated
@ -50,9 +50,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "anyhow"
|
name = "anyhow"
|
||||||
version = "1.0.37"
|
version = "1.0.38"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ee67c11feeac938fae061b232e38e0b6d94f97a9df10e6271319325ac4c56a86"
|
checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "arrayref"
|
name = "arrayref"
|
||||||
@ -385,6 +385,16 @@ dependencies = [
|
|||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "console_error_panic_hook"
|
||||||
|
version = "0.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b8d976903543e0c48546a91908f21588a680a8c8f984df9a5d69feccb2b2a211"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if 0.1.10",
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "const_fn"
|
name = "const_fn"
|
||||||
version = "0.4.4"
|
version = "0.4.4"
|
||||||
@ -1188,9 +1198,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.46"
|
version = "0.3.47"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cf3d7383929f7c9c7c2d0fa596f325832df98c3704f2c60553080f7127a58175"
|
checksum = "5cfb73131c35423a367daf8cbd24100af0d077668c8c2943f0e7dd775fef0f65"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
@ -1422,6 +1432,19 @@ dependencies = [
|
|||||||
"thiserror",
|
"thiserror",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "leo-wasm"
|
||||||
|
version = "1.2.0"
|
||||||
|
dependencies = [
|
||||||
|
"js-sys",
|
||||||
|
"leo-asg",
|
||||||
|
"leo-ast",
|
||||||
|
"leo-grammar",
|
||||||
|
"serde",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-test",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.81"
|
version = "0.2.81"
|
||||||
@ -3158,9 +3181,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3cd364751395ca0f68cafb17666eee36b63077fb5ecd972bbcd74c90c4bf736e"
|
checksum = "55c0f7123de74f0dab9b7d00fd614e7b19349cd1e2f5252bbe9b1754b59433be"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"serde",
|
"serde",
|
||||||
@ -3170,9 +3193,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1114f89ab1f4106e5b55e688b828c0ab0ea593a1ea7c094b141b14cbaaec2d62"
|
checksum = "7bc45447f0d4573f3d65720f636bbcc3dd6ce920ed704670118650bcd47764c7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
@ -3185,9 +3208,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-futures"
|
name = "wasm-bindgen-futures"
|
||||||
version = "0.4.19"
|
version = "0.4.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1fe9756085a84584ee9457a002b7cdfe0bfff169f45d2591d8be1345a6780e35"
|
checksum = "3de431a2910c86679c34283a33f66f4e4abd7e0aec27b6669060148872aadf94"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
@ -3197,9 +3220,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7a6ac8995ead1f084a8dea1e65f194d0973800c7f571f6edd70adf06ecf77084"
|
checksum = "3b8853882eef39593ad4174dd26fc9865a64e84026d223f63bb2c42affcbba2c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote 1.0.7",
|
"quote 1.0.7",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
@ -3207,9 +3230,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5a48c72f299d80557c7c62e37e7225369ecc0c963964059509fbafe917c7549"
|
checksum = "4133b5e7f2a531fa413b3a1695e925038a05a71cf67e87dafa295cb645a01385"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2 1.0.24",
|
"proc-macro2 1.0.24",
|
||||||
"quote 1.0.7",
|
"quote 1.0.7",
|
||||||
@ -3220,9 +3243,33 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.69"
|
version = "0.2.70"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7e7811dd7f9398f14cc76efd356f98f03aa30419dea46aa810d71e819fc97158"
|
checksum = "dd4945e4943ae02d15c13962b38a5b1e81eadd4b71214eee75af64a4d6a4fd64"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-test"
|
||||||
|
version = "0.3.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f0d4da138503a4cf86801b94d95781ee3619faa8feca830569cc6b54997b8b5c"
|
||||||
|
dependencies = [
|
||||||
|
"console_error_panic_hook",
|
||||||
|
"js-sys",
|
||||||
|
"scoped-tls",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"wasm-bindgen-futures",
|
||||||
|
"wasm-bindgen-test-macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-test-macro"
|
||||||
|
version = "0.3.20"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c3199c33f06500c731d5544664c24d0c2b742b98debc6b1c6f0c6d6e8fb7c19b"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2 1.0.24",
|
||||||
|
"quote 1.0.7",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
|
@ -26,6 +26,7 @@ path = "leo/main.rs"
|
|||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
members = [
|
members = [
|
||||||
|
"asg",
|
||||||
"ast",
|
"ast",
|
||||||
"compiler",
|
"compiler",
|
||||||
"gadgets",
|
"gadgets",
|
||||||
@ -35,7 +36,7 @@ members = [
|
|||||||
"linter",
|
"linter",
|
||||||
"package",
|
"package",
|
||||||
"state",
|
"state",
|
||||||
"asg"
|
"wasm"
|
||||||
]
|
]
|
||||||
|
|
||||||
[dependencies.leo-ast]
|
[dependencies.leo-ast]
|
||||||
|
@ -1,85 +1,77 @@
|
|||||||
{
|
{
|
||||||
"definitions": [
|
"name": "basic",
|
||||||
{
|
"expected_input": [],
|
||||||
"Function": {
|
"imports": [],
|
||||||
"identifier": {
|
"circuits": {},
|
||||||
"value": "main",
|
"functions": {
|
||||||
"span": {
|
"{\"name\":\"main\",\"span\":\"{\\\"text\\\":\\\" function main() {\\\",\\\"line\\\":1,\\\"start\\\":10,\\\"end\\\":14}\"}": {
|
||||||
"input": "main",
|
"identifier": "{\"name\":\"main\",\"span\":\"{\\\"text\\\":\\\" function main() {\\\",\\\"line\\\":1,\\\"start\\\":10,\\\"end\\\":14}\"}",
|
||||||
"start": 9,
|
"input": [],
|
||||||
"end": 13
|
"output": null,
|
||||||
}
|
|
||||||
},
|
|
||||||
"parameters": [],
|
|
||||||
"returns": null,
|
|
||||||
"block": {
|
"block": {
|
||||||
"statements": [
|
"statements": [
|
||||||
{
|
{
|
||||||
"Return": {
|
"Return": {
|
||||||
"expression": {
|
"expression": {
|
||||||
"Binary": {
|
"Binary": {
|
||||||
"operation": "Add",
|
|
||||||
"left": {
|
"left": {
|
||||||
"Value": {
|
"Value": {
|
||||||
"Implicit": {
|
"Implicit": [
|
||||||
"Positive": {
|
"1",
|
||||||
"value": "1",
|
{
|
||||||
"span": {
|
"text": " return 1 + 1",
|
||||||
"input": "1",
|
"line": 2,
|
||||||
"start": 29,
|
"start": 12,
|
||||||
"end": 30
|
"end": 13
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"op": "Add",
|
||||||
"right": {
|
"right": {
|
||||||
"Value": {
|
"Value": {
|
||||||
"Implicit": {
|
"Implicit": [
|
||||||
"Positive": {
|
"1",
|
||||||
"value": "1",
|
{
|
||||||
"span": {
|
"text": " return 1 + 1",
|
||||||
"input": "1",
|
"line": 2,
|
||||||
"start": 33,
|
|
||||||
"end": 34
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"span": {
|
|
||||||
"input": "1 + 1",
|
|
||||||
"start": 29,
|
|
||||||
"end": 34
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"span": {
|
|
||||||
"input": "return 1 + 1",
|
|
||||||
"start": 22,
|
|
||||||
"end": 34
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"span": {
|
|
||||||
"input": "{\n return 1 + 1\n}",
|
|
||||||
"start": 16,
|
"start": 16,
|
||||||
"end": 36
|
"end": 17
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"span": {
|
"span": {
|
||||||
"input": "function main() {\n return 1 + 1\n}",
|
"text": " return 1 + 1",
|
||||||
"start": 0,
|
"line": 2,
|
||||||
"end": 36
|
"start": 12,
|
||||||
|
"end": 17
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"span" : {
|
||||||
|
"text": " return 1 + 1",
|
||||||
|
"line": 2,
|
||||||
|
"start": 5,
|
||||||
|
"end": 17
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"eoi": null,
|
"span" : {
|
||||||
"span": {
|
"text": " return 1 + 1",
|
||||||
"input": "function main() {\n return 1 + 1\n}\n",
|
"line": 2,
|
||||||
"start": 0,
|
"start": 5,
|
||||||
"end": 37
|
"end": 17
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"span": {
|
||||||
|
"text": " function main() {",
|
||||||
|
"line": 1,
|
||||||
|
"start": 1,
|
||||||
|
"end": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"tests": {}
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
// The dummy 'pedersen-hash' main function.
|
function main() {
|
||||||
function main() -> u32 {
|
|
||||||
return 1 + 1
|
return 1 + 1
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@ circuit PedersenHash {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// The dummy 'pedersen-hash' main function.
|
// The 'dummy-pedersen-hash' main function.
|
||||||
function main() -> group {
|
function main() -> group {
|
||||||
const parameters = [1group; 256];
|
const parameters = [1group; 256];
|
||||||
const pedersen = PedersenHash::new(parameters);
|
const pedersen = PedersenHash::new(parameters);
|
||||||
|
33
wasm/Cargo.toml
Normal file
33
wasm/Cargo.toml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
[package]
|
||||||
|
name = "leo-wasm"
|
||||||
|
version = "1.2.0"
|
||||||
|
authors = [ "The Aleo Team <hello@aleo.org>" ]
|
||||||
|
description = "WASM interpreter of the Leo programming language"
|
||||||
|
homepage = "https://aleo.org"
|
||||||
|
repository = "https://github.com/AleoHQ/leo"
|
||||||
|
keywords = [
|
||||||
|
"aleo",
|
||||||
|
"cryptography",
|
||||||
|
"leo",
|
||||||
|
"programming-language",
|
||||||
|
"zero-knowledge"
|
||||||
|
]
|
||||||
|
categories = [ "cryptography::cryptocurrencies", "web-programming" ]
|
||||||
|
include = [ "Cargo.toml", "src", "README.md", "LICENSE.md" ]
|
||||||
|
license = "GPL-3.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["cdylib", "rlib"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
leo-asg = { path = "../asg", version = "1.2.0" }
|
||||||
|
leo-ast = { path = "../ast", version = "1.2.0" }
|
||||||
|
leo-grammar = { path = "../grammar", version = "1.2.0" }
|
||||||
|
|
||||||
|
js-sys = "0.3.47"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
wasm-bindgen = { version = "0.2", features = ["serde-serialize"] }
|
||||||
|
|
||||||
|
[dev-dependencies]
|
||||||
|
wasm-bindgen-test = { version = "0.3.20" }
|
123
wasm/src/asg.rs
123
wasm/src/asg.rs
@ -1,62 +1,61 @@
|
|||||||
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
// // Copyright (C) 2019-2021 Aleo Systems Inc.
|
||||||
// This file is part of the Leo library.
|
// // This file is part of the Leo library.
|
||||||
|
//
|
||||||
// The Leo library is free software: you can redistribute it and/or modify
|
// // The Leo library is free software: you can redistribute it and/or modify
|
||||||
// it under the terms of the GNU General Public License as published by
|
// // it under the terms of the GNU General Public License as published by
|
||||||
// the Free Software Foundation, either version 3 of the License, or
|
// // the Free Software Foundation, either version 3 of the License, or
|
||||||
// (at your option) any later version.
|
// // (at your option) any later version.
|
||||||
|
//
|
||||||
// The Leo library is distributed in the hope that it will be useful,
|
// // The Leo library is distributed in the hope that it will be useful,
|
||||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
// // but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
// // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
// GNU General Public License for more details.
|
// // GNU General Public License for more details.
|
||||||
|
//
|
||||||
// You should have received a copy of the GNU General Public License
|
// // You should have received a copy of the GNU General Public License
|
||||||
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
// // along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
use leo_ast::Ast as LeoAst;
|
// use leo_asg::Asg as LeoAsg;
|
||||||
use leo_grammar::Grammar as LeoGrammar;
|
// use leo_grammar::Grammar as LeoGrammar;
|
||||||
|
//
|
||||||
use std::path::Path;
|
// use std::path::Path;
|
||||||
use wasm_bindgen::prelude::*;
|
// use wasm_bindgen::prelude::*;
|
||||||
|
//
|
||||||
#[wasm_bindgen]
|
// #[wasm_bindgen]
|
||||||
pub struct Ast(String);
|
// pub struct Ast(String);
|
||||||
|
//
|
||||||
#[wasm_bindgen]
|
// #[wasm_bindgen]
|
||||||
impl Ast {
|
// impl Ast {
|
||||||
#[wasm_bindgen(constructor)]
|
// #[wasm_bindgen(constructor)]
|
||||||
pub fn new(filepath: &str, program_name: &str, program_string: &str) -> Self {
|
// pub fn new(filepath: &str, program_name: &str, program_string: &str) -> Self {
|
||||||
let grammar = LeoGrammar::new(&Path::new(filepath), &program_string).unwrap();
|
// let asg = LeoAsg::new(&self.program, &mut leo_imports::ImportParser::default())?;
|
||||||
let ast = LeoAst::new(program_name, &grammar).unwrap();
|
// Self(ast.to_json_string().unwrap())
|
||||||
Self(ast.to_json_string().unwrap())
|
// }
|
||||||
}
|
//
|
||||||
|
// #[wasm_bindgen]
|
||||||
#[wasm_bindgen]
|
// pub fn to_string(&self) -> String {
|
||||||
pub fn to_string(&self) -> String {
|
// self.0.clone()
|
||||||
self.0.clone()
|
// }
|
||||||
}
|
// }
|
||||||
}
|
//
|
||||||
|
// #[cfg(test)]
|
||||||
#[cfg(test)]
|
// mod tests {
|
||||||
mod tests {
|
// use super::*;
|
||||||
use super::*;
|
//
|
||||||
|
// use wasm_bindgen_test::*;
|
||||||
use wasm_bindgen_test::*;
|
//
|
||||||
|
// #[wasm_bindgen_test]
|
||||||
#[wasm_bindgen_test]
|
// fn ast_test() {
|
||||||
fn ast_test() {
|
// let expected = include_str!("../.resources/basic/expected_ast.json");
|
||||||
let expected = include_str!("../.resources/basic/expected_ast.json");
|
//
|
||||||
|
// let filepath = "../.resources/basic/main.leo";
|
||||||
let filepath = "../.resources/basic/main.leo";
|
// let program_name = "basic";
|
||||||
let program_name = "basic";
|
// let program_string = include_str!("../.resources/basic/main.leo");
|
||||||
let program_string = include_str!("../.resources/basic/main.leo");
|
//
|
||||||
|
// let candidate = Ast::new(filepath, program_name, program_string).to_string();
|
||||||
let candidate = Ast::new(filepath, program_name, program_string).to_string();
|
//
|
||||||
|
// let expected = JsValue::from_str(expected);
|
||||||
let expected = JsValue::from_str(expected);
|
// let candidate = JsValue::from_serde(&candidate).unwrap();
|
||||||
let candidate = JsValue::from_serde(&candidate).unwrap();
|
//
|
||||||
|
// assert_eq!(expected, candidate);
|
||||||
assert_eq!(expected, candidate);
|
// }
|
||||||
}
|
// }
|
||||||
}
|
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
||||||
|
// This file is part of the Leo library.
|
||||||
|
|
||||||
|
// The Leo library is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// The Leo library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
use leo_ast::Ast as LeoAst;
|
||||||
|
use leo_grammar::Grammar as LeoGrammar;
|
||||||
|
|
||||||
|
use std::path::Path;
|
||||||
|
use wasm_bindgen::prelude::*;
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub struct Ast(LeoAst);
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
impl Ast {
|
||||||
|
#[wasm_bindgen(constructor)]
|
||||||
|
pub fn new(filepath: &str, program_name: &str, program_string: &str) -> Self {
|
||||||
|
let grammar = LeoGrammar::new(&Path::new(filepath), &program_string).unwrap();
|
||||||
|
let ast = LeoAst::new(program_name, &grammar).unwrap();
|
||||||
|
Self(ast)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[wasm_bindgen]
|
||||||
|
pub fn to_string(&self) -> String {
|
||||||
|
self.0.to_json_string().unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// #[cfg(test)]
|
||||||
|
// mod tests {
|
||||||
|
// use super::*;
|
||||||
|
//
|
||||||
|
// use wasm_bindgen_test::*;
|
||||||
|
//
|
||||||
|
// #[wasm_bindgen_test]
|
||||||
|
// fn ast_test() {
|
||||||
|
// let expected = include_str!("../.resources/basic/expected_ast.json");
|
||||||
|
//
|
||||||
|
// let filepath = "../.resources/basic/main.leo";
|
||||||
|
// let program_name = "basic";
|
||||||
|
// let program_string = include_str!("../.resources/basic/main.leo");
|
||||||
|
//
|
||||||
|
// let candidate = Ast::new(filepath, program_name, program_string).to_string();
|
||||||
|
//
|
||||||
|
// let expected = JsValue::from_str(expected);
|
||||||
|
// let candidate = JsValue::from_serde(&candidate).unwrap();
|
||||||
|
//
|
||||||
|
// assert_eq!(expected, candidate);
|
||||||
|
// }
|
||||||
|
// }
|
@ -0,0 +1,47 @@
|
|||||||
|
// // Copyright (C) 2019-2021 Aleo Systems Inc.
|
||||||
|
// // This file is part of the Leo library.
|
||||||
|
//
|
||||||
|
// // The Leo library is free software: you can redistribute it and/or modify
|
||||||
|
// // it under the terms of the GNU General Public License as published by
|
||||||
|
// // the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// // (at your option) any later version.
|
||||||
|
//
|
||||||
|
// // The Leo library is distributed in the hope that it will be useful,
|
||||||
|
// // but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// // GNU General Public License for more details.
|
||||||
|
//
|
||||||
|
// // You should have received a copy of the GNU General Public License
|
||||||
|
// // along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
//
|
||||||
|
// use crate::ast::Ast;
|
||||||
|
//
|
||||||
|
// use std::path::Path;
|
||||||
|
// use wasm_bindgen::prelude::*;
|
||||||
|
//
|
||||||
|
// #[wasm_bindgen]
|
||||||
|
// pub struct Compiler(String);
|
||||||
|
//
|
||||||
|
// #[wasm_bindgen]
|
||||||
|
// impl Compiler {
|
||||||
|
// #[wasm_bindgen(constructor)]
|
||||||
|
// pub fn new(filepath: &str, program_name: &str, program_string: &str) -> Self {
|
||||||
|
// let ast = Ast::new(filepath, program_name, program_string).unwrap();
|
||||||
|
// Self(ast.to_string())
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// #[wasm_bindgen]
|
||||||
|
// pub fn to_string(&self) -> String {
|
||||||
|
// self.0.clone()
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// #[cfg(test)]
|
||||||
|
// mod tests {
|
||||||
|
// use super::*;
|
||||||
|
//
|
||||||
|
// use wasm_bindgen_test::*;
|
||||||
|
//
|
||||||
|
// #[wasm_bindgen_test]
|
||||||
|
// fn ast_test() {}
|
||||||
|
// }
|
21
wasm/src/lib.rs
Normal file
21
wasm/src/lib.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright (C) 2019-2021 Aleo Systems Inc.
|
||||||
|
// This file is part of the Leo library.
|
||||||
|
|
||||||
|
// The Leo library is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// The Leo library is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with the Leo library. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
pub mod ast;
|
||||||
|
pub use ast::*;
|
||||||
|
|
||||||
|
// pub mod compiler;
|
||||||
|
// pub use compiler::*;
|
Loading…
Reference in New Issue
Block a user