Skip to content

Commit

Permalink
Merge pull request #807 from Vexu/rewrite-ast
Browse files Browse the repository at this point in the history
Tree: represent nodes as tagged unions with a packed representation
  • Loading branch information
Vexu authored Dec 31, 2024
2 parents 49dd95c + 9697f95 commit ddf5c08
Show file tree
Hide file tree
Showing 34 changed files with 4,805 additions and 3,422 deletions.
8 changes: 7 additions & 1 deletion build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ pub fn build(b: *Build) !void {
const tracy_callstack = b.option(bool, "tracy-callstack", "Include callstack information with Tracy data. Does nothing if -Dtracy is not provided") orelse false;
const tracy_allocation = b.option(bool, "tracy-allocation", "Include allocation information with Tracy data. Does nothing if -Dtracy is not provided") orelse false;
const use_llvm = b.option(bool, "llvm", "Use LLVM backend to generate aro executable");
const no_bin = b.option(bool, "no-bin", "skip emitting compiler binary") orelse false;

const system_defaults = b.addOptions();
system_defaults.addOption(bool, "enable_linker_build_id", enable_linker_build_id);
Expand Down Expand Up @@ -210,7 +211,12 @@ pub fn build(b: *Build) !void {
if (link_libc) {
exe.linkLibC();
}
b.installArtifact(exe);

if (no_bin) {
b.getInstallStep().dependOn(&exe.step);
} else {
b.installArtifact(exe);
}

const unit_tests_step = step: {
var unit_tests = b.addTest(.{ .root_source_file = b.path("src/aro.zig") });
Expand Down
17 changes: 10 additions & 7 deletions src/aro/Attribute.zig
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ const Compilation = @import("Compilation.zig");
const Diagnostics = @import("Diagnostics.zig");
const Parser = @import("Parser.zig");
const Tree = @import("Tree.zig");
const NodeIndex = Tree.NodeIndex;
const TokenIndex = Tree.TokenIndex;
const Type = @import("Type.zig");
const Value = @import("Value.zig");
Expand Down Expand Up @@ -282,8 +281,8 @@ fn diagnoseField(
p: *Parser,
) !?Diagnostics.Message {
if (res.val.opt_ref == .none) {
if (Wanted == Identifier and node.tag == .decl_ref_expr) {
@field(@field(arguments, decl.name), field.name) = Identifier{ .tok = node.data.decl_ref };
if (Wanted == Identifier and node == .decl_ref_expr) {
@field(@field(arguments, decl.name), field.name) = .{ .tok = node.decl_ref_expr.name_tok };
return null;
}
return invalidArgMsg(Wanted, .expression);
Expand All @@ -301,7 +300,9 @@ fn diagnoseField(
},
.bytes => |bytes| {
if (Wanted == Value) {
if (node.tag != .string_literal_expr or (!node.ty.elemType().is(.char) and !node.ty.elemType().is(.uchar))) {
if (node != .string_literal_expr or (!node.string_literal_expr.type.elemType().is(.char) and
!node.string_literal_expr.type.elemType().is(.uchar)))
{
return .{
.tag = .attribute_requires_string,
.extra = .{ .str = decl.name },
Expand Down Expand Up @@ -387,7 +388,7 @@ const EnumTypes = enum {
identifier,
};
pub const Alignment = struct {
node: NodeIndex = .none,
node: Tree.Node.OptIndex = .null,
requested: u29,
};
pub const Identifier = struct {
Expand Down Expand Up @@ -1004,7 +1005,8 @@ pub fn applyFunctionAttributes(p: *Parser, ty: Type, attr_buf_start: usize) !Typ
return ty.withAttributes(p.arena, p.attr_application_buf.items);
}

pub fn applyLabelAttributes(p: *Parser, ty: Type, attr_buf_start: usize) !Type {
pub fn applyLabelAttributes(p: *Parser, attr_buf_start: usize) !Type {
const ty: Type = .{ .specifier = .void };
const attrs = p.attr_buf.items(.attr)[attr_buf_start..];
const toks = p.attr_buf.items(.tok)[attr_buf_start..];
p.attr_application_buf.items.len = 0;
Expand All @@ -1029,7 +1031,8 @@ pub fn applyLabelAttributes(p: *Parser, ty: Type, attr_buf_start: usize) !Type {
return ty.withAttributes(p.arena, p.attr_application_buf.items);
}

pub fn applyStatementAttributes(p: *Parser, ty: Type, expr_start: TokenIndex, attr_buf_start: usize) !Type {
pub fn applyStatementAttributes(p: *Parser, expr_start: TokenIndex, attr_buf_start: usize) !Type {
const ty: Type = .{ .specifier = .void };
const attrs = p.attr_buf.items(.attr)[attr_buf_start..];
const toks = p.attr_buf.items(.tok)[attr_buf_start..];
p.attr_application_buf.items.len = 0;
Expand Down
9 changes: 4 additions & 5 deletions src/aro/Builtins/eval.zig
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ const Builtins = @import("../Builtins.zig");
const Builtin = Builtins.Builtin;
const Parser = @import("../Parser.zig");
const Tree = @import("../Tree.zig");
const NodeIndex = Tree.NodeIndex;
const Type = @import("../Type.zig");
const Value = @import("../Value.zig");

Expand All @@ -22,7 +21,7 @@ fn makeNan(comptime T: type, str: []const u8) T {
return @bitCast(@as(UnsignedSameSize, bits) | @as(UnsignedSameSize, @bitCast(std.math.nan(T))));
}

pub fn eval(tag: Builtin.Tag, p: *Parser, args: []const NodeIndex) !Value {
pub fn eval(tag: Builtin.Tag, p: *Parser, args: []const Tree.Node.Index) !Value {
const builtin = Builtin.fromTag(tag);
if (!builtin.properties.attributes.const_evaluable) return .{};

Expand All @@ -48,12 +47,12 @@ pub fn eval(tag: Builtin.Tag, p: *Parser, args: []const NodeIndex) !Value {
},
Builtin.tagFromName("__builtin_isinf").? => blk: {
if (args.len == 0) break :blk;
const val = p.value_map.get(args[0]) orelse break :blk;
const val = p.tree.value_map.get(args[0]) orelse break :blk;
return Value.fromBool(val.isInf(p.comp));
},
Builtin.tagFromName("__builtin_isinf_sign").? => blk: {
if (args.len == 0) break :blk;
const val = p.value_map.get(args[0]) orelse break :blk;
const val = p.tree.value_map.get(args[0]) orelse break :blk;
switch (val.isInfSign(p.comp)) {
.unknown => {},
.finite => return Value.zero,
Expand All @@ -63,7 +62,7 @@ pub fn eval(tag: Builtin.Tag, p: *Parser, args: []const NodeIndex) !Value {
},
Builtin.tagFromName("__builtin_isnan").? => blk: {
if (args.len == 0) break :blk;
const val = p.value_map.get(args[0]) orelse break :blk;
const val = p.tree.value_map.get(args[0]) orelse break :blk;
return Value.fromBool(val.isNan(p.comp));
},
Builtin.tagFromName("__builtin_nan").? => blk: {
Expand Down
Loading

0 comments on commit ddf5c08

Please sign in to comment.