484 |
CL.mkReturn(SOME(CL.mkVar "true")))] |
CL.mkReturn(SOME(CL.mkVar "true")))] |
485 |
end |
end |
486 |
|
|
487 |
fun trF (env, stms) = let |
(* given the global initialization code, generate code to free the storage that is heap |
488 |
|
* allocated for globals. |
489 |
|
*) |
490 |
|
fun trFree (env, IL.Block{locals, body}) = let |
491 |
|
val env = trLocals (env, locals) |
492 |
fun trStmt (env, stm) = (case stm |
fun trStmt (env, stm) = (case stm |
493 |
of IL.S_Comment text => [CL.mkComment text] |
of IL.S_Comment text => [CL.mkComment text] |
494 |
| IL.S_LoadImage(lhs, dim, name) => checkSts (fn sts => let |
| IL.S_LoadImage(lhs, dim, name) => checkSts (fn sts => let |
505 |
] end) |
] end) |
506 |
| _ => [] |
| _ => [] |
507 |
(* end case *)) |
(* end case *)) |
508 |
in |
val stms = List.foldr (fn (stm, stms) => trStmt(env, stm)@stms) [] body |
|
List.foldr (fn (stm, stms) => trStmt(env, stm)@stms) [] stms |
|
|
end |
|
|
|
|
|
and trFr (env, IL.Block{locals, body}) = let |
|
|
val env = trLocals (env, locals) |
|
|
val stms = trF (env, body) |
|
509 |
fun mkDecl (x, stms) = (case V.Map.find (env, x) |
fun mkDecl (x, stms) = (case V.Map.find (env, x) |
510 |
of SOME(V(ty, x')) => CL.mkDecl(ty, x', NONE) :: stms |
of SOME(V(ty, x')) => CL.mkDecl(ty, x', NONE) :: stms |
511 |
| NONE => raise Fail(concat["mkDecl(", V.name x, ", _)"]) |
| NONE => raise Fail(concat["mkDecl(", V.name x, ", _)"]) |
583 |
|
|
584 |
val trBlock = trBlk |
val trBlock = trBlk |
585 |
|
|
|
val trFree = trFr |
|
|
|
|
586 |
end |
end |