-
Notifications
You must be signed in to change notification settings - Fork 0
tessellation #40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
tessellation #40
Changes from all commits
c56b390
f410fc6
0743afd
1190d9d
3131d8d
3b653f8
3126e4b
ac6876f
77bac13
56e241c
fa47c62
0842e59
9bee21d
30e6f68
7dee50c
41c77fa
34f5ab0
65ea435
451d272
bb18cbd
8cfeba2
78cffdb
dd6e074
cbe8926
918885b
d135066
021c2b0
acea843
08dad31
99980b1
d2cbe36
38619be
668ce80
580b8ae
2709568
8466702
f721441
53afedc
421cdb9
3e8b533
e166802
a498694
8cd4af5
ff0ebf4
8f760e8
2da6b04
42afd21
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -109,4 +109,24 @@ pub fn build(b: *std.Build) void { | |
}); | ||
const run_tests = b.addRunArtifact(tests); | ||
test_step.dependOn(&run_tests.step); | ||
|
||
// fssc - the foundation simple shader compiler | ||
const compiler_exe = b.addExecutable(.{ | ||
.name = "fssc", | ||
.root_source_file = b.path("src/compiler.zig"), | ||
.target = target, | ||
.optimize = optimize, | ||
}); | ||
|
||
b.installArtifact(compiler_exe); | ||
|
||
const fssc_cmd = b.addRunArtifact(compiler_exe); | ||
|
||
fssc_cmd.step.dependOn(b.getInstallStep()); | ||
if (b.args) |args| { | ||
fssc_cmd.addArgs(args); | ||
} | ||
|
||
const fssc_step = b.step("fssc", "Compile a shder"); | ||
fssc_step.dependOn(&fssc_cmd.step); | ||
Comment on lines
+114
to
+131
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 💡 Codebase verification Add Required C Libraries to "fssc" Executable The "fssc" executable does not link any system libraries, which may cause issues due to its usage of C functions (
🔗 Analysis chainVerify dependencies for the new "fssc" executable The new "fssc" executable doesn't have any specific dependencies or libraries linked, unlike the "foundations" executable. If this is intentional, it's fine. However, if "fssc" requires any of the same libraries or has its own dependencies, make sure to add them. To verify the dependencies, you can check the Please review the output of this script to ensure all necessary dependencies are properly linked in the build configuration. 🏁 Scripts executedThe following scripts were executed for the analysis: Script: #!/bin/bash
# Description: Check imports and potential dependencies in src/compiler.zig
# Test: Look for import statements
echo "Checking imports in src/compiler.zig:"
rg -n "^const .* = @import\(" src/compiler.zig
# Test: Look for external function calls that might indicate needed libraries
echo "Checking for potential external dependencies:"
rg -n "std\.c\." src/compiler.zig
rg -n "c\." src/compiler.zig
Length of output: 430 Script: #!/bin/bash
# Description: Check linker settings for the "fssc" executable in build.zig
# Test: Extract linker flags or library links for "fssc"
echo "Extracting linker settings for fssc in build.zig:"
rg -A5 'b\.addExecutable\(\.\{\s*\.name\s*=\s*"fssc",' build.zig
# Compare with "foundations" executable
echo "Extracting linker settings for foundations in build.zig:"
rg -A5 'b\.addExecutable\(\.\{\s*\.name\s*=\s*"foundations",' build.zig
Length of output: 372 Script: #!/bin/bash
# Description: Extract all executable definitions and their dependencies in build.zig
# Extract all addExecutable calls with their configurations
echo "Extracting all executable definitions in build.zig:"
rg -C5 'b\.addExecutable\(\.\{' build.zig
# Extract all library linkings
echo "Extracting library linkings in build.zig:"
rg -n '\.linkSystemLibrary\(".*"\)' build.zig
Length of output: 1149 |
||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
pub fn main() !void { | ||
std.debug.print("Starting compiler.\n", .{}); | ||
|
||
var gpa = std.heap.GeneralPurposeAllocator(.{}){}; | ||
defer _ = gpa.deinit(); | ||
|
||
const c: *Compiler = try Compiler.init(gpa.allocator()); | ||
defer c.deinit(); | ||
|
||
try c.run(); | ||
|
||
std.debug.print("Compiler finished.\n", .{}); | ||
} | ||
|
||
const std = @import("std"); | ||
const Compiler = @import("compiler/Compiler.zig"); |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,89 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
parsed: struct { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
source_file: ?[]const u8 = null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
output_path: ?[]const u8 = null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name: ?[]const u8 = null, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
arg_ctx: arg_context = .none, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} = .{}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
source_file: []const u8 = undefined, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
output_path: []const u8 = undefined, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name: []const u8 = undefined, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
process_args: std.process.ArgIterator = undefined, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const Args = @This(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const ValidationErrorSourceInvalid: []const u8 = "invalid --source file path"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const ValidationErrorOutputInvalid: []const u8 = "invalid --output path"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const ValidationErrorNameInvalid: []const u8 = "invalid out file --name"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
pub const ArgsError = error{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ValidationErrorSourceInvalid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ValidationErrorOutputInvalid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
ValidationErrorNameInvalid, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+14
to
+22
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Define error identifiers instead of string constants in 'ArgsError'. Currently, Consider defining -pub const ArgsError = error{
- ValidationErrorSourceInvalid,
- ValidationErrorOutputInvalid,
- ValidationErrorNameInvalid,
-};
+pub const ArgsError = error{
+ SourceInvalid,
+ OutputInvalid,
+ NameInvalid,
+}; Then, define the error messages separately: const errorMessages = struct {
pub fn getMessage(err: ArgsError) []const u8 {
switch (err) {
.SourceInvalid => return "invalid --source file path",
.OutputInvalid => return "invalid --output path",
.NameInvalid => return "invalid out file --name",
}
}
}; This way, you can retrieve the error message when needed. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const arg_context = enum { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
none, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
source_file, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
output_path, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
file_name, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn init(allocator: std.mem.Allocator) !*Args { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
var process_args: std.process.ArgIterator = try std.process.argsWithAllocator(allocator); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
errdefer process_args.deinit(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const args: *Args = try allocator.create(Args); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
args.* = .{ | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.process_args = process_args, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return args; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn deinit(self: *Args, allocator: std.mem.Allocator) void { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.process_args.deinit(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
allocator.destroy(self); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn parse(self: *Args, _: std.mem.Allocator) !void { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
while (self.process_args.next()) |pa| self.handle_arg(pa); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+46
to
+48
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Remove unused parameter 'allocator' from 'parse' function. The Apply this diff to remove the unused parameter: -pub fn parse(self: *Args, _: std.mem.Allocator) !void {
+pub fn parse(self: *Args) !void { And update any calls to 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn validate(self: *Args) ArgsError!void { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.source_file = self.parsed.source_file orelse return ArgsError.ValidationErrorSourceInvalid; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.output_path = self.parsed.output_path orelse return ArgsError.ValidationErrorOutputInvalid; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.file_name = self.parsed.file_name orelse return ArgsError.ValidationErrorSourceInvalid; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+51
to
+54
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Correct the returned error when validating 'file_name'. In line 53, when validating Apply this diff to fix the error: - self.file_name = self.parsed.file_name orelse return ArgsError.ValidationErrorSourceInvalid;
+ self.file_name = self.parsed.file_name orelse return ArgsError.ValidationErrorNameInvalid; 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
pub fn debug(self: *Args) void { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
std.debug.print("args: \n", .{}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
std.debug.print("\t--source {s}\n", .{self.source_file}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
std.debug.print("\t--output {s}\n", .{self.output_path}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
std.debug.print("\t--name: {s}\n", .{self.file_name}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
fn handle_arg(self: *Args, pa: [:0]const u8) void { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
switch (self.parsed.arg_ctx) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.none => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if (std.mem.eql(u8, "--source", pa)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.arg_ctx = .source_file; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} else if (std.mem.eql(u8, "--output", pa)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.arg_ctx = .output_path; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} else if (std.mem.eql(u8, "--name", pa)) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.arg_ctx = .file_name; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+63
to
+73
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Add handling for unrecognized command-line arguments. In the Apply this diff to handle unrecognized arguments: } else {
+ std.debug.print("Unrecognized argument: {s}\n", .{pa});
+ // Optionally, set an error state or return an error
} Alternatively, you could return an error or set a flag indicating invalid arguments. 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
.source_file => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.source_file = pa; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.arg_ctx = .none; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.output_path => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.output_path = pa; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.arg_ctx = .none; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
.file_name => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.file_name = pa; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
self.parsed.arg_ctx = .none; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
const std = @import("std"); |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
@@ -0,0 +1,97 @@ | ||||||
allocator: std.mem.Allocator, | ||||||
ctx: Ctx, | ||||||
|
||||||
const Compiler = @This(); | ||||||
|
||||||
const CompilerError = error{ | ||||||
NoOutputError, | ||||||
}; | ||||||
|
||||||
var cwd_buf: [1000]u8 = undefined; | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Avoid using global mutable state ( Using a global mutable buffer Apply this diff to allocate the buffer locally: @@ -10,1 +10,0 @@
-var cwd_buf: [1000]u8 = undefined;
@@ -21,0 +21,1 @@
+ var cwd_buf: [1000]u8 = undefined;
@@ -21 +22 @@
- const cwd = try std.fs.cwd().realpath(".", &cwd_buf);
+ const cwd = try std.fs.cwd().realpath(".", &cwd_buf);
@@ -68,0 +69,1 @@
+ var cwd_buf: [1000]u8 = undefined;
@@ -68 +70 @@
- .cwd = std.fs.cwd().realpath(".", &cwd_buf) catch @panic("no cwd"),
+ .cwd = try std.fs.cwd().realpath(".", &cwd_buf), Also applies to: 21-21, 68-68 |
||||||
|
||||||
pub const Ctx = struct { | ||||||
cwd: []const u8, | ||||||
args: *Args, | ||||||
}; | ||||||
|
||||||
pub fn init(allocator: std.mem.Allocator) !*Compiler { | ||||||
const c: *Compiler = try allocator.create(Compiler); | ||||||
errdefer allocator.destroy(c); | ||||||
|
||||||
const cwd = try std.fs.cwd().realpath(".", &cwd_buf); | ||||||
c.* = .{ | ||||||
.allocator = allocator, | ||||||
.ctx = .{ | ||||||
.cwd = cwd, | ||||||
.args = Args.init(allocator) catch |err| std.debug.panic("{any}\n", .{err}), | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Use proper error propagation instead of terminating with panic. Using Apply this diff to propagate errors: @@ -26 +26 @@
- .args = Args.init(allocator) catch |err| std.debug.panic("{any}\n", .{err}),
+ .args = try Args.init(allocator),
@@ -33 +33 @@
- self.ctx.args.parse(self.allocator) catch |err| std.debug.panic("{any}\n", .{err});
+ try self.ctx.args.parse(self.allocator);
@@ -34 +34 @@
- self.ctx.args.validate() catch |err| std.debug.panic("{any}\n", .{err});
+ try self.ctx.args.validate();
@@ -68 +70 @@
- .cwd = std.fs.cwd().realpath(".", &cwd_buf) catch @panic("no cwd"),
+ .cwd = try std.fs.cwd().realpath(".", &cwd_buf), Also applies to: 33-34, 68-68 |
||||||
}, | ||||||
}; | ||||||
return c; | ||||||
} | ||||||
|
||||||
pub fn run(self: *Compiler) !void { | ||||||
self.ctx.args.parse(self.allocator) catch |err| std.debug.panic("{any}\n", .{err}); | ||||||
self.ctx.args.validate() catch |err| std.debug.panic("{any}\n", .{err}); | ||||||
self.ctx.args.debug(); | ||||||
|
||||||
const source_file: *File = try File.init(self.allocator, self.ctx, self.ctx.args.source_file); | ||||||
defer source_file.deinit(self.allocator); | ||||||
try source_file.read(self.allocator); | ||||||
if (source_file.bytes) |bytes| std.debug.print("numbytes: {d}\n", .{bytes.len}); | ||||||
|
||||||
var parser: *Parser = try Parser.init(self.allocator, source_file); | ||||||
defer parser.deinit(self.allocator); | ||||||
|
||||||
try parser.parse(self.allocator); | ||||||
|
||||||
parser.debug(); | ||||||
|
||||||
var inc = try Includer.init(self.allocator, source_file, self.ctx, parser); | ||||||
defer inc.deinit(self.allocator); | ||||||
|
||||||
try inc.fetch(self.allocator, self.ctx); | ||||||
try inc.include(self.allocator); | ||||||
try inc.output_file.write(self.allocator); | ||||||
} | ||||||
|
||||||
// Caller owns returned bytes. | ||||||
pub fn runWithBytes( | ||||||
allocator: std.mem.Allocator, | ||||||
in: []const u8, | ||||||
) ![]u8 { | ||||||
var args: Compiler.Args = .{ | ||||||
.source_file = "sourc.glsl", | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix the typo in the source file name. The source file name Apply this diff to fix the typo: @@ -63 +63 @@
- .source_file = "sourc.glsl",
+ .source_file = "source.glsl", 📝 Committable suggestion
Suggested change
|
||||||
.output_path = "out", | ||||||
.file_name = "shader.out.glsl", | ||||||
}; | ||||||
const ctx: Compiler.Ctx = .{ | ||||||
.cwd = std.fs.cwd().realpath(".", &cwd_buf) catch @panic("no cwd"), | ||||||
.args = &args, | ||||||
}; | ||||||
const source_file: *File = try File.initWithEmbed(allocator, in); | ||||||
defer source_file.deinit(allocator); | ||||||
|
||||||
var parser: *Parser = try Parser.init(allocator, source_file); | ||||||
defer parser.deinit(allocator); | ||||||
|
||||||
try parser.parse(allocator); | ||||||
|
||||||
var inc = try Includer.init(allocator, source_file, ctx, parser); | ||||||
defer inc.deinit(allocator); | ||||||
|
||||||
try inc.fetch(allocator, ctx); | ||||||
try inc.include(allocator); | ||||||
const bytes = inc.output_file.bytes orelse return CompilerError.NoOutputError; | ||||||
return try allocator.dupe(u8, bytes); | ||||||
} | ||||||
|
||||||
pub fn deinit(self: *Compiler) void { | ||||||
self.ctx.args.deinit(self.allocator); | ||||||
self.allocator.destroy(self); | ||||||
} | ||||||
|
||||||
const std = @import("std"); | ||||||
pub const Args = @import("Args.zig"); | ||||||
const File = @import("File.zig"); | ||||||
const Parser = @import("Parser.zig"); | ||||||
const Includer = @import("Includer.zig"); |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,61 @@ | ||||||||||||||||||||||||
path: []const u8 = undefined, | ||||||||||||||||||||||||
absolute_path: ?[]const u8 = null, | ||||||||||||||||||||||||
bytes: ?[]const u8 = null, | ||||||||||||||||||||||||
owned: bool = true, | ||||||||||||||||||||||||
ctx: Compiler.Ctx = undefined, | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
const File = @This(); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
const FileError = error{ | ||||||||||||||||||||||||
NoBytesToWriteError, | ||||||||||||||||||||||||
NoPathError, | ||||||||||||||||||||||||
}; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
const max_bytes = 4096 << 12; | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
pub fn init(allocator: std.mem.Allocator, ctx: Compiler.Ctx, path: []const u8) !*File { | ||||||||||||||||||||||||
const f: *File = try allocator.create(File); | ||||||||||||||||||||||||
errdefer allocator.destroy(f); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
const full_source_path = try std.fs.path.join(allocator, &[_][]const u8{ ctx.cwd, path }); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
f.* = .{ | ||||||||||||||||||||||||
.path = path, | ||||||||||||||||||||||||
.absolute_path = full_source_path, | ||||||||||||||||||||||||
.ctx = ctx, | ||||||||||||||||||||||||
}; | ||||||||||||||||||||||||
return f; | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
pub fn initWithEmbed(allocator: std.mem.Allocator, bytes: []const u8) !*File { | ||||||||||||||||||||||||
const f: *File = try allocator.create(File); | ||||||||||||||||||||||||
errdefer allocator.destroy(f); | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
f.* = .{ | ||||||||||||||||||||||||
.bytes = bytes, | ||||||||||||||||||||||||
.owned = false, | ||||||||||||||||||||||||
}; | ||||||||||||||||||||||||
return f; | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
pub fn read(self: *File, allocator: std.mem.Allocator) !void { | ||||||||||||||||||||||||
const absolute_path = self.absolute_path orelse return FileError.NoPathError; | ||||||||||||||||||||||||
const fs = try std.fs.openFileAbsolute(absolute_path, .{}); | ||||||||||||||||||||||||
self.bytes = try fs.readToEndAlloc(allocator, max_bytes); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
Comment on lines
+42
to
+45
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure file handles are properly closed after file operations In the Apply the following diff to close the file handle: pub fn read(self: *File, allocator: std.mem.Allocator) !void {
const absolute_path = self.absolute_path orelse return FileError.NoPathError;
- const fs = try std.fs.openFileAbsolute(absolute_path, .{});
+ var fs = try std.fs.openFileAbsolute(absolute_path, .{});
+ defer fs.close();
self.bytes = try fs.readToEndAlloc(allocator, max_bytes);
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
pub fn write(self: *File, _: std.mem.Allocator) !void { | ||||||||||||||||||||||||
const absolute_path = self.absolute_path orelse return FileError.NoPathError; | ||||||||||||||||||||||||
const bytes = self.bytes orelse return FileError.NoBytesToWriteError; | ||||||||||||||||||||||||
const fs = try std.fs.createFileAbsolute(absolute_path, .{}); | ||||||||||||||||||||||||
try fs.writeAll(bytes); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
Comment on lines
+48
to
+52
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ensure file handles are properly closed after file operations In the Apply the following diff to close the file handle: pub fn write(self: *File, _: std.mem.Allocator) !void {
const absolute_path = self.absolute_path orelse return FileError.NoPathError;
const bytes = self.bytes orelse return FileError.NoBytesToWriteError;
- const fs = try std.fs.createFileAbsolute(absolute_path, .{});
+ var fs = try std.fs.createFileAbsolute(absolute_path, .{});
+ defer fs.close();
try fs.writeAll(bytes);
} 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
pub fn deinit(self: *File, allocator: std.mem.Allocator) void { | ||||||||||||||||||||||||
if (self.absolute_path) |absolute_path| allocator.free(absolute_path); | ||||||||||||||||||||||||
if (self.owned) if (self.bytes) |b| allocator.free(b); | ||||||||||||||||||||||||
allocator.destroy(self); | ||||||||||||||||||||||||
} | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
const std = @import("std"); | ||||||||||||||||||||||||
const Compiler = @import("Compiler.zig"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix typo in step description
There's a typo in the description of the "fssc" step. "shder" should be "shader".
Apply this diff to fix the typo:
📝 Committable suggestion