Title: [105060] trunk/Source/WebCore
Revision
105060
Author
[email protected]
Date
2012-01-16 05:44:14 -0800 (Mon, 16 Jan 2012)

Log Message

Web Inspector: CodeGeneratorInspector.py: generate array types.
https://bugs.webkit.org/show_bug.cgi?id=75284

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

New classes are generated for ecah array type instance. Some includes
and ifdefs are fixed.

* inspector/CodeGeneratorInspector.py:
(ArrayBinding):
(ArrayBinding.get_code_generator):
(ArrayBinding.get_code_generator.CodeGenerator):
(ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
(ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext):
(ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
(ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
(ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
(ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
(ArrayBinding.get_code_generator.CodeGenerator.generate_forward_declaration):
(ArrayBinding.get_code_generator.CodeGenerator.register_use):
(ArrayBinding.get_in_c_type_text):
(ArrayBinding.get_setter_value_expression_pattern):
(ArrayBinding.reduce_to_raw_type):
(RawTypeBinding):
(RawTypeBinding.__init__):
(RawTypeBinding.get_code_generator):
(RawTypeBinding.get_in_c_type_text):
(RawTypeBinding.get_setter_value_expression_pattern):
(RawTypeBinding.reduce_to_raw_type):
(TypeData.__init__):
(TypeData.get_binding):
* inspector/ConsoleMessage.cpp:
* inspector/InspectorValues.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (105059 => 105060)


--- trunk/Source/WebCore/ChangeLog	2012-01-16 13:40:04 UTC (rev 105059)
+++ trunk/Source/WebCore/ChangeLog	2012-01-16 13:44:14 UTC (rev 105060)
@@ -1,3 +1,39 @@
+2012-01-16  Peter Rybin  <[email protected]>
+
+        Web Inspector: CodeGeneratorInspector.py: generate array types.
+        https://bugs.webkit.org/show_bug.cgi?id=75284
+
+        Reviewed by Yury Semikhatsky.
+
+        New classes are generated for ecah array type instance. Some includes
+        and ifdefs are fixed.
+
+        * inspector/CodeGeneratorInspector.py:
+        (ArrayBinding):
+        (ArrayBinding.get_code_generator):
+        (ArrayBinding.get_code_generator.CodeGenerator):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
+        (ArrayBinding.get_code_generator.CodeGenerator.generate_forward_declaration):
+        (ArrayBinding.get_code_generator.CodeGenerator.register_use):
+        (ArrayBinding.get_in_c_type_text):
+        (ArrayBinding.get_setter_value_expression_pattern):
+        (ArrayBinding.reduce_to_raw_type):
+        (RawTypeBinding):
+        (RawTypeBinding.__init__):
+        (RawTypeBinding.get_code_generator):
+        (RawTypeBinding.get_in_c_type_text):
+        (RawTypeBinding.get_setter_value_expression_pattern):
+        (RawTypeBinding.reduce_to_raw_type):
+        (TypeData.__init__):
+        (TypeData.get_binding):
+        * inspector/ConsoleMessage.cpp:
+        * inspector/InspectorValues.h:
+
 2012-01-15  Pavel Feldman  <[email protected]>
 
         Web Inspector: editing body multiplies head

Modified: trunk/Source/WebCore/inspector/CodeGeneratorInspector.py (105059 => 105060)


--- trunk/Source/WebCore/inspector/CodeGeneratorInspector.py	2012-01-16 13:40:04 UTC (rev 105059)
+++ trunk/Source/WebCore/inspector/CodeGeneratorInspector.py	2012-01-16 13:44:14 UTC (rev 105060)
@@ -899,62 +899,117 @@
 
                 return PlainObjectBinding
         elif json_typable["type"] == "array":
-            if "items" in json_typable:
 
-                class CodeGenerator:
-                    @staticmethod
-                    def generate_type_builder(writer, forward_listener):
+            class ArrayBinding:
+                @staticmethod
+                def get_code_generator():
 
-                        class AdHocTypeContext:
-                            @staticmethod
-                            def get_type_name_fix():
-                                class NameFix:
-                                    class_name = fixed_type_name.class_name + "Item"
+                    class CodeGenerator:
+                        @staticmethod
+                        def generate_type_builder(writer, forward_listener):
+                            helper.write_doc(writer)
+                            class_name = fixed_type_name.class_name
+                            fixed_type_name.output_comment(writer)
+                            writer.newline("class ")
+                            writer.append(class_name)
+                            writer.append(" : public InspectorArray {\n")
+                            writer.newline("private:\n")
+                            writer.newline("    %s() { }\n" % fixed_type_name.class_name)
+                            writer.append("\n")
+                            writer.newline("public:\n")
+                            ad_hoc_type_writer = writer.insert_writer("    ")
 
+                            if "items" in json_typable:
+
+                                class AdHocTypeContext:
                                     @staticmethod
-                                    def output_comment(writer):
-                                        fixed_type_name.output_comment(writer)
-                                        writer.newline("// Named as an item of array.\n")
+                                    def get_type_name_fix():
+                                        class NameFix:
+                                            class_name = "Item"
 
-                                return NameFix
+                                            @staticmethod
+                                            def output_comment(writer):
+                                                pass
 
-                            @staticmethod
-                            def call_generate_type_builder(code_generator):
-                                code_generator.generate_type_builder(writer, forward_listener)
+                                        return NameFix
 
-                        resolve_param_type(json_typable["items"], context_domain_name, AdHocTypeContext)
+                                    @staticmethod
+                                    def call_generate_type_builder(code_generator):
+                                        code_generator.generate_type_builder(ad_hoc_type_writer, forward_listener)
 
-                    @staticmethod
-                    def register_use(forward_listener):
-                        pass
+                                item_type_binding = resolve_param_type(json_typable["items"], context_domain_name, AdHocTypeContext)
+                            else:
+                                item_type_binding = RawTypeBinding(RawTypes.Any)
 
-                default_binding_code_generator = CodeGenerator
+                            for item_type_opt in MethodGenerateModes.get_modes(item_type_binding):
+                                writer.newline("    void addItem")
+                                writer.append("(%s value)\n" % item_type_opt.get_c_param_type_text(item_type_binding))
+                                writer.newline("    {\n")
+                                writer.newline("        this->push%s(%s);\n"
+                                    % (item_type_binding.reduce_to_raw_type().get_setter_name(),
+                                       item_type_opt.get_setter_value_expression(item_type_binding, "value")))
+                                writer.newline("    }\n")
 
-        else:
-            default_binding_code_generator = None
+                            writer.append("\n")
+                            writer.newline("    static PassRefPtr<%s> create() {\n" % fixed_type_name.class_name)
+                            writer.newline("        return adoptRef(new %s());\n" % fixed_type_name.class_name)
+                            writer.newline("    }\n")
 
+                            code_generator = item_type_binding.get_code_generator()
+                            if code_generator:
+                                code_generator.register_use(forward_listener)
+
+                            writer.newline("};\n\n")
+
+                        @staticmethod
+                        def generate_forward_declaration(writer):
+                            class_name = fixed_type_name.class_name
+                            writer.newline("class ")
+                            writer.append(class_name)
+                            writer.append(";\n")
+
+                        @staticmethod
+                        def register_use(forward_listener):
+                            helper.add_to_forward_listener(forward_listener)
+
+                    return CodeGenerator
+
+                @classmethod
+                def get_in_c_type_text(cls, optional):
+                    return "PassRefPtr<%s%s>" % (helper.full_name_prefix, fixed_type_name.class_name)
+
+                @staticmethod
+                def get_setter_value_expression_pattern():
+                    return None
+
+                @staticmethod
+                def reduce_to_raw_type():
+                    return RawTypes.Array
+
+            return ArrayBinding
+
         raw_type = RawTypes.get(json_typable["type"])
 
-        class RawTypesBinding:
-            @staticmethod
-            def get_code_generator():
-                return default_binding_code_generator
+        return RawTypeBinding(raw_type)
 
-            @classmethod
-            def get_in_c_type_text(cls, optional):
-                return cls.reduce_to_raw_type().get_c_param_type(ParamType.EVENT, optional).get_text()
 
-            @staticmethod
-            def get_setter_value_expression_pattern():
-                return None
+class RawTypeBinding:
+    def __init__(self, raw_type):
+        self.raw_type_ = raw_type
 
-            @staticmethod
-            def reduce_to_raw_type():
-                return raw_type
+    def get_code_generator(self):
+        return None
 
-        return RawTypesBinding
+    def get_in_c_type_text(self, optional):
+        return self.raw_type_.get_c_param_type(ParamType.EVENT, optional).get_text()
 
+    def get_setter_value_expression_pattern(self):
+        return None
 
+    def reduce_to_raw_type(self):
+        return self.raw_type_
+
+
 class TypeData(object):
     def __init__(self, json_type, json_domain, domain_data):
         self.json_type_ = json_type
@@ -967,12 +1022,23 @@
         json_type_name = json_type["type"]
         raw_type = RawTypes.get(json_type_name)
         self.raw_type_ = raw_type
-        self.binding_ = TypeBindings.create_named_type_declaration(json_type, json_domain["domain"], self)
+        self.binding_being_resolved_ = False
+        self.binding_ = None
 
     def get_raw_type(self):
         return self.raw_type_
 
     def get_binding(self):
+        if not self.binding_:
+            if self.binding_being_resolved_:
+                raise Error("Type %s is already being resolved" % self.json_type_["type"])
+            # Resolve only lazily, because resolving one named type may require resolving some other named type.
+            self.binding_being_resolved_ = True
+            try:
+                self.binding_ = TypeBindings.create_named_type_declaration(self.json_type_, self.json_domain_["domain"], self)
+            finally:
+                self.binding_being_resolved_ = False
+
         return self.binding_
 
     def get_json_type(self):
@@ -1159,8 +1225,6 @@
 ${typeBuilders}
 } // namespace TypeBuilder
 
-#endif // ENABLE(INSPECTOR)
-
 class InspectorFrontend {
 public:
     InspectorFrontend(InspectorFrontendChannel*);
@@ -1171,6 +1235,8 @@
     InspectorFrontendChannel* m_inspectorFrontendChannel;
 ${fieldDeclarations}};
 
+#endif // ENABLE(INSPECTOR)
+
 } // namespace WebCore
 #endif // !defined(InspectorFrontend_h)
 """)
@@ -1579,12 +1645,12 @@
 """
 
 #include "config.h"
+#if ENABLE(INSPECTOR)
+
 #include "InspectorFrontend.h"
 #include <wtf/text/WTFString.h>
 #include <wtf/text/CString.h>
 
-#if ENABLE(INSPECTOR)
-
 #include "InspectorFrontendChannel.h"
 #include "InspectorValues.h"
 #include <wtf/text/WTFString.h>

Modified: trunk/Source/WebCore/inspector/ConsoleMessage.cpp (105059 => 105060)


--- trunk/Source/WebCore/inspector/ConsoleMessage.cpp	2012-01-16 13:40:04 UTC (rev 105059)
+++ trunk/Source/WebCore/inspector/ConsoleMessage.cpp	2012-01-16 13:44:14 UTC (rev 105060)
@@ -29,10 +29,11 @@
  */
 
 #include "config.h"
-#include "ConsoleMessage.h"
 
 #if ENABLE(INSPECTOR)
 
+#include "ConsoleMessage.h"
+
 #include "Console.h"
 #include "InjectedScript.h"
 #include "InjectedScriptManager.h"

Modified: trunk/Source/WebCore/inspector/InspectorValues.h (105059 => 105060)


--- trunk/Source/WebCore/inspector/InspectorValues.h	2012-01-16 13:40:04 UTC (rev 105059)
+++ trunk/Source/WebCore/inspector/InspectorValues.h	2012-01-16 13:44:14 UTC (rev 105060)
@@ -244,8 +244,10 @@
     const_iterator begin() const { return m_data.begin(); }
     const_iterator end() const { return m_data.end(); }
 
+protected:
+    InspectorArray();
+
 private:
-    InspectorArray();
     Vector<RefPtr<InspectorValue> > m_data;
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to