Skip to content

Commit b78b489

Browse files
committed
Nim: do not wrap string concatenation and casts in parenthesis when not needed
1 parent 6476821 commit b78b489

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

shared/src/main/scala/io/kaitai/struct/translators/NimTranslator.scala

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,17 @@ class NimTranslator(provider: TypeProvider, importList: ImportList) extends Base
5151
override def arraySubscript(container: expr, idx: expr): String =
5252
s"${translate(container, METHOD_PRECEDENCE)}[${translate(idx)}]"
5353

54-
override def strConcat(left: expr, right: expr, extPrec: Int) = "($" + s"${translate(left, METHOD_PRECEDENCE)} & " + "$" + s"${translate(right, METHOD_PRECEDENCE)})"
54+
override def strConcat(left: expr, right: expr, extPrec: Int): String = {
55+
val thisPrec = OPERATOR_PRECEDENCE(Ast.operator.Add)
56+
// $ is a special method which converts everything to a string, so use METHOD_PRECEDENCE
57+
val leftStr = "$" + translate(left, METHOD_PRECEDENCE)
58+
val rightStr = "$" + translate(right, METHOD_PRECEDENCE)
59+
if (thisPrec <= extPrec) {
60+
s"($leftStr & $rightStr)"
61+
} else {
62+
s"$leftStr & $rightStr"
63+
}
64+
}
5565

5666
// Members declared in io.kaitai.struct.translators.CommonMethods
5767

@@ -86,7 +96,7 @@ class NimTranslator(provider: TypeProvider, importList: ImportList) extends Base
8696
importList.add("sequtils")
8797
s"${translate(value, METHOD_PRECEDENCE)}.mapIt(it.${ksToNim(at.elType)})"
8898
}
89-
case _ => s"(${ksToNim(typeName)}(${translate(value)}))"
99+
case _ => s"${ksToNim(typeName)}(${translate(value)})"
90100
}
91101
override def doIntLiteral(n: BigInt): String = {
92102
if (n <= -2147483649L) { // -9223372036854775808..-2147483649

0 commit comments

Comments
 (0)