Step 14: source locations — pos-to-loc, error-loc, sx-parse-loc — 15 tests
Pure SX layer: pos-to-loc (offset→line/col), error-loc (parse result→loc), format-parse-error (human-readable error with source context line). OCaml platform: cst_to_ast_loc (CST spans→loc dicts), sx-parse-loc primitive (parse with locations), source-loc accessor. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -164,6 +164,24 @@ let make_test_env () =
|
||||
| [String s] -> List (parse_all s)
|
||||
| _ -> raise (Eval_error "sx-parse: expected string"));
|
||||
|
||||
bind "sx-parse-loc" (fun args ->
|
||||
match args with
|
||||
| [String s] ->
|
||||
let cst = Sx_parser.parse_all_cst s in
|
||||
List (Sx_cst.cst_to_ast_loc s cst.nodes)
|
||||
| _ -> raise (Eval_error "sx-parse-loc: expected string"));
|
||||
|
||||
bind "source-loc" (fun args ->
|
||||
match args with
|
||||
| [Dict d] ->
|
||||
let line = try Hashtbl.find d "line" with Not_found -> Nil in
|
||||
let col = try Hashtbl.find d "col" with Not_found -> Nil in
|
||||
let ld = Sx_types.make_dict () in
|
||||
Sx_types.dict_set ld "line" line;
|
||||
Sx_types.dict_set ld "col" col;
|
||||
Dict ld
|
||||
| _ -> Nil);
|
||||
|
||||
bind "sx-parse-one" (fun args ->
|
||||
match args with
|
||||
| [String s] ->
|
||||
|
||||
Reference in New Issue
Block a user