comparison src/prepare.sml @ 2048:4d64af730e35

Differentiate between HTML and normal string literals
author Adam Chlipala <adam@chlipala.net>
date Fri, 01 Aug 2014 15:44:17 -0400
parents 98895243b5b6
children
comparison
equal deleted inserted replaced
2047:6be31671911b 2048:4d64af730e35
63 let 63 let
64 fun doOne t = 64 fun doOne t =
65 SOME (#p_blank (Settings.currentDbms ()) (n + 1, t) :: ss, n + 1) 65 SOME (#p_blank (Settings.currentDbms ()) (n + 1, t) :: ss, n + 1)
66 in 66 in
67 case #1 e of 67 case #1 e of
68 EPrim (Prim.String s) => 68 EPrim (Prim.String (_, s)) =>
69 SOME (s :: ss, n) 69 SOME (s :: ss, n)
70 | EFfiApp ("Basis", "strcat", [(e1, _), (e2, _)]) => 70 | EFfiApp ("Basis", "strcat", [(e1, _), (e2, _)]) =>
71 (case prepString' (e1, ss, n) of 71 (case prepString' (e1, ss, n) of
72 NONE => NONE 72 NONE => NONE
73 | SOME (ss, n) => prepString' (e2, ss, n)) 73 | SOME (ss, n) => prepString' (e2, ss, n))
80 | EFfiApp ("Basis", "sqlifyChannel", [_]) => doOne Channel 80 | EFfiApp ("Basis", "sqlifyChannel", [_]) => doOne Channel
81 | EFfiApp ("Basis", "sqlifyClient", [_]) => doOne Client 81 | EFfiApp ("Basis", "sqlifyClient", [_]) => doOne Client
82 82
83 | ECase (e, 83 | ECase (e,
84 [((PNone _, _), 84 [((PNone _, _),
85 (EPrim (Prim.String "NULL"), _)), 85 (EPrim (Prim.String (_, "NULL")), _)),
86 ((PSome (_, (PVar _, _)), _), 86 ((PSome (_, (PVar _, _)), _),
87 (EFfiApp (m, x, [((ERel 0, _), _)]), _))], 87 (EFfiApp (m, x, [((ERel 0, _), _)]), _))],
88 {disc = t, ...}) => prepString' ((EFfiApp (m, x, [(e, t)]), #2 e), ss, n) 88 {disc = t, ...}) => prepString' ((EFfiApp (m, x, [(e, t)]), #2 e), ss, n)
89 89
90 | ECase (e, 90 | ECase (e,
91 [((PCon (_, PConFfi {mod = "Basis", con = "True", ...}, _), _), 91 [((PCon (_, PConFfi {mod = "Basis", con = "True", ...}, _), _),
92 (EPrim (Prim.String "TRUE"), _)), 92 (EPrim (Prim.String (_, "TRUE")), _)),
93 ((PCon (_, PConFfi {mod = "Basis", con = "False", ...}, _), _), 93 ((PCon (_, PConFfi {mod = "Basis", con = "False", ...}, _), _),
94 (EPrim (Prim.String "FALSE"), _))], 94 (EPrim (Prim.String (_, "FALSE")), _))],
95 _) => doOne Bool 95 _) => doOne Bool
96 96
97 | _ => NONE 97 | _ => NONE
98 end 98 end
99 in 99 in
266 266
267 | ENextval {seq, ...} => 267 | ENextval {seq, ...} =>
268 if #supportsNextval (Settings.currentDbms ()) then 268 if #supportsNextval (Settings.currentDbms ()) then
269 let 269 let
270 val s = case seq of 270 val s = case seq of
271 (EPrim (Prim.String s), loc) => 271 (EPrim (Prim.String (_, s)), loc) =>
272 (EPrim (Prim.String ("SELECT NEXTVAL('" ^ s ^ "')")), loc) 272 (EPrim (Prim.String (Prim.Normal, "SELECT NEXTVAL('" ^ s ^ "')")), loc)
273 | _ => 273 | _ =>
274 let 274 let
275 val t = (TFfi ("Basis", "string"), loc) 275 val t = (TFfi ("Basis", "string"), loc)
276 val s' = (EFfiApp ("Basis", "strcat", [(seq, t), ((EPrim (Prim.String "')"), loc), t)]), loc) 276 val s' = (EFfiApp ("Basis", "strcat", [(seq, t), ((EPrim (Prim.String (Prim.Normal, "')")), loc), t)]), loc)
277 in 277 in
278 (EFfiApp ("Basis", "strcat", [((EPrim (Prim.String "SELECT NEXTVAL('"), loc), t), (s', t)]), loc) 278 (EFfiApp ("Basis", "strcat", [((EPrim (Prim.String (Prim.Normal, "SELECT NEXTVAL('")), loc), t), (s', t)]), loc)
279 end 279 end
280 in 280 in
281 case prepString (s, st) of 281 case prepString (s, st) of
282 NONE => (e, st) 282 NONE => (e, st)
283 | SOME (id, s, st) => 283 | SOME (id, s, st) =>