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