Fix bug with _
This commit is contained in:
parent
a82f24a158
commit
74f8c16599
@ -92,6 +92,7 @@ pub fn tokenize(input: &str) -> Vec<Token> {
|
|||||||
let mut input: CharIter = input.chars().enumerate().peekable();
|
let mut input: CharIter = input.chars().enumerate().peekable();
|
||||||
|
|
||||||
while let Some((idx, c)) = input.next() {
|
while let Some((idx, c)) = input.next() {
|
||||||
|
println!("C: {}", c);
|
||||||
let cur_tok_type = match c {
|
let cur_tok_type = match c {
|
||||||
'#' => {
|
'#' => {
|
||||||
if let Some(&(_, '{')) = input.peek() {
|
if let Some(&(_, '{')) = input.peek() {
|
||||||
@ -114,7 +115,7 @@ pub fn tokenize(input: &str) -> Vec<Token> {
|
|||||||
'|' => Pipe,
|
'|' => Pipe,
|
||||||
'"' => handle_quote(&mut input),
|
'"' => handle_quote(&mut input),
|
||||||
c if is_digit(&c) => handle_digit(c, &mut input),
|
c if is_digit(&c) => handle_digit(c, &mut input),
|
||||||
c @ '_' | c if c.is_alphabetic() => handle_alphabetic(c, &mut input), //TODO I'll probably have to rewrite this if I care about types being uppercase, also type parameterization
|
c if c.is_alphabetic() || c == '_' => handle_alphabetic(c, &mut input), //TODO I'll probably have to rewrite this if I care about types being uppercase, also type parameterization
|
||||||
c => handle_operator(c, &mut input),
|
c => handle_operator(c, &mut input),
|
||||||
};
|
};
|
||||||
tokens.push(Token { token_type: cur_tok_type, offset: idx });
|
tokens.push(Token { token_type: cur_tok_type, offset: idx });
|
||||||
@ -166,6 +167,10 @@ fn handle_quote(input: &mut CharIter) -> TokenType {
|
|||||||
fn handle_alphabetic(c: char, input: &mut CharIter) -> TokenType {
|
fn handle_alphabetic(c: char, input: &mut CharIter) -> TokenType {
|
||||||
let mut buf = String::new();
|
let mut buf = String::new();
|
||||||
buf.push(c);
|
buf.push(c);
|
||||||
|
if c == '_' && input.peek().map(|&(_, c)| { !c.is_alphabetic() }).unwrap_or(true) {
|
||||||
|
return TokenType::Identifier(Rc::new(format!("_")))
|
||||||
|
}
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match input.peek().map(|&(_, c)| { c }) {
|
match input.peek().map(|&(_, c)| { c }) {
|
||||||
Some(c) if c.is_alphanumeric() => {
|
Some(c) if c.is_alphanumeric() => {
|
||||||
|
Loading…
Reference in New Issue
Block a user