Annotation of researchv10no/cmd/sml/src/basics/lambda.sml, revision 1.1.1.1

1.1       root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
                      2: (* lambda.sml *)
                      3: 
                      4: signature LAMBDA = sig
                      5: 
                      6: structure Access: ACCESS
                      7: structure Basics: BASICS
                      8: 
                      9: type primop sharing type primop = Access.primop
                     10: 
                     11: datatype con
                     12:   = DATAcon of Basics.datacon
                     13:   | INTcon of int
                     14:   | REALcon of string
                     15:   | STRINGcon of string
                     16: 
                     17: datatype lexp
                     18:   = VAR of Access.lvar
                     19:   | FN of Access.lvar * lexp
                     20:   | FIX of Access.lvar list * lexp list * lexp
                     21:   | APP of lexp * lexp
                     22:   | INT of int
                     23:   | REAL of string
                     24:   | STRING of string
                     25:   | SWITCH of lexp * (con*lexp) list * lexp option
                     26:   | RECORD of lexp list
                     27:   | SELECT of int * lexp
                     28:   | RAISE of lexp
                     29:   | HANDLE of lexp * lexp
                     30:   | PRIM of primop
                     31: 
                     32:  val CON : Basics.datacon * lexp -> lexp
                     33:  val DECON : Basics.datacon * lexp -> lexp
                     34: 
                     35: end
                     36: 
                     37: structure Lambda : LAMBDA = struct 
                     38: 
                     39:   structure Access = Access
                     40:   structure Basics = Basics
                     41:   open Access Basics
                     42: 
                     43:  type primop = Access.primop
                     44: 
                     45:  datatype con
                     46:   = DATAcon of datacon
                     47:   | INTcon of int
                     48:   | REALcon of string
                     49:   | STRINGcon of string
                     50: 
                     51:   datatype lexp
                     52:     = VAR of lvar
                     53:     | FN of lvar * lexp
                     54:     | FIX of lvar list * lexp list * lexp
                     55:     | APP of lexp * lexp
                     56:     | INT of int
                     57:     | REAL of string
                     58:     | STRING of string
                     59:     | SWITCH of lexp * (con*lexp) list * lexp option
                     60:     | RECORD of lexp list
                     61:     | SELECT of int * lexp
                     62:     | RAISE of lexp
                     63:     | HANDLE of lexp * lexp
                     64:     | PRIM of primop
                     65: 
                     66: fun trpath [i] = VAR i
                     67:   | trpath (a::r) = SELECT(a, trpath r)
                     68: 
                     69: fun CON (DATACON{rep=(TAGGED i),...},e) = RECORD[e,INT i]
                     70:   | CON (DATACON{rep=TRANSPARENT,...},e) = e
                     71:   | CON (DATACON{rep=TRANSU,...},e) = e
                     72:   | CON (DATACON{rep=TRANSB,...},e) = e
                     73:   | CON (DATACON{rep=REF,...},e) = APP(PRIM Access.P.makeref,e)
                     74:   | CON (DATACON{rep=(VARIABLE(PATH p)),const=true,...},e) = trpath p
                     75:   | CON (DATACON{rep=(VARIABLE(PATH p)),...},e) = RECORD[e, trpath p]
                     76:   | CON (DATACON{rep=(CONSTANT i),...},e) = INT i
                     77: 
                     78: fun DECON (DATACON{rep=(TAGGED _),...},e) = SELECT(0,e)
                     79:   | DECON (DATACON{rep=TRANSPARENT,...},e) = e
                     80:   | DECON (DATACON{rep=TRANSU,...},e) = e
                     81:   | DECON (DATACON{rep=TRANSB,...},e) = e
                     82:   | DECON (DATACON{rep=REF,...},e) = APP(PRIM Access.P.!,e)
                     83:   | DECON (DATACON{rep=(VARIABLE _),...},e) = SELECT(0,e) 
                     84:   | DECON (DATACON{name,rep=r,...},e) =
                     85:      (print (Symbol.name name); print " "; PrintBasics.printRep r; print "\n";
                     86:      ErrorMsg.impossible "DECON with bad constructor")
                     87: 
                     88: end

unix.superglobalmegacorp.com

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