Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,14 @@ members = [
"ephapax-linear",
"src/ephapax-surface",
"src/ephapax-desugar",
"src/ephapax-driver",
"src/ephapax-query",
"src/ephapax-meta",
"tests/fuzz",
# "src/ephapax-vram-cache", # Disabled: requires ephapax-proven repo
# "src/ephapax-tools", # Excluded (v2 plan E3): no consumer. Its formatter and
# linter are text heuristics that do not load programs, so they do not go
# through ephapax-driver. It builds as a member: 31 tests pass, 8 clippy warnings.
]

[workspace.package]
Expand Down Expand Up @@ -54,6 +58,7 @@ ephapax-lsp = { path = "src/ephapax-lsp" }
ephapax-package = { path = "src/ephapax-package" }
ephapax-query = { path = "src/ephapax-query" }
ephapax-meta = { path = "src/ephapax-meta" }
ephapax-driver = { path = "src/ephapax-driver" }
ephapax-vram-cache = { path = "src/ephapax-vram-cache" }

# Sibling-repo crates.
Expand Down
2 changes: 1 addition & 1 deletion Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ build-coproc:
set -euo pipefail
command -v zig >/dev/null 2>&1 || { echo "zig not found"; exit 1; }
zig build-lib -dynamic -O ReleaseSafe tools/coproc/ephapax_coproc.zig -femit-bin=libephapax_coproc.so
echo "built libephapax_coproc.so (run: ephapax run prog.eph -L libephapax_coproc.so)"
echo "built libephapax_coproc.so (run: ephapax run --interp prog.eph -L libephapax_coproc.so)"

# Run the coprocessor seam's own unit tests (Zig).
test-coproc:
Expand Down
4 changes: 2 additions & 2 deletions TEST-NEEDS.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ compliance, 16 tests)
performance, correctness, 13 tests)
* Benchmarks: `+src/ephapax-parser/benches/parse_bench.rs+`,
`+src/ephapax-vram-cache/benches/cache_bench.rs+`
* Total: *568 tests* (`+cargo test --workspace --all-targets+`);
* Total: *590 tests* (`+cargo test --workspace --all-targets+`);
pass/fail enforced by `+rust-ci.yml+`
* Documented all-target tests: 568
* Documented all-target tests: 596
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Resolved

=== CRG Testing Taxonomy — Status

Expand Down
2 changes: 1 addition & 1 deletion docs/v2-grammar-and-codegen-gaps-2026-06-16.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ coprocessor seam is reachable today only through raw `__ffi("eph_coproc_*",

*This is the single highest-leverage v2 toolchain item:* module-import +
qualified-member access (the import resolver in
`src/ephapax-cli/src/import_resolver.rs` already loads the import graph for
`src/ephapax-driver/src/resolver.rs`, at the time `src/ephapax-cli/src/import_resolver.rs`, already loads the import graph for
multi-file `compile`, but the surface parser/desugarer does not expose
imported members). Landing it unblocks consumption of the entire stdlib at
once.
3 changes: 2 additions & 1 deletion scripts/probe-battery.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@
# check ephapax check <probe>.eph
# compile ephapax compile <probe>.eph -o <tmp>.wasm
# (compile always runs wasmparser validation before writing)
# run ephapax run <probe>.eph (today: the interpreter)
# run ephapax run <probe>.eph (compiles, then runs the wasm
# in-process; since v2 plan rung E4)
# wasm-run compile, then `wasmtime run --preload env=env.wat --invoke main`
# with the wasmtime CLI; verdict `no-module` if compile fails
# with an ordinary error, `timeout` or `crash:<exit>` if the
Expand Down
2 changes: 1 addition & 1 deletion spec/TRG-PROFILE.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ The overall TRG grade is the *worst* of any MUST component.
| F3 | Parser | *C* | `src/ephapax-parser/src/lib.rs` (87KB, `chumsky`). Unit tests + property tests + grammar phase tests.
| F4 | AST | *C* | `src/ephapax-syntax/src/lib.rs` (23KB, core AST) + `src/ephapax-surface/src/lib.rs` (18KB, surface AST). `src/ephapax-desugar/src/lib.rs` (71KB) lowers surface → core. All three with unit tests.
| F5 | Macro expander | N/A | Ephapax has no macros.
| F6 | Import resolver / Modules | *D* | `src/ephapax-cli/src/import_resolver.rs`. Embedded in CLI; not a separate auditable component.
| F6 | Import resolver / Modules | *D* | `src/ephapax-driver/src/resolver.rs`. Since v2 plan rung E3 it is part of the `ephapax-driver` crate, which every tool loads programs through; it was embedded in the CLI before. Grade not reassessed.
| F7 | Diagnostics / Errors | *D* | `src/ephapax-parser/src/error.rs` (LexerError, ParseError). CLI error reporting in `main.rs`. No published error-code index.
|===

Expand Down
6 changes: 5 additions & 1 deletion spec/ephapax-v2-grammar.ebnf
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ expr_list = expr , { "," , expr } ;

variable = IDENT ;

literal = "()" | BOOLEAN | FLOAT | INTEGER | STRING ;
literal = "()" | BOOLEAN | FLOAT32 | FLOAT | INTEGER | STRING ;

(* ================================================================ *)
(* 13. COMPTIME EXPRESSIONS (META PLANE) *)
Expand Down Expand Up @@ -603,6 +603,10 @@ CTOR_IDENT = UPPER_ALPHA , { ALPHA_NUM | "_" } ;

INTEGER = DIGIT , { DIGIT } ;
FLOAT = DIGIT , { DIGIT } , "." , DIGIT , { DIGIT } ;
(* An F32 literal carries the `f32` suffix: 1.5f32. An unsuffixed float
literal is F64. An INTEGER is I32 when it fits, else I64; a `-` written
directly on the digits is part of the literal. *)
FLOAT32 = FLOAT , "f32" ;
BOOLEAN = "true" | "false" ;
STRING = '"' , { CHAR } , '"' ;

Expand Down
5 changes: 1 addition & 4 deletions src/ephapax-analysis/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,10 +70,7 @@ mod tests {

/// Helper to create an expression with a dummy span.
fn e(kind: ExprKind) -> Expr {
Expr {
kind,
span: Span::dummy(),
}
Expr::dummy(kind)
}

#[test]
Expand Down
9 changes: 5 additions & 4 deletions src/ephapax-cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,12 @@ ephapax-syntax.workspace = true
ephapax-ir.workspace = true
ephapax-lexer.workspace = true
ephapax-parser.workspace = true
ephapax-surface = { path = "../ephapax-surface" }
ephapax-desugar = { path = "../ephapax-desugar" }
ephapax-driver.workspace = true
ephapax-typing.workspace = true
ephapax-wasm.workspace = true
ephapax-interp.workspace = true
ephapax-repl.workspace = true
ephapax-package.workspace = true
ephapax-query.workspace = true
# `typed-wasm-verify` is optional: it powers `ephapax compile
# --verify-ownership`, which is a post-codegen L7+L10 verifier. With
# the feature OFF the CLI builds + runs without any reference to the
Expand All @@ -44,6 +42,8 @@ serde_json.workspace = true
# (the always-on floor; distinct from the optional --verify-ownership
# semantic check). Same crate the wasm_e2e / validate-wasm gates use.
wasmparser = "0.221"
# `ephapax run` executes the compiled module in-process (v2 plan E4).
wasmtime.workspace = true

[features]
default = ["typed-wasm-verify"]
Expand All @@ -55,7 +55,8 @@ default = ["typed-wasm-verify"]
"typed-wasm-verify" = ["dep:typed-wasm-verify"]

[dev-dependencies]
wasmtime.workspace = true
ephapax-desugar = { path = "../ephapax-desugar" }
ephapax-query.workspace = true
proptest = { workspace = true }
tempfile = "3"
# SHA-256 pin check of the vendored aLib vectors (tests/alib_conformance.rs).
Expand Down
Loading
Loading