summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/lex.cpp2
-rw-r--r--src/parse/pattern.cpp6
-rw-r--r--src/parse/root.cpp1
3 files changed, 7 insertions, 2 deletions
diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp
index cb97022d..2338adcd 100644
--- a/src/parse/lex.cpp
+++ b/src/parse/lex.cpp
@@ -989,7 +989,7 @@ void TokenStream::putback(Token tok)
{
if( m_cache_valid )
{
- DEBUG("" << getPosition());
+ DEBUG("" << getPosition() << " - Double putback: " << tok << " but " << m_cache);
throw ParseError::BugCheck("Double putback");
}
else
diff --git a/src/parse/pattern.cpp b/src/parse/pattern.cpp
index 02286ceb..32d1b017 100644
--- a/src/parse/pattern.cpp
+++ b/src/parse/pattern.cpp
@@ -108,6 +108,10 @@ AST::Pattern Parse_Pattern(TokenStream& lex, bool is_refutable)
return Parse_PatternReal_Path(lex, path, is_refutable);
}
}
+ else
+ {
+ // Otherwise, fall through
+ }
lex.putback(tok);
AST::Pattern pat = Parse_PatternReal(lex, is_refutable);
@@ -153,6 +157,8 @@ AST::Pattern Parse_PatternReal1(TokenStream& lex, bool is_refutable)
return AST::Pattern( );
case TOK_DOUBLE_DOT:
return AST::Pattern( AST::Pattern::TagWildcard() );
+ case TOK_RWORD_BOX:
+ return AST::Pattern( AST::Pattern::TagBox(), Parse_Pattern(lex, is_refutable) );
case TOK_DOUBLE_AMP:
lex.putback(TOK_AMP);
case TOK_AMP:
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index 93b360f1..fb7249e4 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -265,7 +265,6 @@ AST::Function Parse_FunctionDef(TokenStream& lex, ::std::string abi, AST::MetaIt
else
{
// Unbound method
- lex.putback(tok); // un-eat the '&'
}
}
else if( tok.type() == TOK_RWORD_MUT )