feature. See also
. The project being documented here (as the example) is the Zig library itself.
MacroTranslator.parseCMulExpr
fn parseCMulExpr(mt: *MacroTranslator, scope: *Scope) ParseError!ZigNode
File
Code
fn parseCMulExpr(mt: *MacroTranslator, scope: *Scope) ParseError!ZigNode {
var node = try mt.parseCCastExpr(scope);
while (true) {
switch (mt.peek()) {
.asterisk => {
mt.i += 1;
switch (mt.peek()) {
.comma, .r_paren, .eof => {
return ZigTag.c_pointer.create(mt.t.arena, .{
.is_const = false,
.is_volatile = false,
.is_allowzero = false,
.elem_type = node,
});
},
else => {},
}
const lhs = try mt.macroIntFromBool(node);
const rhs = try mt.macroIntFromBool(try mt.parseCCastExpr(scope));
node = try ZigTag.mul.create(mt.t.arena, .{ .lhs = lhs, .rhs = rhs });
},
.slash => {
mt.i += 1;
const lhs = try mt.macroIntFromBool(node);
const rhs = try mt.macroIntFromBool(try mt.parseCCastExpr(scope));
node = try mt.t.createHelperCallNode(.div, &.{ lhs, rhs });
},
.percent => {
mt.i += 1;
const lhs = try mt.macroIntFromBool(node);
const rhs = try mt.macroIntFromBool(try mt.parseCCastExpr(scope));
node = try mt.t.createHelperCallNode(.rem, &.{ lhs, rhs });
},
else => return node,
}
}
}