@ -6,7 +6,7 @@ use cursor::Cursor;
pub ( crate ) mod token ;
use token ::Token ;
use crate ::error ::Syntax Error;
use crate ::error :: Error;
pub struct Lexer < ' a > {
file : String ,
@ -40,9 +40,9 @@ static KEYWORDS: [KeywordMap; 6] = [
] ;
impl Iterator for Lexer < ' _ > {
type Item = Result < Token , Syntax Error> ;
type Item = Result < Token , Error> ;
fn next ( & mut self ) -> Option < Result < Token , Syntax Error> > {
fn next ( & mut self ) -> Option < Result < Token , Error> > {
if self . offset > 0 {
let tmp = self . history [ self . history . len ( ) - self . offset ] . clone ( ) ;
self . offset - = 1 ;
@ -110,7 +110,7 @@ impl<'a> Lexer<'a> {
}
}
pub fn peek ( & mut self ) -> Option < Result < Token , Syntax Error> > {
pub fn peek ( & mut self ) -> Option < Result < Token , Error> > {
let t = self . next ( ) ? ;
self . prev ( ) ;
Some ( t )
@ -122,7 +122,7 @@ impl<'a> Lexer<'a> {
Some ( prev )
}
pub fn expect_kind ( & mut self , kind : token ::Kind ) -> Result < Token , Syntax Error> {
pub fn expect_kind ( & mut self , kind : token ::Kind ) -> Result < Token , Error> {
match self . next ( ) {
Some ( Ok ( t ) ) = > if t . kind = = kind {
Ok ( t )
@ -134,14 +134,14 @@ impl<'a> Lexer<'a> {
}
}
pub fn require_next ( & mut self ) -> Result < Token , Syntax Error> {
pub fn require_next ( & mut self ) -> Result < Token , Error> {
match self . next ( ) {
Some ( t ) = > t ,
None = > self . syntax_error ( String ::from ( "Unexpected EOF" ) ) ,
}
}
fn read_keyword_or_ident ( & mut self ) -> Result < Token , Syntax Error> {
fn read_keyword_or_ident ( & mut self ) -> Result < Token , Error> {
let current = self . cursor . current ( ) . unwrap ( ) ;
for kw in & KEYWORDS {
// keywords are always at least 2 characters long as per the language spec
@ -154,7 +154,7 @@ impl<'a> Lexer<'a> {
self . read_ident ( )
}
fn read_ident ( & mut self ) -> Result < Token , Syntax Error> {
fn read_ident ( & mut self ) -> Result < Token , Error> {
for c in & mut self . cursor {
if ! c . is_ascii_alphanumeric ( ) & & c ! = '_' {
self . cursor . prev ( ) ;
@ -165,13 +165,13 @@ impl<'a> Lexer<'a> {
self . token_ok ( token ::Kind ::Ident )
}
fn read_comment ( & mut self ) -> Result < Token , Syntax Error> {
fn read_comment ( & mut self ) -> Result < Token , Error> {
assert_eq! ( self . cursor . current ( ) , Some ( '#' ) ) ;
self . cursor . seek_while ( | c | c ! = '\n' ) ;
self . token_ok ( token ::Kind ::Comment )
}
fn read_string_literal ( & mut self ) -> Result < Token , Syntax Error> {
fn read_string_literal ( & mut self ) -> Result < Token , Error> {
assert_eq! ( self . cursor . current ( ) , Some ( '"' ) ) ;
self . cursor . chop ( ) ;
let mut raw = String ::new ( ) ;
@ -188,7 +188,7 @@ impl<'a> Lexer<'a> {
self . token_ok ( token ::Kind ::StringLiteral )
}
fn read_prefix_int_literal ( & mut self ) -> Result < Token , Syntax Error> {
fn read_prefix_int_literal ( & mut self ) -> Result < Token , Error> {
assert_eq! ( self . cursor . next ( ) , Some ( '0' ) ) ;
match self . cursor . next ( ) {
Some ( 'x' ) = > self . read_int_literal ( 16 ) ,
@ -199,7 +199,7 @@ impl<'a> Lexer<'a> {
}
}
fn read_int_literal ( & mut self , base : usize ) -> Result < Token , Syntax Error> {
fn read_int_literal ( & mut self , base : usize ) -> Result < Token , Error> {
assert! ( base > = 2 & & base < = 16 ) ;
for c in & mut self . cursor {
@ -246,8 +246,8 @@ impl<'a> Lexer<'a> {
true
}
fn syntax_error < T > ( & mut self , msg : String ) -> Result < T , Syntax Error> {
Err ( SyntaxError::new (
fn syntax_error < T > ( & mut self , msg : String ) -> Result < T , Error> {
Err ( Error::syntax_error (
self . file . clone ( ) ,
self . cursor . line ( ) ,
self . cursor . col ( ) ,