diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2017-02-03 11:39:24 -0500 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2017-02-03 11:39:24 -0500 |
| commit | 71d335e5ccc5c7c37ac40debf78ad3aa096b22d3 (patch) | |
| tree | b64024a77a76bf26ed77596125c046321edfb4ff /src/ast_render.cpp | |
| parent | cd7713b1788aeeadf6c46def38d4ef4fa313fe75 (diff) | |
| download | zig-71d335e5ccc5c7c37ac40debf78ad3aa096b22d3.tar.gz zig-71d335e5ccc5c7c37ac40debf78ad3aa096b22d3.zip | |
implement packed structs
closes #183
Diffstat (limited to 'src/ast_render.cpp')
| -rw-r--r-- | src/ast_render.cpp | 17 |
1 files changed, 13 insertions, 4 deletions
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]; |
