In the parser, the function "parse_item_or_view_item" contains this code:

        if self.eat_keyword(&~"extern") {
            let opt_abis = self.parse_opt_abis();

            if items_allowed && self.eat_keyword(&~"fn") {
                // EXTERN FUNCTION ITEM
                let abis = opt_abis.get_or_default(AbiSet::C());
                let (ident, item_, extra_attrs) =
                    self.parse_item_fn(extern_fn, abis);
                return iovi_item(self.mk_item(lo, self.last_span.hi, ident,
                                              item_, visibility,
                                              maybe_append(attrs,
                                                           extra_attrs)));
            }
            if !foreign_items_allowed {
                // EXTERN MODULE ITEM
                return self.parse_item_foreign_mod(lo, opt_abis, visibility, 
attrs,
                                                   items_allowed);
            }
        }

Since "!foreign_items_allowed" is equivalent to "items_allowed", this will fall 
through if items_allowed is true.  I'm assuming this is an accident, and that 
it should never be legal to write

extern{
    extern …
}

… at the module level. Let me know if this fall-through is deliberate!

john
 
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to