154 |
leI, fvI, leRet) |
leI, fvI, leRet) |
155 |
| _ => |
| _ => |
156 |
let val fvbIs = S.members(S.diff(fvbI, benv)) |
let val fvbIs = S.members(S.diff(fvbI, benv)) |
157 |
|
val (nfk,fkE) = OU.fk_wrap(fk, NONE) |
158 |
|
|
159 |
(* fdecE *) |
(* fdecE *) |
160 |
val fE = cplv f |
val fE = cplv f |
161 |
val fErets = (map F.VAR fvbIs) |
val fErets = (map F.VAR fvbIs) |
163 |
(* val tmp = mklv() |
(* val tmp = mklv() |
164 |
val bodyE = bodyE(F.RECORD(F.RK_STRUCT, map F.VAR fvbIs, |
val bodyE = bodyE(F.RECORD(F.RK_STRUCT, map F.VAR fvbIs, |
165 |
tmp, F.RET[F.VAR tmp])) *) |
tmp, F.RET[F.VAR tmp])) *) |
166 |
val fdecE = (fk, fE, args, bodyE) |
val fdecE = (fkE, fE, args, bodyE) |
167 |
val fElty = LT.ltc_fct(map #2 args, map getLty fErets) |
val fElty = LT.ltc_fct(map #2 args, map getLty fErets) |
168 |
val _ = addLty(fE, fElty) |
val _ = addLty(fE, fElty) |
169 |
|
|
181 |
val fdecI as (_,fI,_,_) = FU.copyfdec(fkI,f,argsI,bodyI) |
val fdecI as (_,fI,_,_) = FU.copyfdec(fkI,f,argsI,bodyI) |
182 |
|
|
183 |
(* nfdec *) |
(* nfdec *) |
|
val (nfk,_) = OU.fk_wrap(fk, NONE) |
|
184 |
val nargs = map (fn (v,t) => (cplv v, t)) args |
val nargs = map (fn (v,t) => (cplv v, t)) args |
185 |
val argsv = map (fn (v,t) => F.VAR v) nargs |
val argsv = map (fn (v,t) => F.VAR v) nargs |
186 |
val nbody = |
val nbody = |
274 |
|
|
275 |
val nargs = map (fn (v,t) => (cplv v, t)) args |
val nargs = map (fn (v,t) => (cplv v, t)) args |
276 |
in |
in |
277 |
(* (fdecE, SOME fdecI) *) |
(fdecE, SOME fdecI) |
278 |
((fk, f, nargs, |
(* ((fk, f, nargs, |
279 |
F.FIX([fdecE], |
F.FIX([fdecE], |
280 |
F.FIX([fdecI], |
F.FIX([fdecI], |
281 |
F.LET([argI], |
F.LET([argI], |
282 |
F.APP(F.VAR fE, map (F.VAR o #1) nargs), |
F.APP(F.VAR fE, map (F.VAR o #1) nargs), |
283 |
F.APP(F.VAR fI, [F.VAR argI]))))), |
F.APP(F.VAR fI, [F.VAR argI]))))), |
284 |
NONE) |
NONE) *) |
285 |
end |
end |
286 |
|
|
287 |
| _ => |
| _ => |