aboutsummaryrefslogtreecommitdiff
path: root/src-self-hosted
diff options
context:
space:
mode:
authorhryx <codroid@gmail.com>2019-06-22 17:29:10 -0700
committerhryx <codroid@gmail.com>2019-06-22 17:29:10 -0700
commit6325ffc3f1e5f61caab6d554a760c1b5d061b0d4 (patch)
tree7e7e767f107b0a22d4fd95089155c67475f695e4 /src-self-hosted
parent0f545e5a2b664d340fe33fe0a8fbc44956485e18 (diff)
downloadzig-6325ffc3f1e5f61caab6d554a760c1b5d061b0d4.tar.gz
zig-6325ffc3f1e5f61caab6d554a760c1b5d061b0d4.zip
Assign undefined literal (instead of null) when no init value
Diffstat (limited to 'src-self-hosted')
-rw-r--r--src-self-hosted/translate_c.zig19
1 files changed, 15 insertions, 4 deletions
diff --git a/src-self-hosted/translate_c.zig b/src-self-hosted/translate_c.zig
index 7de834b4f0..4d339fe259 100644
--- a/src-self-hosted/translate_c.zig
+++ b/src-self-hosted/translate_c.zig
@@ -357,7 +357,7 @@ fn transCompoundStmtInline(
const end_it = ZigClangCompoundStmt_body_end(stmt);
var scope = parent_scope;
while (it != end_it) : (it += 1) {
- const result = try transStmt(rp, scope, it.*, .unused, .r_value);
+ const result = try transStmt(rp, parent_scope, it.*, .unused, .r_value);
scope = result.child_scope;
try block_node.statements.push(result.node);
}
@@ -438,11 +438,22 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
};
scope = &var_scope.base;
+ const colon_token = try appendToken(c, .Colon, ":");
+ const loc = ZigClangStmt_getBeginLoc(@ptrCast(*const ZigClangStmt, stmt));
+ const type_node = try transQualType(rp, qual_type, loc);
+
const eq_token = try appendToken(c, .Equal, "=");
const init_node = if (ZigClangVarDecl_getInit(var_decl)) |expr|
(try transExpr(rp, scope, expr, .used, .r_value)).node
- else
- null;
+ else blk: {
+ const undefined_token = try appendToken(c, .Keyword_undefined, "undefined");
+ const undefined_node = try rp.c.a().create(ast.Node.UndefinedLiteral);
+ undefined_node.* = ast.Node.UndefinedLiteral{
+ .base = ast.Node{ .id = .UndefinedLiteral },
+ .token = undefined_token,
+ };
+ break :blk &undefined_node.base;
+ };
const semicolon_token = try appendToken(c, .Semicolon, ";");
const node = try c.a().create(ast.Node.VarDecl);
@@ -457,7 +468,7 @@ fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDe
.comptime_token = null,
.extern_export_token = null, // TODO ?TokenIndex,
.lib_name = null, // TODO ?*Node,
- .type_node = null, // TODO ?*Node,
+ .type_node = type_node,
.align_node = null, // TODO ?*Node,
.section_node = null, // TODO ?*Node,
.init_node = init_node,