Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/branches/temi-branch/compiler/Elaborator/elaborate/elabcore.sml
ViewVC logotype

Diff of /sml/branches/temi-branch/compiler/Elaborator/elaborate/elabcore.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3031, Tue May 20 20:25:54 2008 UTC revision 3032, Wed May 21 17:26:38 2008 UTC
# Line 768  Line 768 
768          end          end
769    
770      (****  VALUE DECLARATIONS ****)      (****  VALUE DECLARATIONS ****)
771        (* elabVB : Ast.vb * tyvar list * staticEnv * region
772                    ->  ... *)
773      and elabVB (MarkVb(vb,region),etvs,env,_) =      and elabVB (MarkVb(vb,region),etvs,env,_) =
774              (* pass through MarkVb, updating region parameter *)
775          let val (d, tvs, u) = elabVB(vb,etvs,env,region)          let val (d, tvs, u) = elabVB(vb,etvs,env,region)
776              val d' = cMARKdec (d, region)              val d' = cMARKdec (d, region)
777          in             in (d', tvs, u)
             (d', tvs, u)  
778          end          end
779        | elabVB (Vb{pat,exp,lazyp},etvs,env,region) =        | elabVB (Vb{pat,exp,lazyp},etvs,env,region) =
780            let val (pat,pv) = elabPat(pat, env, region)            let val (pat,pv) = elabPat(pat, env, region)
# Line 780  Line 782 
782                val exp = if lazyp  (* LAZY *)                val exp = if lazyp  (* LAZY *)
783                          then delayExp(forceExp exp)                          then delayExp(forceExp exp)
784                          else exp                          else exp
785    
786                  (* tracking user (or "explicit") type variables *)
787                val tvref = ref []                val tvref = ref []
788                fun updt tv: unit =                fun updt tv: unit =
789                  let fun a++b = union(a,b,error region)                  let fun a++b = union(a,b,error region)
# Line 822  Line 826 
826                 of (VARpat _ | CONSTRAINTpat(VARpat _,_)) => (* variable pattern *)                 of (VARpat _ | CONSTRAINTpat(VARpat _,_)) => (* variable pattern *)
827                     (VALdec([VB{exp=exp, tyvars=tvref, pat=pat, boundtvs=[]}]),                     (VALdec([VB{exp=exp, tyvars=tvref, pat=pat, boundtvs=[]}]),
828                      [pat], updt)                      [pat], updt)
829                  | _ => (* Nonvariable pattern *)                  | _ => (* Nonvariable pattern binding will be "normalized"
830                            * into a more complex declaration using only
831                            * simple variable valbinds. See DEVNOTE/valbind.txt. *)
832                     let val (newpat,oldvars,newvars) = aconvertPat(pat, compInfo)                     let val (newpat,oldvars,newvars) = aconvertPat(pat, compInfo)
833                           (* this is the only call of aconvertPat *)                           (* this is the only call of aconvertPat *)
834                         val newVarExps = map (fn v => VARexp(ref v,[])) newvars                         val newVarExps = map (fn v => VARexp(ref v,[])) newvars
# Line 836  Line 842 
842                                in (VALdec [nvb], [], updt)                                in (VALdec [nvb], [], updt)
843                               end                               end
844                           | _ =>                           | _ =>
845                               let val nv = newVALvar internalSym                               let val newVar = newVALvar internalSym
846                                   val nvpat = VARpat(nv)                                   val newVarPat = VARpat(newVar)
847                                   val nvexp = VARexp(ref nv, [])                                   val newVarExp = VARexp(ref newVar, [])
848    
849                                   val nvdec =                                   val newVarDec =
850                                      VALdec([VB{exp=newexp, tyvars=tvref,                                      VALdec([VB{exp=newexp, tyvars=tvref,
851                                                 pat=nvpat, boundtvs=[]}])                                                  pat=newVarPat, boundtvs=[]}])
852    
853                                   fun h([], _, d) =                                   fun buildDec([], _, d) =
854                                          LOCALdec(nvdec, SEQdec(rev d))                                       LOCALdec(newVarDec, SEQdec(rev d))
855                                     | h(vp::r, i, d) =                                     | buildDec(vp::r, i, d) =
856                                          let val nvb = VB{exp=TPSELexp(nvexp,i),                                       let val nvb = VB{exp=TPSELexp(newVarExp,i),
857                                                           pat=vp, boundtvs=[],                                                           pat=vp, boundtvs=[],
858                                                           tyvars=ref[]}                                                           tyvars=ref[]}
859    
860                                           in h(r, i+1, VALdec([nvb])::d)                                        in buildDec(r, i+1, VALdec([nvb])::d)
861                                          end                                          end
862    
863                                in (h(oldvars, 1, []), oldvars, updt)                                in (buildDec(oldvars, 1, []), oldvars, updt)
864                               end                               end
865                     end                     end
866            end            end

Legend:
Removed from v.3031  
changed lines
  Added in v.3032

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0