From 323e1cf1a742affa9d3462a73a5ba60b04793aaa Mon Sep 17 00:00:00 2001 From: peefy Date: Thu, 9 Jun 2022 17:48:36 +0800 Subject: [PATCH 1/2] fix: schema init in same pkg and add more unit test cases. --- kclvm/sema/src/resolver/test_data/kcl.mod | 0 kclvm/sema/src/resolver/test_data/pkg/pkg.k | 5 +++ .../resolver/test_data/pkg_init_in_schema.k | 3 ++ kclvm/sema/src/resolver/tests.rs | 35 ++++++++++++++++++- kclvm/sema/src/resolver/ty_alias.rs | 24 ++++++++++--- 5 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 kclvm/sema/src/resolver/test_data/kcl.mod create mode 100644 kclvm/sema/src/resolver/test_data/pkg/pkg.k create mode 100644 kclvm/sema/src/resolver/test_data/pkg_init_in_schema.k diff --git a/kclvm/sema/src/resolver/test_data/kcl.mod b/kclvm/sema/src/resolver/test_data/kcl.mod new file mode 100644 index 000000000..e69de29bb diff --git a/kclvm/sema/src/resolver/test_data/pkg/pkg.k b/kclvm/sema/src/resolver/test_data/pkg/pkg.k new file mode 100644 index 000000000..f8c946eff --- /dev/null +++ b/kclvm/sema/src/resolver/test_data/pkg/pkg.k @@ -0,0 +1,5 @@ +schema Name: + name?: str + +schema Person: + name: Name = Name {name = "Alice"} diff --git a/kclvm/sema/src/resolver/test_data/pkg_init_in_schema.k b/kclvm/sema/src/resolver/test_data/pkg_init_in_schema.k new file mode 100644 index 000000000..dcb1a37f3 --- /dev/null +++ b/kclvm/sema/src/resolver/test_data/pkg_init_in_schema.k @@ -0,0 +1,3 @@ +import pkg + +person = pkg.Person {} diff --git a/kclvm/sema/src/resolver/tests.rs b/kclvm/sema/src/resolver/tests.rs index 285199bef..87b5b2aa7 100644 --- a/kclvm/sema/src/resolver/tests.rs +++ b/kclvm/sema/src/resolver/tests.rs @@ -2,7 +2,8 @@ use crate::builtin::BUILTIN_FUNCTION_NAMES; use crate::resolver::resolve_program; use crate::resolver::scope::*; use crate::ty::Type; -use kclvm_parser::parse_program; +use kclvm_ast::ast; +use kclvm_parser::{load_program, parse_program}; use std::rc::Rc; #[test] @@ -34,3 +35,35 @@ fn test_resolve_program() { assert!(main_scope.lookup("b").is_some()); assert!(main_scope.lookup("print").is_none()); } + +#[test] +fn test_pkg_init_in_schema_resolve() { + let mut program = + load_program(&["./src/resolver/test_data/pkg_init_in_schema.k"], None).unwrap(); + let scope = resolve_program(&mut program); + assert_eq!( + scope.pkgpaths(), + vec!["__main__".to_string(), "pkg".to_string()] + ); + let module = &program.pkgs["pkg"][0]; + if let ast::Stmt::Schema(schema) = &module.body[1].node { + if let ast::Stmt::SchemaAttr(attr) = &schema.body[0].node { + let value = attr.value.as_ref().unwrap(); + if let ast::Expr::Schema(schema_expr) = &value.node { + assert_eq!(schema_expr.name.node.names, vec!["Name".to_string()]); + } else { + panic!("test failed, expect schema expr, got {:?}", value) + } + } else { + panic!( + "test failed, expect schema attribute, got {:?}", + schema.body[0] + ) + } + } else { + panic!( + "test failed, expect schema statement, got {:?}", + module.body[1] + ) + } +} diff --git a/kclvm/sema/src/resolver/ty_alias.rs b/kclvm/sema/src/resolver/ty_alias.rs index 5d4f76a2d..d1a4887e5 100644 --- a/kclvm/sema/src/resolver/ty_alias.rs +++ b/kclvm/sema/src/resolver/ty_alias.rs @@ -4,6 +4,7 @@ use kclvm_ast::{ast, walk_if_mut, walk_list_mut}; #[derive(Default)] struct TypeAliasTransformer { + pub pkgpath: String, pub type_alias_mapping: IndexMap, } @@ -83,10 +84,22 @@ impl<'ctx> MutSelfMutWalker<'ctx> for TypeAliasTransformer { } fn walk_identifier(&mut self, identifier: &'ctx mut ast::Identifier) { if let Some(type_alias) = self.type_alias_mapping.get(&identifier.get_name()) { - if type_alias.starts_with('@') { + if type_alias.starts_with('@') && type_alias.contains('.') { let splits: Vec<&str> = type_alias.rsplitn(2, '.').collect(); - identifier.pkgpath = splits[1].to_string(); - identifier.names = vec![splits[1].to_string(), splits[0].to_string()]; + let pkgpath = splits[1].to_string(); + // Do not replace package identifier name in the same package. + // For example, the following code: + // + // ``` + // schema Name: + // name: str + // schema Person: + // name: Name + // ``` + if self.pkgpath != &pkgpath[1..] { + identifier.pkgpath = pkgpath; + identifier.names = vec![splits[1].to_string(), splits[0].to_string()]; + } } else { let names = type_alias.split('.').collect::>(); identifier.names = names.iter().map(|n| n.to_string()).collect(); @@ -100,7 +113,10 @@ fn fix_type_alias_identifier<'ctx>( module: &'ctx mut ast::Module, type_alias_mapping: IndexMap, ) { - let mut type_alias_transformer = TypeAliasTransformer { type_alias_mapping }; + let mut type_alias_transformer = TypeAliasTransformer { + pkgpath: module.pkg.clone(), + type_alias_mapping, + }; type_alias_transformer.walk_module(module); } From e6286d44d30da8ee08eaf7ca97a1395117e7a634 Mon Sep 17 00:00:00 2001 From: peefy Date: Mon, 20 Jun 2022 20:34:47 +0800 Subject: [PATCH 2/2] refactor: git merge master. --- .github/workflows/github-actions.yaml | 9 +- .gitignore | 17 +- internal/kclvm_py/tools/printer/printer.py | 12 +- kclvm/Cargo.lock | 611 ++++++++++++++---- kclvm/Cargo.toml | 17 + kclvm/config/Cargo.toml | 2 +- kclvm/makefile | 73 ++- kclvm/sema/src/resolver/mod.rs | 1 - kclvm/sema/src/resolver/node.rs | 4 +- .../src/resolver/test_fail_data/config_expr.k | 1 + kclvm/sema/src/resolver/tests.rs | 12 + kclvm/tools/src/printer/node.rs | 18 +- .../src/printer/test_data/codelayout.output | 1 - .../tools/src/printer/test_data/if_stmt.input | 16 + .../src/printer/test_data/if_stmt.output | 15 + kclvm/tools/src/printer/test_data/unary.input | 6 + .../tools/src/printer/test_data/unary.output | 6 + kclvm/tools/src/printer/tests.rs | 4 +- scripts/build-windows/Makefile | 4 +- .../docker/kclvm-builder-centos8/Dockerfile | 18 +- scripts/docker/kclvm-builder-centos8/Makefile | 32 +- .../_cargo_config-kclvmx.toml | 10 - .../docker/kclvm-builder-centos8/timestamp.go | 20 - .../test_transfomer/test_data/assign.output | 1 - .../test_printer/test_data/codelayout.output | 2 - .../test_printer/test_data/if_stmt.input | 16 + .../test_printer/test_data/if_stmt.output | 15 + .../test_printer/test_data/unary.input | 6 + .../test_printer/test_data/unary.output | 6 + .../test_tools/test_printer/test_printer.py | 2 + 30 files changed, 710 insertions(+), 247 deletions(-) create mode 100644 kclvm/sema/src/resolver/test_fail_data/config_expr.k create mode 100644 kclvm/tools/src/printer/test_data/if_stmt.input create mode 100644 kclvm/tools/src/printer/test_data/if_stmt.output create mode 100644 kclvm/tools/src/printer/test_data/unary.input create mode 100644 kclvm/tools/src/printer/test_data/unary.output delete mode 100644 scripts/docker/kclvm-builder-centos8/_cargo_config-kclvmx.toml delete mode 100644 scripts/docker/kclvm-builder-centos8/timestamp.go create mode 100644 test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.input create mode 100644 test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.output create mode 100644 test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.input create mode 100644 test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.output diff --git a/.github/workflows/github-actions.yaml b/.github/workflows/github-actions.yaml index 663b7416d..ef096ecfd 100644 --- a/.github/workflows/github-actions.yaml +++ b/.github/workflows/github-actions.yaml @@ -1,5 +1,5 @@ name: KCLVM-actions -on: [push] +on: ["push", "pull_request"] jobs: test-unit: name: Test @@ -35,5 +35,10 @@ jobs: components: clippy, rustfmt - name: Rust unit test working-directory: ./kclvm - run: make test + run: make codecov-lcov shell: bash + - name: Coveralls upload + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: ./kclvm/.kclvm/lcov.info diff --git a/.gitignore b/.gitignore index da7c25fb7..7c7420ff2 100644 --- a/.gitignore +++ b/.gitignore @@ -74,13 +74,14 @@ lark_parser.pickle /scripts/docker/kclvm-builder-centos7/crates.io-index /scripts/docker/kclvm-builder-ubuntu/crates.io-index *.tar.gz + +# KCLVM cache and temp output +.kclvm +*.dylib +*.so +*.dll +*.lock +*.ll +*.ll.lock _a.out.* _a.out_*.* -# KCLVM cache -.kclvm -__main__.dylib -__main__.so -__main__.dll -__main__.lock -__main__.ll -__main__.ll.lock diff --git a/internal/kclvm_py/tools/printer/printer.py b/internal/kclvm_py/tools/printer/printer.py index 3ee7b47e4..6b86fb2f8 100644 --- a/internal/kclvm_py/tools/printer/printer.py +++ b/internal/kclvm_py/tools/printer/printer.py @@ -286,7 +286,10 @@ def walk_IfStmt(self, t: ast.IfStmt): self.print(Indentation.Dedent) if t.elif_cond: for cond, body in zip(t.elif_cond, t.elif_body): + # Nested if statements need to be considered, + # so `elif` needs to be preceded by the current indentation. self.print( + Indentation.Fill, ast.TokenValue.ELIF, WHITESPACE, cond, @@ -297,7 +300,10 @@ def walk_IfStmt(self, t: ast.IfStmt): self.stmts(body) self.print(Indentation.Dedent) if t.else_body: + # Nested if statements need to be considered, + # so `else` needs to be preceded by the current indentation. self.print( + Indentation.Fill, ast.TokenValue.ELSE, ast.TokenValue.COLON, NEWLINE, @@ -305,7 +311,6 @@ def walk_IfStmt(self, t: ast.IfStmt): ) self.stmts(t.else_body) self.print(Indentation.Dedent) - self.print(NEWLINE) def walk_ImportStmt(self, t: ast.ImportStmt): """ast.AST: ImportStmt @@ -645,6 +650,7 @@ def walk_UnaryExpr(self, t: ast.UnaryExpr): assert isinstance(t, ast.UnaryExpr) self.print( ast.OPERATOR_VALUE_MAP[t.op], + WHITESPACE if t.op == ast.UnaryOp.Not else "", t.operand, ) @@ -1119,7 +1125,9 @@ def walk_JoinedString(self, t: ast.JoinedString): ast.TokenValue.RIGHT_BRACE, ) elif isinstance(value, ast.StringLit): - self.write(value.raw_value or '{}'.format(value.value.replace('"', '\\"'))) + self.write( + value.raw_value or "{}".format(value.value.replace('"', '\\"')) + ) elif isinstance(value, ast.Expr): self.expr(value) else: diff --git a/kclvm/Cargo.lock b/kclvm/Cargo.lock index 40bb80fd7..1bf2b6b35 100644 --- a/kclvm/Cargo.lock +++ b/kclvm/Cargo.lock @@ -30,9 +30,9 @@ checksum = "d78ea013094e5ea606b1c05fe35f1dd7ea1eb1ea259908d040b25bd5ec677ee5" [[package]] name = "ansi_term" -version = "0.11.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" dependencies = [ "winapi", ] @@ -114,13 +114,29 @@ dependencies = [ "lazy_static", "memchr", "regex-automata", + "serde", +] + +[[package]] +name = "bumpalo" +version = "3.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ccbd214614c6783386c1af30caf03192f17891059cecc394b4fb119e363de3" + +[[package]] +name = "cast" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c24dab4283a142afa2fdca129b80ad2c6284e073930f964c3a1293c225ee39a" +dependencies = [ + "rustc_version", ] [[package]] name = "cc" -version = "1.0.70" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cfg-if" @@ -149,9 +165,9 @@ dependencies = [ [[package]] name = "clap" -version = "2.33.3" +version = "2.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" +checksum = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c" dependencies = [ "ansi_term", "atty", @@ -164,13 +180,59 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469" +checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" dependencies = [ "libc", ] +[[package]] +name = "criterion" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1604dafd25fba2fe2d5895a9da139f8dc9b319a5fe5354ca137cbbce4e178d10" +dependencies = [ + "atty", + "cast", + "clap", + "criterion-plot", + "csv", + "itertools", + "lazy_static", + "num-traits", + "oorandom", + "plotters", + "rayon", + "regex", + "serde", + "serde_cbor", + "serde_derive", + "serde_json", + "tinytemplate", + "walkdir", +] + +[[package]] +name = "criterion-plot" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d00996de9f2f7559f7f4dc286073197f83e92256a59ed395f9aac01fe717da57" +dependencies = [ + "cast", + "itertools", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c02a4d71819009c192cf4872265391563fd6a84c81ff2c0f2a7026ca4c1d85c" +dependencies = [ + "cfg-if 1.0.0", + "crossbeam-utils", +] + [[package]] name = "crossbeam-deque" version = "0.8.1" @@ -184,26 +246,26 @@ dependencies = [ [[package]] name = "crossbeam-epoch" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1145cf131a2c6ba0615079ab6a638f7e1973ac9c2634fcbeaaad6114246efe8c" +checksum = "07db9d94cbd326813772c968ccd25999e5f8ae22f4f8d1b11effa37ef6ce281d" dependencies = [ "autocfg", "cfg-if 1.0.0", "crossbeam-utils", - "lazy_static", "memoffset", + "once_cell", "scopeguard", ] [[package]] name = "crossbeam-utils" -version = "0.8.8" +version = "0.8.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "8ff1f980957787286a554052d03c7aee98d99cc32e09f6d45f0a814133c87978" dependencies = [ "cfg-if 1.0.0", - "lazy_static", + "once_cell", ] [[package]] @@ -216,6 +278,44 @@ dependencies = [ "typenum", ] +[[package]] +name = "csv" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1" +dependencies = [ + "bstr", + "csv-core", + "itoa 0.4.8", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90" +dependencies = [ + "memchr", +] + +[[package]] +name = "ctor" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c" +dependencies = [ + "quote", + "syn", +] + +[[package]] +name = "diff" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" + [[package]] name = "digest" version = "0.9.0" @@ -235,6 +335,12 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "dissimilar" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c97b9233581d84b8e1e689cdd3a47b6f69770084fc246e86a7f78b0d9c1d4a5" + [[package]] name = "either" version = "1.6.1" @@ -259,6 +365,16 @@ dependencies = [ "thiserror", ] +[[package]] +name = "expect-test" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dced95c9dcd4e3241f95841aad395f9c8d7933a3b0b524bdeb2440885c72a271" +dependencies = [ + "dissimilar", + "once_cell", +] + [[package]] name = "fancy-regex" version = "0.7.1" @@ -308,9 +424,9 @@ checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" [[package]] name = "generic-array" -version = "0.14.4" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" +checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" dependencies = [ "typenum", "version_check", @@ -318,13 +434,13 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.3" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if 1.0.0", "libc", - "wasi", + "wasi 0.11.0+wasi-snapshot-preview1", ] [[package]] @@ -333,11 +449,17 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574" +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" [[package]] name = "hermit-abi" @@ -350,19 +472,19 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" +checksum = "6c6392766afd7964e2531940894cffe4bd8d7d17dbc3c1c4857040fd4b33bdb3" dependencies = [ "autocfg", "hashbrown", - "rustc-rayon", + "rustc-rayon 0.4.0", ] [[package]] name = "inkwell" version = "0.1.0" -source = "git+https://github.com/TheDan64/inkwell?branch=master#bff378bee02bcbb5bed35f47e9ed69e6642e9188" +source = "git+https://github.com/TheDan64/inkwell?branch=master#25b9fc5870370211504e874e7c81dc53573bca79" dependencies = [ "either", "inkwell_internals", @@ -375,7 +497,7 @@ dependencies = [ [[package]] name = "inkwell_internals" version = "0.5.0" -source = "git+https://github.com/TheDan64/inkwell?branch=master#bff378bee02bcbb5bed35f47e9ed69e6642e9188" +source = "git+https://github.com/TheDan64/inkwell?branch=master#25b9fc5870370211504e874e7c81dc53573bca79" dependencies = [ "proc-macro2", "quote", @@ -384,9 +506,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.10" +version = "0.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee0328b1209d157ef001c94dd85b4f8f64139adb0eac2659f4b08382b2f474d" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" dependencies = [ "cfg-if 1.0.0", ] @@ -406,6 +528,12 @@ version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +[[package]] +name = "itoa" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "112c678d4050afce233f4f2852bb2eb519230b3cf12f33585275537d7e41578d" + [[package]] name = "jobserver" version = "0.1.24" @@ -415,6 +543,15 @@ dependencies = [ "libc", ] +[[package]] +name = "js-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3fac17f7123a73ca62df411b1bf727ccc805daa070338fda671c86dac1bdc27" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "json_minimal" version = "0.1.3" @@ -513,6 +650,7 @@ dependencies = [ name = "kclvm-lexer" version = "0.1.0" dependencies = [ + "expect-test", "kclvm-error", "rustc_lexer", "unic-emoji-char", @@ -535,6 +673,7 @@ dependencies = [ "bstr", "either", "enquote", + "expect-test", "kclvm-ast", "kclvm-config", "kclvm-error", @@ -596,7 +735,7 @@ dependencies = [ "serde_json", "serde_yaml", "sha1", - "sha2 0.9.8", + "sha2 0.9.9", "unic-ucd-bidi", "unic-ucd-category", "unicode-casing", @@ -609,10 +748,12 @@ dependencies = [ "ahash", "bit-set", "bitflags", + "criterion", "fancy-regex", "indexmap", "kclvm-ast", "kclvm-error", + "kclvm-parser", "kclvm-runtime", "kclvm-span", "once_cell", @@ -639,6 +780,7 @@ dependencies = [ "kclvm-ast", "kclvm-error", "kclvm-parser", + "pretty_assertions", ] [[package]] @@ -662,9 +804,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.112" +version = "0.2.126" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" +checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836" [[package]] name = "libloading" @@ -692,7 +834,7 @@ dependencies = [ "lazy_static", "libc", "regex", - "semver", + "semver 0.11.0", ] [[package]] @@ -707,9 +849,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] @@ -737,9 +879,9 @@ checksum = "490cc448043f947bae3cbee9c203358d62dbee0db12107a74be5c30ccfd09771" [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memmap2" @@ -772,9 +914,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -782,9 +924,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -801,9 +943,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.8.0" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" + +[[package]] +name = "oorandom" +version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" +checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "opaque-debug" @@ -811,11 +959,20 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +[[package]] +name = "output_vt100" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66" +dependencies = [ + "winapi", +] + [[package]] name = "parking_lot" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", "parking_lot_core", @@ -823,9 +980,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ "cfg-if 1.0.0", "libc", @@ -851,9 +1008,9 @@ dependencies = [ [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -877,7 +1034,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d43f3220d96e0080cc9ea234978ccd80d904eafb17be31bb0f76daaea6493082" dependencies = [ "phf_shared", - "rand 0.8.4", + "rand 0.8.5", ] [[package]] @@ -905,15 +1062,55 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" + +[[package]] +name = "plotters" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a3fd9ec30b9749ce28cd91f255d569591cdf937fe280c312143e3c4bad6f2a" +dependencies = [ + "num-traits", + "plotters-backend", + "plotters-svg", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "plotters-backend" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d88417318da0eaf0fdcdb51a0ee6c3bed624333bff8f946733049380be67ac1c" + +[[package]] +name = "plotters-svg" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "521fa9638fa597e1dc53e9412a4f9cefb01187ee1f7413076f9e6749e2885ba9" +dependencies = [ + "plotters-backend", +] [[package]] name = "ppv-lite86" -version = "0.2.15" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" + +[[package]] +name = "pretty_assertions" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" +checksum = "c89f989ac94207d048d92db058e4f6ec7342b0971fc58d1271ca148b799b3563" +dependencies = [ + "ansi_term", + "ctor", + "diff", + "output_vt100", +] [[package]] name = "proc-macro-hack" @@ -923,11 +1120,11 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "dd96a1e8ed2596c337f8eae5f24924ec83f5ad5ab21ea8e455d3566c69fbcaf7" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] @@ -941,9 +1138,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.15" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "3bcdf212e9776fbcb2d23ab029360416bb1706b1aea2d1a5ba002727cbcab804" dependencies = [ "proc-macro2", ] @@ -973,14 +1170,13 @@ dependencies = [ [[package]] name = "rand" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", "rand_chacha", "rand_core 0.6.3", - "rand_hc", ] [[package]] @@ -1018,12 +1214,27 @@ dependencies = [ ] [[package]] -name = "rand_hc" -version = "0.3.1" +name = "rayon" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ - "rand_core 0.6.3", + "autocfg", + "crossbeam-deque", + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", ] [[package]] @@ -1037,9 +1248,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" dependencies = [ "bitflags", ] @@ -1078,9 +1289,9 @@ dependencies = [ [[package]] name = "ron" -version = "0.7.0" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678" +checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ "base64", "bitflags", @@ -1114,7 +1325,19 @@ checksum = "9974ab223660e61c1b4e7b43b827379df286736ca988308ce7e16f59f2d89246" dependencies = [ "crossbeam-deque", "either", - "rustc-rayon-core", + "rustc-rayon-core 0.3.2", +] + +[[package]] +name = "rustc-rayon" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a79f0b0b2609e2eacf9758013f50e7176cb4b29fd6436a747b14a5362c8727a" +dependencies = [ + "autocfg", + "crossbeam-deque", + "either", + "rustc-rayon-core 0.4.1", ] [[package]] @@ -1129,6 +1352,18 @@ dependencies = [ "num_cpus", ] +[[package]] +name = "rustc-rayon-core" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02269144a0db9bb55cf5d4a41a5a0e95b334b0b78b08269018ca9b0250718c30" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + [[package]] name = "rustc-serialize" version = "0.3.24" @@ -1149,8 +1384,8 @@ dependencies = [ "memmap2", "parking_lot", "rustc-hash", - "rustc-rayon", - "rustc-rayon-core", + "rustc-rayon 0.3.2", + "rustc-rayon-core 0.3.2", "stable_deref_trait", "stacker", "tempfile", @@ -1181,11 +1416,20 @@ dependencies = [ "unicode-width", ] +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.10", +] + [[package]] name = "ryu" -version = "1.0.5" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" +checksum = "f3f6f92acf49d1b98f7a81226834412ada05458b7364277387724a237f062695" [[package]] name = "same-file" @@ -1217,6 +1461,12 @@ dependencies = [ "semver-parser", ] +[[package]] +name = "semver" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a41d061efea015927ac527063765e73601444cdc344ba855bc7bd44578b25e1c" + [[package]] name = "semver-parser" version = "0.10.2" @@ -1228,18 +1478,28 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.130" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] +[[package]] +name = "serde_cbor" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bef2ebfde456fb76bbcf9f59315333decc4fda0b2b44b420243c11e0f5ec1f5" +dependencies = [ + "half", + "serde", +] + [[package]] name = "serde_derive" -version = "1.0.130" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1248,20 +1508,20 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.69" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ - "itoa", + "itoa 1.0.2", "ryu", "serde", ] [[package]] name = "serde_yaml" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a521f2940385c165a24ee286aa8599633d162077a54bdcae2a6fd5a7bfa7a0" +checksum = "707d15895415db6628332b737c838b88c598522e4dc70647e59b72312924aebc" dependencies = [ "indexmap", "ryu", @@ -1282,15 +1542,24 @@ dependencies = [ [[package]] name = "sha1" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" +checksum = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770" +dependencies = [ + "sha1_smol", +] + +[[package]] +name = "sha1_smol" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012" [[package]] name = "sha2" -version = "0.9.8" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", @@ -1312,15 +1581,15 @@ dependencies = [ [[package]] name = "siphasher" -version = "0.3.7" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "533494a8f9b724d33625ab53c6c4800f7cc445895924a8ef649222dcb76e938b" +checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" [[package]] name = "smallvec" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e" +checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "stable_deref_trait" @@ -1349,13 +1618,13 @@ checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" [[package]] name = "syn" -version = "1.0.86" +version = "1.0.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "c50aef8a904de4c23c788f104b7dddc7d6f79c647c7c8ce4cc8f73eb0ca773dd" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] [[package]] @@ -1414,18 +1683,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -1448,24 +1717,34 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255" dependencies = [ "libc", - "wasi", + "wasi 0.10.0+wasi-snapshot-preview1", "winapi", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "toml" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa" +checksum = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7" dependencies = [ "serde", ] [[package]] name = "tracing" -version = "0.1.32" +version = "0.1.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f" +checksum = "a400e31aa60b9d44a52a8ee0343b5b18566b03a8321e0d321f695cf56e940160" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -1475,9 +1754,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote", @@ -1486,18 +1765,18 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.23" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa31669fa42c09c34d94d8165dd2012e8ff3c66aca50f3bb226b68f216f2706c" +checksum = "7709595b8878a4965ce5e87ebf880a7d39c9afc6837721b21a5a816a8117d921" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] name = "typenum" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec" +checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "ucd-trie" @@ -1575,17 +1854,23 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "623f59e6af2a98bdafeb93fa277ac8e1e40440973001ca15cf4ae1541cd16d56" +[[package]] +name = "unicode-ident" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bd2fe26506023ed7b5e1e315add59d6f584c621d037f9368fea9cfb988f368c" + [[package]] name = "unicode-width" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" +checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "unicode_names2" @@ -1601,9 +1886,9 @@ checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" [[package]] name = "version_check" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" @@ -1622,6 +1907,76 @@ version = "0.10.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c53b543413a17a202f4be280a7e5c62a1c69345f5de525ee64f8cfdbc954994" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5491a68ab4500fa6b4d726bd67408630c3dbe9c4fe7bda16d5c82a1fd8c7340a" +dependencies = [ + "bumpalo", + "lazy_static", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c441e177922bc58f1e12c022624b6216378e5febc2f0533e41ba443d505b80aa" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d94ac45fcf608c1f45ef53e748d35660f168490c10b23704c7779ab8f5c3048" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a89911bd99e5f3659ec4acf9c4d93b0a90fe4a2a11f15328472058edc5261be" + +[[package]] +name = "web-sys" +version = "0.3.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fed94beee57daf8dd7d51f2b15dc2bcde92d7a72304cdf662a4371008b71b90" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "winapi" version = "0.3.9" @@ -1655,9 +2010,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-sys" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ "windows_aarch64_msvc", "windows_i686_gnu", @@ -1668,33 +2023,33 @@ dependencies = [ [[package]] name = "windows_aarch64_msvc" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_i686_gnu" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_msvc" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_x86_64_gnu" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_msvc" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "yaml-rust" diff --git a/kclvm/Cargo.toml b/kclvm/Cargo.toml index 98a49db0c..516668aa0 100644 --- a/kclvm/Cargo.toml +++ b/kclvm/Cargo.toml @@ -37,3 +37,20 @@ kclvm-sema = {path = "./sema", version = "0.1.0"} kclvm-tools = {path = "./tools", version = "0.1.0"} kclvm-version = {path = "./version", version = "0.1.0"} kclvm-error = {path = "./error", version = "0.1.0"} + +[workspace] +members = [ + "ast", + "compiler", + "config", + "error", + "lexer", + "macros", + "parser", + "runner", + "runtime", + "sema", + "span", + "tools", + "version" +] diff --git a/kclvm/config/Cargo.toml b/kclvm/config/Cargo.toml index 10bab2ee0..07395cfd8 100644 --- a/kclvm/config/Cargo.toml +++ b/kclvm/config/Cargo.toml @@ -13,7 +13,7 @@ ahash = "0.7.2" toml = "0.5.8" ron = "0.7.0" chrono = "0.4.19" -rust-crypto = "^0.2" +rust-crypto = "0.2.36" glob = "0.3.0" fslock = "0.2.1" pathdiff = "0.2.1" diff --git a/kclvm/makefile b/kclvm/makefile index 3cfc02fe0..3c000cebd 100644 --- a/kclvm/makefile +++ b/kclvm/makefile @@ -1,45 +1,74 @@ default: run PWD:=$(shell pwd) -RUNTIME_NATIVE_BC_PATH:=./runtime/src/_kclvm.bc -COVER_TEST_FILE_PATH:=$(PWD)/../cover/TEST.xml -COVER_REPORT_FILE_PATH:=$(PWD)/../cover/report.html -CARGO_LIBS = $(shell find . -maxdepth 1 -type d) +COVER_REPORT_FILE_PATH:=$(PWD)/target/llvm-cov/html/index.html +# ------------------------ +# Building and tesing deps +# ------------------------ + +# Generate runtime libraries when the runtime code is changed. +gen-runtime-api: + make -C ./runtime gen-api-spec + +# Install the wasm target +install-rustc-wasm: + rustup target add wasm32-unknown-unknown + +# Install python3 pytest +install-pytest: + python3 -mpip install pytest pytest-html + +# ------------------------ +# Compile and run +# ------------------------ + +# E2E compile and run run: cd .. && ./run.sh -a update-kclvm && cd kclvm kcl ../samples/hello.k --target native +# Cargo check all packages check: cargo check --release +# Cargo fmt all packages fmt: cargo fmt --all +# Cargo clippy all packages lint: - @for i in $(CARGO_LIBS); do cd $(PWD)/$$i && cargo clippy && cd ..; done + cargo clippy + +# ------------------------ +# Tests +# ------------------------ +# Unit tests without code cov test: - @for i in $(CARGO_LIBS); do cd $(PWD)/$$i && cargo test || { echo 'test kclvm/' $$i 'crate failed' ; exit 1; } && cd ..; done + cargo test -p kclvm-* + +# Unit tests with code cov (Requires rust 1.60+) +codecov: + rustup component add llvm-tools-preview + cargo install cargo-llvm-cov + cargo llvm-cov --html --open -p kclvm-* -test-runtime: - cd ./tests/test_units && python3 -m pip install pytest && PYTHONPATH=./../../plugin python3 -m pytest -vv || { echo 'kclvm/tests/test_units failed' ; exit 1; } +# Unit tests with code cov and output the lcov file (Requires rust 1.60+) +codecov-lcov: + rustup component add llvm-tools-preview + cargo install cargo-llvm-cov + mkdir $(PWD)/.kclvm + cargo llvm-cov --lcov --output-path $(PWD)/.kclvm/lcov.info -p kclvm-* +# Test runtime libaries using python functions +test-runtime: install-pytest + cd ./tests/test_units && PYTHONPATH=./../../plugin python3 -m pytest -vv || { echo 'kclvm/tests/test_units failed' ; exit 1; } + +# E2E grammar tests. test-grammar: install-pytest - cd tests/integration/grammar && kclvm -m pytest -v -n 5 --junitxml $(COVER_TEST_FILE_PATH) --html=$(COVER_REPORT_FILE_PATH) + cd tests/integration/grammar && python3 -m pytest -v -n 5 +# Parser fuzz. fuzz-parser: cd tests && cargo fuzz run fuzz_parser - -install-pytest: - kclvm -mpip install pytest-html - -release: - cargo build --release - - -gen-runtime-api: - make -C ./runtime gen-api-spec - -install-rustc-wasm: - rustup target add wasm32-unknown-unknown diff --git a/kclvm/sema/src/resolver/mod.rs b/kclvm/sema/src/resolver/mod.rs index baae874b9..400c76b13 100644 --- a/kclvm/sema/src/resolver/mod.rs +++ b/kclvm/sema/src/resolver/mod.rs @@ -135,6 +135,5 @@ pub fn resolve_program(program: &mut Program) -> ProgramScope { let scope = resolver.check(kclvm_ast::MAIN_PKG); let type_alias_mapping = resolver.ctx.type_alias_mapping.clone(); process_program_type_alias(program, type_alias_mapping); - scope.check_scope_diagnostics(); scope } diff --git a/kclvm/sema/src/resolver/node.rs b/kclvm/sema/src/resolver/node.rs index 2b9aac9dc..1bec3a435 100644 --- a/kclvm/sema/src/resolver/node.rs +++ b/kclvm/sema/src/resolver/node.rs @@ -902,7 +902,9 @@ impl<'ctx> MutSelfTypedResultWalker<'ctx> for Resolver<'ctx> { } self.clear_config_expr_context(stack_depth, false); } - self.any_ty() + let key_ty = sup(&key_types); + let val_ty = sup(&val_types); + Type::dict_ref(key_ty, val_ty) } fn walk_check_expr(&mut self, check_expr: &'ctx ast::CheckExpr) -> Self::Result { diff --git a/kclvm/sema/src/resolver/test_fail_data/config_expr.k b/kclvm/sema/src/resolver/test_fail_data/config_expr.k new file mode 100644 index 000000000..f7ee275ce --- /dev/null +++ b/kclvm/sema/src/resolver/test_fail_data/config_expr.k @@ -0,0 +1 @@ +data: int = {key = 1} diff --git a/kclvm/sema/src/resolver/tests.rs b/kclvm/sema/src/resolver/tests.rs index 87b5b2aa7..762a572c8 100644 --- a/kclvm/sema/src/resolver/tests.rs +++ b/kclvm/sema/src/resolver/tests.rs @@ -3,6 +3,7 @@ use crate::resolver::resolve_program; use crate::resolver::scope::*; use crate::ty::Type; use kclvm_ast::ast; +use kclvm_error::*; use kclvm_parser::{load_program, parse_program}; use std::rc::Rc; @@ -67,3 +68,14 @@ fn test_pkg_init_in_schema_resolve() { ) } } + +#[test] +fn test_resolve_program_fail() { + let mut program = parse_program("./src/resolver/test_fail_data/config_expr.k").unwrap(); + let scope = resolve_program(&mut program); + assert_eq!(scope.diagnostics.len(), 1); + let diag = &scope.diagnostics[0]; + assert_eq!(diag.code, Some(DiagnosticId::Error(ErrorKind::TypeError))); + assert_eq!(diag.messages.len(), 1); + assert_eq!(diag.messages[0].message, "expect int, got {str:int(1)}"); +} diff --git a/kclvm/tools/src/printer/node.rs b/kclvm/tools/src/printer/node.rs index 20b0947a7..0d8682b7c 100644 --- a/kclvm/tools/src/printer/node.rs +++ b/kclvm/tools/src/printer/node.rs @@ -118,15 +118,18 @@ impl<'p, 'ctx> MutSelfTypedResultWalker<'ctx> for Printer<'p> { self.write_indentation(Indentation::Dedent); if !if_stmt.orelse.is_empty() { if let ast::Stmt::If(elif_stmt) = &if_stmt.orelse[0].node { - self.write("el"); + // Nested if statements need to be considered, + // so `el` needs to be preceded by the current indentation. + self.fill("el"); self.walk_if_stmt(elif_stmt); } else { - self.write("else:"); - self.write_newline(); + // Nested if statements need to be considered, + // so `el` needs to be preceded by the current indentation. + self.fill("else:"); + self.write_newline_without_fill(); self.write_indentation(Indentation::Indent); self.stmts(&if_stmt.orelse); self.write_indentation(Indentation::Dedent); - self.write_newline_without_fill(); } } else { self.write_newline_without_fill(); @@ -348,7 +351,7 @@ impl<'p, 'ctx> MutSelfTypedResultWalker<'ctx> for Printer<'p> { self.write_space(); } if let Some(value) = &schema_attr.value { - self.expr(&value); + self.expr(value); } self.write_newline_without_fill(); } @@ -363,6 +366,11 @@ impl<'p, 'ctx> MutSelfTypedResultWalker<'ctx> for Printer<'p> { fn walk_unary_expr(&mut self, unary_expr: &'ctx ast::UnaryExpr) -> Self::Result { self.write(unary_expr.op.symbol()); + // Four forms: `+expr`, `-expr`, `~expr`, `not expr` + // `not expr` needs a space between `not` and `expr` + if matches!(unary_expr.op, ast::UnaryOp::Not) { + self.write_space(); + } self.expr(&unary_expr.operand); } diff --git a/kclvm/tools/src/printer/test_data/codelayout.output b/kclvm/tools/src/printer/test_data/codelayout.output index 61df4a554..28fa41ccc 100644 --- a/kclvm/tools/src/printer/test_data/codelayout.output +++ b/kclvm/tools/src/printer/test_data/codelayout.output @@ -17,7 +17,6 @@ elif True: b = 2 else: c = 3 - d = 1 + 2 e = (1 + 2) f = [1, 2, 3] diff --git a/kclvm/tools/src/printer/test_data/if_stmt.input b/kclvm/tools/src/printer/test_data/if_stmt.input new file mode 100644 index 000000000..40aeb4d0a --- /dev/null +++ b/kclvm/tools/src/printer/test_data/if_stmt.input @@ -0,0 +1,16 @@ +if True: + a = 1 +elif True: + b = 2 +else: + c = 3 + +if True: + if False: + d = 4 + elif True: + e = 5 + else: + f = 6 +else: + g = 7 diff --git a/kclvm/tools/src/printer/test_data/if_stmt.output b/kclvm/tools/src/printer/test_data/if_stmt.output new file mode 100644 index 000000000..8a20e1acd --- /dev/null +++ b/kclvm/tools/src/printer/test_data/if_stmt.output @@ -0,0 +1,15 @@ +if True: + a = 1 +elif True: + b = 2 +else: + c = 3 +if True: + if False: + d = 4 + elif True: + e = 5 + else: + f = 6 +else: + g = 7 diff --git a/kclvm/tools/src/printer/test_data/unary.input b/kclvm/tools/src/printer/test_data/unary.input new file mode 100644 index 000000000..613bcab7c --- /dev/null +++ b/kclvm/tools/src/printer/test_data/unary.input @@ -0,0 +1,6 @@ +a = + 1 +b = - 1 +c = ~ 1 +d = not True +e = + 1 + + 1 +f = + 1 - - 1 diff --git a/kclvm/tools/src/printer/test_data/unary.output b/kclvm/tools/src/printer/test_data/unary.output new file mode 100644 index 000000000..552bdc5d0 --- /dev/null +++ b/kclvm/tools/src/printer/test_data/unary.output @@ -0,0 +1,6 @@ +a = +1 +b = -1 +c = ~1 +d = not True +e = +1 + +1 +f = +1 - -1 diff --git a/kclvm/tools/src/printer/tests.rs b/kclvm/tools/src/printer/tests.rs index 786221c32..ac651c07e 100644 --- a/kclvm/tools/src/printer/tests.rs +++ b/kclvm/tools/src/printer/tests.rs @@ -4,9 +4,11 @@ use pretty_assertions::assert_eq; const FILE_INPUT_SUFFIX: &str = ".input"; const FILE_OUTPUT_SUFFIX: &str = ".output"; -const TEST_CASES: &[&'static str; 12] = &[ +const TEST_CASES: &[&'static str; 14] = &[ "arguments", "empty", + "if_stmt", + "unary", "codelayout", "collection_if", "comment", diff --git a/scripts/build-windows/Makefile b/scripts/build-windows/Makefile index cb26484d5..c952fe2e0 100644 --- a/scripts/build-windows/Makefile +++ b/scripts/build-windows/Makefile @@ -27,8 +27,8 @@ default: # install kclvm-runtime cd ../../kclvm/runtime && cargo build --release - go run ./copy-file.go -src=../../kclvm/runtime/target/release/kclvm.dll -dst=./_output/kclvm-windows/libs/kclvm.dll - go run ./copy-file.go -src=../../kclvm/runtime/target/release/kclvm.dll.lib -dst=./_output/kclvm-windows/libs/kclvm.dll.lib + go run ./copy-file.go -src=../../kclvm/target/release/kclvm.dll -dst=./_output/kclvm-windows/libs/kclvm.dll + go run ./copy-file.go -src=../../kclvm/target/release/kclvm.dll.lib -dst=./_output/kclvm-windows/libs/kclvm.dll.lib go run ./copy-file.go -src=../../kclvm/runtime/src/_kclvm.ll -dst=./_output/kclvm-windows/libs/_kclvm.ll go run ./copy-file.go -src=../../kclvm/runtime/src/_kclvm.bc -dst=./_output/kclvm-windows/libs/_kclvm.bc go run ./copy-file.go -src=../../kclvm/runtime/src/_kclvm.h -dst=./_output/kclvm-windows/libs/_kclvm.h diff --git a/scripts/docker/kclvm-builder-centos8/Dockerfile b/scripts/docker/kclvm-builder-centos8/Dockerfile index ff30e1451..eeb63bdef 100644 --- a/scripts/docker/kclvm-builder-centos8/Dockerfile +++ b/scripts/docker/kclvm-builder-centos8/Dockerfile @@ -8,6 +8,10 @@ FROM centos:centos8 # https://access.redhat.com/articles/2050743 RUN touch /etc/sysconfig/64bit_strstr_via_64bit_strstr_sse2_unaligned +# https://forketyfork.medium.com/centos-8-no-urls-in-mirrorlist-error-3f87c3466faa +RUN sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-* +RUN sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-* + RUN yum -y install make RUN yum -y install which RUN yum -y install wget @@ -18,8 +22,8 @@ RUN yum -y install ca-certificates # rust-1.54.0 # cargo 1.54.0 -RUN yum -y install rust cargo rustfmt -# RUN curl https://sh.rustup.rs -sSf | bash -s -- -y +# RUN yum -y install rust cargo rustfmt +RUN curl https://sh.rustup.rs -sSf | bash -s -- -y RUN echo 'source $HOME/.cargo/env' >> $HOME/.bashrc ENV PATH="/root/.cargo/bin:${PATH}" @@ -59,15 +63,7 @@ RUN rm -rf /go/pkg/sumdb RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone -#COPY ./vendor-kclvm /root/vendor-kclvm -#COPY ./vendor-kclvm-runtime /root/vendor-kclvm-runtime - -COPY ./crates.io-index /root/crates.io-index - -RUN mkdir -p /root/.cargo -COPY ./_cargo_config-kclvm.toml /root/.cargo/config - -RUN touch /root/.cargo/env +RUN mkdir -p /root/.cargo && touch /root/.cargo/env WORKDIR /root diff --git a/scripts/docker/kclvm-builder-centos8/Makefile b/scripts/docker/kclvm-builder-centos8/Makefile index ae29d16bd..af6bc434e 100644 --- a/scripts/docker/kclvm-builder-centos8/Makefile +++ b/scripts/docker/kclvm-builder-centos8/Makefile @@ -1,9 +1,8 @@ # Copyright 2021 The KCL Authors. All rights reserved. PWD:=$(shell pwd) -TIMESTAMP:=$(shell go run timestamp.go) -BUILDER_IMAGE:=reg.docker.inc.com/kusionstack/kclvm-builder-centos8 +BUILDER_IMAGE:=kusionstack/kclvm-builder:centos8 # export DOCKER_DEFAULT_PLATFORM=linux/amd64 # or @@ -14,43 +13,18 @@ RUN_IN_DOCKER+=-v ~/.ssh:/root/.ssh RUN_IN_DOCKER+=-v ~/.gitconfig:/root/.gitconfig RUN_IN_DOCKER+=-v ~/go/pkg/mod:/go/pkg/mod -kclvm-builder: crates.io-index +kclvm-builder: docker build --platform linux/amd64 -t ${BUILDER_IMAGE} . @echo "ok" -crates.io-index: - git clone --mirror git@github.com:rust-lang/crates.io-index.git crates.io-index - -vendor-kclvm: - -rm -rf ${PWD}/../../kclvm/vendor - - ${RUN_IN_DOCKER} -v ${PWD}/../..:/root/kclvm -w /root/kclvm/kclvm rust:1.54 cargo vendor --versioned-dirs - mv ${PWD}/../../kclvm/vendor ./vendor-kclvm - - -vendor-kclvm-runtime: - -rm -rf ${PWD}/../../kclvm/runtime/vendor - - ${RUN_IN_DOCKER} -v ${PWD}/../..:/root/kclvm -w /root/kclvm/kclvm/runtime rust:1.54 cargo vendor --versioned-dirs - mv ${PWD}/../../kclvm/runtime/vendor ./vendor-kclvm-runtime - publish-builder: # https://docker.inc.com/ - # docker login --username= reg.docker.inc.com + # docker login --username= # make kclvm-builder docker push ${BUILDER_IMAGE} @echo "push ${BUILDER_IMAGE} ok" -publish-builder-tagged: - # https://docker.inc.com/ - # docker login --username= reg.docker.inc.com - - # make kclvm-builder - docker tag ${BUILDER_IMAGE} ${BUILDER_IMAGE}:${TIMESTAMP} - docker push ${BUILDER_IMAGE}:${TIMESTAMP} - @echo "push ${BUILDER_IMAGE}:${TIMESTAMP} ok" - sh-in-builder: ${RUN_IN_DOCKER} -v ${PWD}/../..:/root/kclvm -w /root ${BUILDER_IMAGE} bash diff --git a/scripts/docker/kclvm-builder-centos8/_cargo_config-kclvmx.toml b/scripts/docker/kclvm-builder-centos8/_cargo_config-kclvmx.toml deleted file mode 100644 index e268e03a6..000000000 --- a/scripts/docker/kclvm-builder-centos8/_cargo_config-kclvmx.toml +++ /dev/null @@ -1,10 +0,0 @@ -# https://stackoverflow.com/questions/31029095/disable-registry-update-in-cargo -# https://doc.rust-lang.org/cargo/reference/config.html - -# /root/.cargo/config - -[source.crates-io] -replace-with = 'local' - -[source.local] -registry = "file:///root/crates.io-index" diff --git a/scripts/docker/kclvm-builder-centos8/timestamp.go b/scripts/docker/kclvm-builder-centos8/timestamp.go deleted file mode 100644 index 96d8a87dc..000000000 --- a/scripts/docker/kclvm-builder-centos8/timestamp.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2021 The KCL Authors. All rights reserved. - -//go:build ignore -// +build ignore - -package main - -import ( - "fmt" - "time" -) - -func main() { - t := time.Now() - fmt.Printf( - "%04d%02d%02d-%02d%02d%02d", - t.Year(), t.Month(), t.Day(), - t.Hour(), t.Minute(), t.Second(), - ) -} diff --git a/test/test_units/test_kclvm/test_ast/test_transfomer/test_data/assign.output b/test/test_units/test_kclvm/test_ast/test_transfomer/test_data/assign.output index d63f7aa3f..ae4d2608d 100644 --- a/test/test_units/test_kclvm/test_ast/test_transfomer/test_data/assign.output +++ b/test/test_units/test_kclvm/test_ast/test_transfomer/test_data/assign.output @@ -2,4 +2,3 @@ a = aa = 1 b = bb = 2 if True: c = cc = 3 - diff --git a/test/test_units/test_kclvm/test_tools/test_printer/test_data/codelayout.output b/test/test_units/test_kclvm/test_tools/test_printer/test_data/codelayout.output index 568ecf7a5..0ab068aea 100644 --- a/test/test_units/test_kclvm/test_tools/test_printer/test_data/codelayout.output +++ b/test/test_units/test_kclvm/test_tools/test_printer/test_data/codelayout.output @@ -18,7 +18,6 @@ elif True: b = 2 else: c = 3 - d = 1 + 2 e = (1 + 2) f = [1, 2, 3] @@ -69,7 +68,6 @@ if foo is not None: _dict |= {} hello = "world{}".format(1)[2:4:].lower() range_int = [i for i in range(10)] - op = 1 + 2 - -3 + (3 - 1) // 3 op += 1 op -= 12 + 23 diff --git a/test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.input b/test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.input new file mode 100644 index 000000000..40aeb4d0a --- /dev/null +++ b/test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.input @@ -0,0 +1,16 @@ +if True: + a = 1 +elif True: + b = 2 +else: + c = 3 + +if True: + if False: + d = 4 + elif True: + e = 5 + else: + f = 6 +else: + g = 7 diff --git a/test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.output b/test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.output new file mode 100644 index 000000000..8a20e1acd --- /dev/null +++ b/test/test_units/test_kclvm/test_tools/test_printer/test_data/if_stmt.output @@ -0,0 +1,15 @@ +if True: + a = 1 +elif True: + b = 2 +else: + c = 3 +if True: + if False: + d = 4 + elif True: + e = 5 + else: + f = 6 +else: + g = 7 diff --git a/test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.input b/test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.input new file mode 100644 index 000000000..613bcab7c --- /dev/null +++ b/test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.input @@ -0,0 +1,6 @@ +a = + 1 +b = - 1 +c = ~ 1 +d = not True +e = + 1 + + 1 +f = + 1 - - 1 diff --git a/test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.output b/test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.output new file mode 100644 index 000000000..552bdc5d0 --- /dev/null +++ b/test/test_units/test_kclvm/test_tools/test_printer/test_data/unary.output @@ -0,0 +1,6 @@ +a = +1 +b = -1 +c = ~1 +d = not True +e = +1 + +1 +f = +1 - -1 diff --git a/test/test_units/test_kclvm/test_tools/test_printer/test_printer.py b/test/test_units/test_kclvm/test_tools/test_printer/test_printer.py index e8b720195..9f8efec7b 100644 --- a/test/test_units/test_kclvm/test_tools/test_printer/test_printer.py +++ b/test/test_units/test_kclvm/test_tools/test_printer/test_printer.py @@ -16,6 +16,7 @@ _TEST_CASES = [ "arguments", "empty", + "if_stmt", "codelayout", "collection_if", "comment", @@ -25,6 +26,7 @@ "quant", "rule", "type_alias", + "unary", "unification", ]