├── .github ├── dependabot.yml └── workflows │ ├── dependabot.yml │ ├── doc.yml │ ├── lint.yml │ ├── release.yml │ └── rust-ci.yml ├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── LICENSE ├── Makefile ├── README.md ├── crates ├── treereduce-c │ ├── Cargo.toml │ └── src │ │ └── main.rs ├── treereduce-java │ ├── Cargo.toml │ └── src │ │ └── main.rs ├── treereduce-javascript │ ├── Cargo.toml │ └── src │ │ └── main.rs ├── treereduce-lua │ ├── Cargo.toml │ └── src │ │ └── main.rs ├── treereduce-rust │ ├── Cargo.toml │ └── src │ │ └── main.rs ├── treereduce-souffle │ ├── Cargo.toml │ └── src │ │ └── main.rs ├── treereduce-swift │ ├── Cargo.toml │ └── src │ │ └── main.rs └── treereduce │ ├── Cargo.toml │ ├── benches │ ├── bench.rs.bak │ ├── c │ │ ├── basic.c │ │ ├── clang-22382.c │ │ ├── gcc-71626.c │ │ ├── hello-world-big.c │ │ └── hello-world.c │ ├── cpp │ │ ├── hello-world-big.cpp │ │ └── hello-world.cpp │ └── java │ │ └── HelloWorld.java │ ├── examples │ ├── assets │ │ └── C.g4 │ ├── bench.rs │ └── scripts │ │ ├── clang++.sh │ │ ├── clang-creduce.sh │ │ ├── clang-halfempty.sh │ │ ├── clang-picireny.sh │ │ ├── clang-sleep.sh │ │ ├── clang-werror-halfempty.sh │ │ ├── clang-werror-picireny.sh │ │ ├── plot-size.py │ │ └── plot-time.py │ └── src │ ├── check.rs │ ├── cli.rs │ ├── cli │ └── formatter.rs │ ├── edits.rs │ ├── id.rs │ ├── lib.rs │ ├── node_types.rs │ ├── original.rs │ ├── reduce.rs │ ├── reduce │ ├── error.rs │ └── task.rs │ ├── stats.rs │ └── versioned.rs ├── doc ├── .gitignore ├── SUMMARY.md ├── benchmarks.md ├── book.toml ├── changelog.md ├── contributing.md ├── design.md ├── dev │ ├── build.md │ ├── dev.md │ └── lint.md ├── img │ ├── basic-size.svg │ ├── basic-time.svg │ ├── basic-werror-size.svg │ ├── basic-werror-time.svg │ ├── false-time.svg │ └── true-time.svg ├── index.md ├── install.md ├── overview.md └── usage.md ├── scripts ├── analyze.py ├── false.sh ├── lint │ ├── lint.py │ ├── py.py │ ├── rumdl.toml │ ├── whitespace.py │ └── xref.py ├── profile.sh └── true.sh ├── shell.nix └── test ├── .gitignore ├── bin └── match-c ├── comment.c ├── const-hex.c ├── const-hex.dl ├── const-str.c ├── const-str.dl ├── hello-world.c ├── lit.cfg.py └── static.rs /.github/dependabot.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.github/dependabot.yml -------------------------------------------------------------------------------- /.github/workflows/dependabot.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.github/workflows/dependabot.yml -------------------------------------------------------------------------------- /.github/workflows/doc.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.github/workflows/doc.yml -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.github/workflows/lint.yml -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.github/workflows/release.yml -------------------------------------------------------------------------------- /.github/workflows/rust-ci.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.github/workflows/rust-ci.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/.gitignore -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/Cargo.lock -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/Cargo.toml -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/LICENSE -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/Makefile -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/README.md -------------------------------------------------------------------------------- /crates/treereduce-c/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-c/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-c/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-c/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce-java/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-java/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-java/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-java/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce-javascript/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-javascript/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-javascript/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-javascript/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce-lua/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-lua/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-lua/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-lua/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce-rust/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-rust/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-rust/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-rust/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce-souffle/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-souffle/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-souffle/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-souffle/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce-swift/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-swift/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce-swift/src/main.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce-swift/src/main.rs -------------------------------------------------------------------------------- /crates/treereduce/Cargo.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/Cargo.toml -------------------------------------------------------------------------------- /crates/treereduce/benches/bench.rs.bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/bench.rs.bak -------------------------------------------------------------------------------- /crates/treereduce/benches/c/basic.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/c/basic.c -------------------------------------------------------------------------------- /crates/treereduce/benches/c/clang-22382.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/c/clang-22382.c -------------------------------------------------------------------------------- /crates/treereduce/benches/c/gcc-71626.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/c/gcc-71626.c -------------------------------------------------------------------------------- /crates/treereduce/benches/c/hello-world-big.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/c/hello-world-big.c -------------------------------------------------------------------------------- /crates/treereduce/benches/c/hello-world.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/c/hello-world.c -------------------------------------------------------------------------------- /crates/treereduce/benches/cpp/hello-world-big.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/cpp/hello-world-big.cpp -------------------------------------------------------------------------------- /crates/treereduce/benches/cpp/hello-world.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/cpp/hello-world.cpp -------------------------------------------------------------------------------- /crates/treereduce/benches/java/HelloWorld.java: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/benches/java/HelloWorld.java -------------------------------------------------------------------------------- /crates/treereduce/examples/assets/C.g4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/assets/C.g4 -------------------------------------------------------------------------------- /crates/treereduce/examples/bench.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/bench.rs -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang++.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang++.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang-creduce.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang-creduce.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang-halfempty.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang-halfempty.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang-picireny.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang-picireny.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang-sleep.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang-sleep.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang-werror-halfempty.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang-werror-halfempty.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/clang-werror-picireny.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/clang-werror-picireny.sh -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/plot-size.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/plot-size.py -------------------------------------------------------------------------------- /crates/treereduce/examples/scripts/plot-time.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/examples/scripts/plot-time.py -------------------------------------------------------------------------------- /crates/treereduce/src/check.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/check.rs -------------------------------------------------------------------------------- /crates/treereduce/src/cli.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/cli.rs -------------------------------------------------------------------------------- /crates/treereduce/src/cli/formatter.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/cli/formatter.rs -------------------------------------------------------------------------------- /crates/treereduce/src/edits.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/edits.rs -------------------------------------------------------------------------------- /crates/treereduce/src/id.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/id.rs -------------------------------------------------------------------------------- /crates/treereduce/src/lib.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/lib.rs -------------------------------------------------------------------------------- /crates/treereduce/src/node_types.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/node_types.rs -------------------------------------------------------------------------------- /crates/treereduce/src/original.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/original.rs -------------------------------------------------------------------------------- /crates/treereduce/src/reduce.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/reduce.rs -------------------------------------------------------------------------------- /crates/treereduce/src/reduce/error.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/reduce/error.rs -------------------------------------------------------------------------------- /crates/treereduce/src/reduce/task.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/reduce/task.rs -------------------------------------------------------------------------------- /crates/treereduce/src/stats.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/stats.rs -------------------------------------------------------------------------------- /crates/treereduce/src/versioned.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/crates/treereduce/src/versioned.rs -------------------------------------------------------------------------------- /doc/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | book/ -------------------------------------------------------------------------------- /doc/SUMMARY.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/SUMMARY.md -------------------------------------------------------------------------------- /doc/benchmarks.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/benchmarks.md -------------------------------------------------------------------------------- /doc/book.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/book.toml -------------------------------------------------------------------------------- /doc/changelog.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/changelog.md -------------------------------------------------------------------------------- /doc/contributing.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/contributing.md -------------------------------------------------------------------------------- /doc/design.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/design.md -------------------------------------------------------------------------------- /doc/dev/build.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/dev/build.md -------------------------------------------------------------------------------- /doc/dev/dev.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/dev/dev.md -------------------------------------------------------------------------------- /doc/dev/lint.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/dev/lint.md -------------------------------------------------------------------------------- /doc/img/basic-size.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/img/basic-size.svg -------------------------------------------------------------------------------- /doc/img/basic-time.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/img/basic-time.svg -------------------------------------------------------------------------------- /doc/img/basic-werror-size.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/img/basic-werror-size.svg -------------------------------------------------------------------------------- /doc/img/basic-werror-time.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/img/basic-werror-time.svg -------------------------------------------------------------------------------- /doc/img/false-time.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/img/false-time.svg -------------------------------------------------------------------------------- /doc/img/true-time.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/img/true-time.svg -------------------------------------------------------------------------------- /doc/index.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/index.md -------------------------------------------------------------------------------- /doc/install.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/install.md -------------------------------------------------------------------------------- /doc/overview.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/overview.md -------------------------------------------------------------------------------- /doc/usage.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/doc/usage.md -------------------------------------------------------------------------------- /scripts/analyze.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/analyze.py -------------------------------------------------------------------------------- /scripts/false.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | exit 1 3 | -------------------------------------------------------------------------------- /scripts/lint/lint.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/lint/lint.py -------------------------------------------------------------------------------- /scripts/lint/py.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/lint/py.py -------------------------------------------------------------------------------- /scripts/lint/rumdl.toml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/lint/rumdl.toml -------------------------------------------------------------------------------- /scripts/lint/whitespace.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/lint/whitespace.py -------------------------------------------------------------------------------- /scripts/lint/xref.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/lint/xref.py -------------------------------------------------------------------------------- /scripts/profile.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/scripts/profile.sh -------------------------------------------------------------------------------- /scripts/true.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | exit 0 3 | -------------------------------------------------------------------------------- /shell.nix: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/shell.nix -------------------------------------------------------------------------------- /test/.gitignore: -------------------------------------------------------------------------------- 1 | Output/ 2 | .lit_test_times.txt 3 | -------------------------------------------------------------------------------- /test/bin/match-c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/bin/match-c -------------------------------------------------------------------------------- /test/comment.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/comment.c -------------------------------------------------------------------------------- /test/const-hex.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/const-hex.c -------------------------------------------------------------------------------- /test/const-hex.dl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/const-hex.dl -------------------------------------------------------------------------------- /test/const-str.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/const-str.c -------------------------------------------------------------------------------- /test/const-str.dl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/const-str.dl -------------------------------------------------------------------------------- /test/hello-world.c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/hello-world.c -------------------------------------------------------------------------------- /test/lit.cfg.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/lit.cfg.py -------------------------------------------------------------------------------- /test/static.rs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/langston-barrett/treereduce/HEAD/test/static.rs --------------------------------------------------------------------------------