1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

scanner: uniform bool type variable names

This commit is contained in:
yuyi 2020-04-02 18:23:18 +08:00 committed by GitHub
parent 12b8dc2613
commit 86ea886ad7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -20,29 +20,29 @@ const (
pub struct Scanner {
mut:
file_path string
text string
pos int
line_nr int
last_nl_pos int // for calculating column
inside_string bool
inter_start bool // for hacky string interpolation TODO simplify
inter_end bool
debug bool
line_comment string
file_path string
text string
pos int
line_nr int
last_nl_pos int // for calculating column
is_inside_string bool
is_inter_start bool // for hacky string interpolation TODO simplify
is_inter_end bool
is_debug bool
line_comment string
// prev_tok TokenKind
started bool
fn_name string // needed for @FN
print_line_on_error bool
print_colored_error bool
print_rel_paths_on_error bool
quote byte // which quote is used to denote current string: ' or "
line_ends []int // the positions of source lines ends (i.e. \n signs)
nr_lines int // total number of lines in the source file that were scanned
is_vh bool // Keep newlines
is_fmt bool // Used only for skipping ${} in strings, since we need literal
is_started bool
fn_name string // needed for @FN
is_print_line_on_error bool
is_print_colored_error bool
is_print_rel_paths_on_error bool
quote byte // which quote is used to denote current string: ' or "
line_ends []int // the positions of source lines ends (i.e. \n signs)
nr_lines int // total number of lines in the source file that were scanned
is_vh bool // Keep newlines
is_fmt bool // Used only for skipping ${} in strings, since we need literal
// string values when generating formatted code.
comments_mode CommentsMode
comments_mode CommentsMode
}
pub enum CommentsMode {
@ -78,9 +78,9 @@ pub fn new_scanner_file(file_path string, comments_mode CommentsMode) &Scanner {
pub fn new_scanner(text string, comments_mode CommentsMode) &Scanner {
return &Scanner{
text: text
print_line_on_error: true
print_colored_error: true
print_rel_paths_on_error: true
is_print_line_on_error: true
is_print_colored_error: true
is_print_rel_paths_on_error: true
is_fmt: is_fmt
comments_mode: comments_mode
}
@ -131,7 +131,7 @@ fn (s mut Scanner) ident_bin_number() string {
for s.pos < s.text.len {
c := s.text[s.pos]
if !c.is_bin_digit() && c != num_sep {
if (!c.is_digit() && !c.is_letter()) || s.inside_string {
if (!c.is_digit() && !c.is_letter()) || s.is_inside_string {
break
}
else if !has_wrong_digit {
@ -160,7 +160,7 @@ fn (s mut Scanner) ident_hex_number() string {
for s.pos < s.text.len {
c := s.text[s.pos]
if !c.is_hex_digit() && c != num_sep {
if !c.is_letter() || s.inside_string {
if !c.is_letter() || s.is_inside_string {
break
}
else if !has_wrong_digit {
@ -189,7 +189,7 @@ fn (s mut Scanner) ident_oct_number() string {
for s.pos < s.text.len {
c := s.text[s.pos]
if !c.is_oct_digit() && c != num_sep {
if (!c.is_digit() && !c.is_letter()) || s.inside_string {
if (!c.is_digit() && !c.is_letter()) || s.is_inside_string {
break
}
else if !has_wrong_digit {
@ -219,7 +219,7 @@ fn (s mut Scanner) ident_dec_number() string {
for s.pos < s.text.len {
c := s.text[s.pos]
if !c.is_digit() && c != num_sep {
if !c.is_letter() || c in [`e`, `E`] || s.inside_string {
if !c.is_letter() || c in [`e`, `E`] || s.is_inside_string {
break
}
else if !has_wrong_digit {
@ -244,7 +244,7 @@ fn (s mut Scanner) ident_dec_number() string {
for s.pos < s.text.len {
c := s.text[s.pos]
if !c.is_digit() {
if !c.is_letter() || c in [`e`, `E`] || s.inside_string {
if !c.is_letter() || c in [`e`, `E`] || s.is_inside_string {
if c == `.` && s.pos + 1 < s.text.len && !s.text[s.pos + 1].is_digit() && s.text[s.pos + 1] != `)` {
call_method = true
}
@ -275,7 +275,7 @@ fn (s mut Scanner) ident_dec_number() string {
for s.pos < s.text.len {
c := s.text[s.pos]
if !c.is_digit() {
if !c.is_letter() || s.inside_string {
if !c.is_letter() || s.is_inside_string {
if c == `.` && s.pos + 1 < s.text.len && !s.text[s.pos + 1].is_digit() && s.text[s.pos + 1] != `)` {
call_method = true
}
@ -353,23 +353,23 @@ pub fn (s mut Scanner) scan() token.Token {
// s.fgenln('// LC "$s.line_comment"')
// s.line_comment = ''
// }
if s.started {
if s.is_started {
s.pos++
}
s.started = true
s.is_started = true
if s.pos >= s.text.len {
return s.end_of_file()
}
if !s.inside_string {
if !s.is_inside_string {
s.skip_whitespace()
}
// End of $var, start next string
if s.inter_end {
if s.is_inter_end {
if s.text[s.pos] == s.quote {
s.inter_end = false
s.is_inter_end = false
return s.new_token(.string, '')
}
s.inter_end = false
s.is_inter_end = false
return s.new_token(.string, s.ident_string())
}
s.skip_whitespace()
@ -394,18 +394,18 @@ pub fn (s mut Scanner) scan() token.Token {
}
// 'asdf $b' => "b" is the last name in the string, dont start parsing string
// at the next ', skip it
if s.inside_string {
if s.is_inside_string {
if next_char == s.quote {
s.inter_end = true
s.inter_start = false
s.inside_string = false
s.is_inter_end = true
s.is_inter_start = false
s.is_inside_string = false
}
}
// end of `$expr`
// allow `'$a.b'` and `'$a.c()'`
if s.inter_start && next_char != `.` && next_char != `(` {
s.inter_end = true
s.inter_start = false
if s.is_inter_start && next_char != `.` && next_char != `(` {
s.is_inter_end = true
s.is_inter_start = false
}
if s.pos == 0 && next_char == ` ` {
// If a single letter name at the start of the file, increment
@ -416,7 +416,7 @@ pub fn (s mut Scanner) scan() token.Token {
}
// `123`, `.123`
else if c.is_digit() || (c == `.` && nextc.is_digit()) {
if !s.inside_string {
if !s.is_inside_string {
// In C ints with `0` prefix are octal (in V they're decimal), so discarding heading zeros is needed.
mut start_pos := s.pos
for start_pos < s.text.len && s.text[start_pos] == `0` {
@ -433,12 +433,12 @@ pub fn (s mut Scanner) scan() token.Token {
return s.new_token(.number, num)
}
// Handle `'$fn()'`
if c == `)` && s.inter_start {
s.inter_end = true
s.inter_start = false
if c == `)` && s.is_inter_start {
s.is_inter_end = true
s.is_inter_start = false
next_char := if s.pos + 1 < s.text.len { s.text[s.pos + 1] } else { `\0` }
if next_char == s.quote {
s.inside_string = false
s.is_inside_string = false
}
return s.new_token(.rpar, '')
}
@ -511,13 +511,13 @@ pub fn (s mut Scanner) scan() token.Token {
}
`{` {
// Skip { in `${` in strings
if s.inside_string {
if s.is_inside_string {
return s.scan()
}
return s.new_token(.lcbr, '')
}
`$` {
if s.inside_string {
if s.is_inside_string {
return s.new_token(.str_dollar, '')
}
else {
@ -527,10 +527,10 @@ pub fn (s mut Scanner) scan() token.Token {
`}` {
// s = `hello $name !`
// s = `hello ${name} !`
if s.inside_string {
if s.is_inside_string {
s.pos++
if s.text[s.pos] == s.quote {
s.inside_string = false
s.is_inside_string = false
return s.new_token(.string, '')
}
return s.new_token(.string, s.ident_string())
@ -815,7 +815,7 @@ fn (s mut Scanner) ident_string() string {
q := s.text[s.pos]
is_quote := q == single_quote || q == double_quote
is_raw := is_quote && s.text[s.pos - 1] == `r`
if is_quote && !s.inside_string {
if is_quote && !s.is_inside_string {
s.quote = q
}
// if s.file_path.contains('string_test') {
@ -823,7 +823,7 @@ fn (s mut Scanner) ident_string() string {
// println('linenr=$s.line_nr quote= $qquote ${qquote.str()}')
// }
mut start := s.pos
s.inside_string = false
s.is_inside_string = false
slash := `\\`
for {
s.pos++
@ -853,15 +853,15 @@ fn (s mut Scanner) ident_string() string {
}
// ${var} (ignore in vfmt mode)
if c == `{` && prevc == `$` && !is_raw && !s.is_fmt && s.count_symbol_before(s.pos - 2, slash) % 2 == 0 {
s.inside_string = true
s.is_inside_string = true
// so that s.pos points to $ at the next step
s.pos -= 2
break
}
// $var
if is_name_char(c) && prevc == `$` && !s.is_fmt && !is_raw && s.count_symbol_before(s.pos - 2, slash) % 2 == 0 {
s.inside_string = true
s.inter_start = true
s.is_inside_string = true
s.is_inter_start = true
s.pos -= 2
break
}
@ -871,7 +871,7 @@ fn (s mut Scanner) ident_string() string {
start++
}
mut end := s.pos
if s.inside_string {
if s.is_inside_string {
end++
}
if start > s.pos {}
@ -935,8 +935,8 @@ fn (s &Scanner) expect(want string, start_pos int) bool {
fn (s mut Scanner) debug_tokens() {
s.pos = 0
s.started = false
s.debug = true
s.is_started = false
s.is_debug = true
fname := s.file_path.all_after(os.path_separator)
println('\n===DEBUG TOKENS $fname===')
for {