More use of Token instead of TokenKind
This commit is contained in:
parent
22f2750853
commit
846eeae04c
@ -73,8 +73,8 @@ impl TokenHandler {
|
|||||||
fn peek_token(&mut self) -> Token {
|
fn peek_token(&mut self) -> Token {
|
||||||
self.tokens.peek().map(|t: &Token| { t.clone()}).unwrap_or(Token { kind: TokenKind::EOF, offset: self.end_of_file})
|
self.tokens.peek().map(|t: &Token| { t.clone()}).unwrap_or(Token { kind: TokenKind::EOF, offset: self.end_of_file})
|
||||||
}
|
}
|
||||||
fn next(&mut self) -> TokenKind {
|
fn next(&mut self) -> Token {
|
||||||
self.tokens.next().map(|ref t| { t.kind.clone() }).unwrap_or(TokenKind::EOF)
|
self.tokens.next().unwrap_or(Token { kind: TokenKind::EOF, offset: self.end_of_file})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ impl Parser {
|
|||||||
fn peek(&mut self) -> TokenKind {
|
fn peek(&mut self) -> TokenKind {
|
||||||
self.token_handler.peek()
|
self.token_handler.peek()
|
||||||
}
|
}
|
||||||
fn next(&mut self) -> TokenKind {
|
fn next(&mut self) -> Token {
|
||||||
self.token_handler.next()
|
self.token_handler.next()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -572,7 +572,8 @@ impl Parser {
|
|||||||
if precedence >= new_precedence {
|
if precedence >= new_precedence {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
let operation = match BinOp::from_sigil_token(&self.next()) {
|
let next_tok = self.next();
|
||||||
|
let operation = match BinOp::from_sigil_token(&next_tok.kind) {
|
||||||
Some(sigil) => sigil,
|
Some(sigil) => sigil,
|
||||||
None => unreachable!()
|
None => unreachable!()
|
||||||
};
|
};
|
||||||
@ -587,7 +588,7 @@ impl Parser {
|
|||||||
fn prefix_expr(&mut self) -> ParseResult<Expression> {
|
fn prefix_expr(&mut self) -> ParseResult<Expression> {
|
||||||
match self.peek() {
|
match self.peek() {
|
||||||
Operator(ref op) if PrefixOp::is_prefix(&*op) => {
|
Operator(ref op) if PrefixOp::is_prefix(&*op) => {
|
||||||
let sigil = match self.next() {
|
let sigil = match self.next().kind {
|
||||||
Operator(op) => op,
|
Operator(op) => op,
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
@ -826,7 +827,7 @@ impl Parser {
|
|||||||
Guard::Pat(pat)
|
Guard::Pat(pat)
|
||||||
},
|
},
|
||||||
ref tok if BinOp::from_sigil_token(tok).is_some() => {
|
ref tok if BinOp::from_sigil_token(tok).is_some() => {
|
||||||
let op = BinOp::from_sigil_token(&self.next()).unwrap();
|
let op = BinOp::from_sigil_token(&self.next().kind).unwrap();
|
||||||
let precedence = op.get_precedence();
|
let precedence = op.get_precedence();
|
||||||
let Expression(expr, _) = self.precedence_expr(precedence)?;
|
let Expression(expr, _) = self.precedence_expr(precedence)?;
|
||||||
Guard::HalfExpr(HalfExpr { op: Some(op), expr })
|
Guard::HalfExpr(HalfExpr { op: Some(op), expr })
|
||||||
@ -1001,9 +1002,10 @@ impl Parser {
|
|||||||
|
|
||||||
#[recursive_descent_method]
|
#[recursive_descent_method]
|
||||||
fn identifier(&mut self) -> ParseResult<Rc<String>> {
|
fn identifier(&mut self) -> ParseResult<Rc<String>> {
|
||||||
match self.next() {
|
let tok = self.next();
|
||||||
|
match tok.get_kind() {
|
||||||
Identifier(s) => Ok(s),
|
Identifier(s) => Ok(s),
|
||||||
p => ParseError::new(&format!("Expected an identifier, got {:?}", p)),
|
p => ParseError::new_with_token(&format!("Expected an identifier, got {:?}", p), tok),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1041,7 +1043,8 @@ impl Parser {
|
|||||||
#[recursive_descent_method]
|
#[recursive_descent_method]
|
||||||
fn int_literal(&mut self) -> ParseResult<Expression> {
|
fn int_literal(&mut self) -> ParseResult<Expression> {
|
||||||
use self::ExpressionType::*;
|
use self::ExpressionType::*;
|
||||||
match self.next() {
|
let tok = self.next();
|
||||||
|
match tok.get_kind() {
|
||||||
BinNumberSigil => {
|
BinNumberSigil => {
|
||||||
let digits = self.digits()?;
|
let digits = self.digits()?;
|
||||||
let n = parse_binary(digits)?;
|
let n = parse_binary(digits)?;
|
||||||
@ -1052,7 +1055,7 @@ impl Parser {
|
|||||||
let n = parse_hex(digits)?;
|
let n = parse_hex(digits)?;
|
||||||
Ok(Expression(NatLiteral(n), None))
|
Ok(Expression(NatLiteral(n), None))
|
||||||
},
|
},
|
||||||
_ => return ParseError::new("Expected '0x' or '0b'"),
|
_ => return ParseError::new_with_token("Expected '0x' or '0b'", tok),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user