Move simplified_ty from trans to semant and use it a few places.

This commit is contained in:
Graydon Hoare 2010-06-30 00:55:04 -07:00
parent 861423989d
commit 7e853457df
2 changed files with 12 additions and 12 deletions

View File

@ -1066,12 +1066,19 @@ let check_concrete params thing =
else bug () "unhandled parametric binding"
;;
let rec simplified_ty (t:Ast.ty) : Ast.ty =
match t with
Ast.TY_exterior t
| Ast.TY_mutable t
| Ast.TY_constrained (t, _) -> simplified_ty t
| _ -> t
;;
let project_type
(base_ty:Ast.ty)
(comp:Ast.lval_component)
: Ast.ty =
match (base_ty, comp) with
match (simplified_ty base_ty, comp) with
(Ast.TY_rec elts, Ast.COMP_named (Ast.COMP_ident id)) ->
begin
match atab_search elts id with

View File

@ -1887,12 +1887,12 @@ let trans_visitor
in
match expr with
Ast.EXPR_binary (binop, a, b) ->
assert (is_prim_type (atom_type cx a));
assert (is_prim_type (atom_type cx b));
assert (is_prim_type (simplified_ty (atom_type cx a)));
assert (is_prim_type (simplified_ty (atom_type cx b)));
trans_binary binop (trans_atom a) (trans_atom b)
| Ast.EXPR_unary (unop, a) ->
assert (is_prim_type (atom_type cx a));
assert (is_prim_type (simplified_ty (atom_type cx a)));
let src = trans_atom a in
let bits = Il.operand_bits word_bits src in
let dst = Il.Reg (Il.next_vreg (emitter()), Il.ValTy bits) in
@ -2218,13 +2218,6 @@ let trans_visitor
and exterior_rc_cell (cell:Il.cell) : Il.cell =
exterior_ctrl_cell cell Abi.exterior_rc_slot_field_refcnt
and simplified_ty t =
match t with
Ast.TY_exterior t
| Ast.TY_mutable t
| Ast.TY_constrained (t, _) -> simplified_ty t
| _ -> t
and exterior_allocation_size
(ty:Ast.ty)
: Il.operand =
@ -4074,7 +4067,7 @@ let trans_visitor
and trans_log id a =
match atom_type cx a with
match simplified_ty (atom_type cx a) with
(* NB: If you extend this, be sure to update the
* typechecking code in type.ml as well. *)
Ast.TY_str -> trans_log_str a