Skip to content

Commit bdb2264

Browse files
committed
---
yaml --- r: 271 b: refs/heads/master c: d2b845d h: refs/heads/master i: 269: eab4bbc 267: 1ea7f18 263: 9745e2a 255: 37303de v: v3
1 parent cdb33e7 commit bdb2264

File tree

7 files changed

+95
-112
lines changed

7 files changed

+95
-112
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: c218d06601a205dffbadca98e1ff953740efa1ba
2+
refs/heads/master: d2b845d29ca9f36f21967ad1b4829b84ef4aa808

trunk/.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
*.toc
2525
*.tp
2626
*.vr
27-
*.swp
2827
.hg/
2928
.hgignore
3029
lexer.ml

trunk/AUTHORS.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Graydon Hoare <[email protected]>
44

55
Other authors:
66

7-
Adam Bozanich <[email protected]>
87
Andreas Gal <[email protected]>
98
Brendan Eich <[email protected]>
109
Chris Double <[email protected]>

trunk/src/boot/be/abi.ml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ let binding_size = 2;;
4949
let binding_field_item = 0;;
5050
let binding_field_binding = 1;;
5151

52+
let obj_elt_rc = 0;;
53+
let obj_elt_tydesc = 1;;
54+
let obj_elt_fields = 2;;
55+
5256
let general_code_alignment = 16;;
5357

5458
let tydesc_field_first_param = 0;;

trunk/src/boot/fe/item.ml

Lines changed: 87 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -775,6 +775,7 @@ and parse_type_item
775775
let item = Ast.MOD_ITEM_type (effect, ty) in
776776
(ident, span ps apos bpos (decl params item))
777777

778+
778779
and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) =
779780
let apos = lexpos ps in
780781
let parse_lib_name ident =
@@ -848,35 +849,72 @@ and parse_mod_item (ps:pstate) : (Ast.ident * Ast.mod_item) =
848849
note_required_mod ps {lo=apos; hi=bpos} conv rlib item;
849850
(ident, item)
850851
end
852+
853+
| USE ->
854+
begin
855+
bump ps;
856+
let ident = ctxt "use mod: ident" Pexp.parse_ident ps in
857+
let meta =
858+
ctxt "use mod: meta" parse_optional_meta_pat ps ident
859+
in
860+
let bpos = lexpos ps in
861+
let id = (span ps apos bpos ()).id in
862+
let (path, items) =
863+
ps.pstate_get_mod meta id ps.pstate_node_id ps.pstate_opaque_id
864+
in
865+
let bpos = lexpos ps in
866+
expect ps SEMI;
867+
let rlib =
868+
REQUIRED_LIB_rust { required_libname = path;
869+
required_prefix = ps.pstate_depth }
870+
in
871+
iflog ps
872+
begin
873+
fun _ ->
874+
log ps "extracted mod from %s (binding to %s)"
875+
path ident;
876+
log ps "%a" Ast.sprintf_mod_items items;
877+
end;
878+
let item = decl [||] (Ast.MOD_ITEM_mod (empty_view, items)) in
879+
let item = span ps apos bpos item in
880+
note_required_mod ps {lo=apos; hi=bpos} CONV_rust rlib item;
881+
(ident, item)
882+
end
883+
884+
885+
851886
| _ -> raise (unexpected ps)
852887

853-
and parse_mod_items_header_from_signature (ps:pstate) : Ast.mod_view =
854-
let exports = Hashtbl.create 0 in
855-
while (peek ps = EXPORT)
856-
do
857-
bump ps;
858-
parse_export ps exports;
859-
expect ps SEMI;
860-
done;
861-
if (Hashtbl.length exports) = 0
862-
then htab_put exports Ast.EXPORT_all_decls ();
863-
{empty_view with Ast.view_exports = exports}
864888

865889
and parse_mod_items_from_signature
866890
(ps:pstate)
867891
: (Ast.mod_view * Ast.mod_items) =
868-
expect ps LBRACE;
869-
let view = parse_mod_items_header_from_signature ps in
870-
let items = Hashtbl.create 0 in
892+
let exports = Hashtbl.create 0 in
893+
let mis = Hashtbl.create 0 in
894+
let in_view = ref true in
895+
expect ps LBRACE;
871896
while not (peek ps = RBRACE)
872897
do
873-
let (ident,item) = ctxt "mod items from sig: mod item"
874-
parse_mod_item_from_signature ps
875-
in
876-
htab_put items ident item;
898+
if !in_view
899+
then
900+
match peek ps with
901+
EXPORT ->
902+
bump ps;
903+
parse_export ps exports;
904+
expect ps SEMI;
905+
| _ ->
906+
in_view := false
907+
else
908+
let (ident, mti) = ctxt "mod items from sig: mod item"
909+
parse_mod_item_from_signature ps
910+
in
911+
Hashtbl.add mis ident mti;
877912
done;
913+
if (Hashtbl.length exports) = 0
914+
then Hashtbl.add exports Ast.EXPORT_all_decls ();
878915
expect ps RBRACE;
879-
(view,items)
916+
({empty_view with Ast.view_exports = exports}, mis)
917+
880918

881919
and parse_mod_item_from_signature (ps:pstate)
882920
: (Ast.ident * Ast.mod_item) =
@@ -994,6 +1032,7 @@ and expand_tags_to_stmts
9941032
(Ast.DECL_mod_item (ident, tag_item))))
9951033
id_items
9961034

1035+
9971036
and expand_tags_to_items
9981037
(ps:pstate)
9991038
(item:Ast.mod_item)
@@ -1004,6 +1043,7 @@ and expand_tags_to_items
10041043
(fun (ident, item) -> htab_put items ident item)
10051044
id_items
10061045

1046+
10071047
and note_required_mod
10081048
(ps:pstate)
10091049
(sp:span)
@@ -1083,89 +1123,48 @@ and parse_export
10831123
in
10841124
Hashtbl.add exports e ()
10851125

1086-
and parse_use
1087-
(ps:pstate)
1088-
: (Ast.ident * Ast.mod_item) =
1089-
bump ps;
1090-
let ident = ctxt "use mod: ident" Pexp.parse_ident ps in
1091-
let meta =
1092-
ctxt "use mod: meta" parse_optional_meta_pat ps ident
1093-
in
1094-
let apos = lexpos ps in
1095-
let bpos = lexpos ps in
1096-
let id = (span ps apos bpos ()).id in
1097-
let (path, items) =
1098-
ps.pstate_get_mod meta id ps.pstate_node_id ps.pstate_opaque_id
1099-
in
1100-
let bpos = lexpos ps in
1101-
expect ps SEMI;
1102-
let rlib =
1103-
REQUIRED_LIB_rust { required_libname = path;
1104-
required_prefix = ps.pstate_depth }
1105-
in
1106-
iflog ps
1107-
begin
1108-
fun _ ->
1109-
log ps "extracted mod from %s (binding to %s)"
1110-
path ident;
1111-
log ps "%a" Ast.sprintf_mod_items items;
1112-
end;
1113-
let item = decl [||] (Ast.MOD_ITEM_mod (empty_view, items)) in
1114-
let item = span ps apos bpos item in
1115-
note_required_mod ps {lo=apos; hi=bpos} CONV_rust rlib item;
1116-
(ident, item)
1117-
1118-
and parse_item_decl ps items fn =
1119-
let (ident, item) = fn ps in
1120-
htab_put items ident item;
1121-
expand_tags_to_items ps item items
1122-
1123-
and parse_mod_header (ps:pstate)
1124-
: (Ast.mod_view * Ast.mod_items) =
1125-
let imports = Hashtbl.create 0 in
1126-
let exports = Hashtbl.create 0 in
1127-
let items = Hashtbl.create 4 in
1128-
let rec loop () =
1129-
match peek ps with
1130-
IMPORT ->
1131-
bump ps;
1132-
parse_import ps imports;
1133-
expect ps SEMI;
1134-
loop ()
1135-
| EXPORT ->
1136-
bump ps;
1137-
parse_export ps exports;
1138-
expect ps SEMI;
1139-
loop ()
1140-
| USE ->
1141-
parse_item_decl ps items parse_use;
1142-
loop ()
1143-
| _ -> ()
1144-
in
1145-
loop ();
1146-
if (Hashtbl.length exports) = 0
1147-
then Hashtbl.add exports Ast.EXPORT_all_decls ();
1148-
let view = { Ast.view_imports = imports;
1149-
Ast.view_exports = exports }
1150-
in
1151-
(view, items)
11521126

11531127
and parse_mod_items
11541128
(ps:pstate)
11551129
(terminal:token)
11561130
: (Ast.mod_view * Ast.mod_items) =
11571131
ps.pstate_depth <- ps.pstate_depth + 1;
1158-
let (view, items) = parse_mod_header ps in
1132+
let imports = Hashtbl.create 0 in
1133+
let exports = Hashtbl.create 0 in
1134+
let in_view = ref true in
1135+
let items = Hashtbl.create 4 in
11591136
while (not (peek ps = terminal))
11601137
do
1161-
parse_item_decl ps items parse_mod_item;
1138+
if !in_view
1139+
then
1140+
match peek ps with
1141+
IMPORT ->
1142+
bump ps;
1143+
parse_import ps imports;
1144+
expect ps SEMI;
1145+
| EXPORT ->
1146+
bump ps;
1147+
parse_export ps exports;
1148+
expect ps SEMI;
1149+
| _ ->
1150+
in_view := false
1151+
else
1152+
let (ident, item) = parse_mod_item ps in
1153+
htab_put items ident item;
1154+
expand_tags_to_items ps item items;
11621155
done;
1156+
if (Hashtbl.length exports) = 0
1157+
then Hashtbl.add exports Ast.EXPORT_all_decls ();
11631158
expect ps terminal;
11641159
ps.pstate_depth <- ps.pstate_depth - 1;
1165-
(view, items)
1160+
let view = { Ast.view_imports = imports;
1161+
Ast.view_exports = exports }
1162+
in
1163+
(view, items)
11661164
;;
11671165

11681166

1167+
11691168
(*
11701169
* Local Variables:
11711170
* fill-column: 78;

trunk/src/boot/me/trans.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,7 @@ let trans_visitor
521521
then
522522
begin
523523
let obj = get_obj_for_current_frame() in
524-
let tydesc = get_element_ptr obj 1 in
524+
let tydesc = get_element_ptr obj Abi.obj_elt_tydesc in
525525
let ty_params_ty = Ast.TY_tup (make_tydesc_tys n_ty_params) in
526526
let ty_params_rty = referent_type abi ty_params_ty in
527527
let ty_params =
@@ -2473,8 +2473,8 @@ let trans_visitor
24732473
let null_jmp = null_check binding in
24742474
let rc_jmp = drop_refcount_and_cmp binding in
24752475
let obj = deref binding in
2476-
let tydesc = get_element_ptr obj 1 in
2477-
let body = get_element_ptr obj 2 in
2476+
let tydesc = get_element_ptr obj Abi.obj_elt_tydesc in
2477+
let body = get_element_ptr obj Abi.obj_elt_fields in
24782478
let ty_params = get_tydesc_params ty_params tydesc in
24792479
let dtor =
24802480
get_element_ptr (deref tydesc) Abi.tydesc_field_obj_drop_glue

trunk/src/test/run-pass/use-import-export.rs

Lines changed: 0 additions & 18 deletions
This file was deleted.

0 commit comments

Comments
 (0)