Mercurial > urweb
changeset 1278:cd8d2c73ccf4
Catch a missed ReduceLocal of field projection annotations
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sun, 13 Jun 2010 14:13:06 -0400 |
parents | 1e6a4f9d3e4a |
children | 4c367c8f5b2d |
files | src/expl_env.sig src/expl_env.sml src/expl_print.sml src/reduce_local.sml |
diffstat | 4 files changed, 17 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/expl_env.sig Sun Jun 13 10:55:20 2010 -0400 +++ b/src/expl_env.sig Sun Jun 13 14:13:06 2010 -0400 @@ -1,4 +1,4 @@ -(* Copyright (c) 2008, Adam Chlipala +(* Copyright (c) 2008-2010, Adam Chlipala * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -66,4 +66,6 @@ val declBinds : env -> Expl.decl -> env val sgiBinds : env -> Expl.sgn_item -> env + val patBinds : env -> Expl.pat -> env + end
--- a/src/expl_env.sml Sun Jun 13 10:55:20 2010 -0400 +++ b/src/expl_env.sml Sun Jun 13 14:13:06 2010 -0400 @@ -1,4 +1,4 @@ -(* Copyright (c) 2008, Adam Chlipala +(* Copyright (c) 2008-2010, Adam Chlipala * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -400,4 +400,13 @@ | SgiSgn (x, n, sgn) => pushSgnNamed env x n sgn | SgiStr (x, n, sgn) => pushStrNamed env x n sgn +fun patBinds env (p, loc) = + case p of + PWild => env + | PVar (x, t) => pushERel env x t + | PPrim _ => env + | PCon (_, _, _, NONE) => env + | PCon (_, _, _, SOME p) => patBinds env p + | PRecord xps => foldl (fn ((_, p, _), env) => patBinds env p) env xps + end
--- a/src/expl_print.sml Sun Jun 13 10:55:20 2010 -0400 +++ b/src/expl_print.sml Sun Jun 13 14:13:06 2010 -0400 @@ -1,4 +1,4 @@ -(* Copyright (c) 2008, Adam Chlipala +(* Copyright (c) 2008-2010, Adam Chlipala * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -422,7 +422,7 @@ space, string "=>", space, - p_exp env e]) pes]) + p_exp (E.patBinds env p) e]) pes]) | ELet (x, t, e1, e2) => box [string "let", space,
--- a/src/reduce_local.sml Sun Jun 13 10:55:20 2010 -0400 +++ b/src/reduce_local.sml Sun Jun 13 14:13:06 2010 -0400 @@ -286,12 +286,12 @@ | EKAbs (x, e) => (EKAbs (x, exp env e), loc) | ERecord xcs => (ERecord (map (fn (x, e, t) => (con env x, exp env e, con env t)) xcs), loc) - | EField (e, c, others) => + | EField (e, c, {field = f, rest = r}) => let val e = exp env e val c = con env c - fun default () = (EField (e, c, others), loc) + fun default () = (EField (e, c, {field = con env f, rest = con env r}), loc) in case (#1 e, #1 c) of (ERecord xcs, CName x) =>