mirror of
https://github.com/ziglang/zig.git
synced 2026-02-17 23:10:09 +00:00
var decl: mut_token, create child scope
This commit is contained in:
parent
fceedada5c
commit
99f0b28d39
@ -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;
|
||||
|
||||
@ -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 },
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user