Merge pull request #822 from lightpanda-io/undefined_or
Some checks failed
e2e-test / zig build release (push) Has been cancelled
zig-test / zig build dev (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
zig-test / browser fetch (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
nightly build / build-linux-x86_64 (push) Has been cancelled
nightly build / build-linux-aarch64 (push) Has been cancelled
nightly build / build-macos-aarch64 (push) Has been cancelled
nightly build / build-macos-x86_64 (push) Has been cancelled
wpt / web platform tests json output (push) Has been cancelled
wpt / perf-fmt (push) Has been cancelled

Add UndefinedOr(T) union
This commit is contained in:
Karl Seguin
2025-06-28 09:09:45 +08:00
committed by GitHub
3 changed files with 13 additions and 13 deletions

View File

@@ -17,6 +17,7 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
const std = @import("std"); const std = @import("std");
const parser = @import("../netsurf.zig"); const parser = @import("../netsurf.zig");
const Env = @import("../env.zig").Env;
const Page = @import("../page.zig").Page; const Page = @import("../page.zig").Page;
const Allocator = std.mem.Allocator; const Allocator = std.mem.Allocator;
@@ -25,16 +26,12 @@ const DataSet = @This();
element: *parser.Element, element: *parser.Element,
const GetResult = union(enum) { pub fn named_get(self: *const DataSet, name: []const u8, _: *bool, page: *Page) !Env.UndefinedOr([]const u8) {
value: []const u8,
undefined: void,
};
pub fn named_get(self: *const DataSet, name: []const u8, _: *bool, page: *Page) !GetResult {
const normalized_name = try normalize(page.call_arena, name); const normalized_name = try normalize(page.call_arena, name);
if (try parser.elementGetAttribute(self.element, normalized_name)) |value| { if (try parser.elementGetAttribute(self.element, normalized_name)) |value| {
return .{ .value = value }; return .{ .value = value };
} }
return .{ .undefined = {} }; return .undefined;
} }
pub fn named_set(self: *DataSet, name: []const u8, value: []const u8, _: *bool, page: *Page) !void { pub fn named_set(self: *DataSet, name: []const u8, value: []const u8, _: *bool, page: *Page) !void {

View File

@@ -72,15 +72,11 @@ pub const ErrorEvent = struct {
return self.colno; return self.colno;
} }
const ErrorValue = union(enum) { pub fn get_error(self: *const ErrorEvent) Env.UndefinedOr(Env.JsObject) {
obj: Env.JsObject,
undefined: void,
};
pub fn get_error(self: *const ErrorEvent) ErrorValue {
if (self.@"error") |e| { if (self.@"error") |e| {
return .{ .obj = e }; return .{ .value = e };
} }
return .{ .undefined = {} }; return .undefined;
} }
}; };

View File

@@ -1867,6 +1867,13 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
} }
}; };
pub fn UndefinedOr(comptime T: type) type {
return union(enum) {
undefined: void,
value: T,
};
}
fn compileModule(isolate: v8.Isolate, src: []const u8, name: []const u8) !v8.Module { fn compileModule(isolate: v8.Isolate, src: []const u8, name: []const u8) !v8.Module {
// compile // compile
const script_name = v8.String.initUtf8(isolate, name); const script_name = v8.String.initUtf8(isolate, name);