about summary refs log tree commit diff
path: root/src/librustc/plugin
diff options
context:
space:
mode:
authorJohn Clements <clements@racket-lang.org>2014-07-07 09:54:08 -0700
committerJohn Clements <clements@racket-lang.org>2014-07-08 16:26:43 -0700
commit9ee9c49cb4823c5bddbd9ec1ece6dfafa9e833ea (patch)
tree74a30492aa2aadaf28eb0d591d22fb89dd62ae9f /src/librustc/plugin
parent92c2ff6d697fe7be2d4e3979b4dec9f86b969b69 (diff)
downloadrust-9ee9c49cb4823c5bddbd9ec1ece6dfafa9e833ea.tar.gz
rust-9ee9c49cb4823c5bddbd9ec1ece6dfafa9e833ea.zip
introducing let-syntax
The let-syntax expander is different in that it doesn't apply
a mark to its token trees before expansion. This is used
for macro_rules, and it's because macro_rules is essentially
MTWT's let-syntax. You don't want to mark before expand sees
let-syntax, because there's no "after" syntax to mark again.

In some sense, the cleaner approach might be to introduce a new
AST node that macro_rules expands into; this would make it clearer
that the expansion of a macro is distinct from the addition of a
new macro binding.

This should work for now, though...
Diffstat (limited to 'src/librustc/plugin')
-rw-r--r--src/librustc/plugin/registry.rs4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/librustc/plugin/registry.rs b/src/librustc/plugin/registry.rs
index 587bedd502e..2581ba51c2e 100644
--- a/src/librustc/plugin/registry.rs
+++ b/src/librustc/plugin/registry.rs
@@ -13,7 +13,7 @@
 use lint::LintPassObject;
 
 use syntax::ext::base::{SyntaxExtension, NamedSyntaxExtension, NormalTT};
-use syntax::ext::base::{IdentTT, ItemDecorator, ItemModifier, BasicMacroExpander};
+use syntax::ext::base::{IdentTT, LetSyntaxTT, ItemDecorator, ItemModifier, BasicMacroExpander};
 use syntax::ext::base::{MacroExpanderFn};
 use syntax::codemap::Span;
 use syntax::parse::token;
@@ -57,6 +57,8 @@ impl Registry {
             IdentTT(ext, _) => IdentTT(ext, Some(self.krate_span)),
             ItemDecorator(ext) => ItemDecorator(ext),
             ItemModifier(ext) => ItemModifier(ext),
+            // there's probably a nicer way to signal this:
+            LetSyntaxTT(_, _) => fail!("can't register a new LetSyntax!"),
         }));
     }