Annotation of researchv10no/cmd/sml/src/basics/conrep.sml, revision 1.1

1.1     ! root        1: (* Copyright 1989 by AT&T Bell Laboratories *)
        !             2: (* conrep.sml *)
        !             3: 
        !             4: structure ConRep = struct
        !             5: 
        !             6: local open Basics BasicTypes in
        !             7: 
        !             8: fun count predicate l
        !             9:   = let fun test (a::rest,acc) = test (rest,if predicate a then 1+acc else acc)
        !            10:          | test (nil,acc) = acc
        !            11:      in test (l,0)
        !            12:     end
        !            13: 
        !            14: fun boxed ([(_,false,_)]: (Symbol.symbol*bool*ty) list): conrep list = [TRANSPARENT]
        !            15:   | boxed predcons =
        !            16:       let val multiple = (count (fn (_,const,_) => not const) predcons) > 1
        !            17:          fun decide (i,j,(_,true,_)::rest) = CONSTANT i :: decide(i+1,j,rest)
        !            18:            | decide (i,j,(_,_,CONty(_,[argty,_]))::rest) =
        !            19:                (case (multiple,argty)
        !            20:                  of (false,CONty(ref(TYCON{kind=RECORDtyc(_::_::_), ...}),_)) =>
        !            21:                       TRANSPARENT :: decide(i,j,rest)
        !            22:                   | _ => TAGGED j :: decide(i,j+1,rest))
        !            23:            | decide (_,_,nil) = []
        !            24:            | decide _ = ErrorMsg.impossible "ConRep.boxed"
        !            25:        in decide(0,0,predcons)
        !            26:       end
        !            27: 
        !            28: end (* local *)
        !            29: 
        !            30: end (* structure ConRep *)

unix.superglobalmegacorp.com

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