aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-11 10:25:37 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-11 10:25:37 +0100
commitea29df54d21ccfd8fcf93bac37f3b57bad327b13 (patch)
tree989c01134b0798105d3be69d5b8e78c626011e8f /src/main/java
parentdeaaca5a698136ca65ca49ac668c6c85037eabfd (diff)
Escape strings in serialized instructions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
index eb123e36..1acb949a 100644
--- a/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
+++ b/src/main/java/org/shedlang/compiler/stackir/InstructionSerializer.java
@@ -200,9 +200,16 @@ public class InstructionSerializer {
serializeTree(named.value, builder, indentation);
}
case TreeString string -> {
- // TODO: escaping
builder.append("\"");
- builder.append(string.value);
+ var escapedValue = string.value
+ .replace("\\", "\\\\")
+ .replace("\b", "\\b")
+ .replace("\t", "\\t")
+ .replace("\n", "\\n")
+ .replace("\f", "\\f")
+ .replace("\r", "\\r")
+ .replace("\"", "\\\"");
+ builder.append(escapedValue);
builder.append("\"");
}
}