diff options
| author | Graydon Hoare <[email protected]> | 2010-07-02 12:02:56 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-07-02 12:02:56 -0700 |
| commit | 285a4735b9565cc75cabd02f7b9c89aa8a70657e (patch) | |
| tree | cd9fbc798e6cc08ec7f758edc1a564a69f672532 /src/boot/me/dwarf.ml | |
| parent | Remove nameless node causing errors on doc make. (diff) | |
| download | rust-285a4735b9565cc75cabd02f7b9c89aa8a70657e.tar.xz rust-285a4735b9565cc75cabd02f7b9c89aa8a70657e.zip | |
Parse effect-qualified type definitions.
Diffstat (limited to 'src/boot/me/dwarf.ml')
| -rw-r--r-- | src/boot/me/dwarf.ml | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/boot/me/dwarf.ml b/src/boot/me/dwarf.ml index 7b54de25..5fd8638f 100644 --- a/src/boot/me/dwarf.ml +++ b/src/boot/me/dwarf.ml @@ -1210,6 +1210,8 @@ let (abbrev_typedef:abbrev) = (DW_TAG_typedef, DW_CHILDREN_yes, [| (DW_AT_name, DW_FORM_string); + (DW_AT_mutable, DW_FORM_flag); + (DW_AT_pure, DW_FORM_flag); (DW_AT_type, DW_FORM_ref_addr) |]) ;; @@ -2319,6 +2321,7 @@ let dwarf_visitor let emit_typedef_die (id:Ast.ident) + (e:Ast.effect) (ty:Ast.ty) : unit = let abbrev_code = get_abbrev_code abbrev_typedef in @@ -2327,6 +2330,7 @@ let dwarf_visitor uleb abbrev_code; (* DW_AT_name: DW_FORM_string *) ZSTRING id; + encode_effect e; (* DW_AT_type: DW_FORM_ref_addr *) (ref_type_die ty); |]) @@ -2388,13 +2392,13 @@ let dwarf_visitor (Hashtbl.find cx.ctxt_fn_fixups item.id); emit_type_param_decl_dies item.node.Ast.decl_params; end - | Ast.MOD_ITEM_type _ -> + | Ast.MOD_ITEM_type (e, _) -> begin log cx "walking typedef '%s' with %d type params" (path_name()) (Array.length item.node.Ast.decl_params); emit_typedef_die - id (Hashtbl.find cx.ctxt_all_type_items item.id); + id e (Hashtbl.find cx.ctxt_all_type_items item.id); emit_type_param_decl_dies item.node.Ast.decl_params; end | _ -> () @@ -3100,9 +3104,10 @@ let rec extract_mod_items let die = Hashtbl.find dies i in match die.die_tag with DW_TAG_typedef -> + let effect = get_effect die in let ident = get_name die in let ty = get_referenced_ty die in - let tyi = Ast.MOD_ITEM_type ty in + let tyi = Ast.MOD_ITEM_type (effect, ty) in let (params, islots) = get_formals die in assert ((Array.length islots) = 0); htab_put mis ident (decl params tyi) |