From 237ddcba9a095311d49a4219d1812496c55ff262 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Mon, 16 Jun 2025 17:07:43 +0800 Subject: [PATCH] Fix non-probing of union array failure Probing a union match for an possible value should rarely hard-fail. Instead, it should return an .{.invalid = {}} response to let the prober decide how to proceed. This fixes a hard-fail when a JS value fails to probe as an array. Also, add :modal pseudo-class. (both issues came up looking at github integration) --- src/browser/css/parser.zig | 1 + src/browser/css/selector.zig | 2 ++ src/runtime/js.zig | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/browser/css/parser.zig b/src/browser/css/parser.zig index 70fe20a0..4bcf7f9f 100644 --- a/src/browser/css/parser.zig +++ b/src/browser/css/parser.zig @@ -605,6 +605,7 @@ pub const Parser = struct { .after, .backdrop, .before, .cue, .first_letter => return .{ .pseudo_element = pseudo_class }, .first_line, .grammar_error, .marker, .placeholder => return .{ .pseudo_element = pseudo_class }, .selection, .spelling_error => return .{ .pseudo_element = pseudo_class }, + .modal => return .{ .pseudo_element = pseudo_class }, } } diff --git a/src/browser/css/selector.zig b/src/browser/css/selector.zig index a3e37246..301af641 100644 --- a/src/browser/css/selector.zig +++ b/src/browser/css/selector.zig @@ -98,6 +98,7 @@ pub const PseudoClass = enum { placeholder, selection, spelling_error, + modal, pub const Error = error{ InvalidPseudoClass, @@ -154,6 +155,7 @@ pub const PseudoClass = enum { if (std.ascii.eqlIgnoreCase(s, "placeholder")) return .placeholder; if (std.ascii.eqlIgnoreCase(s, "selection")) return .selection; if (std.ascii.eqlIgnoreCase(s, "spelling-error")) return .spelling_error; + if (std.ascii.eqlIgnoreCase(s, "modal")) return .modal; return Error.InvalidPseudoClass; } }; diff --git a/src/runtime/js.zig b/src/runtime/js.zig index 86619c6a..fc80e23d 100644 --- a/src/runtime/js.zig +++ b/src/runtime/js.zig @@ -1158,7 +1158,7 @@ pub fn Env(comptime State: type, comptime WebApis: type) type { } if (!js_value.isArray()) { - return error.InvalidArgument; + return .{.invalid = {}}; } // This can get tricky.