diff --git a/compiler/Generator.cs b/compiler/Generator.cs index b3eab4f..b36bbbe 100644 --- a/compiler/Generator.cs +++ b/compiler/Generator.cs @@ -99,6 +99,7 @@ public class Generator #include #include + #define FLAG_STRING_LITERAL 1 """); while (referencedTypes.Count != 0) @@ -131,6 +132,7 @@ public class Generator writer.WriteLine("char *data;"); writer.WriteLine("size_t length;"); writer.WriteLine("uint32_t ref;"); + writer.WriteLine("uint32_t flags;"); } writer.WriteLine("};"); writer.WriteLine(); @@ -462,6 +464,7 @@ public class Generator writer.WriteLine($"{name}->data = \"{expression.Value.Value}\";"); writer.WriteLine($"{name}->length = {expression.Value.Value.Length};"); writer.WriteLine($"{name}->ref = 1;"); + writer.WriteLine($"{name}->flags = FLAG_STRING_LITERAL;"); return name; } @@ -601,6 +604,13 @@ public class Generator writer.WriteLine("{"); using (writer.Indent()) { + writer.WriteLine($"if (({value}->flags & FLAG_STRING_LITERAL) == 0)"); + writer.WriteLine("{"); + using (writer.Indent()) + { + writer.WriteLine($"free({value}->data);"); + } + writer.WriteLine("}"); writer.WriteLine($"free({value});"); } writer.WriteLine("}");