Skip to content

Commit 2975bdc

Browse files
committed
add review changes
- use std.heap.c_allocator - use @Panic instead of unreachable - use extern enum for tokenizer result type
1 parent d4b241c commit 2975bdc

File tree

3 files changed

+29
-20
lines changed

3 files changed

+29
-20
lines changed

src-self-hosted/dep_tokenizer.zig

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -359,12 +359,9 @@ pub const Tokenizer = struct {
359359
};
360360
};
361361

362-
// stage1 compiler support
363-
var stage2_da = std.heap.DirectAllocator.init();
364-
365362
export fn stage2_DepTokenizer_init(input: [*]const u8, len: usize) stage2_DepTokenizer {
366-
const t = stage2_da.allocator.create(Tokenizer) catch unreachable;
367-
t.* = Tokenizer.init(&stage2_da.allocator, input[0..len]);
363+
const t = std.heap.c_allocator.create(Tokenizer) catch @panic("failed to create .d tokenizer");
364+
t.* = Tokenizer.init(std.heap.c_allocator, input[0..len]);
368365
return stage2_DepTokenizer{
369366
.handle = t,
370367
};
@@ -376,20 +373,25 @@ export fn stage2_DepTokenizer_deinit(self: *stage2_DepTokenizer) void {
376373

377374
export fn stage2_DepTokenizer_next(self: *stage2_DepTokenizer) stage2_DepNextResult {
378375
const otoken = self.handle.next() catch {
376+
const textz = std.Buffer.init(&self.handle.arena.allocator, self.handle.error_text) catch @panic("failed to create .d tokenizer error text");
379377
return stage2_DepNextResult{
380-
.ent = 0,
381-
.textz = (std.Buffer.init(&self.handle.arena.allocator, self.handle.error_text) catch unreachable).toSlice().ptr,
378+
.type_id = .error_,
379+
.textz = textz.toSlice().ptr,
382380
};
383381
};
384382
const token = otoken orelse {
385383
return stage2_DepNextResult{
386-
.ent = 1,
384+
.type_id = .null_,
387385
.textz = undefined,
388386
};
389387
};
388+
const textz = std.Buffer.init(&self.handle.arena.allocator, token.bytes) catch @panic("failed to create .d tokenizer token text");
390389
return stage2_DepNextResult{
391-
.ent = @enumToInt(token.id) + u8(2),
392-
.textz = (std.Buffer.init(&self.handle.arena.allocator, token.bytes) catch unreachable).toSlice().ptr,
390+
.type_id = switch (token.id) {
391+
.target => stage2_DepNextResult.TypeId.target,
392+
.prereq => stage2_DepNextResult.TypeId.prereq,
393+
},
394+
.textz = textz.toSlice().ptr,
393395
};
394396
}
395397

@@ -398,13 +400,20 @@ export const stage2_DepTokenizer = extern struct {
398400
};
399401

400402
export const stage2_DepNextResult = extern struct {
401-
// 0=error, 1=null, 2=token=target, 3=token=prereq
402-
ent: u8,
403-
// ent=0 -- error text
404-
// ent=1 -- NEVER
405-
// ent=2 -- token text value
406-
// ent=3 -- token text value
403+
type_id: TypeId,
404+
405+
// when type_id == error --> error text
406+
// when type_id == null --> undefined
407+
// when type_id == target --> target pathname
408+
// when type_id == prereq --> prereq pathname
407409
textz: [*]const u8,
410+
411+
export const TypeId = extern enum {
412+
error_,
413+
null_,
414+
target,
415+
prereq,
416+
};
408417
};
409418

410419
test "empty file" {

src/cache_hash.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ Error cache_add_dep_file(CacheHash *ch, Buf *dep_file_path, bool verbose) {
482482
// skip first token: target
483483
{
484484
auto result = stage2_DepTokenizer_next(&it);
485-
switch (result.ent) {
485+
switch (result.type_id) {
486486
case stage2_DepNextResult::error:
487487
if (verbose) {
488488
fprintf(stderr, "%s: failed processing .d file: %s\n", result.textz, buf_ptr(dep_file_path));
@@ -502,7 +502,7 @@ Error cache_add_dep_file(CacheHash *ch, Buf *dep_file_path, bool verbose) {
502502
// clang is invoked in single-source mode so we never get more targets.
503503
for (;;) {
504504
auto result = stage2_DepTokenizer_next(&it);
505-
switch (result.ent) {
505+
switch (result.type_id) {
506506
case stage2_DepNextResult::error:
507507
if (verbose) {
508508
fprintf(stderr, "%s: failed processing .d file: %s\n", result.textz, buf_ptr(dep_file_path));

src/userland.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,14 +126,14 @@ struct stage2_DepTokenizer {
126126

127127
// ABI warning
128128
struct stage2_DepNextResult {
129-
enum Ent : uint8_t {
129+
enum TypeId {
130130
error,
131131
null,
132132
target,
133133
prereq,
134134
};
135135

136-
Ent ent;
136+
TypeId type_id;
137137

138138
// when ent == error --> error text
139139
// when ent == null --> undefined

0 commit comments

Comments
 (0)