@@ -81,43 +81,35 @@ let interpolated_template ?comment segments values : t =
8181 if value.comment <> None then None
8282 else
8383 match value.expression_desc with
84- | Str semantic ->
85- Some
86- ({source = String_literal. encode_js_template semantic; semantic}
87- : Asttypes. template_segment)
88- | Template_literal {source; semantic} ->
89- Some ({source; semantic} : Asttypes.template_segment )
84+ | Str semantic -> Some (String_literal. template_from_semantic semantic)
85+ | Template_literal segment -> Some segment
9086 | _ -> None
9187 in
92- let rec merge rev_segments rev_values
93- (segments : Asttypes.template_segment list ) values =
88+ let rec merge rev_segments rev_values rev_parts segments values =
9489 match (segments, values) with
95- | [segment], [] -> (List. rev (segment :: rev_segments), List. rev rev_values)
96- | segment :: next_segment :: rest , value :: values -> (
90+ | [] , [] ->
91+ let segment = String_literal. concat_template (List. rev rev_parts) in
92+ (List. rev (segment :: rev_segments), List. rev rev_values)
93+ | next_segment :: rest , value :: values -> (
9794 match literal_segment value with
9895 | Some literal ->
99- let semantic =
100- segment.semantic ^ literal.semantic ^ next_segment.semantic
101- in
102- let preserved_source =
103- segment.source ^ literal.source ^ next_segment.source
104- in
105- let source =
106- match String_literal. decode_js_template_escapes preserved_source with
107- | Some decoded when decoded = semantic -> preserved_source
108- | _ -> String_literal. encode_js_template semantic
109- in
110- let merged : Asttypes.template_segment = {source; semantic} in
111- merge rev_segments rev_values (merged :: rest) values
96+ merge rev_segments rev_values
97+ (next_segment :: literal :: rev_parts)
98+ rest values
11299 | None ->
113- merge (segment :: rev_segments) (value :: rev_values)
114- (next_segment :: rest) values)
100+ let segment = String_literal. concat_template (List. rev rev_parts) in
101+ merge (segment :: rev_segments) (value :: rev_values) [next_segment]
102+ rest values)
115103 | _ -> assert false
116104 in
117- let segments, values = merge [] [] segments values in
105+ let segments, values =
106+ match segments with
107+ | segment :: segments -> merge [] [] [segment] segments values
108+ | [] -> assert false
109+ in
118110 let expression_desc =
119111 match (segments, values) with
120- | [{source; semantic} ], [] -> J. Template_literal {source; semantic}
112+ | [segment ], [] -> J. Template_literal segment
121113 | _ -> J. Interpolated_template {segments; values}
122114 in
123115 {expression_desc; comment; source_loc = None }
@@ -206,12 +198,8 @@ let pure_runtime_call module_name fn_name args =
206198let str ?comment txt : t =
207199 {expression_desc = Str txt; comment; source_loc = None }
208200
209- let template_literal ?comment ~semantic source : t =
210- {
211- expression_desc = Template_literal {source; semantic};
212- comment;
213- source_loc = None ;
214- }
201+ let template_literal ?comment segment : t =
202+ {expression_desc = Template_literal segment; comment; source_loc = None }
215203
216204let json_literal ?comment source : t =
217205 {expression_desc = Json_literal source; comment; source_loc = None }
@@ -692,7 +680,8 @@ let array_length ?comment (e : t) : t =
692680
693681let string_literal_semantic (e : t ) =
694682 match e.expression_desc with
695- | Str semantic | Template_literal {semantic} -> Some semantic
683+ | Str semantic -> Some semantic
684+ | Template_literal segment -> Some (String_literal. semantic segment)
696685 | _ -> None
697686
698687let string_length ?comment (e : t ) : t =
0 commit comments