Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
56da534
Move useful things out of prism_parser
JonathanBrouwer Feb 14, 2026
5ffda4b
Move useful things out of prism_parser
JonathanBrouwer Feb 14, 2026
2997623
Introduce ErrorGuaranteed
JonathanBrouwer Feb 14, 2026
ddf20da
Fmt
JonathanBrouwer Feb 14, 2026
d954058
WIP new parser
JonathanBrouwer Feb 14, 2026
f5b22e7
Simple type parser
JonathanBrouwer Feb 15, 2026
0260490
Lexer
JonathanBrouwer Feb 15, 2026
62e2a84
Simple parser with lexer
JonathanBrouwer Feb 15, 2026
442f16e
WIP
JonathanBrouwer Feb 15, 2026
ee5546d
Nameres
JonathanBrouwer Feb 16, 2026
91495d1
Nameres
JonathanBrouwer Feb 16, 2026
d8992d7
Fnconstruct
JonathanBrouwer Feb 16, 2026
910be32
Fix parens truncate
JonathanBrouwer Feb 16, 2026
299b8af
Improve lexer
JonathanBrouwer Feb 18, 2026
e9e8f92
Parse fn types
JonathanBrouwer Feb 18, 2026
db466ba
Remove duplicate errs
JonathanBrouwer Feb 18, 2026
43708f0
Re-add all tests
JonathanBrouwer Feb 18, 2026
5c23878
Allow _ in identifiers
JonathanBrouwer Feb 18, 2026
b7a3bd4
Parse Free
JonathanBrouwer Feb 18, 2026
618a227
Add test
JonathanBrouwer Feb 18, 2026
285757a
Add fnconstruct syntax
JonathanBrouwer Feb 18, 2026
2f29145
Add fnconstruct syntax
JonathanBrouwer Feb 18, 2026
5e1018b
Wip
JonathanBrouwer Feb 18, 2026
82435a4
Fix fn parser
JonathanBrouwer Feb 18, 2026
84e4c2e
Clippy
JonathanBrouwer Feb 18, 2026
f5ed41f
Remove old parser
JonathanBrouwer Feb 20, 2026
950d832
Display free as _
JonathanBrouwer Feb 21, 2026
c33cba0
Merge remote-tracking branch 'origin/new_parser' into new_parser
JonathanBrouwer Feb 21, 2026
177e768
Wip
JonathanBrouwer Mar 7, 2026
e50edb9
Convert to named fields
JonathanBrouwer Mar 7, 2026
d724f0c
Wip
JonathanBrouwer Mar 8, 2026
48b167a
Remove rwlock from input table
JonathanBrouwer Mar 8, 2026
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
75 changes: 6 additions & 69 deletions Cargo.lock

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

11 changes: 5 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
[workspace]
members = [
"prism_compiler", "prism_diag", "prism_diag_derive", "prism_input", "prism_parser", "prism_lsp", "prism_parser_bootstrap"
]
"prism_compiler", "prism_diag", "prism_diag_derive", "prism_input", "prism_lsp", "prism_data_structures"]
default-members = [
"prism_compiler", "prism_diag", "prism_diag_derive", "prism_input", "prism_parser", "prism_lsp", "prism_parser_bootstrap"
"prism_compiler", "prism_diag", "prism_diag_derive", "prism_input", "prism_lsp", "prism_data_structures"
]
resolver = "3"

Expand All @@ -15,17 +14,16 @@ license = "MPL-2.0"

[workspace.dependencies]
# Internal
prism_parser = { path = "prism_parser" }
prism_input = { path = "prism_input" }
prism_compiler = { path = "prism_compiler" }
prism_diag = { path = "prism_diag" }
prism_diag_derive = { path = "prism_diag_derive" }
prism_data_structures = { path = "prism_data_structures" }

# External
clap = { version = "4.5", default-features = false, features = ["help", "usage", "error-context", "std", "derive"] }
serde = { version = "1.0", features = ["derive", "std", "rc"] }
serde_json = "1.0"
test_each_file = "0.3"
rmp-serde = "1.3"
tower-lsp-server = "0.23"
tokio = { version = "1.49", default-features = false, features = ["macros", "rt-multi-thread", "io-std"] }
Expand All @@ -34,4 +32,5 @@ synstructure = "0.13.2"
syn = "2.0.112"
quote = "1.0.42"
proc-macro2 = "1.0.104"
libtest-mimic = "0.8.1"
libtest-mimic = "0.8.1"
unicode-ident = "1.0.23"
4 changes: 2 additions & 2 deletions prism_compiler/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ license.workspace = true

[dependencies]
clap.workspace = true
prism_parser.workspace = true
prism_input.workspace = true
prism_diag.workspace = true
prism_diag_derive.workspace = true
prism_data_structures.workspace = true
unicode-ident.workspace = true

[dev-dependencies]
test_each_file.workspace = true
libtest-mimic.workspace = true

[[test]]
Expand Down
74 changes: 0 additions & 74 deletions prism_compiler/resources/prism.pg

This file was deleted.

6 changes: 5 additions & 1 deletion prism_compiler/resources/thing.pr
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
Type
/// help
// so cool

let
// attjaa
55 changes: 39 additions & 16 deletions prism_compiler/src/interp/beta_reduce.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use crate::lang::CorePrismExpr;
use crate::lang::Expr;
use crate::lang::env::{DbEnv, EnvEntry};
use crate::lang::{CoreIndex, PrismDb};
use crate::type_check::{TypecheckPrismEnv, UniqueVariableId};
Expand All @@ -20,45 +20,68 @@ impl<'a> TypecheckPrismEnv<'a> {
) -> CoreIndex {
let (i, s) = self.db.beta_reduce_head(i, s);

let e_new = match self.db.checked_values[*i] {
let e_new = match self.db.exprs[*i] {
// Values
CorePrismExpr::Type | CorePrismExpr::GrammarValue(..) | CorePrismExpr::GrammarType => {
Expr::Type => {
return i;
}

CorePrismExpr::Let(_, _) => unreachable!(),
CorePrismExpr::DeBruijnIndex(v) => {
Expr::Let {
name: _,
value: _,
body: _,
} => unreachable!(),
Expr::DeBruijnIndex { idx: v } => {
let EnvEntry::RType(id) = s[v] else {
unreachable!()
};
CorePrismExpr::DeBruijnIndex(var_map.len() - var_map[&id] - 1)
Expr::DeBruijnIndex {
idx: var_map.len() - var_map[&id] - 1,
}
}
CorePrismExpr::FnType(a, b) => {
Expr::FnType {
arg_name,
arg_type: a,
body: b,
} => {
let a = self.beta_reduce_inner(a, &s, var_map);
let id = self.new_tc_id();
var_map.insert(id, var_map.len());
let sub_env = s.cons(EnvEntry::RType(id));
let b = self.beta_reduce_inner(b, &sub_env, var_map);
var_map.remove(&id);
CorePrismExpr::FnType(a, b)
Expr::FnType {
arg_name,
arg_type: a,
body: b,
}
}
CorePrismExpr::FnConstruct(b) => {
Expr::FnConstruct { arg_name, body: b } => {
let id = self.new_tc_id();
var_map.insert(id, var_map.len());
let sub_env = s.cons(EnvEntry::RType(id));
let b = self.beta_reduce_inner(b, &sub_env, var_map);
var_map.remove(&id);
CorePrismExpr::FnConstruct(b)
Expr::FnConstruct { arg_name, body: b }
}
CorePrismExpr::FnDestruct(a, b) => {
Expr::FnDestruct {
function: a,
arg: b,
} => {
let a = self.beta_reduce_inner(a, &s, var_map);
let b = self.beta_reduce_inner(b, &s, var_map);
CorePrismExpr::FnDestruct(a, b)
Expr::FnDestruct {
function: a,
arg: b,
}
}
CorePrismExpr::Free => CorePrismExpr::Free,
CorePrismExpr::Shift(_, _) => unreachable!(),
CorePrismExpr::TypeAssert(_, _) => unreachable!(),
Expr::Free => Expr::Free,
Expr::Shift(_, _) => unreachable!(),
Expr::TypeAssert {
value: _,
type_hint: _,
} => unreachable!(),
};
self.db.store_checked(e_new, self.db.checked_origins[*i])
self.db.store(e_new, self.db.expr_origins[*i])
}
}
Loading
Loading