diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-03-20 21:48:35 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-03-20 21:48:35 -0700 |
| commit | 8bad5dfa72a33dec3919c3c3cb7590e51d03723b (patch) | |
| tree | d70339e575f8f209364ef6066bf6d3e2cece7ca9 /src/Module.zig | |
| parent | 260c610708451624eab783bc4e99388e2b28a3ba (diff) | |
| download | zig-8bad5dfa72a33dec3919c3c3cb7590e51d03723b.tar.gz zig-8bad5dfa72a33dec3919c3c3cb7590e51d03723b.zip | |
astgen: implement inline assembly
Diffstat (limited to 'src/Module.zig')
| -rw-r--r-- | src/Module.zig | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/src/Module.zig b/src/Module.zig index cb1c11cda7..9830e43d4a 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -1183,6 +1183,22 @@ pub const Scope = struct { }); } + pub fn addStrTok( + gz: *GenZir, + tag: zir.Inst.Tag, + str_index: u32, + /// Absolute token index. This function does the conversion to Decl offset. + abs_tok_index: ast.TokenIndex, + ) !zir.Inst.Ref { + return gz.add(.{ + .tag = tag, + .data = .{ .str_tok = .{ + .start = str_index, + .src_tok = abs_tok_index - gz.zir_code.decl.srcToken(), + } }, + }); + } + pub fn addBin( gz: *GenZir, tag: zir.Inst.Tag, @@ -4090,10 +4106,10 @@ pub fn identifierTokenString(mod: *Module, scope: *Scope, token: ast.TokenIndex) if (!mem.startsWith(u8, ident_name, "@")) { return ident_name; } - var buf = std.ArrayList(u8).init(mod.gpa); - defer buf.deinit(); + var buf: std.ArrayListUnmanaged(u8) = .{}; + defer buf.deinit(mod.gpa); try parseStrLit(mod, scope, token, &buf, ident_name, 1); - return buf.toOwnedSlice(); + return buf.toOwnedSlice(mod.gpa); } /// Given an identifier token, obtain the string for it (possibly parsing as a string @@ -4103,16 +4119,16 @@ pub fn appendIdentStr( mod: *Module, scope: *Scope, token: ast.TokenIndex, - buf: *ArrayList(u8), + buf: *std.ArrayListUnmanaged(u8), ) InnerError!void { const tree = scope.tree(); const token_tags = tree.tokens.items(.tag); assert(token_tags[token] == .identifier); const ident_name = tree.tokenSlice(token); if (!mem.startsWith(u8, ident_name, "@")) { - return buf.appendSlice(ident_name); + return buf.appendSlice(mod.gpa, ident_name); } else { - return parseStrLit(scope, token, buf, ident_name, 1); + return mod.parseStrLit(scope, token, buf, ident_name, 1); } } @@ -4121,14 +4137,17 @@ pub fn parseStrLit( mod: *Module, scope: *Scope, token: ast.TokenIndex, - buf: *std.ArrayList(u8), + buf: *std.ArrayListUnmanaged(u8), bytes: []const u8, offset: u32, ) InnerError!void { const tree = scope.tree(); const token_starts = tree.tokens.items(.start); const raw_string = bytes[offset..]; - switch (try std.zig.string_literal.parseAppend(buf, raw_string)) { + var buf_managed = buf.toManaged(mod.gpa); + const result = std.zig.string_literal.parseAppend(&buf_managed, raw_string); + buf.* = buf_managed.toUnmanaged(); + switch (try result) { .success => return, .invalid_character => |bad_index| { return mod.failOff( |
