Annotation of researchv10no/cmd/sml/src/translate/nonrec.sml, revision 1.1.1.1

1.1       root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
                      2: structure Nonrec =
                      3: struct
                      4: local open Access Basics Absyn
                      5: in
                      6:     exception Isrec
                      7: 
                      8:     fun nonrec (VALRECdec[RVB{var=var as VALvar{access=LVAR(lvar),...},
                      9:                              exp,resultty,tyvars}]) =
                     10:        let val rec findexp =
                     11:                fn VARexp(ref(VALvar{access=PATH[v],...})) =>
                     12:                                        if v=lvar then raise Isrec else ()
                     13:                 | VARexp(ref(VALvar{access=_,...})) => ()
                     14:                 | RECORDexp l => app (fn (lab,e)=>findexp e) l
                     15:                 | SEQexp l => app findexp l
                     16:                 | APPexp (a,b) => (findexp a; findexp b)
                     17:                 | CONSTRAINTexp (e,_) => findexp e
                     18:                 | HANDLEexp (e, HANDLER h) => (findexp e; findexp h)
                     19:                 | RAISEexp e => findexp e
                     20:                 | LETexp (d,e) => (finddec d; findexp e)
                     21:                 | CASEexp (e,l) => (findexp e; app (fn RULE (_,e) => findexp e) l)
                     22:                 | FNexp l =>  app (fn RULE (_,e) => findexp e) l
                     23:                 | MARKexp(e,a,b) => findexp e
                     24:                 | _ => ()
                     25:            and finddec =
                     26:                fn VALdec vbl => app (fn (VB{exp,...})=>findexp exp) vbl
                     27:                 | VALRECdec rvbl => app (fn(RVB{exp,...})=>findexp exp) rvbl
                     28:                 | LOCALdec (a,b) => (finddec a; finddec b)
                     29:                 | SEQdec l => app finddec l
                     30:                 | MARKdec (dec,a,b) => finddec dec
                     31:                 | _ => ()
                     32:         in findexp exp;
                     33:            VALdec[VB{pat=VARpat var, tyvars=tyvars,
                     34:                      exp = case resultty of 
                     35:                                SOME ty => CONSTRAINTexp(exp,ty)
                     36:                              | NONE => exp}]
                     37:        end
                     38: 
                     39:       | nonrec _ = raise Isrec
                     40: 
                     41: end (* local *)
                     42: end (* struct *)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.