Commit 99f0b28d39
Changed files (4)
src-self-hosted
src/zig_clang.cpp
@@ -1821,6 +1821,11 @@ void ZigClangASTUnit_delete(struct ZigClangASTUnit *self) {
delete reinterpret_cast<clang::ASTUnit *>(self);
}
+struct ZigClangQualType ZigClangVarDecl_getType(const struct ZigClangVarDecl *self) {
+ auto casted = reinterpret_cast<const clang::VarDecl *>(self);
+ return bitcast(casted->getType());
+}
+
enum ZigClangBuiltinTypeKind ZigClangBuiltinType_getKind(const struct ZigClangBuiltinType *self) {
auto casted = reinterpret_cast<const clang::BuiltinType *>(self);
return (ZigClangBuiltinTypeKind)casted->getKind();
src/zig_clang.h
@@ -753,6 +753,8 @@ ZIG_EXTERN_C struct ZigClangASTUnit *ZigClangLoadFromCommandLine(const char **ar
ZIG_EXTERN_C void ZigClangASTUnit_delete(struct ZigClangASTUnit *);
ZIG_EXTERN_C void ZigClangErrorMsg_delete(struct Stage2ErrorMsg *ptr, size_t len);
+ZIG_EXTERN_C struct ZigClangQualType ZigClangVarDecl_getType(const struct ZigClangVarDecl *);
+
ZIG_EXTERN_C struct ZigClangASTContext *ZigClangASTUnit_getASTContext(struct ZigClangASTUnit *);
ZIG_EXTERN_C struct ZigClangSourceManager *ZigClangASTUnit_getSourceManager(struct ZigClangASTUnit *);
ZIG_EXTERN_C bool ZigClangASTUnit_visitLocalTopLevelDecls(struct ZigClangASTUnit *, void *context,
src-self-hosted/clang.zig
@@ -509,6 +509,7 @@ pub extern fn ZigClangAPSInt_getRawData(self: ?*const struct_ZigClangAPSInt) [*c
pub extern fn ZigClangAPSInt_getNumWords(self: ?*const struct_ZigClangAPSInt) c_uint;
pub extern fn ZigClangAPValueLValueBase_dyn_cast_Expr(self: struct_ZigClangAPValueLValueBase) ?*const struct_ZigClangExpr;
pub extern fn ZigClangASTUnit_delete(arg0: ?*struct_ZigClangASTUnit) void;
+pub extern fn ZigClangVarDecl_getType(self: ?*const struct_ZigClangVarDecl) struct_ZigClangQualType;
pub extern fn ZigClangFunctionDecl_getType(self: *const ZigClangFunctionDecl) struct_ZigClangQualType;
pub extern fn ZigClangFunctionDecl_getLocation(self: *const ZigClangFunctionDecl) struct_ZigClangSourceLocation;
src-self-hosted/translate_c.zig
@@ -369,9 +369,11 @@ fn transCompoundStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangCompo
};
}
-fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt) !TransResult {
+fn transDeclStmt(rp: RestorePoint, parent_scope: *Scope, stmt: *const ZigClangDeclStmt) !TransResult {
const c = rp.c;
- const block_scope = findBlockScope(scope);
+ const block_scope = findBlockScope(parent_scope);
+ var scope = parent_scope;
+
var it = ZigClangDeclStmt_decl_begin(stmt);
const end_it = ZigClangDeclStmt_decl_end(stmt);
while (it != end_it) : (it += 1) {
@@ -385,23 +387,33 @@ fn transDeclStmt(rp: RestorePoint, scope: *Scope, stmt: *const ZigClangDeclStmt)
// else
// try appendToken(c, .Keyword_threadlocal, "threadlocal");
const thread_local_token: ?ast.TokenIndex = null;
- // TODO:
- // const mut_token = if (ZigClangQualType_isConstQualified(qual_type))
- // try appendToken(c, .Keyword_const, "const")
- // else
- // try appendToken(c, .Keyword_var, "var");
- const mut_token = try appendToken(c, .Keyword_var, "var");
- const name_token = blk: {
- const name = try c.str(ZigClangDecl_getName_bytes_begin(
- @ptrCast(*const ZigClangDecl, var_decl),
- ));
- break :blk try appendToken(c, .Identifier, name);
+ const qual_type = ZigClangVarDecl_getType(var_decl);
+ const mut_token = if (ZigClangQualType_isConstQualified(qual_type))
+ try appendToken(c, .Keyword_const, "const")
+ else
+ try appendToken(c, .Keyword_var, "var");
+ const name_type = struct {
+ str: []const u8,
+ token: ast.TokenIndex,
};
+ const c_name = try c.str(ZigClangDecl_getName_bytes_begin(
+ @ptrCast(*const ZigClangDecl, var_decl),
+ ));
+ const name_token = try appendToken(c, .Identifier, c_name);
const eq_token = try appendToken(c, .Equal, "=");
- // TODO: init_node
+ // TODO:
+ // const init_node = ZigClangVarDecl_getInit();
const init_node: ?*ast.Node = null;
const semicolon_token = try appendToken(c, .Semicolon, ";");
+ const var_scope = try c.a().create(Scope.Var);
+ var_scope.* = Scope.Var{
+ .base = Scope{ .id = .Var, .parent = parent_scope },
+ .c_name = c_name,
+ .zig_name = c_name, // TODO: getWantedName
+ };
+ scope = &var_scope.base;
+
const node = try rp.c.a().create(ast.Node.VarDecl);
node.* = ast.Node.VarDecl{
.base = ast.Node{ .id = .VarDecl },