summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2012-05-06 13:07:13 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2012-05-06 13:07:13 -0400
commit4387731e477e2af050841f916a03f5d8a975a164 (patch)
treec05d904bc4318b2c43116218f2844479cc71e3fc /src
parent44d64f9ce5ee0c4f4bce154ec2bd7f93bb26356b (diff)
Simplify type of Basis.tag, regarding 'class' attribute; new compatibility parsing of 'class' values given as string literals
Diffstat (limited to 'src')
-rw-r--r--src/monoize.sml6
-rw-r--r--src/urweb.grm15
2 files changed, 15 insertions, 6 deletions
diff --git a/src/monoize.sml b/src/monoize.sml
index 6bef134e..1b7018de 100644
--- a/src/monoize.sml
+++ b/src/monoize.sml
@@ -3077,15 +3077,15 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
val s = (L'.EPrim (Prim.String (String.concat ["<", tag'])), loc)
val s = (L'.ECase (class,
- [((L'.PNone t, loc),
+ [((L'.PPrim (Prim.String ""), loc),
s),
- ((L'.PSome (t, (L'.PVar ("x", t), loc)), loc),
+ ((L'.PVar ("x", t), loc),
(L'.EStrcat (s,
(L'.EStrcat ((L'.EPrim (Prim.String " class=\""), loc),
(L'.EStrcat ((L'.ERel 0, loc),
(L'.EPrim (Prim.String "\""), loc)),
loc)), loc)), loc))],
- {disc = (L'.TOption t, loc),
+ {disc = t,
result = t}), loc)
val (s, fm) = foldl (fn (("Action", _, _), acc) => acc
diff --git a/src/urweb.grm b/src/urweb.grm
index 0fe9b987..6d175c48 100644
--- a/src/urweb.grm
+++ b/src/urweb.grm
@@ -246,6 +246,15 @@ fun tnamesOf (e, _) =
| EDisjointApp e => tnamesOf e
| _ => []
+fun classOut (s, pos) = (EVar ([], String.translate (fn #"-" => "_" | ch => str ch) s, Infer), pos)
+
+fun parseClass s pos =
+ case String.tokens Char.isSpace s of
+ [] => (EVar (["Basis"], "null", Infer), pos)
+ | class :: classes =>
+ foldl (fn (s, e) => (EApp ((EApp ((EVar (["Basis"], "classes", Infer), pos), e), pos), classOut (s, pos)), pos))
+ (classOut (class, pos)) classes
+
%%
%header (functor UrwebLrValsFn(structure Token : TOKEN))
@@ -1521,9 +1530,9 @@ tag : tagHead attrs (let
val e = (EVar (["Basis"], "tag", Infer), pos)
val eo = case #1 attrs of
- NONE => (EVar (["Basis"], "None", Infer), pos)
- | SOME e => (EApp ((EVar (["Basis"], "Some", Infer), pos),
- e), pos)
+ NONE => (EVar (["Basis"], "null", Infer), pos)
+ | SOME (EPrim (Prim.String s), pos) => parseClass s pos
+ | SOME e => e
val e = (EApp (e, eo), pos)
val eo = case #2 attrs of
NONE => (EVar (["Basis"], "None", Infer), pos)