@@ -22,7 +22,8 @@ module Elpi_AUX = struct
2222 | Some x ->
2323 let { Common.Pos. fname; start_line; start_col; _ } = x in
2424 {
25- Ast.Loc. source_name = (match fname with None -> " (.)" | Some x -> x);
25+ Ast.Loc. source_name =
26+ (match fname with None -> " (.)" | Some x -> x);
2627 source_start = 0 ;
2728 source_stop = 0 ;
2829 line = start_line;
@@ -116,7 +117,16 @@ let embed_term : Term.term Conversion.embedding = fun ~depth st t ->
116117 State. update metamap st (MM. add flex meta), flex in
117118 let st, args = Elpi_AUX. array_map_fold (aux ~depth ctx) st args in
118119 st, mkUnifVar flex ~args: (Array. to_list args) st
119- | Plac _ -> Common.Error. fatal_no_pos " embed_term: Plac not implemented"
120+ | Plac _ ->
121+ let args = List. map (fun (_ ,x ,_ ) -> mkBound x) ctx in
122+ let st, flex = FlexibleData.Elpi. make st in
123+ let st, meta = State. update_return pb st (fun pb ->
124+ let m1 = LibMeta. fresh pb mk_Type 0 in
125+ let m2 = LibMeta. fresh pb (mk_Meta (m1,[||]))
126+ (List. length args) in (* empty context is surely wrong *)
127+ pb, m2) in
128+ let st = State. update metamap st (MM. add flex meta) in
129+ st, mkUnifVar flex ~args st
120130 | Patt _ -> Common.Error. fatal_no_pos " embed_term: Patt not implemented"
121131 | TEnv _ -> Common.Error. fatal_no_pos " embed_term: TEnv not implemented"
122132 | Wild -> Common.Error. fatal_no_pos " embed_term: Wild not implemented"
@@ -167,7 +177,8 @@ fun ~depth st t ->
167177 with Not_found ->
168178 let st, m2 = State. update_return pb st (fun pb ->
169179 let m1 = LibMeta. fresh pb mk_Type 0 in
170- let m2 = LibMeta. fresh pb (mk_Meta (m1,[||])) (List. length args) in (* empty context is surely wrong *)
180+ let m2 = LibMeta. fresh pb (mk_Meta (m1,[||]))
181+ (List. length args) in (* empty context is surely wrong *)
171182 pb, m2) in
172183 State. update metamap st (MM. add flex m2), m2
173184 in
0 commit comments