From 71d335e5ccc5c7c37ac40debf78ad3aa096b22d3 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 3 Feb 2017 11:39:24 -0500 Subject: implement packed structs closes #183 --- src/ast_render.cpp | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'src/ast_render.cpp') diff --git a/src/ast_render.cpp b/src/ast_render.cpp index 4689f723ee..1c82ef972e 100644 --- a/src/ast_render.cpp +++ b/src/ast_render.cpp @@ -104,6 +104,15 @@ static const char *defer_string(ReturnKind kind) { zig_unreachable(); } +static const char *layout_string(ContainerLayout layout) { + switch (layout) { + case ContainerLayoutAuto: return ""; + case ContainerLayoutExtern: return "extern "; + case ContainerLayoutPacked: return "packed "; + } + zig_unreachable(); +} + static const char *extern_string(bool is_extern) { return is_extern ? "extern " : ""; } @@ -970,8 +979,8 @@ static void ast_render_tld_var(AstRender *ar, Buf *name, TldVar *tld_var) { { TypeTableEntry *type_entry = var->value.data.x_type; if (type_entry->id == TypeTableEntryIdStruct) { - const char *extern_str = extern_string(type_entry->data.structure.is_extern); - fprintf(ar->f, "%sstruct {\n", extern_str); + const char *layout_str = layout_string(type_entry->data.structure.layout); + fprintf(ar->f, "%sstruct {\n", layout_str); if (type_entry->data.structure.complete) { for (size_t i = 0; i < type_entry->data.structure.src_field_count; i += 1) { TypeStructField *field = &type_entry->data.structure.fields[i]; @@ -982,8 +991,8 @@ static void ast_render_tld_var(AstRender *ar, Buf *name, TldVar *tld_var) { } fprintf(ar->f, "}"); } else if (type_entry->id == TypeTableEntryIdEnum) { - const char *extern_str = extern_string(type_entry->data.enumeration.is_extern); - fprintf(ar->f, "%senum {\n", extern_str); + const char *layout_str = layout_string(type_entry->data.enumeration.layout); + fprintf(ar->f, "%senum {\n", layout_str); if (type_entry->data.enumeration.complete) { for (size_t i = 0; i < type_entry->data.enumeration.src_field_count; i += 1) { TypeEnumField *field = &type_entry->data.enumeration.fields[i]; -- cgit v1.2.3