mirror of
https://github.com/ziglang/zig.git
synced 2026-02-13 12:59:04 +00:00
translate-c-2 fix macro regression
This commit is contained in:
parent
949f2369c1
commit
40f607d195
@ -594,7 +594,7 @@ fn next(chars: [*:0]const u8, i: *usize) !CToken {
|
||||
switch (c) {
|
||||
'l', 'L' => {
|
||||
result.num_lit_suffix = .LLU;
|
||||
return result;
|
||||
state = .Done;
|
||||
},
|
||||
else => {
|
||||
return result;
|
||||
@ -718,7 +718,7 @@ test "tokenize macro" {
|
||||
expect(it.next() == null);
|
||||
tl.shrink(0);
|
||||
|
||||
const src5 = "FOO 0l";
|
||||
const src5 = "FOO 0ull";
|
||||
try tokenizeCMacro(&tl, src5);
|
||||
it = tl.iterator(0);
|
||||
expect(it.next().?.id == .Identifier);
|
||||
|
||||
@ -407,8 +407,7 @@ fn visitFnDecl(c: *Context, fn_decl: *const ZigClangFunctionDecl) Error!void {
|
||||
while (it.next()) |p| {
|
||||
const param = @fieldParentPtr(ast.Node.ParamDecl, "base", p.*);
|
||||
const param_name = tokenSlice(c, param.name_token orelse
|
||||
return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name})
|
||||
);
|
||||
return failDecl(c, fn_decl_loc, fn_name, "function {} parameter has no name", .{fn_name}));
|
||||
|
||||
const checked_param_name = if (try scope.createAlias(rp.c, param_name)) |a| blk: {
|
||||
try block_scope.variables.push(.{ .name = param_name, .alias = a });
|
||||
@ -4109,6 +4108,15 @@ fn transMacroDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u8,
|
||||
node.eq_token = try appendToken(c, .Equal, "=");
|
||||
|
||||
node.init_node = try parseCExpr(rp, it, source_loc, scope);
|
||||
const last = it.next().?;
|
||||
if (last.id != .Eof)
|
||||
return revertAndWarn(
|
||||
rp,
|
||||
error.UnsupportedTranslation,
|
||||
source_loc,
|
||||
"unable to translate C expr, unexpected token: {}",
|
||||
.{last.id},
|
||||
);
|
||||
|
||||
node.semicolon_token = try appendToken(c, .Semicolon, ";");
|
||||
_ = try c.global_scope.macro_table.put(name, &node.base);
|
||||
@ -4196,6 +4204,15 @@ fn transMacroFnDefine(c: *Context, it: *ctok.TokenList.Iterator, name: []const u
|
||||
|
||||
const return_expr = try transCreateNodeReturnExpr(c);
|
||||
const expr = try parseCExpr(rp, it, source_loc, scope);
|
||||
const last = it.next().?;
|
||||
if (last.id != .Eof)
|
||||
return revertAndWarn(
|
||||
rp,
|
||||
error.UnsupportedTranslation,
|
||||
source_loc,
|
||||
"unable to translate C expr, unexpected token: {}",
|
||||
.{last.id},
|
||||
);
|
||||
_ = try appendToken(c, .Semicolon, ";");
|
||||
try type_of.params.push(expr);
|
||||
return_expr.rhs = expr;
|
||||
@ -4475,17 +4492,10 @@ fn parseCSuffixOpExpr(rp: RestorePoint, it: *ctok.TokenList.Iterator, source_loc
|
||||
call_node.rtoken = try appendToken(rp.c, .RParen, ")");
|
||||
node = &call_node.base;
|
||||
},
|
||||
.Eof => {
|
||||
else => {
|
||||
_ = it.prev();
|
||||
return node;
|
||||
},
|
||||
else => return revertAndWarn(
|
||||
rp,
|
||||
error.UnsupportedTranslation,
|
||||
source_loc,
|
||||
"unable to translate C expr, unexpected token: {}",
|
||||
.{tok.id},
|
||||
),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user