parser: add an error for an invalid string prefix (#7019)
parent
39b46e95a0
commit
e3fab7e076
|
@ -1037,8 +1037,13 @@ pub fn (mut p Parser) name_expr() ast.Expr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Raw string (`s := r'hello \n ')
|
// Raw string (`s := r'hello \n ')
|
||||||
if p.tok.lit in ['r', 'c', 'js'] && p.peek_tok.kind == .string && !p.inside_str_interp {
|
if p.peek_tok.kind == .string && !p.inside_str_interp && p.peek_tok2.kind != .colon {
|
||||||
|
if p.tok.lit in ['r', 'c', 'js'] && p.tok.kind == .name {
|
||||||
return p.string_expr()
|
return p.string_expr()
|
||||||
|
} else {
|
||||||
|
// don't allow any other string prefix except `r`, `js` and `c`
|
||||||
|
p.error('only `c`, `r`, `js` are recognized string prefixes, but you tried to use `$p.tok.lit`')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// don't allow r`byte` and c`byte`
|
// don't allow r`byte` and c`byte`
|
||||||
if p.tok.lit in ['r', 'c'] && p.peek_tok.kind == .chartoken {
|
if p.tok.lit in ['r', 'c'] && p.peek_tok.kind == .chartoken {
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
vlib/v/parser/tests/string_invalid_prefix_err.vv:2:12: error: only `c`, `r`, `js` are recognized string prefixes, but you tried to use `w`
|
||||||
|
1 | fn main() {
|
||||||
|
2 | why := w'why'
|
||||||
|
| ^
|
||||||
|
3 | println(why)
|
||||||
|
4 | }
|
|
@ -0,0 +1,4 @@
|
||||||
|
fn main() {
|
||||||
|
why := w'why'
|
||||||
|
println(why)
|
||||||
|
}
|
Loading…
Reference in New Issue