plum

#treesitter#compiler#wasm

git clone https://git.pyrossh.dev/plum

A statically typed, imperative programming language inspired by rust, python


.recall/context.md
141de54 1
# Project Context — plum (updated 2026-07-20T21:06:26)
141de54 2
141de54 3
_Generated locally by Recall — TextRank (vendored, numpy-accelerated)._
141de54 4
141de54 5
## 🎯 Goal
141de54 6
Do you want to completely implement the standard library like List, Map, Enum completely and type check and compile them to see if they work? Honestly, this would be a much bigger undertaking than what we've done so far — List/Map need real generics monomorphization (there's currently none; user-defined generics type-check but don't compile, per the README's Known gaps) plus a growable-memory runtime (the current bump allocator never resizes or frees), and general Enum support needs a runtime ta…
141de54 7
141de54 8
## 🧭 Summary
141de54 9
- <task-id>a3a9df0eb061889e5</task-id>
141de54 10
- <task-id>aa93a0b92186e335d</task-id>
141de54 11
- <task-id>a7c05a66e453e9fc7</task-id>
141de54 12
- <task-id>a50ac39524b3a83d6</task-id>
141de54 13
- <task-id>a527ef038e07d98b5</task-id>
141de54 14
- <task-id>a61ac371a07e0a4ac</task-id>
141de54 15
- <task-id>a3121982d2d930f6c</task-id>
141de54 16
- <task-id>a9ab25fe3cb73fe68</task-id>
141de54 17
141de54 18
## ⏭️ Next steps / open threads
141de54 19
- Implementer: "Before I begin - should the hook be installed at user or system level?"
141de54 20
- What would you like to do?
141de54 21
- If you haven't completed Phase 1, you cannot propose fixes.
141de54 22
- My actual edits (grammar.js, match.txt, corpus renames) are safely preserved in `stash@{0}` — I just need to reset the incidentally-regenerated files to HEAD and re-apply the stash.
141de54 23
- Now let's check the two remaining direct `.index` usages seen earlier that weren't behind `ok_or_else`.
141de54 24
- Uncommitted changes to wrap up: .recall/, tooling/tree-sitter-plum/.recall/
141de54 25
141de54 26
## 📂 Files touched
141de54 27
- /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-19-general-enum-support-design.md
141de54 28
- /Users/pyrossh/Code/plum/plum-checker/src/lib.rs
141de54 29
- /Users/pyrossh/Code/plum/plum-core/src/ast.rs
141de54 30
- /Users/pyrossh/Code/plum/plum-core/src/parser.rs
141de54 31
- /Users/pyrossh/Code/plum/tooling/tree-sitter-plum/grammar.js
141de54 32
- /Users/pyrossh/Code/plum/plum-wasm-codegen/src/lib.rs
141de54 33
- /Users/pyrossh/Code/plum/plum-checker/tests/checker_tests.rs
141de54 34
- /Users/pyrossh/Code/plum/plum-wasm-codegen/tests/codegen_tests.rs
141de54 35
- /Users/pyrossh/Code/plum/plum-checker/tests/examples_test.rs
141de54 36
- /Users/pyrossh/Code/plum/plum-wasm-codegen/tests/examples_test.rs
141de54 37
- /Users/pyrossh/Code/plum/examples/match.plum
141de54 38
- /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-19-general-enum-support.md
141de54 39
- /Users/pyrossh/Code/plum/.superpowers/sdd/progress.md
141de54 40
- /Users/pyrossh/Code/plum/plum-cli/src/main.rs
141de54 41
- /Users/pyrossh/Code/plum/.superpowers/sdd/task-5-report.md
141de54 42
- /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-tail-position-and-grammar-gaps-design.md
141de54 43
- /Users/pyrossh/Code/plum/README.md
141de54 44
- /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-20-tail-position-and-grammar-gaps.md
141de54 45
- /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-generics-monomorphization-design.md
141de54 46
- /Users/pyrossh/Code/plum/plum-checker/src/types.rs
141de54 47
- /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-20-generics-monomorphization.md
141de54 48
- /Users/pyrossh/Code/plum/.superpowers/sdd/task-2-report.md
141de54 49
- /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-generic-enum-multi-instantiation-design.md
141de54 50
- /Users/pyrossh/Code/plum/plum-checker/src/monomorphize.rs
141de54 51
- /Users/pyrossh/Code/plum/docs/superpowers/plans/2026-07-20-generic-enum-multi-instantiation.md
141de54 52
- /Users/pyrossh/Code/plum/.superpowers/sdd/task-1-report.md
141de54 53
- /Users/pyrossh/Code/plum/docs/superpowers/specs/2026-07-20-closures-design.md
141de54 54
141de54 55
## 🔧 Commands run
141de54 56
- sed -n '1,400p' README.md | grep -n -i "known gap\|enum\|generic" -A3 -B1
141de54 57
- find . -iname "*.plum" -path "*enum*" -o -iname "*.plum" | xargs grep -l "enum" -i 2>/dev/null
141de54 58
- ls libs/std/; echo ---; cat libs/std/option.plum; echo ---; cat libs/std/result.plum
141de54 59
- grep -n "enum\|variant\|Bool\|True\|False" plum-checker/src/types.rs | head -60
141de54 60
- grep -n "enum\|variant\|Bool\|True\|False" plum-wasm-codegen/src/lib.rs | head -80
141de54 61
- grep -n "bump_global\|fn compile_new\|struct_offset\|field_offset\|ast::Expr::New\|memory\|MemoryType\|alloc" plum-wasm-codegen/src/lib.rs | head -60
141de54 62
- grep -n "enum_variant\|variant" tooling/tree-sitter-plum/grammar.js
141de54 63
- grep -n "Enum\|Variant" plum-core/src/ast.rs
141de54 64
- sed -n '55,90p' plum-core/src/ast.rs; echo ---GRAMMAR---; grep -n "variant\|enum" tooling/tree-sitter-plum/grammar.js -i
141de54 65
- sed -n '125,160p' tooling/tree-sitter-plum/grammar.js
141de54 66
- grep -n "EnumVariant\|enum_variants\|construct\|Call(" plum-checker/src/lib.rs | head -50
141de54 67
- ls docs/superpowers/specs/ 2>/dev/null
141de54 68
- git add docs/superpowers/specs/2026-07-19-general-enum-support-design.md && git commit -m "$(cat <<'EOF' docs: add design spec for general enum support in check
141de54 69
- grep -n "ClassCall\|FieldArg\|CasePattern::Class\|fn parse_call\|positional" plum-core/src/parser.rs | head -60
141de54 70
- grep -n "class_call\|class_argument_list\|fn_call\|fn_argument_list" tooling/tree-sitter-plum/grammar.js
141de54 71
- …and 102 more
141de54 72
141de54 73
## ⏱ Where we left off
141de54 74
Spec written and committed to [2026-07-20-closures-design.md](docs/superpowers/specs/2026-07-20-closures-design.md). Please review it before I write the implementation plan.
141de54 75
141de54 76
## 🌿 Git ground-truth
141de54 77
```
141de54 78
Recent commits:
141de54 79
4f1f2b6 docs: add design spec for closures
141de54 80
b6a9042 test(plum-wasm-codegen): cover same bare-generic-enum-param function at multiple instantiations
141de54 81
2216237 feat(plum-checker): support multiple concrete instantiations of the same generic enum
141de54 82
e698d53 docs: revise generic-enum plan with bare-generic-typed-param fix as Task 1
141de54 83
84e946f docs: amend generic-enum spec with bare-generic-typed-param fix
141de54 84
aedebc1 docs: add implementation plan for generic-enum multi-instantiation
141de54 85
32da118 docs: add design spec for generic-enum multi-instantiation support
141de54 86
6613e6d test(plum-checker): mark slow recursion-guard test as ignored by default
141de54 87
```