aboutsummaryrefslogtreecommitdiff
path: root/src/AstGen.zig
diff options
context:
space:
mode:
authorMatthew Borkowski <matthew.h.borkowski@gmail.com>2021-11-01 04:53:11 -0400
committerMatthew Borkowski <matthew.h.borkowski@gmail.com>2021-11-01 05:27:52 -0400
commita0bf620fbfcdc9435c4a06842ab6270fb720c3e1 (patch)
tree8fe26614bbf5fc2eaae692ff5a5a532f66c471a6 /src/AstGen.zig
parent2561be2e34ecdbdb11b9de7790089d844739eaea (diff)
downloadzig-a0bf620fbfcdc9435c4a06842ab6270fb720c3e1.tar.gz
zig-a0bf620fbfcdc9435c4a06842ab6270fb720c3e1.zip
astgen.zig: avoid unnecessary allocation in identifier for @"" syntax
Diffstat (limited to 'src/AstGen.zig')
-rw-r--r--src/AstGen.zig14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/AstGen.zig b/src/AstGen.zig
index 4468c20516..f3960cc25c 100644
--- a/src/AstGen.zig
+++ b/src/AstGen.zig
@@ -6558,25 +6558,25 @@ fn identifier(
if (mem.eql(u8, ident_name_raw, "_")) {
return astgen.failNode(ident, "'_' used as an identifier without @\"_\" syntax", .{});
}
- const ident_name = try astgen.identifierTokenString(ident_token);
+ // if not @"" syntax, just use raw token slice
if (ident_name_raw[0] != '@') {
- if (primitives.get(ident_name)) |zir_const_ref| {
+ if (primitives.get(ident_name_raw)) |zir_const_ref| {
return rvalue(gz, rl, zir_const_ref, ident);
}
- if (ident_name.len >= 2) integer: {
- const first_c = ident_name[0];
+ if (ident_name_raw.len >= 2) integer: {
+ const first_c = ident_name_raw[0];
if (first_c == 'i' or first_c == 'u') {
const signedness: std.builtin.Signedness = switch (first_c == 'i') {
true => .signed,
false => .unsigned,
};
- const bit_count = std.fmt.parseInt(u16, ident_name[1..], 10) catch |err| switch (err) {
+ const bit_count = std.fmt.parseInt(u16, ident_name_raw[1..], 10) catch |err| switch (err) {
error.Overflow => return astgen.failNode(
ident,
"primitive integer type '{s}' exceeds maximum bit width of 65535",
- .{ident_name},
+ .{ident_name_raw},
),
error.InvalidCharacter => break :integer,
};
@@ -6629,6 +6629,7 @@ fn identifier(
// Can't close over a runtime variable
if (num_namespaces_out != 0 and !local_ptr.maybe_comptime) {
+ const ident_name = try astgen.identifierTokenString(ident_token);
return astgen.failNodeNotes(ident, "mutable '{s}' not accessible from here", .{ident_name}, &.{
try astgen.errNoteTok(local_ptr.token_src, "declared mutable here", .{}),
try astgen.errNoteNode(capturing_namespace.?.node, "crosses namespace boundary here", .{}),
@@ -6676,6 +6677,7 @@ fn identifier(
.top => break,
};
if (found_already == null) {
+ const ident_name = try astgen.identifierTokenString(ident_token);
return astgen.failNode(ident, "use of undeclared identifier '{s}'", .{ident_name});
}