29625e7262
The cma authoring-form harness corpus had gone dead against the language as it evolved since May. The plan modelled it as merely schema-dead (missing param_modes/ret_mode); it was also drift-dead in the example BODIES. Fixed in place, with `ail check` + both test suites as the oracle: - Schema: param_modes/ret_mode completed on every fn type; existing borrow annotations preserved (data_with_match's borrow over List). - Symbol drift: `<`/`==` -> `lt`/`eq` (operator-routing); the removed `io/print_int` op -> print_str(int_to_str n) followed by a newline print, preserving the trailing newline the references' expected_stdout needs. - Ownership/ADT restructures: data_simple's reuse-as now wraps the source in a match arm (ctor must be statically visible); data_with_match's count_via_letrec + local go switched borrow->own (consume-while-borrowed under the tightened ownership analysis; head_or_zero still exercises borrow over the boxed List). - param_modes_all rewritten to own (Int) + borrow over a boxed ADT -- (borrow Int) is now a borrow-over-value error. - Two new author-facing examples (loop_sum: Loop/Recur; new_rawbuf: New) cover the Term variants that landed since May. - spec_completeness.rs: drop the deleted ParamMode::Implicit; cover Loop/Recur/New; allowlist the non-authorable Term::Intrinsic out. - spec.md section 4 rewritten to own/borrow (mandatory, no implicit) with the borrow-over-value rule; rendered/ regenerated. - mock_full_run fixture's t3 turn-2 program migrated so the harness score assertions hold; usage fields untouched. Both render/ and harness/ cargo test suites green in mock mode; no live IONOS call. Run the harness budget/reference tests with AIL_BIN pointing at target/debug/ail (ail is not on PATH in the test env).
44 lines
1.1 KiB
JSON
44 lines
1.1 KiB
JSON
{
|
|
"schema": "ailang/v0",
|
|
"name": "fn_with_lambda",
|
|
"imports": [],
|
|
"defs": [
|
|
{
|
|
"kind": "fn",
|
|
"name": "make_adder",
|
|
"doc": "Curried adder: takes an Int and returns an Int -> Int closure. Exercises TermLam and Type::Fn appearing as a return type.",
|
|
"type": {
|
|
"k": "fn",
|
|
"params": [ { "k": "con", "name": "Int" } ],
|
|
"param_modes": ["own"],
|
|
"ret": {
|
|
"k": "fn",
|
|
"params": [ { "k": "con", "name": "Int" } ],
|
|
"param_modes": ["own"],
|
|
"ret": { "k": "con", "name": "Int" },
|
|
"ret_mode": "own",
|
|
"effects": []
|
|
},
|
|
"ret_mode": "own",
|
|
"effects": []
|
|
},
|
|
"params": ["x"],
|
|
"body": {
|
|
"t": "lam",
|
|
"params": ["y"],
|
|
"param-types": [ { "k": "con", "name": "Int" } ],
|
|
"ret-type": { "k": "con", "name": "Int" },
|
|
"effects": [],
|
|
"body": {
|
|
"t": "app",
|
|
"fn": { "t": "var", "name": "+" },
|
|
"args": [
|
|
{ "t": "var", "name": "x" },
|
|
{ "t": "var", "name": "y" }
|
|
]
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|