parsing: fixed compound assignment operator bug on for loops

pull/689/head
Henrixounez 2019-06-26 19:07:58 +02:00 committed by Alexander Medvednikov
parent ef737c5e61
commit c1400f725f
1 changed files with 5 additions and 4 deletions

View File

@ -128,16 +128,17 @@ fn (s mut Scanner) skip_whitespace() {
// }
}
fn (s mut Scanner) get_until_start(pos int) string {
fn (s mut Scanner) get_var_name(pos int) string {
mut pos_start = pos
for ; pos_start >= 0 && s.text[pos_start] != `\n`; pos_start-- {}
for ; pos_start < pos && (s.text[pos_start] == ` ` || s.text[pos_start] == `\n`); pos_start++ {}
for ; pos_start >= 0 && s.text[pos_start] != `\n` && s.text[pos_start] != `;`; pos_start-- {}
pos_start++
return s.text.substr(pos_start, pos)
}
// CAO stands for Compound Assignment Operators (e.g '+=' )
fn (s mut Scanner) cao_change(operator string) {
s.text = s.text.substr(0, s.pos - 2) + ' = ' + s.get_until_start(s.pos - 2) + ' ' + operator + s.text.substr(s.pos + 1, s.text.len)
s.text = s.text.substr(0, s.pos - 1) + ' = ' + s.get_var_name(s.pos - 1) + ' ' + operator + ' ' + s.text.substr(s.pos + 1, s.text.len)
}
fn (s mut Scanner) scan() ScanRes {