Bläddra i källkod

LibWeb: Ensure that CSS initial values are always valid :^)

First off, this verifies that an initial value is always provided in
Properties.json for each property.

Second, it verifies that parsing that initial value succeeds.

This means that a call to `property_initial_value()` will always return
a valid StyleValue. :^)
Sam Atkins 3 år sedan
förälder
incheckning
4d42915485
1 ändrade filer med 15 tillägg och 10 borttagningar
  1. 15 10
      Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_PropertyID_cpp.cpp

+ 15 - 10
Meta/Lagom/Tools/CodeGenerators/LibWeb/Generate_CSS_PropertyID_cpp.cpp

@@ -182,19 +182,24 @@ RefPtr<StyleValue> property_initial_value(PropertyID property_id)
     //       works for now! :^)
 
     auto output_initial_value_code = [&](auto& name, auto& object) {
-        if (object.has("initial")) {
-            auto& initial_value = object.get("initial");
-            VERIFY(initial_value.is_string());
-            auto initial_value_string = initial_value.as_string();
+        if (!object.has("initial")) {
+            dbgln("No initial value specified for property '{}'", name);
+            VERIFY_NOT_REACHED();
+        }
+        auto& initial_value = object.get("initial");
+        VERIFY(initial_value.is_string());
+        auto initial_value_string = initial_value.as_string();
 
-            auto member_generator = generator.fork();
-            member_generator.set("name:titlecase", title_casify(name));
-            member_generator.set("initial_value_string", initial_value_string);
-            member_generator.append(R"~~~(
-        if (auto parsed_value = Parser(parsing_context, "@initial_value_string@").parse_as_css_value(PropertyID::@name:titlecase@))
+        auto member_generator = generator.fork();
+        member_generator.set("name:titlecase", title_casify(name));
+        member_generator.set("initial_value_string", initial_value_string);
+        member_generator.append(R"~~~(
+        {
+            auto parsed_value = Parser(parsing_context, "@initial_value_string@").parse_as_css_value(PropertyID::@name:titlecase@);
+            VERIFY(!parsed_value.is_null());
             initial_values.set(PropertyID::@name:titlecase@, parsed_value.release_nonnull());
-)~~~");
         }
+)~~~");
     };
 
     properties.for_each_member([&](auto& name, auto& value) {