v.transformer: fix string always escaped by transformer (#12603)
parent
6d6a23a1c9
commit
fe37da31a8
|
@ -1,3 +1,39 @@
|
||||||
|
const ca = r'x\n'
|
||||||
|
|
||||||
|
const cb = 'x\n'
|
||||||
|
|
||||||
|
const cc = ca + cb
|
||||||
|
|
||||||
|
const cd = cc + cc
|
||||||
|
|
||||||
|
const ce = cd + cd
|
||||||
|
|
||||||
fn test_raw_string_backslash() {
|
fn test_raw_string_backslash() {
|
||||||
assert r'\' == r'\'
|
assert r'\' == r'\'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn test_raw_string_not_escaped_by_transformer() {
|
||||||
|
assert r'a\nb' + r'a\nb' == r'a\nba\nb'
|
||||||
|
assert 'a\nb' + r'a\nb' == 'a\nba\\nb'
|
||||||
|
}
|
||||||
|
|
||||||
|
// this test will cause test failure (see #12604)
|
||||||
|
// fn test_many_pluses() {
|
||||||
|
// a := r'x\n'
|
||||||
|
// assert a == ca
|
||||||
|
// b := 'x\n'
|
||||||
|
// assert b == cb
|
||||||
|
// c := a + b
|
||||||
|
// assert c == cc // this fails
|
||||||
|
// d := c + c
|
||||||
|
// assert d == cd
|
||||||
|
// e := d + d
|
||||||
|
// assert e == ce
|
||||||
|
// println(e)
|
||||||
|
// result := r'x\nx
|
||||||
|
// x\nx
|
||||||
|
// x\nx
|
||||||
|
// x\nx
|
||||||
|
// '
|
||||||
|
// assert e == result
|
||||||
|
// }
|
||||||
|
|
|
@ -2,6 +2,7 @@ module transformer
|
||||||
|
|
||||||
import v.pref
|
import v.pref
|
||||||
import v.ast
|
import v.ast
|
||||||
|
import v.util
|
||||||
|
|
||||||
pub struct Transformer {
|
pub struct Transformer {
|
||||||
pref &pref.Preferences
|
pref &pref.Preferences
|
||||||
|
@ -379,10 +380,10 @@ pub fn (t Transformer) infix_expr(original ast.InfixExpr) ast.Expr {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.plus {
|
.plus {
|
||||||
return ast.StringLiteral{
|
return if t.pref.backend == .c { ast.Expr(ast.StringLiteral{
|
||||||
val: left_node.val + right_node.val
|
val: util.smart_quote(left_node.val, left_node.is_raw) + util.smart_quote(right_node.val, right_node.is_raw)
|
||||||
pos: pos
|
pos: pos
|
||||||
}
|
}) } else { ast.Expr(node) }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return node
|
return node
|
||||||
|
|
Loading…
Reference in New Issue