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;
};