scanner.v: refactoring

This commit is contained in:
d2verb 2019-07-24 07:06:48 +09:00 committed by Alexander Medvednikov
parent 8462e99bc5
commit 88758082d2
5 changed files with 176 additions and 153 deletions

View file

@ -823,7 +823,7 @@ fn (p mut Parser) get_type() string {
if p.tok == .lsbr {
p.check(.lsbr)
// [10]int
if p.tok == .integer {
if p.tok == .number {
typ = '[$p.lit]'
p.next()
}
@ -834,9 +834,9 @@ fn (p mut Parser) get_type() string {
// [10][3]int
if p.tok == .lsbr {
p.next()
if p.tok == .integer {
if p.tok == .number {
typ += '[$p.lit]'
p.check(.integer)
p.check(.number)
}
else {
is_arr2 = true
@ -2095,7 +2095,7 @@ fn (p mut Parser) term() string {
p.next()
p.gen(tok.str())// + ' /*op2*/ ')
p.fgen(' ' + tok.str() + ' ')
if is_div && p.tok == .integer && p.lit == '0' {
if is_div && p.tok == .number && p.lit == '0' {
p.error('division by zero')
}
if is_mod && (is_float_type(typ) || !is_number_type(typ)) {
@ -2129,7 +2129,7 @@ fn (p mut Parser) factor() string {
mut typ := ''
tok := p.tok
switch tok {
case .integer:
case .number:
typ = 'int'
// Check if float (`1.0`, `1e+3`) but not if is hexa
if (p.lit.contains('.') || (p.lit.contains('e') || p.lit.contains('E'))) &&
@ -2452,7 +2452,7 @@ fn (p mut Parser) map_init() string {
fn (p mut Parser) array_init() string {
p.is_alloc = true
p.check(.lsbr)
is_integer := p.tok == .integer
is_integer := p.tok == .number
lit := p.lit
mut typ := ''
new_arr_ph := p.cgen.add_placeholder()
@ -3334,7 +3334,7 @@ fn (p mut Parser) return_st() {
}
else {
// Don't allow `return val` in functions that don't return anything
if false && p.tok == .name || p.tok == .integer {
if false && p.tok == .name || p.tok == .number {
p.error('function `$p.cur_fn.name` does not return a value')
}
@ -3529,3 +3529,16 @@ fn (p mut Parser) fspace() {
fn (p mut Parser) fgenln(s string) {
p.scanner.fgenln(s)
}
fn (p mut Parser) peek() Token {
for {
tok := p.scanner.peek()
if tok != .nl {
return tok
}
}
}
fn (p mut Parser) create_type_string(T Type, name string) {
p.scanner.create_type_string(T, name)
}