Title: [106957] trunk/Source/WebCore
Revision
106957
Author
[email protected]
Date
2012-02-07 09:38:00 -0800 (Tue, 07 Feb 2012)

Log Message

Web Inspector: CodeGeneratorInspector.py: extend Array validator functionality
https://bugs.webkit.org/show_bug.cgi?id=77919

Patch by Peter Rybin <[email protected]> on 2012-02-07
Patch by Peter Rybin <[email protected]> on 2012-02-07
Reviewed by Yury Semikhatsky.

Array validator method runtimeCast is added, internal backing method
is moved from .cpp to .h (it's template anyway), boolean validator is
supported.

* inspector/CodeGeneratorInspector.py:
(RawTypes.Bool.get_validate_method_params.ValidateMethodParams):
(RawTypes.Bool.get_validate_method_params):
(TypeBuilder):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (106956 => 106957)


--- trunk/Source/WebCore/ChangeLog	2012-02-07 17:34:59 UTC (rev 106956)
+++ trunk/Source/WebCore/ChangeLog	2012-02-07 17:38:00 UTC (rev 106957)
@@ -1,3 +1,20 @@
+2012-02-07  Peter Rybin  <[email protected]>
+
+        Web Inspector: CodeGeneratorInspector.py: extend Array validator functionality
+        https://bugs.webkit.org/show_bug.cgi?id=77919
+
+        Patch by Peter Rybin <[email protected]> on 2012-02-07
+        Reviewed by Yury Semikhatsky.
+
+        Array validator method runtimeCast is added, internal backing method
+        is moved from .cpp to .h (it's template anyway), boolean validator is
+        supported.
+
+        * inspector/CodeGeneratorInspector.py:
+        (RawTypes.Bool.get_validate_method_params.ValidateMethodParams):
+        (RawTypes.Bool.get_validate_method_params):
+        (TypeBuilder):
+
 2012-02-07  Dean Jackson  <[email protected]>
 
         Apple/Safari: Enable WebGL multisampling on ATI cards

Modified: trunk/Source/WebCore/inspector/CodeGeneratorInspector.py (106956 => 106957)


--- trunk/Source/WebCore/inspector/CodeGeneratorInspector.py	2012-02-07 17:34:59 UTC (rev 106956)
+++ trunk/Source/WebCore/inspector/CodeGeneratorInspector.py	2012-02-07 17:38:00 UTC (rev 106957)
@@ -422,7 +422,11 @@
 
         @staticmethod
         def get_validate_method_params():
-            raise Exception("TODO")
+            class ValidateMethodParams:
+                name = "Boolean"
+                var_type = "bool"
+                as_method_name = "Boolean"
+            return ValidateMethodParams
 
         @staticmethod
         def get_output_pass_model():
@@ -1122,7 +1126,7 @@
     }
 """ % class_name)
 
-                                writer.newline("    typedef StructItemTraits ItemTraits;\n")
+                                writer.newline("    typedef TypeBuilder::StructItemTraits ItemTraits;\n")
 
                                 for prop_data in resolve_data.optional_properties:
                                     prop_name = prop_data.p["name"]
@@ -1167,22 +1171,29 @@
                                     validator_writer.newline("    RefPtr<InspectorObject> object;\n")
                                     validator_writer.newline("    bool castRes = value->asObject(&object);\n")
                                     validator_writer.newline("    ASSERT_UNUSED(castRes, castRes);\n")
-                                    validator_writer.newline("    InspectorObject::iterator it;\n")
                                     for prop_data in resolve_data.main_properties:
-                                        validator_writer.newline("    it = object->find(\"%s\");\n" % prop_data.p["name"])
-                                        validator_writer.newline("    ASSERT(it != object->end());\n")
-                                        validator_writer.newline("    %s(it->second.get());\n" % prop_data.param_type_binding.get_validator_call_text())
+                                        validator_writer.newline("    {\n")
+                                        it_name = "%sPos" % prop_data.p["name"]
+                                        validator_writer.newline("        InspectorObject::iterator %s;\n" % it_name)
+                                        validator_writer.newline("        %s = object->find(\"%s\");\n" % (it_name, prop_data.p["name"]))
+                                        validator_writer.newline("        ASSERT(%s != object->end());\n" % it_name)
+                                        validator_writer.newline("        %s(%s->second.get());\n" % (prop_data.param_type_binding.get_validator_call_text(), it_name))
+                                        validator_writer.newline("    }\n")
 
-                                    validator_writer.newline("    int count = %s;\n" % len(resolve_data.main_properties))
+                                    validator_writer.newline("    int foundPropertiesCount = %s;\n" % len(resolve_data.main_properties))
 
                                     for prop_data in resolve_data.optional_properties:
-                                        validator_writer.newline("    it = object->find(\"%s\");\n" % prop_data.p["name"])
-                                        validator_writer.newline("    if (it != object->end()) {\n")
-                                        validator_writer.newline("        %s(it->second.get());\n" % prop_data.param_type_binding.get_validator_call_text())
-                                        validator_writer.newline("        ++count;\n")
+                                        validator_writer.newline("    {\n")
+                                        it_name = "%sPos" % prop_data.p["name"]
+                                        validator_writer.newline("        InspectorObject::iterator %s;\n" % it_name)
+                                        validator_writer.newline("        %s = object->find(\"%s\");\n" % (it_name, prop_data.p["name"]))
+                                        validator_writer.newline("        if (%s != object->end()) {\n" % it_name)
+                                        validator_writer.newline("            %s(%s->second.get());\n" % (prop_data.param_type_binding.get_validator_call_text(), it_name))
+                                        validator_writer.newline("            ++foundPropertiesCount;\n")
+                                        validator_writer.newline("        }\n")
                                         validator_writer.newline("    }\n")
 
-                                    validator_writer.newline("    ASSERT(count == object->size());\n")
+                                    validator_writer.newline("    ASSERT(foundPropertiesCount == object->size());\n")
                                     validator_writer.newline("}\n\n\n")
 
                                 writer.newline("};\n\n")
@@ -2143,8 +2154,28 @@
         return adoptRef(new Array<T>());
     }
 
+    static PassRefPtr<Array<T> > runtimeCast(PassRefPtr<InspectorValue> value)
+    {
+        RefPtr<InspectorArray> array;
+        bool castRes = value->asArray(&array);
+        ASSERT_UNUSED(castRes, castRes);
+#if !ASSERT_DISABLED
+        assertCorrectValue(array.get());
+#endif  // !ASSERT_DISABLED
+        COMPILE_ASSERT(sizeof(Array<T>) == sizeof(InspectorArray), type_cast_problem);
+        return static_cast<Array<T>*>(array.get());
+    }
+
 #if """ + VALIDATOR_IFDEF_NAME + """
-    static void assertCorrectValue(InspectorValue* value);
+    static void assertCorrectValue(InspectorValue* value)
+    {
+        RefPtr<InspectorArray> array;
+        bool castRes = value->asArray(&array);
+        ASSERT_UNUSED(castRes, castRes);
+        for (unsigned i = 0; i < array->length(); i++)
+            ArrayItemHelper<T>::Traits::template assertCorrectValue<T>(array->get(i).get());
+    }
+
 #endif // """ + VALIDATOR_IFDEF_NAME + """
 };
 
@@ -2219,16 +2250,6 @@
 
 #if """ + VALIDATOR_IFDEF_NAME + """
 
-template<typename T>
-void TypeBuilder::Array<T>::assertCorrectValue(InspectorValue* value)
-{
-    RefPtr<InspectorArray> array;
-    bool castRes = value->asArray(&array);
-    ASSERT_UNUSED(castRes, castRes);
-    for (unsigned i = 0; i < array->length(); i++)
-        ArrayItemHelper<T>::Traits::template assertCorrectValue<T>(array->get(i).get());
-}
-
 $validatorCode
 
 #endif // """ + VALIDATOR_IFDEF_NAME + """
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to