CVS: sml-dist/src/compiler/FLINT/kernel lty.sml, 1.1.2.10, 1.1.2.11
George Kuan <[email protected]> Fri, 18 Aug 2006 14:19:58 -0700
| Newsgroups | gmane.comp.lang.sml.smlnj.commits |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/smlnj/sml-dist/src/compiler/FLINT/kernel
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv5714/src/compiler/FLINT/kernel
Modified Files:
Tag: primop-branch-2
lty.sml
Log Message:
lty kind checker and tyc kind checker handle IND cases correctly now
Index: lty.sml
===================================================================
RCS file: /cvsroot/smlnj/sml-dist/src/compiler/FLINT/kernel/Attic/lty.sml,v
retrieving revision 1.1.2.10
retrieving revision 1.1.2.11
diff -C2 -d -r1.1.2.10 -r1.1.2.11
*** lty.sml 18 Aug 2006 20:55:00 -0000 1.1.2.10
--- lty.sml 18 Aug 2006 21:19:55 -0000 1.1.2.11
***************
*** 786,791 ****
val g = tkTyc kenv
(* how to compute the kind of a tyc *)
! fun mk() =
! case tc_outX t of
TC_VAR (i, j) =>
tkLookup (kenv, i, j)
--- 786,791 ----
val g = tkTyc kenv
(* how to compute the kind of a tyc *)
! fun mkI tycI =
! case tycI of
TC_VAR (i, j) =>
tkLookup (kenv, i, j)
***************
*** 864,869 ****
tkTyc bodyKenv body
end)
! | TC_IND _ => bug "unexpected TC_IND in tkTyc"
| TC_CONT _ => bug "unexpected TC_CONT in tkTyc"
in
Memo.recallOrCompute (dict, kenv, t, mk)
--- 864,878 ----
tkTyc bodyKenv body
end)
! (* | TC_IND _ => bug "unexpected TC_IND in tkTyc" *)
! | TC_IND(newtyc, oldtycI) =>
! let val newtycknd = g newtyc
! in
! if tk_eq(newtycknd, mkI oldtycI)
! then newtycknd
! else bug "tkTyc[IND]: new tyc and old tycI kind mismatch"
! end
| TC_CONT _ => bug "unexpected TC_CONT in tkTyc"
+ fun mk () =
+ mkI (tc_outX t)
in
Memo.recallOrCompute (dict, kenv, t, mk)
***************
*** 904,909 ****
fun ltyChk (lty : lty) =
let val (tkChk, chkKindEnv) = tkTycGen'()
! fun ltyChk' (kenv : tkindEnv) (lty : lty) =
! (case lt_outX lty
of LT_TYC(tyc) =>
(tkAssertIsMono (tkChk kenv tyc); tkc_mono)
--- 913,918 ----
fun ltyChk (lty : lty) =
let val (tkChk, chkKindEnv) = tkTycGen'()
! fun ltyIChk (kenv : tkindEnv) (ltyI : ltyI) =
! (case ltyI
of LT_TYC(tyc) =>
(tkAssertIsMono (tkChk kenv tyc); tkc_mono)
***************
*** 916,920 ****
tkc_seq(map (ltyChk' tenv') rngLtys))
end
- (* TODO might need a little more here *)
| LT_POLY(ks, ltys) =>
tkc_seq(map (ltyChk' (ks::kenv)) ltys)
--- 925,928 ----
***************
*** 922,930 ****
| LT_CONT(ltys) =>
tkc_seq(map (ltyChk' kenv) ltys)
! | LT_IND(thunk, sigltyI) =>
! (ltyChk' kenv) thunk
! (* TODO Need to check against sigltyI kind also? *)
| LT_ENV(body, i, j, env) =>
! (* Should be the same as checking TC_ENV *)
(let val kenv' =
List.drop(kenv, j)
--- 930,943 ----
| LT_CONT(ltys) =>
tkc_seq(map (ltyChk' kenv) ltys)
! | LT_IND(newLty, oldLtyI) =>
! let val newLtyKnd = (ltyChk' kenv) newLty
! in if tk_eq(newLtyKnd, ltyIChk kenv oldLtyI)
! then newLtyKnd
! else bug "ltyChk[IND]: kind mismatch"
! end
| LT_ENV(body, i, j, env) =>
! (* Should be the same as checking TC_ENV and
! * therefore the two cases should probably just
! * call the same helper function *)
(let val kenv' =
List.drop(kenv, j)
***************
*** 940,943 ****
--- 953,957 ----
ltyChk' bodyKenv body
end))
+ and ltyChk' kenv lty = ltyIChk kenv (lt_outX lty)
in ltyChk' [] lty
end (* function ltyChk *)
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642