Skip to content

Commit 18be6ed

Browse files
committed
fix: escape interpolated identifiers in generated java statements
1 parent 1499166 commit 18be6ed

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

  • amber-pipeline/src/main/kotlin/dev/amber/pipeline/codegen

amber-pipeline/src/main/kotlin/dev/amber/pipeline/codegen/JavaEmitter.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -816,18 +816,18 @@ class JavaEmitter {
816816
fact?.descriptor == "J" -> "${value}L"
817817
else -> "$value"
818818
}
819-
builder.addStatement("$def = $rendered")
819+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(rendered)}")
820820
}
821821

822822
"CONST_STRING" -> {
823823
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
824-
builder.addStatement("$def = ${javaStringLiteral(stmt.imm?.stringValue ?: "")}")
824+
builder.addStatement("${escapeJavaPoet(def)} = ${javaStringLiteral(stmt.imm?.stringValue ?: "")}")
825825
}
826826

827827
"CONST_CLASS" -> {
828828
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
829829
val typeValue = annotated.emittedDescriptor(stmt.imm?.typeValue ?: return)
830-
builder.addStatement("$def = \$T.class", descriptorToTypeName(typeValue))
830+
builder.addStatement("${escapeJavaPoet(def)} = \$T.class", descriptorToTypeName(typeValue))
831831
}
832832

833833
"MOVE" -> {
@@ -846,14 +846,14 @@ class JavaEmitter {
846846
"NEW_INSTANCE" -> {
847847
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
848848
val typeValue = annotated.emittedDescriptor(stmt.imm?.typeValue ?: return)
849-
builder.addStatement("$def = new \$T()", descriptorToTypeName(typeValue))
849+
builder.addStatement("${escapeJavaPoet(def)} = new \$T()", descriptorToTypeName(typeValue))
850850
}
851851

852852
"NEW_ARRAY" -> {
853853
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
854854
val typeValue = annotated.emittedDescriptor(stmt.imm?.typeValue ?: return)
855855
val sizeArg = renderName(stmt.args.firstOrNull() ?: "0", paramNameMap)
856-
builder.addStatement("$def = ${newArrayExpression(typeValue, sizeArg, annotated.renameIndex)}")
856+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(newArrayExpression(typeValue, sizeArg, annotated.renameIndex))}")
857857
}
858858

859859
"INVOKE" -> {
@@ -963,7 +963,7 @@ class JavaEmitter {
963963
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
964964
val src = renderName(stmt.args.firstOrNull() ?: return, paramNameMap)
965965
val typeValue = annotated.emittedDescriptor(stmt.imm?.typeValue ?: return)
966-
builder.addStatement("$def = (\$T) $src", descriptorToTypeName(typeValue))
966+
builder.addStatement("${escapeJavaPoet(def)} = (\$T) ${escapeJavaPoet(src)}", descriptorToTypeName(typeValue))
967967
}
968968

969969
"ARRAY_GET" -> {
@@ -974,7 +974,7 @@ class JavaEmitter {
974974
val index = renderName(stmt.args.getOrNull(1) ?: "0", paramNameMap)
975975
val componentDescriptor = annotated.factFor(rawArray)?.descriptor?.let(::arrayComponentDescriptor)
976976
val defDescriptor = annotated.factFor(rawDef)?.descriptor
977-
builder.addStatement("$def = ${escapeJavaPoet(coerceValue("$array[$index]", componentDescriptor, defDescriptor))}")
977+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(coerceValue("$array[$index]", componentDescriptor, defDescriptor))}")
978978
}
979979

980980
"ARRAY_PUT" -> {
@@ -1002,30 +1002,30 @@ class JavaEmitter {
10021002
val rhs = stmt.args.getOrNull(1)?.let { arg -> renderName(arg, paramNameMap) }
10031003
val op = opToJavaOperator(stmt.op)
10041004
if (rhs != null) {
1005-
builder.addStatement("$def = $lhs $op $rhs")
1005+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(lhs)} $op ${escapeJavaPoet(rhs)}")
10061006
} else {
1007-
builder.addStatement("$def = $lhs $op ${stmt.imm?.value ?: 0L}")
1007+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(lhs)} $op ${stmt.imm?.value ?: 0L}")
10081008
}
10091009
}
10101010

10111011
"CONVERT" -> {
10121012
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
10131013
val src = renderName(stmt.args.firstOrNull() ?: return, paramNameMap)
10141014
val toKind = stmt.imm?.kind?.substringAfter("_TO_") ?: return
1015-
builder.addStatement("$def = (${kindToJavaCast(toKind)}) $src")
1015+
builder.addStatement("${escapeJavaPoet(def)} = (${kindToJavaCast(toKind)}) ${escapeJavaPoet(src)}")
10161016
}
10171017

10181018
"INSTANCE_OF" -> {
10191019
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
10201020
val obj = renderName(stmt.args.firstOrNull() ?: return, paramNameMap)
10211021
val typeValue = annotated.emittedDescriptor(stmt.imm?.typeValue ?: return)
1022-
builder.addStatement("$def = $obj instanceof \$T", descriptorToTypeName(typeValue))
1022+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(obj)} instanceof \$T", descriptorToTypeName(typeValue))
10231023
}
10241024

10251025
"ARRAY_LENGTH" -> {
10261026
val def = renderName(stmt.defs.firstOrNull() ?: return, paramNameMap)
10271027
val array = renderName(stmt.args.firstOrNull() ?: return, paramNameMap)
1028-
builder.addStatement("$def = $array.length")
1028+
builder.addStatement("${escapeJavaPoet(def)} = ${escapeJavaPoet(array)}.length")
10291029
}
10301030

10311031
"NOP", "ARRAY_PAYLOAD", "SWITCH_PAYLOAD", "FILL_ARRAY_DATA", "FILLED_NEW_ARRAY", "CMP", "MOVE_EXCEPTION" -> {
@@ -1065,7 +1065,7 @@ class JavaEmitter {
10651065

10661066
"THROW" -> {
10671067
val src = term.args?.firstOrNull()?.let { renderName(it, paramNameMap) } ?: "new RuntimeException()"
1068-
builder.addStatement("throw $src")
1068+
builder.addStatement("throw ${escapeJavaPoet(src)}")
10691069
}
10701070

10711071
"GOTO", "FALLTHROUGH" -> Unit

0 commit comments

Comments
 (0)