CVS: sml-dist/src/compiler/Semant/basics inlinfo.sig, 1.4, 1.4.8.1 inlinfo.sml, 1.6, 1.6.8.1
David MacQueen <[email protected]>
| Newsgroups | gmane.comp.lang.sml.smlnj.commits |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/smlnj/sml-dist/src/compiler/Semant/basics
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv24436/src/compiler/Semant/basics
Modified Files:
Tag: primop-branch-2
inlinfo.sig inlinfo.sml
Log Message:
update of InlInfo
Index: inlinfo.sig
===================================================================
RCS file: /cvsroot/smlnj/sml-dist/src/compiler/Semant/basics/inlinfo.sig,v
retrieving revision 1.4
retrieving revision 1.4.8.1
diff -C2 -d -r1.4 -r1.4.8.1
*** inlinfo.sig 15 Sep 2003 22:17:10 -0000 1.4
--- inlinfo.sig 19 Jun 2006 22:29:00 -0000 1.4.8.1
***************
*** 4,15 ****
*)
! signature INL_INFO = sig
type inl_info
- val INL_PRIM : PrimOp.primop * Types.ty -> inl_info
- val INL_STR : inl_info list -> inl_info
- val INL_NO : inl_info
-
val match : inl_info ->
{ inl_prim: PrimOp.primop * Types.ty -> 'a,
--- 4,12 ----
*)
! signature INL_INFO =
! sig
type inl_info
val match : inl_info ->
{ inl_prim: PrimOp.primop * Types.ty -> 'a,
***************
*** 19,31 ****
val prInfo : inl_info -> string
- val selInfo : inl_info * int -> inl_info
! val isPrimInfo : inl_info -> bool
val isPrimCallcc : inl_info -> bool
! val pureInfo : inl_info -> bool
val mkPrimInfo : PrimOp.primop * Types.ty -> inl_info
val mkStrInfo : inl_info list -> inl_info
-
val nullInfo : inl_info
! end
--- 16,31 ----
val prInfo : inl_info -> string
! val isPrimop : inl_info -> bool
! val selStrInfo : inl_info * int -> inl_info
!
val isPrimCallcc : inl_info -> bool
! val isPrimCast : inl_info -> bool
val mkPrimInfo : PrimOp.primop * Types.ty -> inl_info
val mkStrInfo : inl_info list -> inl_info
val nullInfo : inl_info
!
! val primopTy : inl_info -> Types.ty option
!
! end (* signature INL_INFO *)
Index: inlinfo.sml
===================================================================
RCS file: /cvsroot/smlnj/sml-dist/src/compiler/Semant/basics/inlinfo.sml,v
retrieving revision 1.6
retrieving revision 1.6.8.1
diff -C2 -d -r1.6 -r1.6.8.1
*** inlinfo.sml 15 Sep 2003 22:17:10 -0000 1.6
--- inlinfo.sml 19 Jun 2006 22:29:00 -0000 1.6.8.1
***************
*** 3,6 ****
--- 3,12 ----
* (C) 2001 Lucent Technologies, Bell Labs
*)
+
+ (* [dbm, 6/19/06]
+ Folded ii.sml into this structure, eliminating exn hack.
+ Changed name of pureInfo to isPrimCast.
+ Eliminated redundant INL_PRIM, INL_STR, INL_NO. *)
+
structure InlInfo : INL_INFO = struct
***************
*** 9,58 ****
exception E of PrimOp.primop * Types.ty
! type inl_info = II.ii
! val INL_PRIM = II.Info o E
! val INL_STR = II.List
! val INL_NO = II.Null
fun match i { inl_prim, inl_str, inl_no } =
! case i of
! II.Info (E x) => inl_prim x
! | II.Info _ => bug "bogus Info node"
! | II.List l => inl_str l
! | II.Null => inl_no ()
fun prInfo i = let
fun loop (i, acc) =
! match i { inl_prim = fn (p, _) => PrimOp.prPrimop p :: acc,
! inl_no = fn () => "<InlNo>" :: acc,
! inl_str = fn [] => "{}" :: acc
! | h::t =>
! "{" :: loop (h,
! foldr (fn (x, a) =>
! "," :: loop (x, a))
! ("}" :: acc)
! t) }
in
concat (loop (i, []))
end
! val selInfo = II.sel
! val isPrimInfo = II.isSimple
! fun isPrimCallcc (II.Info (E ((PrimOp.CALLCC | PrimOp.CAPTURE), _))) = true
! | isPrimCallcc _ = false
! fun pureInfo (II.Info (E (p, _))) =
! let fun isPure PrimOp.CAST = true
! | isPure _ = false
! (* val isPure = PrimOp.purePrimop *)
! in
! isPure p
! end
! | pureInfo _ = false
! val mkPrimInfo = INL_PRIM
! val mkStrInfo = INL_STR
! val nullInfo = INL_NO
! end
--- 15,66 ----
exception E of PrimOp.primop * Types.ty
! datatype inl_info
! = Info of PrimOp.primop * Types.ty
! | List of inl_info list
! | Null
! fun isPrimop (Info _) = true
! | isPrimop _ = false
!
! fun selStrInfo (List l, i) =
! (List.nth (l, i) handle Subscript => bug "Wrong field in List")
! | selStrInfo (Null, _) = Null
! | selStrInfo (Info _, i) = bug "Unexpected selection from Info"
! end
fun match i { inl_prim, inl_str, inl_no } =
! case i
! of Info x => inl_prim x
! | List l => inl_str l
! | Null => inl_no ()
fun prInfo i = let
fun loop (i, acc) =
! case i
! of Info (p,_) => PrimOp.prPrimop p :: acc
! | Null => "<InlNo>" :: acc
! | List m =>
! (case m
! of [] => "{}" :: acc
! | h::t =>
! "{" :: loop (h,foldr (fn (x, a) => "," :: loop (x, a))
! ("}" :: acc)
! t)
in
concat (loop (i, []))
end
! fun isPrimCallcc (Info ((PrimOp.CALLCC | PrimOp.CAPTURE), _)) = true
! | isPrimCallcc _ = false
! fun isPrimCast (Info (PrimOp.CAST, _)) = true
! | isPrimCast _ = false
! val mkPrimInfo = Info
! val mkStrInfo = List
! val nullInfo = Null
! fun primopTy (Info (_, ty)) = SOME ty
! | primopTy _ = NONE
! end (* structure InlInfo *)