From 58acb2b821b5e74dd9fb2b987805a702b4747c24 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Wed, 17 Sep 2025 13:37:24 +0800 Subject: [PATCH] Convert more DOM_NO_ERR cases to assertions There is some risk to this change. The first is that I made a mistake. The other is that one of the APIs that doesn't currently return an error changes in the future. --- src/browser/Scheduler.zig | 1 - src/browser/ScriptManager.zig | 2 +- src/browser/State.zig | 1 - src/browser/console/console.zig | 1 - src/browser/css/css.zig | 26 ++- src/browser/css/libdom.zig | 42 +++-- src/browser/css/selector.zig | 172 +++++++++----------- src/browser/cssom/CSSRuleList.zig | 1 - src/browser/dom/attribute.zig | 14 +- src/browser/dom/character_data.zig | 16 +- src/browser/dom/document.zig | 1 - src/browser/dom/document_fragment.zig | 4 +- src/browser/dom/document_type.zig | 16 +- src/browser/dom/element.zig | 48 +++--- src/browser/dom/event_target.zig | 3 +- src/browser/dom/html_collection.zig | 6 +- src/browser/dom/intersection_observer.zig | 2 +- src/browser/dom/mutation_observer.zig | 7 +- src/browser/dom/node.zig | 98 +++++------ src/browser/dom/node_filter.zig | 2 +- src/browser/dom/node_iterator.zig | 16 +- src/browser/dom/processing_instruction.zig | 4 +- src/browser/dom/range.zig | 28 ++-- src/browser/dom/shadow_root.zig | 12 +- src/browser/dom/tree_walker.zig | 19 +-- src/browser/dom/walker.zig | 18 +- src/browser/dump.zig | 14 +- src/browser/encoding/TextDecoder.zig | 1 - src/browser/events/event.zig | 12 +- src/browser/events/keyboard_event.zig | 1 - src/browser/events/mouse_event.zig | 1 - src/browser/html/elements.zig | 20 +-- src/browser/html/form.zig | 1 - src/browser/html/iframe.zig | 2 - src/browser/html/window.zig | 1 - src/browser/mime.zig | 1 - src/browser/netsurf.zig | 154 +++++++++--------- src/browser/page.zig | 10 +- src/browser/session.zig | 1 - src/browser/storage/storage.zig | 2 - src/browser/url/url.zig | 1 - src/browser/xhr/xhr.zig | 1 - src/browser/xmlserializer/xmlserializer.zig | 2 +- src/cdp/Node.zig | 12 +- src/cdp/cdp.zig | 1 - src/cdp/domains/dom.zig | 10 +- src/cdp/domains/network.zig | 1 - src/cdp/domains/page.zig | 1 - src/cdp/domains/storage.zig | 1 - src/cdp/testing.zig | 1 - src/log.zig | 1 - src/main.zig | 2 - src/main_wpt.zig | 3 - src/notification.zig | 2 - src/runtime/js.zig | 2 +- src/server.zig | 2 - src/testing.zig | 2 - 57 files changed, 380 insertions(+), 446 deletions(-) diff --git a/src/browser/Scheduler.zig b/src/browser/Scheduler.zig index 688db3b3..5362c5bf 100644 --- a/src/browser/Scheduler.zig +++ b/src/browser/Scheduler.zig @@ -17,7 +17,6 @@ // along with this program. If not, see . const std = @import("std"); -const log = @import("../log.zig"); const Allocator = std.mem.Allocator; const Scheduler = @This(); diff --git a/src/browser/ScriptManager.zig b/src/browser/ScriptManager.zig index 7987aa88..b4aed5f8 100644 --- a/src/browser/ScriptManager.zig +++ b/src/browser/ScriptManager.zig @@ -161,7 +161,7 @@ pub fn addFromElement(self: *ScriptManager, element: *parser.Element) !void { remote_url = try URL.stitch(page.arena, src, page.url.raw, .{ .null_terminated = true }); source = .{ .remote = .{} }; } else { - const inline_source = try parser.nodeTextContent(@ptrCast(element)) orelse return; + const inline_source = parser.nodeTextContent(@ptrCast(element)) orelse return; source = .{ .@"inline" = inline_source }; } diff --git a/src/browser/State.zig b/src/browser/State.zig index 3e046d6c..17817e30 100644 --- a/src/browser/State.zig +++ b/src/browser/State.zig @@ -31,7 +31,6 @@ const parser = @import("netsurf.zig"); const DataSet = @import("html/DataSet.zig"); const ShadowRoot = @import("dom/shadow_root.zig").ShadowRoot; const StyleSheet = @import("cssom/StyleSheet.zig"); -const CSSStyleSheet = @import("cssom/CSSStyleSheet.zig"); const CSSStyleDeclaration = @import("cssom/CSSStyleDeclaration.zig"); // for HTMLScript (but probably needs to be added to more) diff --git a/src/browser/console/console.zig b/src/browser/console/console.zig index 172c0123..2ab3a5d3 100644 --- a/src/browser/console/console.zig +++ b/src/browser/console/console.zig @@ -20,7 +20,6 @@ const std = @import("std"); const builtin = @import("builtin"); const log = @import("../../log.zig"); -const Allocator = std.mem.Allocator; const Page = @import("../page.zig").Page; const JsObject = @import("../env.zig").Env.JsObject; diff --git a/src/browser/css/css.zig b/src/browser/css/css.zig index 01fad349..38288ffa 100644 --- a/src/browser/css/css.zig +++ b/src/browser/css/css.zig @@ -46,17 +46,15 @@ pub fn parse(alloc: std.mem.Allocator, s: []const u8, opts: parser.ParseOptions) // matchFirst call m.match with the first node that matches the selector s, from the // descendants of n and returns true. If none matches, it returns false. pub fn matchFirst(s: *const Selector, node: anytype, m: anytype) !bool { - var c = try node.firstChild(); - while (true) { - if (c == null) break; - - if (try s.match(c.?)) { - try m.match(c.?); + var child = node.firstChild(); + while (child) |c| { + if (try s.match(c)) { + try m.match(c); return true; } - if (try matchFirst(s, c.?, m)) return true; - c = try c.?.nextSibling(); + if (try matchFirst(s, c, m)) return true; + child = c.nextSibling(); } return false; } @@ -64,13 +62,11 @@ pub fn matchFirst(s: *const Selector, node: anytype, m: anytype) !bool { // matchAll call m.match with the all the nodes that matches the selector s, from the // descendants of n. pub fn matchAll(s: *const Selector, node: anytype, m: anytype) !void { - var c = try node.firstChild(); - while (true) { - if (c == null) break; - - if (try s.match(c.?)) try m.match(c.?); - try matchAll(s, c.?, m); - c = try c.?.nextSibling(); + var child = node.firstChild(); + while (child) |c| { + if (try s.match(c)) try m.match(c); + try matchAll(s, c, m); + child = c.nextSibling(); } } diff --git a/src/browser/css/libdom.zig b/src/browser/css/libdom.zig index ea28fb5c..6b006444 100644 --- a/src/browser/css/libdom.zig +++ b/src/browser/css/libdom.zig @@ -26,71 +26,67 @@ const Allocator = std.mem.Allocator; pub const Node = struct { node: *parser.Node, - pub fn firstChild(n: Node) !?Node { - const c = try parser.nodeFirstChild(n.node); + pub fn firstChild(n: Node) ?Node { + const c = parser.nodeFirstChild(n.node); if (c) |cc| return .{ .node = cc }; return null; } - pub fn lastChild(n: Node) !?Node { - const c = try parser.nodeLastChild(n.node); + pub fn lastChild(n: Node) ?Node { + const c = parser.nodeLastChild(n.node); if (c) |cc| return .{ .node = cc }; return null; } - pub fn nextSibling(n: Node) !?Node { - const c = try parser.nodeNextSibling(n.node); + pub fn nextSibling(n: Node) ?Node { + const c = parser.nodeNextSibling(n.node); if (c) |cc| return .{ .node = cc }; return null; } - pub fn prevSibling(n: Node) !?Node { - const c = try parser.nodePreviousSibling(n.node); + pub fn prevSibling(n: Node) ?Node { + const c = parser.nodePreviousSibling(n.node); if (c) |cc| return .{ .node = cc }; return null; } - pub fn parent(n: Node) !?Node { - const c = try parser.nodeParentNode(n.node); + pub fn parent(n: Node) ?Node { + const c = parser.nodeParentNode(n.node); if (c) |cc| return .{ .node = cc }; return null; } pub fn isElement(n: Node) bool { - const t = parser.nodeType(n.node) catch return false; - return t == .element; + return parser.nodeType(n.node) == .element; } pub fn isDocument(n: Node) bool { - const t = parser.nodeType(n.node) catch return false; - return t == .document; + return parser.nodeType(n.node) == .document; } pub fn isComment(n: Node) bool { - const t = parser.nodeType(n.node) catch return false; - return t == .comment; + return parser.nodeType(n.node) == .comment; } pub fn isText(n: Node) bool { - const t = parser.nodeType(n.node) catch return false; - return t == .text; + return parser.nodeType(n.node) == .text; } - pub fn text(n: Node) !?[]const u8 { - const data = try parser.nodeTextContent(n.node); + pub fn text(n: Node) ?[]const u8 { + const data = parser.nodeTextContent(n.node); if (data == null) return null; if (data.?.len == 0) return null; return std.mem.trim(u8, data.?, &std.ascii.whitespace); } - pub fn isEmptyText(n: Node) !bool { - const data = try parser.nodeTextContent(n.node); + pub fn isEmptyText(n: Node) bool { + const data = parser.nodeTextContent(n.node); if (data == null) return true; if (data.?.len == 0) return true; @@ -98,7 +94,7 @@ pub const Node = struct { } pub fn tag(n: Node) ![]const u8 { - return try parser.nodeName(n.node); + return parser.nodeName(n.node); } pub fn attr(n: Node, key: []const u8) !?[]const u8 { diff --git a/src/browser/css/selector.zig b/src/browser/css/selector.zig index 00ef1558..73a6a78e 100644 --- a/src/browser/css/selector.zig +++ b/src/browser/css/selector.zig @@ -334,41 +334,39 @@ pub const Selector = union(enum) { if (!try v.second.match(n)) return false; // The first must match a ascendent. - var p = try n.parent(); - while (p != null) { - if (try v.first.match(p.?)) { + var parent = n.parent(); + while (parent) |p| { + if (try v.first.match(p)) { return true; } - p = try p.?.parent(); + parent = p.parent(); } return false; }, .child => { - const p = try n.parent(); - if (p == null) return false; - - return try v.second.match(n) and try v.first.match(p.?); + const p = n.parent() orelse return false; + return try v.second.match(n) and try v.first.match(p); }, .next_sibling => { if (!try v.second.match(n)) return false; - var c = try n.prevSibling(); - while (c != null) { - if (c.?.isText() or c.?.isComment()) { - c = try c.?.prevSibling(); + var child = n.prevSibling(); + while (child) |c| { + if (c.isText() or c.isComment()) { + child = c.prevSibling(); continue; } - return try v.first.match(c.?); + return try v.first.match(c); } return false; }, .subsequent_sibling => { if (!try v.second.match(n)) return false; - var c = try n.prevSibling(); - while (c != null) { - if (try v.first.match(c.?)) return true; - c = try c.?.prevSibling(); + var child = n.prevSibling(); + while (child) |c| { + if (try v.first.match(c)) return true; + child = c.prevSibling(); } return false; }, @@ -438,10 +436,10 @@ pub const Selector = union(enum) { // Only containsOwn is implemented. if (v.own == false) return Error.UnsupportedContainsPseudoClass; - var c = try n.firstChild(); - while (c != null) { - if (c.?.isText()) { - const text = try c.?.text(); + var child = n.firstChild(); + while (child) |c| { + if (c.isText()) { + const text = c.text(); if (text) |_text| { if (contains(_text, v.val, false)) { // we are case sensitive. Is this correct behavior? return true; @@ -449,7 +447,7 @@ pub const Selector = union(enum) { } } - c = try c.?.nextSibling(); + child = c.nextSibling(); } return false; }, @@ -477,16 +475,16 @@ pub const Selector = union(enum) { .empty => { if (!n.isElement()) return false; - var c = try n.firstChild(); - while (c != null) { - if (c.?.isElement()) return false; + var child = n.firstChild(); + while (child) |c| { + if (c.isElement()) return false; - if (c.?.isText()) { - if (try c.?.isEmptyText()) continue; + if (c.isText()) { + if (c.isEmptyText()) continue; return false; } - c = try c.?.nextSibling(); + child = c.nextSibling(); } return true; @@ -494,7 +492,7 @@ pub const Selector = union(enum) { .root => { if (!n.isElement()) return false; - const p = try n.parent(); + const p = n.parent(); return (p != null and p.?.isDocument()); }, .link => { @@ -609,24 +607,23 @@ pub const Selector = union(enum) { } fn hasLegendInPreviousSiblings(n: anytype) anyerror!bool { - var c = try n.prevSibling(); - while (c != null) { - const ctag = try c.?.tag(); + var child = n.prevSibling(); + while (child) |c| { + const ctag = try c.tag(); if (std.ascii.eqlIgnoreCase("legend", ctag)) return true; - c = try c.?.prevSibling(); + child = c.prevSibling(); } return false; } fn inDisabledFieldset(n: anytype) anyerror!bool { - const p = try n.parent(); - if (p == null) return false; + const p = n.parent() orelse return false; const ntag = try n.tag(); - const ptag = try p.?.tag(); + const ptag = try p.tag(); if (std.ascii.eqlIgnoreCase("fieldset", ptag) and - try p.?.attr("disabled") != null and + try p.attr("disabled") != null and (!std.ascii.eqlIgnoreCase("legend", ntag) or try hasLegendInPreviousSiblings(n))) { return true; @@ -642,7 +639,7 @@ pub const Selector = union(enum) { // ``` // https://github.com/andybalholm/cascadia/blob/master/pseudo_classes.go#L434 - return try inDisabledFieldset(p.?); + return try inDisabledFieldset(p); } fn langMatch(lang: []const u8, n: anytype) anyerror!bool { @@ -656,10 +653,8 @@ pub const Selector = union(enum) { } // if the tag doesn't match, try the parent. - const p = try n.parent(); - if (p == null) return false; - - return langMatch(lang, p.?); + const p = n.parent() orelse return false; + return langMatch(lang, p); } // onlyChildMatch implements :only-child @@ -667,25 +662,24 @@ pub const Selector = union(enum) { fn onlyChildMatch(of_type: bool, n: anytype) anyerror!bool { if (!n.isElement()) return false; - const p = try n.parent(); - if (p == null) return false; + const p = n.parent() orelse return false; const ntag = try n.tag(); var count: usize = 0; - var c = try p.?.firstChild(); + var child = p.firstChild(); // loop hover all n siblings. - while (c != null) { + while (child) |c| { // ignore non elements or others tags if of-type is true. - if (!c.?.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.?.tag()))) { - c = try c.?.nextSibling(); + if (!c.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.tag()))) { + child = c.nextSibling(); continue; } count += 1; if (count > 1) return false; - c = try c.?.nextSibling(); + child = c.nextSibling(); } return count == 1; @@ -696,27 +690,25 @@ pub const Selector = union(enum) { fn simpleNthLastChildMatch(b: isize, of_type: bool, n: anytype) anyerror!bool { if (!n.isElement()) return false; - const p = try n.parent(); - if (p == null) return false; - + const p = n.parent() orelse return false; const ntag = try n.tag(); var count: isize = 0; - var c = try p.?.lastChild(); + var child = p.lastChild(); // loop hover all n siblings. - while (c != null) { + while (child) |c| { // ignore non elements or others tags if of-type is true. - if (!c.?.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.?.tag()))) { - c = try c.?.prevSibling(); + if (!c.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.tag()))) { + child = c.prevSibling(); continue; } count += 1; - if (n.eql(c.?)) return count == b; + if (n.eql(c)) return count == b; if (count >= b) return false; - c = try c.?.prevSibling(); + child = c.prevSibling(); } return false; @@ -727,27 +719,25 @@ pub const Selector = union(enum) { fn simpleNthChildMatch(b: isize, of_type: bool, n: anytype) anyerror!bool { if (!n.isElement()) return false; - const p = try n.parent(); - if (p == null) return false; - + const p = n.parent() orelse return false; const ntag = try n.tag(); var count: isize = 0; - var c = try p.?.firstChild(); + var child = p.firstChild(); // loop hover all n siblings. - while (c != null) { + while (child) |c| { // ignore non elements or others tags if of-type is true. - if (!c.?.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.?.tag()))) { - c = try c.?.nextSibling(); + if (!c.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.tag()))) { + child = c.nextSibling(); continue; } count += 1; - if (n.eql(c.?)) return count == b; + if (n.eql(c)) return count == b; if (count >= b) return false; - c = try c.?.nextSibling(); + child = c.nextSibling(); } return false; @@ -759,29 +749,27 @@ pub const Selector = union(enum) { fn nthChildMatch(a: isize, b: isize, last: bool, of_type: bool, n: anytype) anyerror!bool { if (!n.isElement()) return false; - const p = try n.parent(); - if (p == null) return false; - + const p = n.parent() orelse return false; const ntag = try n.tag(); var i: isize = -1; var count: isize = 0; - var c = try p.?.firstChild(); + var child = p.firstChild(); // loop hover all n siblings. - while (c != null) { + while (child) |c| { // ignore non elements or others tags if of-type is true. - if (!c.?.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.?.tag()))) { - c = try c.?.nextSibling(); + if (!c.isElement() or (of_type and !std.mem.eql(u8, ntag, try c.tag()))) { + child = c.nextSibling(); continue; } count += 1; - if (n.eql(c.?)) { + if (n.eql(c)) { i = count; if (!last) break; } - c = try c.?.nextSibling(); + child = c.nextSibling(); } if (i == -1) return false; @@ -794,21 +782,21 @@ pub const Selector = union(enum) { } fn hasDescendantMatch(s: *const Selector, n: anytype) anyerror!bool { - var c = try n.firstChild(); - while (c != null) { - if (try s.match(c.?)) return true; - if (c.?.isElement() and try hasDescendantMatch(s, c.?)) return true; - c = try c.?.nextSibling(); + var child = n.firstChild(); + while (child) |c| { + if (try s.match(c)) return true; + if (c.isElement() and try hasDescendantMatch(s, c)) return true; + child = c.nextSibling(); } return false; } fn hasChildMatch(s: *const Selector, n: anytype) anyerror!bool { - var c = try n.firstChild(); - while (c != null) { - if (try s.match(c.?)) return true; - c = try c.?.nextSibling(); + var child = n.firstChild(); + while (child) |c| { + if (try s.match(c)) return true; + child = c.nextSibling(); } return false; @@ -859,23 +847,23 @@ pub const NodeTest = struct { name: []const u8 = "", att: ?[]const u8 = null, - pub fn firstChild(n: *const NodeTest) !?*const NodeTest { + pub fn firstChild(n: *const NodeTest) ?*const NodeTest { return n.child; } - pub fn lastChild(n: *const NodeTest) !?*const NodeTest { + pub fn lastChild(n: *const NodeTest) ?*const NodeTest { return n.last; } - pub fn nextSibling(n: *const NodeTest) !?*const NodeTest { + pub fn nextSibling(n: *const NodeTest) ?*const NodeTest { return n.sibling; } - pub fn prevSibling(n: *const NodeTest) !?*const NodeTest { + pub fn prevSibling(n: *const NodeTest) ?*const NodeTest { return n.prev; } - pub fn parent(n: *const NodeTest) !?*const NodeTest { + pub fn parent(n: *const NodeTest) ?*const NodeTest { return n.par; } @@ -891,7 +879,7 @@ pub const NodeTest = struct { return false; } - pub fn text(_: *const NodeTest) !?[]const u8 { + pub fn text(_: *const NodeTest) ?[]const u8 { return null; } @@ -899,7 +887,7 @@ pub const NodeTest = struct { return false; } - pub fn isEmptyText(_: *const NodeTest) !bool { + pub fn isEmptyText(_: *const NodeTest) bool { return false; } diff --git a/src/browser/cssom/CSSRuleList.zig b/src/browser/cssom/CSSRuleList.zig index 0da4cd0b..471a75ce 100644 --- a/src/browser/cssom/CSSRuleList.zig +++ b/src/browser/cssom/CSSRuleList.zig @@ -19,7 +19,6 @@ const std = @import("std"); const CSSRule = @import("CSSRule.zig"); -const StyleSheet = @import("StyleSheet.zig").StyleSheet; const CSSImportRule = CSSRule.CSSImportRule; diff --git a/src/browser/dom/attribute.zig b/src/browser/dom/attribute.zig index 0c719c63..62de3bc7 100644 --- a/src/browser/dom/attribute.zig +++ b/src/browser/dom/attribute.zig @@ -25,24 +25,24 @@ pub const Attr = struct { pub const prototype = *Node; pub const subtype = .node; - pub fn get_namespaceURI(self: *parser.Attribute) !?[]const u8 { - return try parser.nodeGetNamespace(parser.attributeToNode(self)); + pub fn get_namespaceURI(self: *parser.Attribute) ?[]const u8 { + return parser.nodeGetNamespace(parser.attributeToNode(self)); } - pub fn get_prefix(self: *parser.Attribute) !?[]const u8 { - return try parser.nodeGetPrefix(parser.attributeToNode(self)); + pub fn get_prefix(self: *parser.Attribute) ?[]const u8 { + return parser.nodeGetPrefix(parser.attributeToNode(self)); } pub fn get_localName(self: *parser.Attribute) ![]const u8 { - return try parser.nodeLocalName(parser.attributeToNode(self)); + return parser.nodeLocalName(parser.attributeToNode(self)); } pub fn get_name(self: *parser.Attribute) ![]const u8 { - return try parser.attributeGetName(self); + return parser.attributeGetName(self); } pub fn get_value(self: *parser.Attribute) !?[]const u8 { - return try parser.attributeGetValue(self); + return parser.attributeGetValue(self); } pub fn set_value(self: *parser.Attribute, v: []const u8) !?[]const u8 { diff --git a/src/browser/dom/character_data.zig b/src/browser/dom/character_data.zig index 405313b1..e8614ad4 100644 --- a/src/browser/dom/character_data.zig +++ b/src/browser/dom/character_data.zig @@ -51,7 +51,7 @@ pub const CharacterData = struct { } pub fn get_nextElementSibling(self: *parser.CharacterData) !?ElementUnion { - const res = try parser.nodeNextElementSibling(parser.characterDataToNode(self)); + const res = parser.nodeNextElementSibling(parser.characterDataToNode(self)); if (res == null) { return null; } @@ -59,7 +59,7 @@ pub const CharacterData = struct { } pub fn get_previousElementSibling(self: *parser.CharacterData) !?ElementUnion { - const res = try parser.nodePreviousElementSibling(parser.characterDataToNode(self)); + const res = parser.nodePreviousElementSibling(parser.characterDataToNode(self)); if (res == null) { return null; } @@ -68,8 +68,8 @@ pub const CharacterData = struct { // Read/Write attributes - pub fn get_data(self: *parser.CharacterData) ![]const u8 { - return try parser.characterDataData(self); + pub fn get_data(self: *parser.CharacterData) []const u8 { + return parser.characterDataData(self); } pub fn set_data(self: *parser.CharacterData, data: []const u8) !void { @@ -96,18 +96,18 @@ pub const CharacterData = struct { } pub fn _substringData(self: *parser.CharacterData, offset: u32, count: u32) ![]const u8 { - return try parser.characterDataSubstringData(self, offset, count); + return parser.characterDataSubstringData(self, offset, count); } // netsurf's CharacterData (text, comment) doesn't implement the // dom_node_get_attributes and thus will crash if we try to call nodeIsEqualNode. - pub fn _isEqualNode(self: *parser.CharacterData, other_node: *parser.Node) !bool { - if (try parser.nodeType(@ptrCast(@alignCast(self))) != try parser.nodeType(other_node)) { + pub fn _isEqualNode(self: *parser.CharacterData, other_node: *parser.Node) bool { + if (parser.nodeType(@ptrCast(@alignCast(self))) != parser.nodeType(other_node)) { return false; } const other: *parser.CharacterData = @ptrCast(other_node); - if (std.mem.eql(u8, try get_data(self), try get_data(other)) == false) { + if (std.mem.eql(u8, get_data(self), get_data(other)) == false) { return false; } diff --git a/src/browser/dom/document.zig b/src/browser/dom/document.zig index 3e91b7cb..e0562ec6 100644 --- a/src/browser/dom/document.zig +++ b/src/browser/dom/document.zig @@ -18,7 +18,6 @@ const std = @import("std"); -const log = @import("../../log.zig"); const parser = @import("../netsurf.zig"); const Page = @import("../page.zig").Page; diff --git a/src/browser/dom/document_fragment.zig b/src/browser/dom/document_fragment.zig index 7841d466..284f57fe 100644 --- a/src/browser/dom/document_fragment.zig +++ b/src/browser/dom/document_fragment.zig @@ -38,8 +38,8 @@ pub const DocumentFragment = struct { ); } - pub fn _isEqualNode(self: *parser.DocumentFragment, other_node: *parser.Node) !bool { - const other_type = try parser.nodeType(other_node); + pub fn _isEqualNode(self: *parser.DocumentFragment, other_node: *parser.Node) bool { + const other_type = parser.nodeType(other_node); if (other_type != .document_fragment) { return false; } diff --git a/src/browser/dom/document_type.zig b/src/browser/dom/document_type.zig index f1f923de..4dc206cc 100644 --- a/src/browser/dom/document_type.zig +++ b/src/browser/dom/document_type.zig @@ -29,21 +29,21 @@ pub const DocumentType = struct { pub const subtype = .node; pub fn get_name(self: *parser.DocumentType) ![]const u8 { - return try parser.documentTypeGetName(self); + return parser.documentTypeGetName(self); } - pub fn get_publicId(self: *parser.DocumentType) ![]const u8 { - return try parser.documentTypeGetPublicId(self); + pub fn get_publicId(self: *parser.DocumentType) []const u8 { + return parser.documentTypeGetPublicId(self); } - pub fn get_systemId(self: *parser.DocumentType) ![]const u8 { - return try parser.documentTypeGetSystemId(self); + pub fn get_systemId(self: *parser.DocumentType) []const u8 { + return parser.documentTypeGetSystemId(self); } // netsurf's DocumentType doesn't implement the dom_node_get_attributes // and thus will crash if we try to call nodeIsEqualNode. pub fn _isEqualNode(self: *parser.DocumentType, other_node: *parser.Node) !bool { - if (try parser.nodeType(other_node) != .document_type) { + if (parser.nodeType(other_node) != .document_type) { return false; } @@ -51,10 +51,10 @@ pub const DocumentType = struct { if (std.mem.eql(u8, try get_name(self), try get_name(other)) == false) { return false; } - if (std.mem.eql(u8, try get_publicId(self), try get_publicId(other)) == false) { + if (std.mem.eql(u8, get_publicId(self), get_publicId(other)) == false) { return false; } - if (std.mem.eql(u8, try get_systemId(self), try get_systemId(other)) == false) { + if (std.mem.eql(u8, get_systemId(self), get_systemId(other)) == false) { return false; } return true; diff --git a/src/browser/dom/element.zig b/src/browser/dom/element.zig index 5482dc65..c4d528d9 100644 --- a/src/browser/dom/element.zig +++ b/src/browser/dom/element.zig @@ -61,7 +61,7 @@ pub const Element = struct { pub fn toInterfaceT(comptime T: type, e: *parser.Element) !T { const tagname = try parser.elementGetTagName(e) orelse { // If the owner's document is HTML, assume we have an HTMLElement. - const doc = try parser.nodeOwnerDocument(parser.elementToNode(e)); + const doc = parser.nodeOwnerDocument(parser.elementToNode(e)); if (doc != null and !doc.?.is_html) { return .{ .HTMLElement = @as(*parser.ElementHTML, @ptrCast(e)) }; } @@ -73,7 +73,7 @@ pub const Element = struct { const tag = parser.Tag.fromString(tagname) catch { // If the owner's document is HTML, assume we have an HTMLElement. - const doc = try parser.nodeOwnerDocument(parser.elementToNode(e)); + const doc = parser.nodeOwnerDocument(parser.elementToNode(e)); if (doc != null and doc.?.is_html) { return .{ .HTMLElement = @as(*parser.ElementHTML, @ptrCast(e)) }; } @@ -87,12 +87,12 @@ pub const Element = struct { // JS funcs // -------- - pub fn get_namespaceURI(self: *parser.Element) !?[]const u8 { - return try parser.nodeGetNamespace(parser.elementToNode(self)); + pub fn get_namespaceURI(self: *parser.Element) ?[]const u8 { + return parser.nodeGetNamespace(parser.elementToNode(self)); } - pub fn get_prefix(self: *parser.Element) !?[]const u8 { - return try parser.nodeGetPrefix(parser.elementToNode(self)); + pub fn get_prefix(self: *parser.Element) ?[]const u8 { + return parser.nodeGetPrefix(parser.elementToNode(self)); } pub fn get_localName(self: *parser.Element) ![]const u8 { @@ -150,7 +150,7 @@ pub const Element = struct { pub fn set_innerHTML(self: *parser.Element, str: []const u8, page: *Page) !void { const node = parser.elementToNode(self); - const doc = try parser.nodeOwnerDocument(node) orelse return parser.DOMError.WrongDocument; + const doc = parser.nodeOwnerDocument(node) orelse return parser.DOMError.WrongDocument; // parse the fragment const fragment = try parser.documentParseFragmentFromStr(doc, str); @@ -168,9 +168,9 @@ pub const Element = struct { // or an actual document. In a blank page, something like: // x.innerHTML = ''; // does _not_ create an empty script, but in a real page, it does. Weird. - const html = try parser.nodeFirstChild(fragment_node) orelse return; - const head = try parser.nodeFirstChild(html) orelse return; - const body = try parser.nodeNextSibling(head) orelse return; + const html = parser.nodeFirstChild(fragment_node) orelse return; + const head = parser.nodeFirstChild(html) orelse return; + const body = parser.nodeNextSibling(head) orelse return; if (try parser.elementTag(self) == .template) { // HTMLElementTemplate is special. We don't append these as children @@ -179,11 +179,11 @@ pub const Element = struct { // a new fragment const clean = try parser.documentCreateDocumentFragment(doc); const children = try parser.nodeGetChildNodes(body); - const ln = try parser.nodeListLength(children); + const ln = parser.nodeListLength(children); for (0..ln) |_| { // always index 0, because nodeAppendChild moves the node out of // the nodeList and into the new tree - const child = try parser.nodeListItem(children, 0) orelse continue; + const child = parser.nodeListItem(children, 0) orelse continue; _ = try parser.nodeAppendChild(@ptrCast(@alignCast(clean)), child); } @@ -197,22 +197,22 @@ pub const Element = struct { { // First, copy some of the head element const children = try parser.nodeGetChildNodes(head); - const ln = try parser.nodeListLength(children); + const ln = parser.nodeListLength(children); for (0..ln) |_| { // always index 0, because nodeAppendChild moves the node out of // the nodeList and into the new tree - const child = try parser.nodeListItem(children, 0) orelse continue; + const child = parser.nodeListItem(children, 0) orelse continue; _ = try parser.nodeAppendChild(node, child); } } { const children = try parser.nodeGetChildNodes(body); - const ln = try parser.nodeListLength(children); + const ln = parser.nodeListLength(children); for (0..ln) |_| { // always index 0, because nodeAppendChild moves the node out of // the nodeList and into the new tree - const child = try parser.nodeListItem(children, 0) orelse continue; + const child = parser.nodeListItem(children, 0) orelse continue; _ = try parser.nodeAppendChild(node, child); } } @@ -234,7 +234,7 @@ pub const Element = struct { } return parser.nodeToElement(current.node); } - current = try current.parent() orelse return null; + current = current.parent() orelse return null; } } @@ -407,13 +407,13 @@ pub const Element = struct { // NonDocumentTypeChildNode // https://dom.spec.whatwg.org/#interface-nondocumenttypechildnode pub fn get_previousElementSibling(self: *parser.Element) !?Union { - const res = try parser.nodePreviousElementSibling(parser.elementToNode(self)); + const res = parser.nodePreviousElementSibling(parser.elementToNode(self)); if (res == null) return null; return try toInterface(res.?); } pub fn get_nextElementSibling(self: *parser.Element) !?Union { - const res = try parser.nodeNextElementSibling(parser.elementToNode(self)); + const res = parser.nodeNextElementSibling(parser.elementToNode(self)); if (res == null) return null; return try toInterface(res.?); } @@ -426,7 +426,7 @@ pub const Element = struct { while (true) { next = try walker.get_next(root, next) orelse return null; // ignore non-element nodes. - if (try parser.nodeType(next.?) != .element) { + if (parser.nodeType(next.?) != .element) { continue; } const e = parser.nodeToElement(next.?); @@ -474,7 +474,7 @@ pub const Element = struct { // Returns a 0 DOMRect object if the element is eventually detached from the main window pub fn _getBoundingClientRect(self: *parser.Element, page: *Page) !DOMRect { // Since we are lazy rendering we need to do this check. We could store the renderer in a viewport such that it could cache these, but it would require tracking changes. - if (!try page.isNodeAttached(parser.elementToNode(self))) { + if (!page.isNodeAttached(parser.elementToNode(self))) { return DOMRect{ .x = 0, .y = 0, @@ -493,7 +493,7 @@ pub const Element = struct { // We do not render so it only always return the element's bounding rect. // Returns an empty array if the element is eventually detached from the main window pub fn _getClientRects(self: *parser.Element, page: *Page) ![]DOMRect { - if (!try page.isNodeAttached(parser.elementToNode(self))) { + if (!page.isNodeAttached(parser.elementToNode(self))) { return &.{}; } const heap_ptr = try page.call_arena.create(DOMRect); @@ -549,7 +549,7 @@ pub const Element = struct { } // Not sure what to do if there is no owner document - const doc = try parser.nodeOwnerDocument(@ptrCast(self)) orelse return error.InvalidArgument; + const doc = parser.nodeOwnerDocument(@ptrCast(self)) orelse return error.InvalidArgument; const fragment = try parser.documentCreateDocumentFragment(doc); const sr = try page.arena.create(ShadowRoot); sr.* = .{ @@ -595,7 +595,7 @@ pub const Element = struct { // for related elements JIT by walking the tree, but there could be // cases in libdom or the Zig WebAPI where this reference is kept const as_node: *parser.Node = @ptrCast(self); - const parent = try parser.nodeParentNode(as_node) orelse return; + const parent = parser.nodeParentNode(as_node) orelse return; _ = try Node._removeChild(parent, as_node); } }; diff --git a/src/browser/dom/event_target.zig b/src/browser/dom/event_target.zig index acaf5c3f..5f4064c6 100644 --- a/src/browser/dom/event_target.zig +++ b/src/browser/dom/event_target.zig @@ -17,7 +17,6 @@ // along with this program. If not, see . const std = @import("std"); -const Env = @import("../env.zig").Env; const parser = @import("../netsurf.zig"); const Page = @import("../page.zig").Page; @@ -48,7 +47,7 @@ pub const EventTarget = struct { pub fn toInterface(et: *parser.EventTarget, page: *Page) !Union { // libdom assumes that all event targets are libdom nodes. They are not. - switch (try parser.eventTargetInternalType(et)) { + switch (parser.eventTargetInternalType(et)) { .libdom_node => { return .{ .node = try nod.Node.toInterface(@as(*parser.Node, @ptrCast(et))) }; }, diff --git a/src/browser/dom/html_collection.zig b/src/browser/dom/html_collection.zig index 11dd4158..752b33d3 100644 --- a/src/browser/dom/html_collection.zig +++ b/src/browser/dom/html_collection.zig @@ -344,7 +344,7 @@ pub const HTMLCollection = struct { var node = try self.start() orelse return 0; while (true) { - if (try parser.nodeType(node) == .element) { + if (parser.nodeType(node) == .element) { if (try self.matcher.match(node)) { len += 1; } @@ -371,7 +371,7 @@ pub const HTMLCollection = struct { } while (true) { - if (try parser.nodeType(node) == .element) { + if (parser.nodeType(node) == .element) { if (try self.matcher.match(node)) { // check if we found the searched element. if (i == index) { @@ -405,7 +405,7 @@ pub const HTMLCollection = struct { var node = try self.start() orelse return null; while (true) { - if (try parser.nodeType(node) == .element) { + if (parser.nodeType(node) == .element) { if (try self.matcher.match(node)) { const elem = @as(*parser.Element, @ptrCast(node)); diff --git a/src/browser/dom/intersection_observer.zig b/src/browser/dom/intersection_observer.zig index 5d1955ad..c493a539 100644 --- a/src/browser/dom/intersection_observer.zig +++ b/src/browser/dom/intersection_observer.zig @@ -157,7 +157,7 @@ pub const IntersectionObserverEntry = struct { return self.page.renderer.boundingRect(); } - const root_type = try parser.nodeType(root); + const root_type = parser.nodeType(root); var element: *parser.Element = undefined; switch (root_type) { diff --git a/src/browser/dom/mutation_observer.zig b/src/browser/dom/mutation_observer.zig index 4512f3c4..bbca5610 100644 --- a/src/browser/dom/mutation_observer.zig +++ b/src/browser/dom/mutation_observer.zig @@ -17,7 +17,6 @@ // along with this program. If not, see . const std = @import("std"); -const Allocator = std.mem.Allocator; const log = @import("../../log.zig"); const parser = @import("../netsurf.zig"); @@ -284,7 +283,7 @@ const Observer = struct { const mutation_event = parser.eventToMutationEvent(event); const event_type = blk: { - const t = try parser.eventType(event); + const t = parser.eventType(event); break :blk std.meta.stringToEnum(MutationEventType, t) orelse return; }; @@ -302,12 +301,12 @@ const Observer = struct { .DOMAttrModified => { record.attribute_name = parser.mutationEventAttributeName(mutation_event) catch null; if (self.options.attributeOldValue) { - record.old_value = parser.mutationEventPrevValue(mutation_event) catch null; + record.old_value = parser.mutationEventPrevValue(mutation_event); } }, .DOMCharacterDataModified => { if (self.options.characterDataOldValue) { - record.old_value = parser.mutationEventPrevValue(mutation_event) catch null; + record.old_value = parser.mutationEventPrevValue(mutation_event); } }, .DOMNodeInserted => { diff --git a/src/browser/dom/node.zig b/src/browser/dom/node.zig index 35f91208..b95a549b 100644 --- a/src/browser/dom/node.zig +++ b/src/browser/dom/node.zig @@ -67,7 +67,7 @@ pub const Node = struct { pub const subtype = .node; pub fn toInterface(node: *parser.Node) !Union { - return switch (try parser.nodeType(node)) { + return switch (parser.nodeType(node)) { .element => try Element.toInterfaceT( Union, @as(*parser.Element, @ptrCast(node)), @@ -124,7 +124,7 @@ pub const Node = struct { } pub fn get_firstChild(self: *parser.Node) !?Union { - const res = try parser.nodeFirstChild(self); + const res = parser.nodeFirstChild(self); if (res == null) { return null; } @@ -132,7 +132,7 @@ pub const Node = struct { } pub fn get_lastChild(self: *parser.Node) !?Union { - const res = try parser.nodeLastChild(self); + const res = parser.nodeLastChild(self); if (res == null) { return null; } @@ -140,7 +140,7 @@ pub const Node = struct { } pub fn get_nextSibling(self: *parser.Node) !?Union { - const res = try parser.nodeNextSibling(self); + const res = parser.nodeNextSibling(self); if (res == null) { return null; } @@ -148,7 +148,7 @@ pub const Node = struct { } pub fn get_previousSibling(self: *parser.Node) !?Union { - const res = try parser.nodePreviousSibling(self); + const res = parser.nodePreviousSibling(self); if (res == null) { return null; } @@ -156,7 +156,7 @@ pub const Node = struct { } pub fn get_parentNode(self: *parser.Node) !?Union { - const res = try parser.nodeParentNode(self); + const res = parser.nodeParentNode(self); if (res == null) { return null; } @@ -164,7 +164,7 @@ pub const Node = struct { } pub fn get_parentElement(self: *parser.Node) !?ElementUnion { - const res = try parser.nodeParentElement(self); + const res = parser.nodeParentElement(self); if (res == null) { return null; } @@ -176,11 +176,11 @@ pub const Node = struct { } pub fn get_nodeType(self: *parser.Node) !u8 { - return @intFromEnum(try parser.nodeType(self)); + return @intFromEnum(parser.nodeType(self)); } pub fn get_ownerDocument(self: *parser.Node) !?*parser.DocumentHTML { - const res = try parser.nodeOwnerDocument(self); + const res = parser.nodeOwnerDocument(self); if (res == null) { return null; } @@ -190,12 +190,12 @@ pub const Node = struct { pub fn get_isConnected(self: *parser.Node) !bool { var node = self; while (true) { - const node_type = try parser.nodeType(node); + const node_type = parser.nodeType(node); if (node_type == .document) { return true; } - if (try parser.nodeParentNode(node)) |parent| { + if (parser.nodeParentNode(node)) |parent| { // didn't find a document, but node has a parent, let's see // if it's connected; node = parent; @@ -222,15 +222,15 @@ pub const Node = struct { // Read/Write attributes pub fn get_nodeValue(self: *parser.Node) !?[]const u8 { - return try parser.nodeValue(self); + return parser.nodeValue(self); } pub fn set_nodeValue(self: *parser.Node, data: []u8) !void { try parser.nodeSetValue(self, data); } - pub fn get_textContent(self: *parser.Node) !?[]const u8 { - return try parser.nodeTextContent(self); + pub fn get_textContent(self: *parser.Node) ?[]const u8 { + return parser.nodeTextContent(self); } pub fn set_textContent(self: *parser.Node, data: []u8) !void { @@ -240,8 +240,8 @@ pub const Node = struct { // Methods pub fn _appendChild(self: *parser.Node, child: *parser.Node) !Union { - const self_owner = try parser.nodeOwnerDocument(self); - const child_owner = try parser.nodeOwnerDocument(child); + const self_owner = parser.nodeOwnerDocument(self); + const child_owner = parser.nodeOwnerDocument(child); // If the node to be inserted has a different ownerDocument than the parent node, // modern browsers automatically adopt the node and its descendants into @@ -272,14 +272,14 @@ pub const Node = struct { return 0; } - const docself = try parser.nodeOwnerDocument(self) orelse blk: { - if (try parser.nodeType(self) == .document) { + const docself = parser.nodeOwnerDocument(self) orelse blk: { + if (parser.nodeType(self) == .document) { break :blk @as(*parser.Document, @ptrCast(self)); } break :blk null; }; - const docother = try parser.nodeOwnerDocument(other) orelse blk: { - if (try parser.nodeType(other) == .document) { + const docother = parser.nodeOwnerDocument(other) orelse blk: { + if (parser.nodeType(other) == .document) { break :blk @as(*parser.Document, @ptrCast(other)); } break :blk null; @@ -299,8 +299,8 @@ pub const Node = struct { @intFromEnum(parser.DocumentPosition.contained_by); } - const rootself = try parser.nodeGetRootNode(self); - const rootother = try parser.nodeGetRootNode(other); + const rootself = parser.nodeGetRootNode(self); + const rootother = parser.nodeGetRootNode(other); if (rootself != rootother) { return @intFromEnum(parser.DocumentPosition.disconnected) + @intFromEnum(parser.DocumentPosition.implementation_specific) + @@ -347,8 +347,8 @@ pub const Node = struct { return 0; } - pub fn _contains(self: *parser.Node, other: *parser.Node) !bool { - return try parser.nodeContains(self, other); + pub fn _contains(self: *parser.Node, other: *parser.Node) bool { + return parser.nodeContains(self, other); } // Returns itself or ancestor object inheriting from Node. @@ -364,7 +364,7 @@ pub const Node = struct { log.warn(.web_api, "not implemented", .{ .feature = "getRootNode composed" }); }; - const root = try parser.nodeGetRootNode(self); + const root = parser.nodeGetRootNode(self); if (page.getNodeState(root)) |state| { if (state.shadow_root) |sr| { return .{ .shadow_root = sr }; @@ -374,18 +374,18 @@ pub const Node = struct { return .{ .node = try Node.toInterface(root) }; } - pub fn _hasChildNodes(self: *parser.Node) !bool { - return try parser.nodeHasChildNodes(self); + pub fn _hasChildNodes(self: *parser.Node) bool { + return parser.nodeHasChildNodes(self); } pub fn get_childNodes(self: *parser.Node, page: *Page) !NodeList { const allocator = page.arena; var list: NodeList = .{}; - var n = try parser.nodeFirstChild(self) orelse return list; + var n = parser.nodeFirstChild(self) orelse return list; while (true) { try list.append(allocator, n); - n = try parser.nodeNextSibling(n) orelse return list; + n = parser.nodeNextSibling(n) orelse return list; } } @@ -394,8 +394,8 @@ pub const Node = struct { return _appendChild(self, new_node); } - const self_owner = try parser.nodeOwnerDocument(self); - const new_node_owner = try parser.nodeOwnerDocument(new_node); + const self_owner = parser.nodeOwnerDocument(self); + const new_node_owner = parser.nodeOwnerDocument(new_node); // If the node to be inserted has a different ownerDocument than the parent node, // modern browsers automatically adopt the node and its descendants into @@ -415,7 +415,7 @@ pub const Node = struct { } pub fn _isDefaultNamespace(self: *parser.Node, namespace: ?[]const u8) !bool { - return try parser.nodeIsDefaultNamespace(self, namespace); + return parser.nodeIsDefaultNamespace(self, namespace); } pub fn _isEqualNode(self: *parser.Node, other: *parser.Node) !bool { @@ -423,10 +423,10 @@ pub const Node = struct { return try parser.nodeIsEqualNode(self, other); } - pub fn _isSameNode(self: *parser.Node, other: *parser.Node) !bool { + pub fn _isSameNode(self: *parser.Node, other: *parser.Node) bool { // TODO: other is not an optional parameter, but can be null. // NOTE: there is no need to use isSameNode(); instead use the === strict equality operator - return try parser.nodeIsSameNode(self, other); + return parser.nodeIsSameNode(self, other); } pub fn _lookupPrefix(self: *parser.Node, namespace: ?[]const u8) !?[]const u8 { @@ -482,9 +482,9 @@ pub const Node = struct { return parser.DOMError.HierarchyRequest; } - const doc = (try parser.nodeOwnerDocument(self)) orelse return; + const doc = (parser.nodeOwnerDocument(self)) orelse return; - if (try parser.nodeFirstChild(self)) |first| { + if (parser.nodeFirstChild(self)) |first| { for (nodes) |node| { _ = try parser.nodeInsertBefore(self, try node.toNode(doc), first); } @@ -506,7 +506,7 @@ pub const Node = struct { return parser.DOMError.HierarchyRequest; } - const doc = (try parser.nodeOwnerDocument(self)) orelse return; + const doc = (parser.nodeOwnerDocument(self)) orelse return; for (nodes) |node| { _ = try parser.nodeAppendChild(self, try node.toNode(doc)); } @@ -525,7 +525,7 @@ pub const Node = struct { // remove existing children try removeChildren(self); - const doc = (try parser.nodeOwnerDocument(self)) orelse return; + const doc = (parser.nodeOwnerDocument(self)) orelse return; // add new children for (nodes) |node| { _ = try parser.nodeAppendChild(self, try node.toNode(doc)); @@ -533,30 +533,30 @@ pub const Node = struct { } pub fn removeChildren(self: *parser.Node) !void { - if (!try parser.nodeHasChildNodes(self)) return; + if (!parser.nodeHasChildNodes(self)) return; const children = try parser.nodeGetChildNodes(self); - const ln = try parser.nodeListLength(children); + const ln = parser.nodeListLength(children); var i: u32 = 0; while (i < ln) { defer i += 1; // we always retrieve the 0 index child on purpose: libdom nodelist // are dynamic. So the next child to remove is always as pos 0. - const child = try parser.nodeListItem(children, 0) orelse continue; + const child = parser.nodeListItem(children, 0) orelse continue; _ = try parser.nodeRemoveChild(self, child); } } pub fn before(self: *parser.Node, nodes: []const NodeOrText) !void { - const parent = try parser.nodeParentNode(self) orelse return; - const doc = (try parser.nodeOwnerDocument(parent)) orelse return; + const parent = parser.nodeParentNode(self) orelse return; + const doc = (parser.nodeOwnerDocument(parent)) orelse return; var sibling: ?*parser.Node = self; // have to find the first sibling that isn't in nodes CHECK: while (sibling) |s| { for (nodes) |n| { if (n.is(s)) { - sibling = try parser.nodePreviousSibling(s); + sibling = parser.nodePreviousSibling(s); continue :CHECK; } } @@ -564,7 +564,7 @@ pub const Node = struct { } if (sibling == null) { - sibling = try parser.nodeFirstChild(parent); + sibling = parser.nodeFirstChild(parent); } if (sibling) |ref_node| { @@ -578,15 +578,15 @@ pub const Node = struct { } pub fn after(self: *parser.Node, nodes: []const NodeOrText) !void { - const parent = try parser.nodeParentNode(self) orelse return; - const doc = (try parser.nodeOwnerDocument(parent)) orelse return; + const parent = parser.nodeParentNode(self) orelse return; + const doc = (parser.nodeOwnerDocument(parent)) orelse return; // have to find the first sibling that isn't in nodes - var sibling = try parser.nodeNextSibling(self); + var sibling = parser.nodeNextSibling(self); CHECK: while (sibling) |s| { for (nodes) |n| { if (n.is(s)) { - sibling = try parser.nodeNextSibling(s); + sibling = parser.nodeNextSibling(s); continue :CHECK; } } diff --git a/src/browser/dom/node_filter.zig b/src/browser/dom/node_filter.zig index 1539c1e9..b8b9cc44 100644 --- a/src/browser/dom/node_filter.zig +++ b/src/browser/dom/node_filter.zig @@ -44,7 +44,7 @@ pub const NodeFilter = struct { const VerifyResult = enum { accept, skip, reject }; pub fn verify(what_to_show: u32, filter: ?Env.Function, node: *parser.Node) !VerifyResult { - const node_type = try parser.nodeType(node); + const node_type = parser.nodeType(node); // Verify that we can show this node type. if (!switch (node_type) { diff --git a/src/browser/dom/node_iterator.zig b/src/browser/dom/node_iterator.zig index be497008..5cce2399 100644 --- a/src/browser/dom/node_iterator.zig +++ b/src/browser/dom/node_iterator.zig @@ -125,7 +125,7 @@ pub const NodeIterator = struct { return try Node.toInterface(sibling); } - current = (try parser.nodeParentNode(current)) orelse break; + current = (parser.nodeParentNode(current)) orelse break; } return null; @@ -147,7 +147,7 @@ pub const NodeIterator = struct { } var current = self.reference_node; - while (try parser.nodePreviousSibling(current)) |previous| { + while (parser.nodePreviousSibling(current)) |previous| { current = previous; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { @@ -189,11 +189,11 @@ pub const NodeIterator = struct { fn firstChild(self: *const NodeIterator, node: *parser.Node) !?*parser.Node { const children = try parser.nodeGetChildNodes(node); - const child_count = try parser.nodeListLength(children); + const child_count = parser.nodeListLength(children); for (0..child_count) |i| { const index: u32 = @intCast(i); - const child = (try parser.nodeListItem(children, index)) orelse return null; + const child = (parser.nodeListItem(children, index)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, child)) { .accept => return child, // NOTE: Skip and reject are equivalent for NodeIterator, this is different from TreeWalker @@ -206,12 +206,12 @@ pub const NodeIterator = struct { fn lastChild(self: *const NodeIterator, node: *parser.Node) !?*parser.Node { const children = try parser.nodeGetChildNodes(node); - const child_count = try parser.nodeListLength(children); + const child_count = parser.nodeListLength(children); var index: u32 = child_count; while (index > 0) { index -= 1; - const child = (try parser.nodeListItem(children, index)) orelse return null; + const child = (parser.nodeListItem(children, index)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, child)) { .accept => return child, // NOTE: Skip and reject are equivalent for NodeIterator, this is different from TreeWalker @@ -229,7 +229,7 @@ pub const NodeIterator = struct { var current = node; while (true) { if (current == self.root) return null; - current = (try parser.nodeParentNode(current)) orelse return null; + current = (parser.nodeParentNode(current)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { .accept => return current, @@ -243,7 +243,7 @@ pub const NodeIterator = struct { var current = node; while (true) { - current = (try parser.nodeNextSibling(current)) orelse return null; + current = (parser.nodeNextSibling(current)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { .accept => return current, diff --git a/src/browser/dom/processing_instruction.zig b/src/browser/dom/processing_instruction.zig index 1859e3f1..c53a68f4 100644 --- a/src/browser/dom/processing_instruction.zig +++ b/src/browser/dom/processing_instruction.zig @@ -48,7 +48,7 @@ pub const ProcessingInstruction = struct { } pub fn get_data(self: *parser.ProcessingInstruction) !?[]const u8 { - return try parser.nodeValue(parser.processingInstructionToNode(self)); + return parser.nodeValue(parser.processingInstructionToNode(self)); } pub fn set_data(self: *parser.ProcessingInstruction, data: []u8) !void { @@ -58,7 +58,7 @@ pub const ProcessingInstruction = struct { // netsurf's ProcessInstruction doesn't implement the dom_node_get_attributes // and thus will crash if we try to call nodeIsEqualNode. pub fn _isEqualNode(self: *parser.ProcessingInstruction, other_node: *parser.Node) !bool { - if (try parser.nodeType(other_node) != .processing_instruction) { + if (parser.nodeType(other_node) != .processing_instruction) { return false; } diff --git a/src/browser/dom/range.zig b/src/browser/dom/range.zig index 7da6dbc9..d7c7d7ce 100644 --- a/src/browser/dom/range.zig +++ b/src/browser/dom/range.zig @@ -176,10 +176,10 @@ pub const Range = struct { self.proto.end_node = node; // Set end_offset - switch (try parser.nodeType(node)) { + switch (parser.nodeType(node)) { .text, .cdata_section, .comment, .processing_instruction => { // For text-like nodes, end_offset should be the length of the text data - if (try parser.nodeValue(node)) |text_data| { + if (parser.nodeValue(node)) |text_data| { self.proto.end_offset = @intCast(text_data.len); } else { self.proto.end_offset = 0; @@ -188,7 +188,7 @@ pub const Range = struct { else => { // For element and other nodes, end_offset is the number of children const child_nodes = try parser.nodeGetChildNodes(node); - const child_count = try parser.nodeListLength(child_nodes); + const child_count = parser.nodeListLength(child_nodes); self.proto.end_offset = @intCast(child_count); }, } @@ -211,7 +211,7 @@ pub const Range = struct { pub fn _comparePoint(self: *const Range, node: *parser.Node, offset_: i32) !i32 { const start = self.proto.start_node; - if (try parser.nodeGetRootNode(start) != try parser.nodeGetRootNode(node)) { + if (parser.nodeGetRootNode(start) != parser.nodeGetRootNode(node)) { // WPT really wants this error to be first. Later, when we check // if the relative position is 'disconnected', it'll also catch this // case, but WPT will complain because it sometimes also sends @@ -219,7 +219,7 @@ pub const Range = struct { return error.WrongDocument; } - if (try parser.nodeType(node) == .document_type) { + if (parser.nodeType(node) == .document_type) { return error.InvalidNodeType; } @@ -245,8 +245,8 @@ pub const Range = struct { } pub fn _intersectsNode(self: *const Range, node: *parser.Node) !bool { - const start_root = try parser.nodeGetRootNode(self.proto.start_node); - const node_root = try parser.nodeGetRootNode(node); + const start_root = parser.nodeGetRootNode(self.proto.start_node); + const node_root = parser.nodeGetRootNode(node); if (start_root != node_root) { return false; } @@ -299,29 +299,29 @@ fn ensureValidOffset(node: *parser.Node, offset: i32) !void { fn nodeLength(node: *parser.Node) !usize { switch (try isTextual(node)) { - true => return ((try parser.nodeTextContent(node)) orelse "").len, + true => return ((parser.nodeTextContent(node)) orelse "").len, false => { const children = try parser.nodeGetChildNodes(node); - return @intCast(try parser.nodeListLength(children)); + return @intCast(parser.nodeListLength(children)); }, } } fn isTextual(node: *parser.Node) !bool { - return switch (try parser.nodeType(node)) { + return switch (parser.nodeType(node)) { .text, .comment, .cdata_section => true, else => false, }; } fn getParentAndIndex(child: *parser.Node) !struct { *parser.Node, u32 } { - const parent = (try parser.nodeParentNode(child)) orelse return error.InvalidNodeType; + const parent = (parser.nodeParentNode(child)) orelse return error.InvalidNodeType; const children = try parser.nodeGetChildNodes(parent); - const ln = try parser.nodeListLength(children); + const ln = parser.nodeListLength(children); var i: u32 = 0; while (i < ln) { defer i += 1; - const c = try parser.nodeListItem(children, i) orelse continue; + const c = parser.nodeListItem(children, i) orelse continue; if (c == child) { return .{ parent, i }; } @@ -363,7 +363,7 @@ fn compare(node_a: *parser.Node, offset_a: u32, node_b: *parser.Node, offset_b: if (position & @intFromEnum(parser.DocumentPosition.contains) == @intFromEnum(parser.DocumentPosition.contains)) { // node_a contains node_b var child = node_b; - while (try parser.nodeParentNode(child)) |parent| { + while (parser.nodeParentNode(child)) |parent| { if (parent == node_a) { // child.parentNode == node_a break; diff --git a/src/browser/dom/shadow_root.zig b/src/browser/dom/shadow_root.zig index f75aed6f..6c230e18 100644 --- a/src/browser/dom/shadow_root.zig +++ b/src/browser/dom/shadow_root.zig @@ -67,7 +67,7 @@ pub const ShadowRoot = struct { pub fn set_innerHTML(self: *ShadowRoot, str_: ?[]const u8) !void { const sr_doc = parser.documentFragmentToNode(self.proto); - const doc = try parser.nodeOwnerDocument(sr_doc) orelse return parser.DOMError.WrongDocument; + const doc = parser.nodeOwnerDocument(sr_doc) orelse return parser.DOMError.WrongDocument; try Node.removeChildren(sr_doc); const str = str_ orelse return; @@ -80,16 +80,16 @@ pub const ShadowRoot = struct { // element. // For ShadowRoot, it appears the only the children within the body should // be set. - const html = try parser.nodeFirstChild(fragment_node) orelse return; - const head = try parser.nodeFirstChild(html) orelse return; - const body = try parser.nodeNextSibling(head) orelse return; + const html = parser.nodeFirstChild(fragment_node) orelse return; + const head = parser.nodeFirstChild(html) orelse return; + const body = parser.nodeNextSibling(head) orelse return; const children = try parser.nodeGetChildNodes(body); - const ln = try parser.nodeListLength(children); + const ln = parser.nodeListLength(children); for (0..ln) |_| { // always index 0, because nodeAppendChild moves the node out of // the nodeList and into the new tree - const child = try parser.nodeListItem(children, 0) orelse continue; + const child = parser.nodeListItem(children, 0) orelse continue; _ = try parser.nodeAppendChild(sr_doc, child); } } diff --git a/src/browser/dom/tree_walker.zig b/src/browser/dom/tree_walker.zig index d4061cb2..8ece93cc 100644 --- a/src/browser/dom/tree_walker.zig +++ b/src/browser/dom/tree_walker.zig @@ -21,7 +21,6 @@ const parser = @import("../netsurf.zig"); const NodeFilter = @import("node_filter.zig"); const Env = @import("../env.zig").Env; -const Page = @import("../page.zig").Page; const Node = @import("node.zig").Node; const NodeUnion = @import("node.zig").Union; @@ -95,11 +94,11 @@ pub const TreeWalker = struct { fn firstChild(self: *const TreeWalker, node: *parser.Node) !?*parser.Node { const children = try parser.nodeGetChildNodes(node); - const child_count = try parser.nodeListLength(children); + const child_count = parser.nodeListLength(children); for (0..child_count) |i| { const index: u32 = @intCast(i); - const child = (try parser.nodeListItem(children, index)) orelse return null; + const child = (parser.nodeListItem(children, index)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, child)) { .accept => return child, @@ -113,12 +112,12 @@ pub const TreeWalker = struct { fn lastChild(self: *const TreeWalker, node: *parser.Node) !?*parser.Node { const children = try parser.nodeGetChildNodes(node); - const child_count = try parser.nodeListLength(children); + const child_count = parser.nodeListLength(children); var index: u32 = child_count; while (index > 0) { index -= 1; - const child = (try parser.nodeListItem(children, index)) orelse return null; + const child = (parser.nodeListItem(children, index)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, child)) { .accept => return child, @@ -134,7 +133,7 @@ pub const TreeWalker = struct { var current = node; while (true) { - current = (try parser.nodeNextSibling(current)) orelse return null; + current = (parser.nodeNextSibling(current)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { .accept => return current, @@ -149,7 +148,7 @@ pub const TreeWalker = struct { var current = node; while (true) { - current = (try parser.nodePreviousSibling(current)) orelse return null; + current = (parser.nodePreviousSibling(current)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { .accept => return current, @@ -166,7 +165,7 @@ pub const TreeWalker = struct { var current = node; while (true) { if (current == self.root) return null; - current = (try parser.nodeParentNode(current)) orelse return null; + current = (parser.nodeParentNode(current)) orelse return null; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { .accept => return current, @@ -206,7 +205,7 @@ pub const TreeWalker = struct { return try Node.toInterface(sibling); } - current = (try parser.nodeParentNode(current)) orelse break; + current = (parser.nodeParentNode(current)) orelse break; } return null; @@ -234,7 +233,7 @@ pub const TreeWalker = struct { if (self.current_node == self.root) return null; var current = self.current_node; - while (try parser.nodePreviousSibling(current)) |previous| { + while (parser.nodePreviousSibling(current)) |previous| { current = previous; switch (try NodeFilter.verify(self.what_to_show, self.filter_func, current)) { diff --git a/src/browser/dom/walker.zig b/src/browser/dom/walker.zig index 20e889bc..8745a378 100644 --- a/src/browser/dom/walker.zig +++ b/src/browser/dom/walker.zig @@ -44,39 +44,39 @@ pub const WalkerDepthFirst = struct { var n = cur orelse root; // TODO deinit next - if (try parser.nodeFirstChild(n)) |next| { + if (parser.nodeFirstChild(n)) |next| { return next; } // TODO deinit next - if (try parser.nodeNextSibling(n)) |next| { + if (parser.nodeNextSibling(n)) |next| { return next; } // TODO deinit parent // Back to the parent of cur. // If cur has no parent, then the iteration is over. - var parent = try parser.nodeParentNode(n) orelse return null; + var parent = parser.nodeParentNode(n) orelse return null; // TODO deinit lastchild - var lastchild = try parser.nodeLastChild(parent); + var lastchild = parser.nodeLastChild(parent); while (n != root and n == lastchild) { n = parent; // TODO deinit parent // Back to the prev's parent. // If prev has no parent, then the loop must stop. - parent = try parser.nodeParentNode(n) orelse break; + parent = parser.nodeParentNode(n) orelse break; // TODO deinit lastchild - lastchild = try parser.nodeLastChild(parent); + lastchild = parser.nodeLastChild(parent); } if (n == root) { return null; } - return try parser.nodeNextSibling(n); + return parser.nodeNextSibling(n); } }; @@ -84,14 +84,14 @@ pub const WalkerDepthFirst = struct { pub const WalkerChildren = struct { pub fn get_next(_: WalkerChildren, root: *parser.Node, cur: ?*parser.Node) !?*parser.Node { // On walk start, we return the first root's child. - if (cur == null) return try parser.nodeFirstChild(root); + if (cur == null) return parser.nodeFirstChild(root); // If cur is root, then return null. // This is a special case, if the root is included in the walk, we // don't want to go further to find children. if (root == cur.?) return null; - return try parser.nodeNextSibling(cur.?); + return parser.nodeNextSibling(cur.?); } }; diff --git a/src/browser/dump.zig b/src/browser/dump.zig index ed630ed5..02096838 100644 --- a/src/browser/dump.zig +++ b/src/browser/dump.zig @@ -41,8 +41,8 @@ pub fn writeDocType(doc_type: *parser.DocumentType, writer: *std.Io.Writer) !voi try writer.writeAll(" { // open the tag const tag_type = try parser.nodeHTMLGetTagType(node) orelse .undef; @@ -104,7 +104,7 @@ pub fn writeNode(node: *parser.Node, opts: Opts, writer: *std.Io.Writer) anyerro if (try isVoid(parser.nodeToElement(node))) return; if (tag_type == .script) { - try writer.writeAll(try parser.nodeTextContent(node) orelse ""); + try writer.writeAll(parser.nodeTextContent(node) orelse ""); } else { // write the children // TODO avoid recursion @@ -117,17 +117,17 @@ pub fn writeNode(node: *parser.Node, opts: Opts, writer: *std.Io.Writer) anyerro try writer.writeAll(">"); }, .text => { - const v = try parser.nodeValue(node) orelse return; + const v = parser.nodeValue(node) orelse return; try writeEscapedTextNode(writer, v); }, .cdata_section => { - const v = try parser.nodeValue(node) orelse return; + const v = parser.nodeValue(node) orelse return; try writer.writeAll(""); }, .comment => { - const v = try parser.nodeValue(node) orelse return; + const v = parser.nodeValue(node) orelse return; try writer.writeAll(""); diff --git a/src/browser/encoding/TextDecoder.zig b/src/browser/encoding/TextDecoder.zig index f399a893..8efe4102 100644 --- a/src/browser/encoding/TextDecoder.zig +++ b/src/browser/encoding/TextDecoder.zig @@ -19,7 +19,6 @@ const std = @import("std"); const log = @import("../../log.zig"); -const Env = @import("../env.zig").Env; const Page = @import("../page.zig").Page; // https://encoding.spec.whatwg.org/#interface-textdecoder diff --git a/src/browser/events/event.zig b/src/browser/events/event.zig index da7b1c95..0754a6ad 100644 --- a/src/browser/events/event.zig +++ b/src/browser/events/event.zig @@ -84,8 +84,8 @@ pub const Event = struct { // Getters - pub fn get_type(self: *parser.Event) ![]const u8 { - return try parser.eventType(self); + pub fn get_type(self: *parser.Event) []const u8 { + return parser.eventType(self); } pub fn get_target(self: *parser.Event, page: *Page) !?EventTargetUnion { @@ -158,7 +158,7 @@ pub const Event = struct { const et_ = parser.eventTarget(self); const et = et_ orelse return &.{}; - var node: ?*parser.Node = switch (try parser.eventTargetInternalType(et)) { + var node: ?*parser.Node = switch (parser.eventTargetInternalType(et)) { .libdom_node => @as(*parser.Node, @ptrCast(et)), .plain => parser.eventTargetToNode(et), else => { @@ -174,8 +174,8 @@ pub const Event = struct { .node = try Node.toInterface(n), }); - node = try parser.nodeParentNode(n); - if (node == null and try parser.nodeType(n) == .document_fragment) { + node = parser.nodeParentNode(n); + if (node == null and parser.nodeType(n) == .document_fragment) { // we have a non-continuous hook from a shadowroot to its host ( // it's parent element). libdom doesn't really support ShdowRoots // and, for the most part, that works out well since it naturally @@ -339,7 +339,7 @@ pub const EventHandler = struct { if (self.once) { const target = parser.eventTarget(event).?; - const typ = parser.eventType(event) catch return; + const typ = parser.eventType(event); parser.eventTargetRemoveEventListener( target, typ, diff --git a/src/browser/events/keyboard_event.zig b/src/browser/events/keyboard_event.zig index 2efe6eab..62deeea7 100644 --- a/src/browser/events/keyboard_event.zig +++ b/src/browser/events/keyboard_event.zig @@ -22,7 +22,6 @@ const builtin = @import("builtin"); const parser = @import("../netsurf.zig"); const Event = @import("event.zig").Event; -const JsObject = @import("../env.zig").JsObject; // TODO: We currently don't have a UIEvent interface so we skip it in the prototype chain. // https://developer.mozilla.org/en-US/docs/Web/API/UIEvent diff --git a/src/browser/events/mouse_event.zig b/src/browser/events/mouse_event.zig index 172037e7..ea6f1682 100644 --- a/src/browser/events/mouse_event.zig +++ b/src/browser/events/mouse_event.zig @@ -21,7 +21,6 @@ const log = @import("../../log.zig"); const parser = @import("../netsurf.zig"); const Event = @import("event.zig").Event; -const JsObject = @import("../env.zig").JsObject; // TODO: We currently don't have a UIEvent interface so we skip it in the prototype chain. // https://developer.mozilla.org/en-US/docs/Web/API/UIEvent diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig index 5b5fdcd7..8d3f2bc6 100644 --- a/src/browser/html/elements.zig +++ b/src/browser/html/elements.zig @@ -133,14 +133,14 @@ pub const HTMLElement = struct { pub fn get_innerText(e: *parser.ElementHTML) ![]const u8 { const n = @as(*parser.Node, @ptrCast(e)); - return try parser.nodeTextContent(n) orelse ""; + return parser.nodeTextContent(n) orelse ""; } pub fn set_innerText(e: *parser.ElementHTML, s: []const u8) !void { const n = @as(*parser.Node, @ptrCast(e)); // create text node. - const doc = try parser.nodeOwnerDocument(n) orelse return error.NoDocument; + const doc = parser.nodeOwnerDocument(n) orelse return error.NoDocument; const t = try parser.documentCreateTextNode(doc, s); // remove existing children. @@ -167,12 +167,12 @@ pub const HTMLElement = struct { focusVisible: bool, }; pub fn _focus(e: *parser.ElementHTML, _: ?FocusOpts, page: *Page) !void { - if (!try page.isNodeAttached(@ptrCast(e))) { + if (!page.isNodeAttached(@ptrCast(e))) { return; } const Document = @import("../dom/document.zig").Document; - const root_node = try parser.nodeGetRootNode(@ptrCast(e)); + const root_node = parser.nodeGetRootNode(@ptrCast(e)); try Document.setFocus(@ptrCast(root_node), e, page); } }; @@ -251,7 +251,7 @@ pub const HTMLAnchorElement = struct { } pub fn get_text(self: *parser.Anchor) !?[]const u8 { - return try parser.nodeTextContent(parser.anchorToNode(self)); + return parser.nodeTextContent(parser.anchorToNode(self)); } pub fn set_text(self: *parser.Anchor, v: []const u8) !void { @@ -1064,7 +1064,7 @@ pub const HTMLSlotElement = struct { // First we look for any explicitly assigned nodes (via the slot attribute) { const slot_name = try parser.elementGetAttribute(@ptrCast(@alignCast(self)), "name"); - var root = try parser.nodeGetRootNode(node); + var root = parser.nodeGetRootNode(node); if (page.getNodeState(root)) |state| { if (state.shadow_root) |sr| { root = @ptrCast(@alignCast(sr.host)); @@ -1076,7 +1076,7 @@ pub const HTMLSlotElement = struct { var next: ?*parser.Node = null; while (true) { next = try w.get_next(root, next) orelse break; - if (try parser.nodeType(next.?) != .element) { + if (parser.nodeType(next.?) != .element) { if (slot_name == null and !element_only) { // default slot (with no name), takes everything try arr.append(page.call_arena, try Node.toInterface(next.?)); @@ -1105,7 +1105,7 @@ pub const HTMLSlotElement = struct { // we'll collect the children of the slot - the defaults. { const nl = try parser.nodeGetChildNodes(node); - const len = try parser.nodeListLength(nl); + const len = parser.nodeListLength(nl); if (len == 0) { return &.{}; } @@ -1113,8 +1113,8 @@ pub const HTMLSlotElement = struct { var assigned = try page.call_arena.alloc(NodeUnion, len); var i: usize = 0; while (true) : (i += 1) { - const child = try parser.nodeListItem(nl, @intCast(i)) orelse break; - if (!element_only or try parser.nodeType(child) == .element) { + const child = parser.nodeListItem(nl, @intCast(i)) orelse break; + if (!element_only or parser.nodeType(child) == .element) { assigned[i] = try Node.toInterface(child); } } diff --git a/src/browser/html/form.zig b/src/browser/html/form.zig index 13443667..0308883d 100644 --- a/src/browser/html/form.zig +++ b/src/browser/html/form.zig @@ -21,7 +21,6 @@ const Allocator = std.mem.Allocator; const parser = @import("../netsurf.zig"); const Page = @import("../page.zig").Page; const HTMLElement = @import("elements.zig").HTMLElement; -const FormData = @import("../xhr/form_data.zig").FormData; pub const HTMLFormElement = struct { pub const Self = parser.Form; diff --git a/src/browser/html/iframe.zig b/src/browser/html/iframe.zig index f8edf508..00b5ab81 100644 --- a/src/browser/html/iframe.zig +++ b/src/browser/html/iframe.zig @@ -16,10 +16,8 @@ // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . const std = @import("std"); -const Allocator = std.mem.Allocator; const parser = @import("../netsurf.zig"); -const Page = @import("../page.zig").Page; const HTMLElement = @import("elements.zig").HTMLElement; // https://html.spec.whatwg.org/multipage/iframe-embed-object.html#htmliframeelement diff --git a/src/browser/html/window.zig b/src/browser/html/window.zig index 6f1d5fe8..c942d7b4 100644 --- a/src/browser/html/window.zig +++ b/src/browser/html/window.zig @@ -37,7 +37,6 @@ const domcss = @import("../dom/css.zig"); const Css = @import("../css/css.zig").Css; const Function = Env.Function; -const JsObject = Env.JsObject; const storage = @import("../storage/storage.zig"); diff --git a/src/browser/mime.zig b/src/browser/mime.zig index 33ab9958..76523c41 100644 --- a/src/browser/mime.zig +++ b/src/browser/mime.zig @@ -17,7 +17,6 @@ // along with this program. If not, see . const std = @import("std"); -const Allocator = std.mem.Allocator; pub const Mime = struct { content_type: ContentType, diff --git a/src/browser/netsurf.zig b/src/browser/netsurf.zig index aa20be60..3ec3bb06 100644 --- a/src/browser/netsurf.zig +++ b/src/browser/netsurf.zig @@ -445,13 +445,15 @@ pub fn eventInit(evt: *Event, typ: []const u8, opts: EventInit) !void { try DOMErr(err); } -pub fn eventType(evt: *Event) ![]const u8 { +pub fn eventType(evt: *Event) []const u8 { var s: ?*String = null; const err = c._dom_event_get_type(evt, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); // if the event type is null, return a empty string. - if (s == null) return ""; + if (s == null) { + return ""; + } return strToData(s.?); } @@ -571,10 +573,10 @@ pub fn mutationEventAttributeName(evt: *MutationEvent) ![]const u8 { return strToData(s.?); } -pub fn mutationEventPrevValue(evt: *MutationEvent) !?[]const u8 { +pub fn mutationEventPrevValue(evt: *MutationEvent) ?[]const u8 { var s: ?*String = null; const err = c._dom_mutation_event_get_prev_value(evt, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (s == null) return null; return strToData(s.?); } @@ -582,7 +584,7 @@ pub fn mutationEventPrevValue(evt: *MutationEvent) !?[]const u8 { pub fn mutationEventRelatedNode(evt: *MutationEvent) !?*Node { var n: NodeExternal = undefined; const err = c._dom_mutation_event_get_related_node(evt, &n); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (n == null) return null; return @as(*Node, @ptrCast(@alignCast(n))); } @@ -779,10 +781,10 @@ pub fn eventTargetDispatchEvent(et: *EventTarget, event: *Event) !bool { return res; } -pub fn eventTargetInternalType(et: *EventTarget) !EventTargetTBase.InternalType { +pub fn eventTargetInternalType(et: *EventTarget) EventTargetTBase.InternalType { var res: u32 = undefined; const err = eventTargetVtable(et).internal_type.?(et, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return @enumFromInt(res); } @@ -850,10 +852,8 @@ pub const EventTargetTBase = extern struct { pub fn dispatch_event(et: [*c]c.dom_event_target, evt: ?*c.struct_dom_event, res: [*c]bool) callconv(.c) c.dom_exception { const self = @as(*Self, @ptrCast(et)); // Set the event target to the target dispatched. - const e = c._dom_event_set_target(evt, et); - if (e != c.DOM_NO_ERR) { - return e; - } + const err = c._dom_event_set_target(evt, et); + std.debug.assert(err == c.DOM_NO_ERR); return c._dom_event_target_dispatch(et, &self.eti, evt, c.DOM_AT_TARGET, res); } @@ -1046,17 +1046,17 @@ pub const NodeType = enum(u4) { // NodeList pub const NodeList = c.dom_nodelist; -pub fn nodeListLength(nodeList: *NodeList) !u32 { +pub fn nodeListLength(nodeList: *NodeList) u32 { var ln: u32 = undefined; const err = c.dom_nodelist_get_length(nodeList, &ln); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return ln; } -pub fn nodeListItem(nodeList: *NodeList, index: u32) !?*Node { +pub fn nodeListItem(nodeList: *NodeList, index: u32) ?*Node { var n: NodeExternal = undefined; const err = c._dom_nodelist_item(nodeList, index, &n); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (n == null) return null; return @as(*Node, @ptrCast(@alignCast(n))); } @@ -1173,88 +1173,86 @@ fn nodeVtable(node: *Node) c.dom_node_vtable { pub fn nodeLocalName(node: *Node) ![]const u8 { var s: ?*String = null; const err = nodeVtable(node).dom_node_get_local_name.?(node, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (s == null) return ""; + var s_lower: ?*String = null; const errStr = c.dom_string_tolower(s, true, &s_lower); try DOMErr(errStr); return strToData(s_lower.?); } -pub fn nodeType(node: *Node) !NodeType { +pub fn nodeType(node: *Node) NodeType { var node_type: c.dom_node_type = undefined; const err = nodeVtable(node).dom_node_get_node_type.?(node, &node_type); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return @as(NodeType, @enumFromInt(node_type)); } -pub fn nodeFirstChild(node: *Node) !?*Node { +pub fn nodeFirstChild(node: *Node) ?*Node { var res: ?*Node = null; const err = nodeVtable(node).dom_node_get_first_child.?(node, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } -pub fn nodeLastChild(node: *Node) !?*Node { +pub fn nodeLastChild(node: *Node) ?*Node { var res: ?*Node = null; const err = nodeVtable(node).dom_node_get_last_child.?(node, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } -pub fn nodeNextSibling(node: *Node) !?*Node { +pub fn nodeNextSibling(node: *Node) ?*Node { var res: ?*Node = null; const err = nodeVtable(node).dom_node_get_next_sibling.?(node, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } -pub fn nodeNextElementSibling(node: *Node) !?*Element { +pub fn nodeNextElementSibling(node: *Node) ?*Element { var n = node; while (true) { - const res = try nodeNextSibling(n); - if (res == null) return null; + const res = nodeNextSibling(n) orelse return null; - if (try nodeType(res.?) == .element) { - return @as(*Element, @ptrCast(res.?)); + if (nodeType(res) == .element) { + return @as(*Element, @ptrCast(res)); } - n = res.?; + n = res; } return null; } -pub fn nodePreviousSibling(node: *Node) !?*Node { +pub fn nodePreviousSibling(node: *Node) ?*Node { var res: ?*Node = null; const err = nodeVtable(node).dom_node_get_previous_sibling.?(node, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } -pub fn nodePreviousElementSibling(node: *Node) !?*Element { +pub fn nodePreviousElementSibling(node: *Node) ?*Element { var n = node; while (true) { - const res = try nodePreviousSibling(n); - if (res == null) return null; - - if (try nodeType(res.?) == .element) { - return @as(*Element, @ptrCast(res.?)); + const res = nodePreviousSibling(n) orelse return null; + if (nodeType(res) == .element) { + return @as(*Element, @ptrCast(res)); } - n = res.?; + n = res; } return null; } -pub fn nodeParentNode(node: *Node) !?*Node { +pub fn nodeParentNode(node: *Node) ?*Node { var res: ?*Node = null; const err = nodeVtable(node).dom_node_get_parent_node.?(node, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } -pub fn nodeParentElement(node: *Node) !?*Element { - const res = try nodeParentNode(node); +pub fn nodeParentElement(node: *Node) ?*Element { + const res = nodeParentNode(node); if (res) |value| { - if (try nodeType(value) == .element) { + if (nodeType(value) == .element) { return @as(*Element, @ptrCast(value)); } } @@ -1269,17 +1267,17 @@ pub fn nodeName(node: *Node) ![]const u8 { return strToData(s.?); } -pub fn nodeOwnerDocument(node: *Node) !?*Document { +pub fn nodeOwnerDocument(node: *Node) ?*Document { var doc: ?*Document = null; const err = nodeVtable(node).dom_node_get_owner_document.?(node, &doc); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return doc; } -pub fn nodeValue(node: *Node) !?[]const u8 { +pub fn nodeValue(node: *Node) ?[]const u8 { var s: ?*String = null; const err = nodeVtable(node).dom_node_get_node_value.?(node, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (s == null) return null; return strToData(s.?); } @@ -1290,14 +1288,14 @@ pub fn nodeSetValue(node: *Node, value: []const u8) !void { try DOMErr(err); } -pub fn nodeTextContent(node: *Node) !?[]const u8 { +pub fn nodeTextContent(node: *Node) ?[]const u8 { var s: ?*String = null; const err = nodeVtable(node).dom_node_get_text_content.?(node, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (s == null) { // NOTE: it seems that there is a bug in netsurf implem // an empty Element should return an empty string and not null - if (try nodeType(node) == .element) { + if (nodeType(node) == .element) { return ""; } return null; @@ -1318,10 +1316,10 @@ pub fn nodeGetChildNodes(node: *Node) !*NodeList { return nlist.?; } -pub fn nodeGetRootNode(node: *Node) !*Node { +pub fn nodeGetRootNode(node: *Node) *Node { var root = node; while (true) { - const parent = try nodeParentNode(root); + const parent = nodeParentNode(root); if (parent) |parent_| { root = parent_; } else break; @@ -1343,17 +1341,17 @@ pub fn nodeCloneNode(node: *Node, is_deep: bool) !*Node { return res.?; } -pub fn nodeContains(node: *Node, other: *Node) !bool { +pub fn nodeContains(node: *Node, other: *Node) bool { var res: bool = undefined; const err = c._dom_node_contains(node, other, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } -pub fn nodeHasChildNodes(node: *Node) !bool { +pub fn nodeHasChildNodes(node: *Node) bool { var res: bool = undefined; const err = nodeVtable(node).dom_node_has_child_nodes.?(node, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } @@ -1368,7 +1366,7 @@ pub fn nodeIsDefaultNamespace(node: *Node, namespace_: ?[]const u8) !bool { const s = if (namespace_) |n| try strFromData(n) else null; var res: bool = undefined; const err = nodeVtable(node).dom_node_is_default_namespace.?(node, s, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } @@ -1379,10 +1377,10 @@ pub fn nodeIsEqualNode(node: *Node, other: *Node) !bool { return res; } -pub fn nodeIsSameNode(node: *Node, other: *Node) !bool { +pub fn nodeIsSameNode(node: *Node, other: *Node) bool { var res: bool = undefined; const err = nodeVtable(node).dom_node_is_same.?(node, other, &res); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return res; } @@ -1422,13 +1420,6 @@ pub fn nodeReplaceChild(node: *Node, new_child: *Node, old_child: *Node) !*Node return res.?; } -pub fn nodeHasAttributes(node: *Node) !bool { - var res: bool = undefined; - const err = nodeVtable(node).dom_node_has_attributes.?(node, &res); - try DOMErr(err); - return res; -} - pub fn nodeGetAttributes(node: *Node) !?*NamedNodeMap { var res: ?*NamedNodeMap = null; const err = nodeVtable(node).dom_node_get_attributes.?(node, &res); @@ -1436,18 +1427,18 @@ pub fn nodeGetAttributes(node: *Node) !?*NamedNodeMap { return res; } -pub fn nodeGetNamespace(node: *Node) !?[]const u8 { +pub fn nodeGetNamespace(node: *Node) ?[]const u8 { var s: ?*String = null; const err = nodeVtable(node).dom_node_get_namespace.?(node, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (s == null) return null; return strToData(s.?); } -pub fn nodeGetPrefix(node: *Node) !?[]const u8 { +pub fn nodeGetPrefix(node: *Node) ?[]const u8 { var s: ?*String = null; const err = nodeVtable(node).dom_node_get_prefix.?(node, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); if (s == null) return null; return strToData(s.?); } @@ -1463,7 +1454,8 @@ pub fn nodeSetEmbedderData(node: *Node, data: *anyopaque) void { pub fn nodeGetElementById(node: *Node, id: []const u8) !?*Element { var el: ?*Element = null; const str_id = try strFromData(id); - try DOMErr(c._dom_find_element_by_id(node, str_id, &el)); + const err = c._dom_find_element_by_id(node, str_id, &el); + std.debug.assert(err == c.DOM_NO_ERR); return el; } @@ -1479,7 +1471,7 @@ pub inline fn nodeToDocument(node: *Node) *Document { // Combination of nodeToElement + elementTag pub fn nodeHTMLGetTagType(node: *Node) !?Tag { - if (try nodeType(node) != .element) { + if (nodeType(node) != .element) { return null; } @@ -1497,10 +1489,10 @@ pub inline fn characterDataToNode(cdata: *CharacterData) *Node { return @as(*Node, @ptrCast(@alignCast(cdata))); } -pub fn characterDataData(cdata: *CharacterData) ![]const u8 { +pub fn characterDataData(cdata: *CharacterData) []const u8 { var s: ?*String = null; const err = characterDataVtable(cdata).dom_characterdata_get_data.?(cdata, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return strToData(s.?); } @@ -1513,7 +1505,7 @@ pub fn characterDataSetData(cdata: *CharacterData, data: []const u8) !void { pub fn characterDataLength(cdata: *CharacterData) !u32 { var n: u32 = undefined; const err = characterDataVtable(cdata).dom_characterdata_get_length.?(cdata, &n); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return n; } @@ -2070,17 +2062,17 @@ pub inline fn documentTypeGetName(dt: *DocumentType) ![]const u8 { return strToData(s.?); } -pub inline fn documentTypeGetPublicId(dt: *DocumentType) ![]const u8 { +pub inline fn documentTypeGetPublicId(dt: *DocumentType) []const u8 { var s: ?*String = null; const err = documentTypeVtable(dt).dom_document_type_get_public_id.?(dt, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return strToData(s.?); } -pub inline fn documentTypeGetSystemId(dt: *DocumentType) ![]const u8 { +pub inline fn documentTypeGetSystemId(dt: *DocumentType) []const u8 { var s: ?*String = null; const err = documentTypeVtable(dt).dom_document_type_get_system_id.?(dt, &s); - try DOMErr(err); + std.debug.assert(err == c.DOM_NO_ERR); return strToData(s.?); } diff --git a/src/browser/page.zig b/src/browser/page.zig index ae426d21..cb3261c3 100644 --- a/src/browser/page.zig +++ b/src/browser/page.zig @@ -198,12 +198,12 @@ pub const Page = struct { // returns the
 element from the HTML
                 const doc = parser.documentHTMLToDocument(self.window.document);
                 const list = try parser.documentGetElementsByTagName(doc, "pre");
-                const pre = try parser.nodeListItem(list, 0) orelse return error.InvalidHTML;
+                const pre = parser.nodeListItem(list, 0) orelse return error.InvalidHTML;
                 const walker = Walker{};
                 var next: ?*parser.Node = null;
                 while (true) {
                     next = try walker.get_next(pre, next) orelse break;
-                    const v = try parser.nodeTextContent(next.?) orelse return;
+                    const v = parser.nodeTextContent(next.?) orelse return;
                     try out.writeAll(v);
                 }
                 return;
@@ -241,7 +241,7 @@ pub const Page = struct {
 
         // find  tag
         const list = try parser.documentGetElementsByTagName(doc, "head");
-        const head = try parser.nodeListItem(list, 0) orelse return;
+        const head = parser.nodeListItem(list, 0) orelse return;
 
         const base = try parser.documentCreateElement(doc, "base");
         try parser.elementSetAttribute(base, "href", self.url.raw);
@@ -1080,9 +1080,9 @@ pub const Page = struct {
         try self.navigateFromWebAPI(action, opts);
     }
 
-    pub fn isNodeAttached(self: *const Page, node: *parser.Node) !bool {
+    pub fn isNodeAttached(self: *const Page, node: *parser.Node) bool {
         const root = parser.documentToNode(parser.documentHTMLToDocument(self.window.document));
-        return root == try parser.nodeGetRootNode(node);
+        return root == parser.nodeGetRootNode(node);
     }
 
     fn elementSubmitForm(self: *Page, element: *parser.Element) !void {
diff --git a/src/browser/session.zig b/src/browser/session.zig
index 87713d4d..cbc9e63c 100644
--- a/src/browser/session.zig
+++ b/src/browser/session.zig
@@ -22,7 +22,6 @@ const Allocator = std.mem.Allocator;
 
 const Env = @import("env.zig").Env;
 const Page = @import("page.zig").Page;
-const URL = @import("../url.zig").URL;
 const Browser = @import("browser.zig").Browser;
 const NavigateOpts = @import("page.zig").NavigateOpts;
 
diff --git a/src/browser/storage/storage.zig b/src/browser/storage/storage.zig
index 9e061213..804dd4cc 100644
--- a/src/browser/storage/storage.zig
+++ b/src/browser/storage/storage.zig
@@ -18,8 +18,6 @@
 
 const std = @import("std");
 
-const DOMError = @import("../netsurf.zig").DOMError;
-
 pub const cookie = @import("cookie.zig");
 pub const Cookie = cookie.Cookie;
 pub const CookieJar = cookie.Jar;
diff --git a/src/browser/url/url.zig b/src/browser/url/url.zig
index 0be14e0d..b7b006c7 100644
--- a/src/browser/url/url.zig
+++ b/src/browser/url/url.zig
@@ -23,7 +23,6 @@ const parser = @import("../netsurf.zig");
 const Env = @import("../env.zig").Env;
 const Page = @import("../page.zig").Page;
 const FormData = @import("../xhr/form_data.zig").FormData;
-const HTMLElement = @import("../html/elements.zig").HTMLElement;
 
 const kv = @import("../key_value.zig");
 const iterator = @import("../iterator/iterator.zig");
diff --git a/src/browser/xhr/xhr.zig b/src/browser/xhr/xhr.zig
index 3117e9e9..7e06f68f 100644
--- a/src/browser/xhr/xhr.zig
+++ b/src/browser/xhr/xhr.zig
@@ -31,7 +31,6 @@ const Mime = @import("../mime.zig").Mime;
 const parser = @import("../netsurf.zig");
 const Page = @import("../page.zig").Page;
 const Http = @import("../../http/Http.zig");
-const CookieJar = @import("../storage/storage.zig").CookieJar;
 
 // XHR interfaces
 // https://xhr.spec.whatwg.org/#interface-xmlhttprequest
diff --git a/src/browser/xmlserializer/xmlserializer.zig b/src/browser/xmlserializer/xmlserializer.zig
index 444b77ab..35722ceb 100644
--- a/src/browser/xmlserializer/xmlserializer.zig
+++ b/src/browser/xmlserializer/xmlserializer.zig
@@ -35,7 +35,7 @@ pub const XMLSerializer = struct {
 
     pub fn _serializeToString(_: *const XMLSerializer, root: *parser.Node, page: *Page) ![]const u8 {
         var aw = std.Io.Writer.Allocating.init(page.call_arena);
-        switch (try parser.nodeType(root)) {
+        switch (parser.nodeType(root)) {
             .document => try dump.writeHTML(@as(*parser.Document, @ptrCast(root)), .{}, &aw.writer),
             .document_type => try dump.writeDocType(@as(*parser.DocumentType, @ptrCast(root)), &aw.writer),
             else => try dump.writeNode(root, .{}, &aw.writer),
diff --git a/src/cdp/Node.zig b/src/cdp/Node.zig
index 98ef80f0..0c54c435 100644
--- a/src/cdp/Node.zig
+++ b/src/cdp/Node.zig
@@ -243,13 +243,13 @@ pub const Writer = struct {
     fn writeChildren(self: *const Writer, node: *const Node, depth: usize, w: anytype) anyerror!usize {
         var registry = self.registry;
         const child_nodes = try parser.nodeGetChildNodes(node._node);
-        const child_count = try parser.nodeListLength(child_nodes);
+        const child_count = parser.nodeListLength(child_nodes);
         const full_child = self.depth < 0 or self.depth < depth;
 
         var i: usize = 0;
         try w.beginArray();
         for (0..child_count) |_| {
-            const child = (try parser.nodeListItem(child_nodes, @intCast(i))) orelse break;
+            const child = (parser.nodeListItem(child_nodes, @intCast(i))) orelse break;
             const child_node = try registry.register(child);
             if (full_child) {
                 try self.toJSON(child_node, depth + 1, w);
@@ -275,7 +275,7 @@ pub const Writer = struct {
 
         const n = node._node;
 
-        if (try parser.nodeParentNode(n)) |p| {
+        if (parser.nodeParentNode(n)) |p| {
             const parent_node = try self.registry.register(p);
             try w.objectField("parentId");
             try w.write(parent_node.id);
@@ -295,7 +295,7 @@ pub const Writer = struct {
         }
 
         try w.objectField("nodeType");
-        try w.write(@intFromEnum(try parser.nodeType(n)));
+        try w.write(@intFromEnum(parser.nodeType(n)));
 
         try w.objectField("nodeName");
         try w.write(try parser.nodeName(n));
@@ -304,12 +304,12 @@ pub const Writer = struct {
         try w.write(try parser.nodeLocalName(n));
 
         try w.objectField("nodeValue");
-        try w.write((try parser.nodeValue(n)) orelse "");
+        try w.write((parser.nodeValue(n)) orelse "");
 
         if (include_child_count) {
             try w.objectField("childNodeCount");
             const child_nodes = try parser.nodeGetChildNodes(n);
-            try w.write(try parser.nodeListLength(child_nodes));
+            try w.write(parser.nodeListLength(child_nodes));
         }
 
         try w.objectField("documentURL");
diff --git a/src/cdp/cdp.zig b/src/cdp/cdp.zig
index 3fcf14dc..ee2a49df 100644
--- a/src/cdp/cdp.zig
+++ b/src/cdp/cdp.zig
@@ -29,7 +29,6 @@ const Page = @import("../browser/page.zig").Page;
 const Inspector = @import("../browser/env.zig").Env.Inspector;
 const Incrementing = @import("../id.zig").Incrementing;
 const Notification = @import("../notification.zig").Notification;
-const NetworkState = @import("domains/network.zig").NetworkState;
 const InterceptState = @import("domains/fetch.zig").InterceptState;
 
 const polyfill = @import("../browser/polyfill/polyfill.zig");
diff --git a/src/cdp/domains/dom.zig b/src/cdp/domains/dom.zig
index 64f24fdf..70e83920 100644
--- a/src/cdp/domains/dom.zig
+++ b/src/cdp/domains/dom.zig
@@ -115,7 +115,7 @@ fn dispatchSetChildNodes(cmd: anytype, nodes: []*parser.Node) !void {
     for (nodes) |_n| {
         var n = _n;
         while (true) {
-            const p = try parser.nodeParentNode(n) orelse break;
+            const p = parser.nodeParentNode(n) orelse break;
 
             // Register the node.
             const node = try bc.node_registry.register(p);
@@ -144,7 +144,7 @@ fn dispatchSetChildNodes(cmd: anytype, nodes: []*parser.Node) !void {
         // If the node has no parent, it's the root node.
         // We don't dispatch event for it because we assume the root node is
         // dispatched via the DOM.getDocument command.
-        const p = try parser.nodeParentNode(node._node) orelse {
+        const p = parser.nodeParentNode(node._node) orelse {
             continue;
         };
 
@@ -353,7 +353,7 @@ fn scrollIntoViewIfNeeded(cmd: anytype) !void {
     const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded;
     const node = try getNode(cmd.arena, bc, params.nodeId, params.backendNodeId, params.objectId);
 
-    const node_type = parser.nodeType(node._node) catch return error.InvalidNode;
+    const node_type = parser.nodeType(node._node);
     switch (node_type) {
         .element => {},
         .document => {},
@@ -395,7 +395,7 @@ fn getContentQuads(cmd: anytype) !void {
     // visibility: hidden
     // display: none
 
-    if (try parser.nodeType(node._node) != .element) return error.NodeIsNotAnElement;
+    if (parser.nodeType(node._node) != .element) return error.NodeIsNotAnElement;
     // TODO implement for document or text
     // Most likely document would require some hierachgy in the renderer. It is left unimplemented till we have a good example.
     // Text may be tricky, multiple quads in case of multiple lines? empty quads of text  = ""?
@@ -421,7 +421,7 @@ fn getBoxModel(cmd: anytype) !void {
     const node = try getNode(cmd.arena, bc, params.nodeId, params.backendNodeId, params.objectId);
 
     // TODO implement for document or text
-    if (try parser.nodeType(node._node) != .element) return error.NodeIsNotAnElement;
+    if (parser.nodeType(node._node) != .element) return error.NodeIsNotAnElement;
     const element = parser.nodeToElement(node._node);
 
     const rect = try Element._getBoundingClientRect(element, page);
diff --git a/src/cdp/domains/network.zig b/src/cdp/domains/network.zig
index c8a1788d..bc5fcd5c 100644
--- a/src/cdp/domains/network.zig
+++ b/src/cdp/domains/network.zig
@@ -19,7 +19,6 @@
 const std = @import("std");
 const Allocator = std.mem.Allocator;
 
-const log = @import("../../log.zig");
 const CdpStorage = @import("storage.zig");
 const Transfer = @import("../../http/Client.zig").Transfer;
 const Notification = @import("../../notification.zig").Notification;
diff --git a/src/cdp/domains/page.zig b/src/cdp/domains/page.zig
index 4495a474..847f111a 100644
--- a/src/cdp/domains/page.zig
+++ b/src/cdp/domains/page.zig
@@ -17,7 +17,6 @@
 // along with this program.  If not, see .
 
 const std = @import("std");
-const URL = @import("../../url.zig").URL;
 const Page = @import("../../browser/page.zig").Page;
 const Notification = @import("../../notification.zig").Notification;
 
diff --git a/src/cdp/domains/storage.zig b/src/cdp/domains/storage.zig
index bb60f6a2..662d079f 100644
--- a/src/cdp/domains/storage.zig
+++ b/src/cdp/domains/storage.zig
@@ -17,7 +17,6 @@
 // along with this program.  If not, see .
 
 const std = @import("std");
-const Allocator = std.mem.Allocator;
 
 const log = @import("../../log.zig");
 const Cookie = @import("../../browser/storage/storage.zig").Cookie;
diff --git a/src/cdp/testing.zig b/src/cdp/testing.zig
index a34611f0..0c052d12 100644
--- a/src/cdp/testing.zig
+++ b/src/cdp/testing.zig
@@ -24,7 +24,6 @@ const ArenaAllocator = std.heap.ArenaAllocator;
 const Testing = @This();
 
 const main = @import("cdp.zig");
-const App = @import("../app.zig").App;
 const parser = @import("../browser/netsurf.zig");
 
 const base = @import("../testing.zig");
diff --git a/src/log.zig b/src/log.zig
index 24ae9ff8..edeb5401 100644
--- a/src/log.zig
+++ b/src/log.zig
@@ -20,7 +20,6 @@ const std = @import("std");
 const builtin = @import("builtin");
 
 const Thread = std.Thread;
-const Allocator = std.mem.Allocator;
 
 const is_debug = builtin.mode == .Debug;
 
diff --git a/src/main.zig b/src/main.zig
index 7485e8fa..6234a4bc 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -22,12 +22,10 @@ const Allocator = std.mem.Allocator;
 
 const log = @import("log.zig");
 const App = @import("app.zig").App;
-const Http = @import("http/Http.zig");
 const Server = @import("server.zig").Server;
 const Browser = @import("browser/browser.zig").Browser;
 
 const build_config = @import("build_config");
-const parser = @import("browser/netsurf.zig");
 
 var _app: ?*App = null;
 var _server: ?Server = null;
diff --git a/src/main_wpt.zig b/src/main_wpt.zig
index 63b2d665..a8b3c4d6 100644
--- a/src/main_wpt.zig
+++ b/src/main_wpt.zig
@@ -27,9 +27,6 @@ const Env = @import("browser/env.zig").Env;
 const Browser = @import("browser/browser.zig").Browser;
 const TestHTTPServer = @import("TestHTTPServer.zig");
 
-const parser = @import("browser/netsurf.zig");
-const polyfill = @import("browser/polyfill/polyfill.zig");
-
 const WPT_DIR = "tests/wpt";
 
 pub fn main() !void {
diff --git a/src/notification.zig b/src/notification.zig
index 17614a32..05024166 100644
--- a/src/notification.zig
+++ b/src/notification.zig
@@ -1,9 +1,7 @@
 const std = @import("std");
 
 const log = @import("log.zig");
-const URL = @import("url.zig").URL;
 const page = @import("browser/page.zig");
-const Http = @import("http/Http.zig");
 const Transfer = @import("http/Client.zig").Transfer;
 
 const Allocator = std.mem.Allocator;
diff --git a/src/runtime/js.zig b/src/runtime/js.zig
index dbbc26a2..6475033b 100644
--- a/src/runtime/js.zig
+++ b/src/runtime/js.zig
@@ -2841,7 +2841,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type {
                     }
                     return v8.initNull(isolate).toValue();
                 },
-                .error_union => return zigValueToJs(templates, isolate, v8_context, value catch |err| return err),
+                .error_union => return zigValueToJs(templates, isolate, v8_context, try value),
                 else => {},
             }
 
diff --git a/src/server.zig b/src/server.zig
index f4f169d1..97451705 100644
--- a/src/server.zig
+++ b/src/server.zig
@@ -29,8 +29,6 @@ const log = @import("log.zig");
 const App = @import("app.zig").App;
 const CDP = @import("cdp/cdp.zig").CDP;
 
-const TimeoutCheck = std.time.ns_per_ms * 100;
-
 const MAX_HTTP_REQUEST_SIZE = 4096;
 
 // max message size
diff --git a/src/testing.zig b/src/testing.zig
index d8c894ce..68313bd0 100644
--- a/src/testing.zig
+++ b/src/testing.zig
@@ -19,8 +19,6 @@
 const std = @import("std");
 const Allocator = std.mem.Allocator;
 
-const Platform = @import("runtime/js.zig").Platform;
-
 pub const allocator = std.testing.allocator;
 pub const expectError = std.testing.expectError;
 pub const expect = std.testing.expect;