This commit is contained in:
nub31
2026-03-16 18:10:03 +01:00
parent bdeb2c4d73
commit bc65c3f4fd
7 changed files with 55 additions and 23 deletions

View File

@@ -22,6 +22,19 @@ public class Generator
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
static inline void *nub_alloc(size_t size)
{
void *mem = malloc(size);
if (mem == NULL)
{
puts("Out of memory");
exit(1);
}
return mem;
}
typedef struct
{
@@ -70,8 +83,8 @@ public class Generator
{
size_t new_length = left->length + right->length;
string_ptr result = (string_ptr)malloc(sizeof(string));
result->data = (char*)malloc(new_length + 1);
string_ptr result = (string_ptr)nub_alloc(sizeof(string));
result->data = (char*)nub_alloc(new_length + 1);
memcpy(result->data, left->data, left->length);
memcpy(result->data + left->length, right->data, right->length);
@@ -88,8 +101,8 @@ public class Generator
{
size_t len = strlen(cstr);
string_ptr result = (string_ptr)malloc(sizeof(string));
result->data = (char*)malloc(len + 1);
string_ptr result = (string_ptr)nub_alloc(sizeof(string));
result->data = (char*)nub_alloc(len + 1);
memcpy(result->data, cstr, len + 1);
@@ -105,13 +118,9 @@ public class Generator
{ \
if ((xs)->count >= (xs)->capacity) \
{ \
if ((xs)->capacity == 0) \
(xs)->capacity = 256; \
else \
(xs)->capacity *= 2; \
(xs)->capacity *= 2; \
(xs)->items = realloc((xs)->items, (xs)->capacity * sizeof(*(xs)->items)); \
} \
\
(xs)->items[(xs)->count++] = (x); \
} while (0)
@@ -405,6 +414,7 @@ public class Generator
}
writer.WriteLine("}");
writer.WriteLine();
writer.WriteLine("free(array->items);");
writer.WriteLine("free(array);");
}
writer.WriteLine("}");
@@ -416,11 +426,11 @@ public class Generator
writer.WriteLine("{");
using (writer.Indent())
{
writer.WriteLine($"{name} array = ({name})malloc(sizeof({backingName}));");
writer.WriteLine($"{name} array = ({name})nub_alloc(sizeof({backingName}));");
writer.WriteLine("array->ref = 1;");
writer.WriteLine("array->count = 0;");
writer.WriteLine("array->capacity = 0;");
writer.WriteLine("array->items = NULL;");
writer.WriteLine("array->capacity = 10;");
writer.WriteLine($"array->items = ({TypeName(arrayType.ElementType)}*)nub_alloc(sizeof({TypeName(arrayType.ElementType)}) * array->capacity);");
writer.WriteLine("return array;");
}
writer.WriteLine("}");
@@ -856,6 +866,7 @@ public class Generator
NubTypeUInt t => $"uint{t.Width}_t",
NubTypePointer => Tmp(),
NubTypeString => "string_ptr",
NubTypeChar => "char",
NubTypeFunc => Tmp(),
NubTypeArray => Tmp(),
_ => throw new NotImplementedException(),