build: add oneshot parsing example
This commit is contained in:
parent
54e4a14e38
commit
8684fab23c
38
build.zig
38
build.zig
@ -1,7 +1,45 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn build(b: *std.Build) void {
|
||||
const target = b.standardTargetOptions(.{});
|
||||
|
||||
const nice = b.addModule("nice", .{
|
||||
.source_file = .{ .path = "src/config.zig" },
|
||||
});
|
||||
|
||||
add_examples(b, .{
|
||||
.target = target,
|
||||
.nice_mod = nice,
|
||||
});
|
||||
}
|
||||
|
||||
const ExampleOptions = struct {
|
||||
target: std.zig.CrossTarget,
|
||||
nice_mod: *std.Build.Module,
|
||||
};
|
||||
|
||||
const Example = struct {
|
||||
name: []const u8,
|
||||
file: []const u8,
|
||||
};
|
||||
|
||||
const examples = [_]Example{
|
||||
.{ .name = "parse", .file = "examples/parse.zig" },
|
||||
};
|
||||
|
||||
pub fn add_examples(b: *std.build, options: ExampleOptions) void {
|
||||
const example_step = b.step("examples", "build examples");
|
||||
|
||||
inline for (examples) |example| {
|
||||
const ex_exe = b.addExecutable(.{
|
||||
.name = example.name,
|
||||
.root_source_file = .{ .path = example.file },
|
||||
.target = options.target,
|
||||
.optimize = .Debug,
|
||||
});
|
||||
|
||||
ex_exe.addModule("nice", options.nice_mod);
|
||||
const install = b.addInstallArtifact(ex_exe, .{});
|
||||
example_step.dependOn(&install.step);
|
||||
}
|
||||
}
|
||||
|
29
examples/parse.zig
Normal file
29
examples/parse.zig
Normal file
@ -0,0 +1,29 @@
|
||||
const std = @import("std");
|
||||
|
||||
const nice = @import("nice");
|
||||
|
||||
pub fn main() !void {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
defer _ = gpa.deinit();
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
const args = try std.process.argsAlloc(allocator);
|
||||
defer std.process.argsFree(allocator, args);
|
||||
if (args.len < 2) return;
|
||||
|
||||
const data = try std.fs.cwd().readFileAlloc(allocator, args[1], 4_294_967_295);
|
||||
var needfree = true;
|
||||
defer if (needfree) allocator.free(data);
|
||||
|
||||
var parser = nice.Parser{ .allocator = allocator };
|
||||
|
||||
const document = try parser.parseBuffer(data);
|
||||
defer document.deinit();
|
||||
|
||||
// free data memory to ensure that the parsed document is not holding
|
||||
// references to it.
|
||||
allocator.free(data);
|
||||
needfree = false;
|
||||
|
||||
document.printDebug();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user