Respect privacy qualifiers on view items, add to import resolutions.
This commit is contained in:
@@ -167,8 +167,8 @@ enum CaptureClause {
|
|||||||
type ResolveVisitor = vt<()>;
|
type ResolveVisitor = vt<()>;
|
||||||
|
|
||||||
enum ModuleDef {
|
enum ModuleDef {
|
||||||
NoModuleDef, // Does not define a module.
|
NoModuleDef, // Does not define a module.
|
||||||
ModuleDef(@Module), // Defines a module.
|
ModuleDef(Privacy, @Module), // Defines a module.
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ModuleDef {
|
impl ModuleDef {
|
||||||
@@ -333,15 +333,18 @@ fn Rib(kind: RibKind) -> Rib {
|
|||||||
|
|
||||||
/// One import directive.
|
/// One import directive.
|
||||||
struct ImportDirective {
|
struct ImportDirective {
|
||||||
|
privacy: Privacy,
|
||||||
module_path: @DVec<Atom>,
|
module_path: @DVec<Atom>,
|
||||||
subclass: @ImportDirectiveSubclass,
|
subclass: @ImportDirectiveSubclass,
|
||||||
span: span,
|
span: span,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ImportDirective(module_path: @DVec<Atom>,
|
fn ImportDirective(privacy: Privacy,
|
||||||
|
module_path: @DVec<Atom>,
|
||||||
subclass: @ImportDirectiveSubclass,
|
subclass: @ImportDirectiveSubclass,
|
||||||
span: span) -> ImportDirective {
|
span: span) -> ImportDirective {
|
||||||
ImportDirective {
|
ImportDirective {
|
||||||
|
privacy: privacy,
|
||||||
module_path: module_path,
|
module_path: module_path,
|
||||||
subclass: subclass,
|
subclass: subclass,
|
||||||
span: span
|
span: span
|
||||||
@@ -362,6 +365,7 @@ fn Target(target_module: @Module, bindings: @NameBindings) -> Target {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct ImportResolution {
|
struct ImportResolution {
|
||||||
|
privacy: Privacy,
|
||||||
span: span,
|
span: span,
|
||||||
|
|
||||||
// The number of outstanding references to this name. When this reaches
|
// The number of outstanding references to this name. When this reaches
|
||||||
@@ -377,8 +381,10 @@ struct ImportResolution {
|
|||||||
mut used: bool,
|
mut used: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ImportResolution(span: span) -> ImportResolution {
|
fn ImportResolution(privacy: Privacy,
|
||||||
|
span: span) -> ImportResolution {
|
||||||
ImportResolution {
|
ImportResolution {
|
||||||
|
privacy: privacy,
|
||||||
span: span,
|
span: span,
|
||||||
outstanding_references: 0u,
|
outstanding_references: 0u,
|
||||||
module_target: None,
|
module_target: None,
|
||||||
@@ -533,13 +539,14 @@ struct NameBindings {
|
|||||||
impl NameBindings {
|
impl NameBindings {
|
||||||
|
|
||||||
/// Creates a new module in this set of name bindings.
|
/// Creates a new module in this set of name bindings.
|
||||||
fn define_module(parent_link: ParentLink,
|
fn define_module(privacy: Privacy,
|
||||||
|
parent_link: ParentLink,
|
||||||
def_id: Option<def_id>,
|
def_id: Option<def_id>,
|
||||||
legacy_exports: bool,
|
legacy_exports: bool,
|
||||||
sp: span) {
|
sp: span) {
|
||||||
if self.module_def.is_none() {
|
if self.module_def.is_none() {
|
||||||
let module_ = @Module(parent_link, def_id, legacy_exports);
|
let module_ = @Module(parent_link, def_id, legacy_exports);
|
||||||
self.module_def = ModuleDef(module_);
|
self.module_def = ModuleDef(privacy, module_);
|
||||||
self.module_span = Some(sp);
|
self.module_span = Some(sp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -560,7 +567,7 @@ impl NameBindings {
|
|||||||
fn get_module_if_available() -> Option<@Module> {
|
fn get_module_if_available() -> Option<@Module> {
|
||||||
match self.module_def {
|
match self.module_def {
|
||||||
NoModuleDef => return None,
|
NoModuleDef => return None,
|
||||||
ModuleDef(module_) => return Some(module_)
|
ModuleDef(_privacy, module_) => return Some(module_)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,7 +581,7 @@ impl NameBindings {
|
|||||||
fail
|
fail
|
||||||
~"get_module called on a node with no module definition!";
|
~"get_module called on a node with no module definition!";
|
||||||
}
|
}
|
||||||
ModuleDef(module_) => {
|
ModuleDef(_, module_) => {
|
||||||
return module_;
|
return module_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -599,12 +606,12 @@ impl NameBindings {
|
|||||||
ValueNS => return self.value_def,
|
ValueNS => return self.value_def,
|
||||||
ModuleNS => match self.module_def {
|
ModuleNS => match self.module_def {
|
||||||
NoModuleDef => return None,
|
NoModuleDef => return None,
|
||||||
ModuleDef(module_) =>
|
ModuleDef(privacy, module_) =>
|
||||||
match module_.def_id {
|
match module_.def_id {
|
||||||
None => return None,
|
None => return None,
|
||||||
Some(def_id) => {
|
Some(def_id) => {
|
||||||
return Some(Definition {
|
return Some(Definition {
|
||||||
privacy: Public,
|
privacy: privacy,
|
||||||
def: def_mod(def_id)
|
def: def_mod(def_id)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -703,7 +710,8 @@ fn Resolver(session: session, lang_items: LanguageItems,
|
|||||||
|
|
||||||
let graph_root = @NameBindings();
|
let graph_root = @NameBindings();
|
||||||
|
|
||||||
(*graph_root).define_module(NoParentLink,
|
(*graph_root).define_module(Public,
|
||||||
|
NoParentLink,
|
||||||
Some({ crate: 0, node: 0 }),
|
Some({ crate: 0, node: 0 }),
|
||||||
has_legacy_export_attr(crate.node.attrs),
|
has_legacy_export_attr(crate.node.attrs),
|
||||||
crate.span);
|
crate.span);
|
||||||
@@ -991,6 +999,7 @@ impl Resolver {
|
|||||||
let legacy = match parent {
|
let legacy = match parent {
|
||||||
ModuleReducedGraphParent(m) => m.legacy_exports
|
ModuleReducedGraphParent(m) => m.legacy_exports
|
||||||
};
|
};
|
||||||
|
let privacy = self.visibility_to_privacy(item.vis, legacy);
|
||||||
|
|
||||||
match item.node {
|
match item.node {
|
||||||
item_mod(module_) => {
|
item_mod(module_) => {
|
||||||
@@ -1000,8 +1009,8 @@ impl Resolver {
|
|||||||
|
|
||||||
let parent_link = self.get_parent_link(new_parent, atom);
|
let parent_link = self.get_parent_link(new_parent, atom);
|
||||||
let def_id = { crate: 0, node: item.id };
|
let def_id = { crate: 0, node: item.id };
|
||||||
(*name_bindings).define_module(parent_link, Some(def_id),
|
(*name_bindings).define_module(privacy, parent_link,
|
||||||
legacy, sp);
|
Some(def_id), legacy, sp);
|
||||||
|
|
||||||
let new_parent =
|
let new_parent =
|
||||||
ModuleReducedGraphParent((*name_bindings).get_module());
|
ModuleReducedGraphParent((*name_bindings).get_module());
|
||||||
@@ -1017,8 +1026,8 @@ impl Resolver {
|
|||||||
|
|
||||||
let parent_link = self.get_parent_link(new_parent, atom);
|
let parent_link = self.get_parent_link(new_parent, atom);
|
||||||
let def_id = { crate: 0, node: item.id };
|
let def_id = { crate: 0, node: item.id };
|
||||||
(*name_bindings).define_module(parent_link, Some(def_id),
|
(*name_bindings).define_module(privacy, parent_link,
|
||||||
legacy, sp);
|
Some(def_id), legacy, sp);
|
||||||
|
|
||||||
ModuleReducedGraphParent((*name_bindings).get_module())
|
ModuleReducedGraphParent((*name_bindings).get_module())
|
||||||
}
|
}
|
||||||
@@ -1036,17 +1045,14 @@ impl Resolver {
|
|||||||
~[ValueNS], sp);
|
~[ValueNS], sp);
|
||||||
|
|
||||||
(*name_bindings).define_value
|
(*name_bindings).define_value
|
||||||
(self.visibility_to_privacy(item.vis, legacy),
|
(privacy, def_const(local_def(item.id)), sp);
|
||||||
def_const(local_def(item.id)),
|
|
||||||
sp);
|
|
||||||
}
|
}
|
||||||
item_fn(_, purity, _, _) => {
|
item_fn(_, purity, _, _) => {
|
||||||
let (name_bindings, new_parent) = self.add_child(atom, parent,
|
let (name_bindings, new_parent) = self.add_child(atom, parent,
|
||||||
~[ValueNS], sp);
|
~[ValueNS], sp);
|
||||||
|
|
||||||
let def = def_fn(local_def(item.id), purity);
|
let def = def_fn(local_def(item.id), purity);
|
||||||
(*name_bindings).define_value
|
(*name_bindings).define_value(privacy, def, sp);
|
||||||
(self.visibility_to_privacy(item.vis, legacy), def, sp);
|
|
||||||
visit_item(item, new_parent, visitor);
|
visit_item(item, new_parent, visitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1056,9 +1062,7 @@ impl Resolver {
|
|||||||
~[TypeNS], sp);
|
~[TypeNS], sp);
|
||||||
|
|
||||||
(*name_bindings).define_type
|
(*name_bindings).define_type
|
||||||
(self.visibility_to_privacy(item.vis, legacy),
|
(privacy, def_ty(local_def(item.id)), sp);
|
||||||
def_ty(local_def(item.id)),
|
|
||||||
sp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
item_enum(enum_definition, _) => {
|
item_enum(enum_definition, _) => {
|
||||||
@@ -1067,9 +1071,7 @@ impl Resolver {
|
|||||||
~[TypeNS], sp);
|
~[TypeNS], sp);
|
||||||
|
|
||||||
(*name_bindings).define_type
|
(*name_bindings).define_type
|
||||||
(self.visibility_to_privacy(item.vis, legacy),
|
(privacy, def_ty(local_def(item.id)), sp);
|
||||||
def_ty(local_def(item.id)),
|
|
||||||
sp);
|
|
||||||
|
|
||||||
for enum_definition.variants.each |variant| {
|
for enum_definition.variants.each |variant| {
|
||||||
self.build_reduced_graph_for_variant(*variant,
|
self.build_reduced_graph_for_variant(*variant,
|
||||||
@@ -1088,9 +1090,7 @@ impl Resolver {
|
|||||||
self.add_child(atom, parent, ~[TypeNS], sp);
|
self.add_child(atom, parent, ~[TypeNS], sp);
|
||||||
|
|
||||||
(*name_bindings).define_type
|
(*name_bindings).define_type
|
||||||
(self.visibility_to_privacy(item.vis, legacy),
|
(privacy, def_ty(local_def(item.id)), sp);
|
||||||
def_ty(local_def(item.id)),
|
|
||||||
sp);
|
|
||||||
new_parent
|
new_parent
|
||||||
}
|
}
|
||||||
Some(ctor) => {
|
Some(ctor) => {
|
||||||
@@ -1098,9 +1098,6 @@ impl Resolver {
|
|||||||
self.add_child(atom, parent, ~[ValueNS, TypeNS],
|
self.add_child(atom, parent, ~[ValueNS, TypeNS],
|
||||||
sp);
|
sp);
|
||||||
|
|
||||||
let privacy = self.visibility_to_privacy(item.vis,
|
|
||||||
legacy);
|
|
||||||
|
|
||||||
(*name_bindings).define_type
|
(*name_bindings).define_type
|
||||||
(privacy, def_ty(local_def(item.id)), sp);
|
(privacy, def_ty(local_def(item.id)), sp);
|
||||||
|
|
||||||
@@ -1156,7 +1153,7 @@ impl Resolver {
|
|||||||
self.trait_info.insert(def_id, method_names);
|
self.trait_info.insert(def_id, method_names);
|
||||||
|
|
||||||
(*name_bindings).define_type
|
(*name_bindings).define_type
|
||||||
(self.visibility_to_privacy(item.vis, legacy),
|
(privacy,
|
||||||
def_ty(def_id),
|
def_ty(def_id),
|
||||||
sp);
|
sp);
|
||||||
visit_item(item, new_parent, visitor);
|
visit_item(item, new_parent, visitor);
|
||||||
@@ -1218,6 +1215,10 @@ impl Resolver {
|
|||||||
parent: ReducedGraphParent,
|
parent: ReducedGraphParent,
|
||||||
&&_visitor: vt<ReducedGraphParent>) {
|
&&_visitor: vt<ReducedGraphParent>) {
|
||||||
|
|
||||||
|
let legacy = match parent {
|
||||||
|
ModuleReducedGraphParent(m) => m.legacy_exports
|
||||||
|
};
|
||||||
|
let privacy = self.visibility_to_privacy(view_item.vis, legacy);
|
||||||
match view_item.node {
|
match view_item.node {
|
||||||
view_item_import(view_paths) => {
|
view_item_import(view_paths) => {
|
||||||
for view_paths.each |view_path| {
|
for view_paths.each |view_path| {
|
||||||
@@ -1259,7 +1260,8 @@ impl Resolver {
|
|||||||
let subclass = @SingleImport(binding,
|
let subclass = @SingleImport(binding,
|
||||||
source_ident,
|
source_ident,
|
||||||
ns);
|
ns);
|
||||||
self.build_import_directive(module_,
|
self.build_import_directive(privacy,
|
||||||
|
module_,
|
||||||
module_path,
|
module_path,
|
||||||
subclass,
|
subclass,
|
||||||
view_path.span);
|
view_path.span);
|
||||||
@@ -1270,14 +1272,16 @@ impl Resolver {
|
|||||||
let subclass = @SingleImport(name,
|
let subclass = @SingleImport(name,
|
||||||
name,
|
name,
|
||||||
AnyNS);
|
AnyNS);
|
||||||
self.build_import_directive(module_,
|
self.build_import_directive(privacy,
|
||||||
|
module_,
|
||||||
module_path,
|
module_path,
|
||||||
subclass,
|
subclass,
|
||||||
view_path.span);
|
view_path.span);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
view_path_glob(_, _) => {
|
view_path_glob(_, _) => {
|
||||||
self.build_import_directive(module_,
|
self.build_import_directive(privacy,
|
||||||
|
module_,
|
||||||
module_path,
|
module_path,
|
||||||
@GlobImport,
|
@GlobImport,
|
||||||
view_path.span);
|
view_path.span);
|
||||||
@@ -1356,7 +1360,8 @@ impl Resolver {
|
|||||||
let parent_link = ModuleParentLink
|
let parent_link = ModuleParentLink
|
||||||
(self.get_module_from_parent(new_parent), name);
|
(self.get_module_from_parent(new_parent), name);
|
||||||
|
|
||||||
(*child_name_bindings).define_module(parent_link,
|
(*child_name_bindings).define_module(privacy,
|
||||||
|
parent_link,
|
||||||
Some(def_id),
|
Some(def_id),
|
||||||
false,
|
false,
|
||||||
view_item.span);
|
view_item.span);
|
||||||
@@ -1440,7 +1445,8 @@ impl Resolver {
|
|||||||
|
|
||||||
match modules.find(def_id) {
|
match modules.find(def_id) {
|
||||||
None => {
|
None => {
|
||||||
child_name_bindings.define_module(parent_link,
|
child_name_bindings.define_module(Public,
|
||||||
|
parent_link,
|
||||||
Some(def_id),
|
Some(def_id),
|
||||||
false,
|
false,
|
||||||
dummy_sp());
|
dummy_sp());
|
||||||
@@ -1452,7 +1458,7 @@ impl Resolver {
|
|||||||
// avoid creating cycles in the
|
// avoid creating cycles in the
|
||||||
// module graph.
|
// module graph.
|
||||||
|
|
||||||
let resolution = @ImportResolution(dummy_sp());
|
let resolution = @ImportResolution(Public, dummy_sp());
|
||||||
resolution.outstanding_references = 0;
|
resolution.outstanding_references = 0;
|
||||||
|
|
||||||
match existing_module.parent_link {
|
match existing_module.parent_link {
|
||||||
@@ -1476,7 +1482,7 @@ impl Resolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ModuleDef(module_) => {
|
ModuleDef(_priv, module_) => {
|
||||||
debug!("(building reduced graph for \
|
debug!("(building reduced graph for \
|
||||||
external crate) already created \
|
external crate) already created \
|
||||||
module");
|
module");
|
||||||
@@ -1585,11 +1591,12 @@ impl Resolver {
|
|||||||
autovivifying %s", *ident_str);
|
autovivifying %s", *ident_str);
|
||||||
let parent_link = self.get_parent_link(new_parent,
|
let parent_link = self.get_parent_link(new_parent,
|
||||||
ident);
|
ident);
|
||||||
(*child_name_bindings).define_module(parent_link,
|
(*child_name_bindings).define_module(Public,
|
||||||
None, false,
|
parent_link,
|
||||||
|
None, false,
|
||||||
dummy_sp());
|
dummy_sp());
|
||||||
}
|
}
|
||||||
ModuleDef(_) => { /* Fall through. */ }
|
ModuleDef(*) => { /* Fall through. */ }
|
||||||
}
|
}
|
||||||
|
|
||||||
current_module = (*child_name_bindings).get_module();
|
current_module = (*child_name_bindings).get_module();
|
||||||
@@ -1625,12 +1632,14 @@ impl Resolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Creates and adds an import directive to the given module.
|
/// Creates and adds an import directive to the given module.
|
||||||
fn build_import_directive(module_: @Module,
|
fn build_import_directive(privacy: Privacy,
|
||||||
|
module_: @Module,
|
||||||
module_path: @DVec<Atom>,
|
module_path: @DVec<Atom>,
|
||||||
subclass: @ImportDirectiveSubclass,
|
subclass: @ImportDirectiveSubclass,
|
||||||
span: span) {
|
span: span) {
|
||||||
|
|
||||||
let directive = @ImportDirective(module_path, subclass, span);
|
let directive = @ImportDirective(privacy, module_path,
|
||||||
|
subclass, span);
|
||||||
module_.imports.push(directive);
|
module_.imports.push(directive);
|
||||||
|
|
||||||
// Bump the reference count on the name. Or, if this is a glob, set
|
// Bump the reference count on the name. Or, if this is a glob, set
|
||||||
@@ -1643,7 +1652,7 @@ impl Resolver {
|
|||||||
resolution.outstanding_references += 1u;
|
resolution.outstanding_references += 1u;
|
||||||
}
|
}
|
||||||
None => {
|
None => {
|
||||||
let resolution = @ImportResolution(span);
|
let resolution = @ImportResolution(privacy, span);
|
||||||
resolution.outstanding_references = 1u;
|
resolution.outstanding_references = 1u;
|
||||||
module_.import_resolutions.insert(target, resolution);
|
module_.import_resolutions.insert(target, resolution);
|
||||||
}
|
}
|
||||||
@@ -1829,8 +1838,9 @@ impl Resolver {
|
|||||||
}
|
}
|
||||||
GlobImport => {
|
GlobImport => {
|
||||||
let span = import_directive.span;
|
let span = import_directive.span;
|
||||||
|
let p = import_directive.privacy;
|
||||||
resolution_result =
|
resolution_result =
|
||||||
self.resolve_glob_import(module_,
|
self.resolve_glob_import(p, module_,
|
||||||
containing_module,
|
containing_module,
|
||||||
span);
|
span);
|
||||||
}
|
}
|
||||||
@@ -2196,7 +2206,8 @@ impl Resolver {
|
|||||||
* succeeds or bails out (as importing * from an empty module or a module
|
* succeeds or bails out (as importing * from an empty module or a module
|
||||||
* that exports nothing is valid).
|
* that exports nothing is valid).
|
||||||
*/
|
*/
|
||||||
fn resolve_glob_import(module_: @Module,
|
fn resolve_glob_import(privacy: Privacy,
|
||||||
|
module_: @Module,
|
||||||
containing_module: @Module,
|
containing_module: @Module,
|
||||||
span: span)
|
span: span)
|
||||||
-> ResolveResult<()> {
|
-> ResolveResult<()> {
|
||||||
@@ -2236,7 +2247,8 @@ impl Resolver {
|
|||||||
None => {
|
None => {
|
||||||
// Simple: just copy the old import resolution.
|
// Simple: just copy the old import resolution.
|
||||||
let new_import_resolution =
|
let new_import_resolution =
|
||||||
@ImportResolution(target_import_resolution.span);
|
@ImportResolution(privacy,
|
||||||
|
target_import_resolution.span);
|
||||||
new_import_resolution.module_target =
|
new_import_resolution.module_target =
|
||||||
copy target_import_resolution.module_target;
|
copy target_import_resolution.module_target;
|
||||||
new_import_resolution.value_target =
|
new_import_resolution.value_target =
|
||||||
@@ -2294,7 +2306,8 @@ impl Resolver {
|
|||||||
match module_.import_resolutions.find(atom) {
|
match module_.import_resolutions.find(atom) {
|
||||||
None => {
|
None => {
|
||||||
// Create a new import resolution from this child.
|
// Create a new import resolution from this child.
|
||||||
dest_import_resolution = @ImportResolution(span);
|
dest_import_resolution = @ImportResolution(privacy,
|
||||||
|
span);
|
||||||
module_.import_resolutions.insert
|
module_.import_resolutions.insert
|
||||||
(atom, dest_import_resolution);
|
(atom, dest_import_resolution);
|
||||||
}
|
}
|
||||||
@@ -2372,7 +2385,7 @@ impl Resolver {
|
|||||||
str_of(name)));
|
str_of(name)));
|
||||||
return Failed;
|
return Failed;
|
||||||
}
|
}
|
||||||
ModuleDef(copy module_) => {
|
ModuleDef(_, copy module_) => {
|
||||||
search_module = module_;
|
search_module = module_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2528,7 +2541,7 @@ impl Resolver {
|
|||||||
wasn't actually a module!");
|
wasn't actually a module!");
|
||||||
return Failed;
|
return Failed;
|
||||||
}
|
}
|
||||||
ModuleDef(module_) => {
|
ModuleDef(_, module_) => {
|
||||||
return Success(module_);
|
return Success(module_);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2892,6 +2905,11 @@ impl Resolver {
|
|||||||
for [ModuleNS, TypeNS, ValueNS].each |ns| {
|
for [ModuleNS, TypeNS, ValueNS].each |ns| {
|
||||||
match namebindings.def_for_namespace(*ns) {
|
match namebindings.def_for_namespace(*ns) {
|
||||||
Some(d) if d.privacy == Public => {
|
Some(d) if d.privacy == Public => {
|
||||||
|
debug!("(computing exports) YES: %s '%s' \
|
||||||
|
=> %?",
|
||||||
|
if reexport { ~"reexport" } else { ~"export"},
|
||||||
|
self.session.str_of(atom),
|
||||||
|
def_id_of_def(d.def));
|
||||||
vec::push(*exports2, Export2 {
|
vec::push(*exports2, Export2 {
|
||||||
reexport: reexport,
|
reexport: reexport,
|
||||||
name: self.session.str_of(atom),
|
name: self.session.str_of(atom),
|
||||||
@@ -2906,6 +2924,8 @@ impl Resolver {
|
|||||||
fn add_exports_for_module(exports2: &mut ~[Export2], module_: @Module) {
|
fn add_exports_for_module(exports2: &mut ~[Export2], module_: @Module) {
|
||||||
|
|
||||||
for module_.children.each_ref |atom, namebindings| {
|
for module_.children.each_ref |atom, namebindings| {
|
||||||
|
debug!("(computing exports) maybe export '%s'",
|
||||||
|
self.session.str_of(*atom));
|
||||||
self.add_exports_of_namebindings(exports2, *atom,
|
self.add_exports_of_namebindings(exports2, *atom,
|
||||||
*namebindings, false)
|
*namebindings, false)
|
||||||
}
|
}
|
||||||
@@ -2914,6 +2934,8 @@ impl Resolver {
|
|||||||
for [ModuleNS, TypeNS, ValueNS].each |ns| {
|
for [ModuleNS, TypeNS, ValueNS].each |ns| {
|
||||||
match importresolution.target_for_namespace(*ns) {
|
match importresolution.target_for_namespace(*ns) {
|
||||||
Some(target) => {
|
Some(target) => {
|
||||||
|
debug!("(computing exports) maybe reexport '%s'",
|
||||||
|
self.session.str_of(*atom));
|
||||||
self.add_exports_of_namebindings(exports2, *atom,
|
self.add_exports_of_namebindings(exports2, *atom,
|
||||||
target.bindings,
|
target.bindings,
|
||||||
true)
|
true)
|
||||||
@@ -2936,7 +2958,7 @@ impl Resolver {
|
|||||||
// Nothing to do.
|
// Nothing to do.
|
||||||
}
|
}
|
||||||
ChildNameDefinition(target_def) => {
|
ChildNameDefinition(target_def) => {
|
||||||
debug!("(computing exports) found child export '%s' \
|
debug!("(computing exports) legacy export '%s' \
|
||||||
for %?",
|
for %?",
|
||||||
self.session.str_of(name),
|
self.session.str_of(name),
|
||||||
module_.def_id);
|
module_.def_id);
|
||||||
@@ -2947,7 +2969,7 @@ impl Resolver {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
ImportNameDefinition(target_def) => {
|
ImportNameDefinition(target_def) => {
|
||||||
debug!("(computing exports) found reexport '%s' for \
|
debug!("(computing exports) legacy reexport '%s' for \
|
||||||
%?",
|
%?",
|
||||||
self.session.str_of(name),
|
self.session.str_of(name),
|
||||||
module_.def_id);
|
module_.def_id);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#[no_core];
|
#[no_core];
|
||||||
|
|
||||||
#[legacy_modes];
|
#[legacy_modes];
|
||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
#[allow(vecs_implicitly_copyable)];
|
#[allow(vecs_implicitly_copyable)];
|
||||||
#[allow(non_camel_case_types)];
|
#[allow(non_camel_case_types)];
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#[legacy_exports];
|
||||||
mod kitties {
|
mod kitties {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
mod kitties {
|
mod kitties {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
mod kitties {
|
mod kitties {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
#[legacy_exports];
|
||||||
mod kitties {
|
mod kitties {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
mod kitties {
|
mod kitties {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
use to_str::*;
|
use to_str::*;
|
||||||
use to_str::ToStr;
|
use to_str::ToStr;
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
// aux-build:crateresolve_calories-2.rs
|
// aux-build:crateresolve_calories-2.rs
|
||||||
|
|
||||||
// These both have the same version but differ in other metadata
|
// These both have the same version but differ in other metadata
|
||||||
|
#[legacy_exports];
|
||||||
mod a {
|
mod a {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
extern mod cr_1 (name = "crateresolve_calories", vers = "0.1", calories="100");
|
extern mod cr_1 (name = "crateresolve_calories", vers = "0.1", calories="100");
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#[link(name="foreign_lib", vers="0.0")];
|
#[link(name="foreign_lib", vers="0.0")];
|
||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
extern mod rustrt {
|
extern mod rustrt {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#[link(name="socketlib", vers="0.0")];
|
#[link(name="socketlib", vers="0.0")];
|
||||||
#[crate_type = "lib"];
|
#[crate_type = "lib"];
|
||||||
|
#[legacy_exports];
|
||||||
|
|
||||||
mod socket {
|
mod socket {
|
||||||
#[legacy_exports];
|
#[legacy_exports];
|
||||||
|
|||||||
Reference in New Issue
Block a user