diff options
-rw-r--r-- | CHANGELOG | 13 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/settings.sml | 2 | ||||
-rw-r--r-- | src/urweb.grm | 20 | ||||
-rw-r--r-- | tests/qualrecord.ur | 7 |
5 files changed, 34 insertions, 10 deletions
@@ -1,4 +1,17 @@ ======== +20161022 +======== + +- Add Json module to standard library +- Make HTML5 the default and add 'xhtml' .urp directive +- Remove 'Value' attributes for AJAX-y UI widgets, because they should use 'Source' instead +- Change compiler to support reproducible builds, via replacement of timestamp + calculation with different methods or use of content hashes +- IPv6 support in HTTP-server binaries, via '-A' command-line option +- New Top function: mapUX_rev +- Bug fixes and documentation improvements + +======== 20160805 ======== diff --git a/configure.ac b/configure.ac index a35f13b1..8ee3e795 100644 --- a/configure.ac +++ b/configure.ac @@ -1,4 +1,4 @@ -AC_INIT([urweb], [20160805]) +AC_INIT([urweb], [20161022]) WORKING_VERSION=1 AC_USE_SYSTEM_EXTENSIONS diff --git a/src/settings.sml b/src/settings.sml index 5662d9d6..70ea1861 100644 --- a/src/settings.sml +++ b/src/settings.sml @@ -290,7 +290,7 @@ val jsFuncsBase = basisM [("alert", "alert"), ("attrifyInt", "ts"), ("attrifyFloat", "ts"), ("attrifyBool", "bs"), - ("boolToString", "ts"), + ("boolToString", "bs"), ("str1", "id"), ("strsub", "sub"), ("strsuffix", "suf"), diff --git a/src/urweb.grm b/src/urweb.grm index 40101056..c1ee74f2 100644 --- a/src/urweb.grm +++ b/src/urweb.grm @@ -475,6 +475,7 @@ fun patternOut (e : exp) = | eterm of exp | etuple of exp list | rexp of (con * exp) list * bool + | rpath of con | xml of exp | xmlOne of exp | xmlOpt of exp @@ -1151,15 +1152,15 @@ ctuple : capps STAR capps ([capps1, capps2]) | capps STAR ctuple (capps :: ctuple) rcon : ([]) - | ident EQ cexp ([(ident, cexp)]) - | ident EQ cexp COMMA rcon ((ident, cexp) :: rcon) + | rpath EQ cexp ([(rpath, cexp)]) + | rpath EQ cexp COMMA rcon ((rpath, cexp) :: rcon) -rconn : ident ([(ident, (CUnit, s (identleft, identright)))]) - | ident COMMA rconn ((ident, (CUnit, s (identleft, identright))) :: rconn) +rconn : rpath ([(rpath, (CUnit, s (rpathleft, rpathright)))]) + | rpath COMMA rconn ((rpath, (CUnit, s (rpathleft, rpathright))) :: rconn) rcone : ([]) - | ident COLON cexp ([(ident, cexp)]) - | ident COLON cexp COMMA rcone ((ident, cexp) :: rcone) + | rpath COLON cexp ([(rpath, cexp)]) + | rpath COLON cexp COMMA rcone ((rpath, cexp) :: rcone) ident : CSYMBOL (CName CSYMBOL, s (CSYMBOLleft, CSYMBOLright)) | INT (CName (Int64.toString INT), s (INTleft, INTright)) @@ -1567,8 +1568,11 @@ ptuple : pat COMMA pat ([pat1, pat2]) | pat COMMA ptuple (pat :: ptuple) rexp : DOTDOTDOT ([], true) - | ident EQ eexp ([(ident, eexp)], false) - | ident EQ eexp COMMA rexp ((ident, eexp) :: #1 rexp, #2 rexp) + | rpath EQ eexp ([(rpath, eexp)], false) + | rpath EQ eexp COMMA rexp ((rpath, eexp) :: #1 rexp, #2 rexp) + +rpath : path (CVar path, s (pathleft, pathright)) + | CSYMBOL (CName CSYMBOL, s (CSYMBOLleft, CSYMBOLright)) xml : xmlOne xml (let val pos = s (xmlOneleft, xmlright) diff --git a/tests/qualrecord.ur b/tests/qualrecord.ur new file mode 100644 index 00000000..4db64e5f --- /dev/null +++ b/tests/qualrecord.ur @@ -0,0 +1,7 @@ +structure M = struct + con the_best_name = #Wiggles + con the_runner_up = #Beppo +end + +val x : {M.the_best_name : int, A : int, M.the_runner_up : int} = + {M.the_best_name = 8, A = 9, M.the_runner_up = 10} |