feat: add built-in Map type with String keys
Add Map<String, V> as a first-class built-in type for key-value storage, needed for self-hosting the compiler (parser/typechecker/interpreter all rely heavily on hashmaps). - types.rs: Type::Map(K,V) variant, all match arms (unify, apply, etc.) - interpreter.rs: Value::Map, 12 BuiltinFn variants (new/set/get/contains/ remove/keys/values/size/isEmpty/fromList/toList/merge), immutable semantics - typechecker.rs: Map<K,V> resolution in resolve_type - js_backend.rs: Map as JS Map with emit_map_operation() - c_backend.rs: LuxMap struct (linear-scan), runtime fns, emit_map_operation() - main.rs: 12 tests covering all Map operations - validate.sh: now checks all projects/ directories too Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -63,6 +63,26 @@ for pkg in path frontmatter xml rss markdown; do
|
||||
fi
|
||||
done
|
||||
|
||||
# --- Project checks ---
|
||||
PROJECTS_DIR="$(pwd)/projects"
|
||||
for proj_dir in "$PROJECTS_DIR"/*/; do
|
||||
proj=$(basename "$proj_dir")
|
||||
if [ -f "$proj_dir/main.lux" ]; then
|
||||
step "lux check (project: $proj)"
|
||||
OUTPUT=$("$LUX" check "$proj_dir/main.lux" 2>&1 || true)
|
||||
if echo "$OUTPUT" | grep -qi "error"; then fail; else ok; fi
|
||||
fi
|
||||
# Check any standalone .lux files in the project
|
||||
for lux_file in "$proj_dir"/*.lux; do
|
||||
[ -f "$lux_file" ] || continue
|
||||
fname=$(basename "$lux_file")
|
||||
[ "$fname" = "main.lux" ] && continue
|
||||
step "lux check (project: $proj/$fname)"
|
||||
OUTPUT=$("$LUX" check "$lux_file" 2>&1 || true)
|
||||
if echo "$OUTPUT" | grep -qi "error"; then fail; else ok; fi
|
||||
done
|
||||
done
|
||||
|
||||
# --- Summary ---
|
||||
printf "\n${BOLD}═══ Validation Summary ═══${NC}\n"
|
||||
if [ $FAILED -eq 0 ]; then
|
||||
|
||||
Reference in New Issue
Block a user