diff options
| author | Graydon Hoare <[email protected]> | 2011-03-07 11:48:43 -0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-03-07 11:48:43 -0800 |
| commit | 90f299e710c49d689d5bc815e32db375cca00394 (patch) | |
| tree | d2ee1e9784a2e2a9ff5184d2d1f75327ba315d22 /src/comp/middle | |
| parent | Stage the last compile fix to put out fire. Thanks git. (diff) | |
| download | rust-90f299e710c49d689d5bc815e32db375cca00394.tar.xz rust-90f299e710c49d689d5bc815e32db375cca00394.zip | |
Permit view items in native modules.
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/fold.rs | 9 | ||||
| -rw-r--r-- | src/comp/middle/resolve.rs | 14 |
2 files changed, 19 insertions, 4 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs index 935f426b..8a1dc70f 100644 --- a/src/comp/middle/fold.rs +++ b/src/comp/middle/fold.rs @@ -957,8 +957,14 @@ fn fold_native_item[ENV](&ENV env, ast_fold[ENV] fld, fn fold_native_mod[ENV](&ENV e, ast_fold[ENV] fld, &ast.native_mod m) -> ast.native_mod { + let vec[@view_item] view_items = vec(); let vec[@native_item] items = vec(); - auto index = new_str_hash[@ast.native_item](); + auto index = new_str_hash[ast.native_mod_index_entry](); + + for (@view_item vi in m.view_items) { + auto new_vi = fold_view_item[ENV](e, fld, vi); + append[@view_item](view_items, new_vi); + } for (@native_item i in m.items) { auto new_item = fold_native_item[ENV](e, fld, i); @@ -968,6 +974,7 @@ fn fold_native_mod[ENV](&ENV e, ast_fold[ENV] fld, ret fld.fold_native_mod(e, rec(native_name=m.native_name, abi=m.abi, + view_items=view_items, items=items, index=index)); } diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index a2f4da63..5b6db631 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -300,11 +300,19 @@ fn lookup_name_wrapped(&env e, ast.ident i) -> option.t[tup(@env, def_wrap)] { } fn check_native_mod(ast.ident i, ast.native_mod m) -> option.t[def_wrap] { + alt (m.index.find(i)) { - case (some[@ast.native_item](?item)) { - ret some(found_def_native_item(item)); + case (some[ast.native_mod_index_entry](?ent)) { + alt (ent) { + case (ast.nmie_view_item(?view_item)) { + ret some(found_def_view(view_item)); + } + case (ast.nmie_item(?item)) { + ret some(found_def_native_item(item)); + } + } } - case (_) { + case (none[ast.native_mod_index_entry]) { ret none[def_wrap]; } } |