Changeset 104829 in webkit


Ignore:
Timestamp:
Jan 12, 2012 8:40:10 AM (12 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Peter Rybin <peter.rybin@gmail.com> on 2012-01-12
Reviewed by Yury Semikhatsky.

New classes are generated for ecah array type instance.

  • 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/InspectorValues.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r104828 r104829  
     12012-01-12  Peter Rybin  <peter.rybin@gmail.com>
     2
     3        Web Inspector: CodeGeneratorInspector.py: generate array types.
     4        https://bugs.webkit.org/show_bug.cgi?id=75284
     5
     6        Reviewed by Yury Semikhatsky.
     7
     8        New classes are generated for ecah array type instance.
     9
     10        * inspector/CodeGeneratorInspector.py:
     11        (ArrayBinding):
     12        (ArrayBinding.get_code_generator):
     13        (ArrayBinding.get_code_generator.CodeGenerator):
     14        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder):
     15        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext):
     16        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix):
     17        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix):
     18        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.get_type_name_fix.NameFix.output_comment):
     19        (ArrayBinding.get_code_generator.CodeGenerator.generate_type_builder.AdHocTypeContext.call_generate_type_builder):
     20        (ArrayBinding.get_code_generator.CodeGenerator.generate_forward_declaration):
     21        (ArrayBinding.get_code_generator.CodeGenerator.register_use):
     22        (ArrayBinding.get_in_c_type_text):
     23        (ArrayBinding.get_setter_value_expression_pattern):
     24        (ArrayBinding.reduce_to_raw_type):
     25        (RawTypeBinding):
     26        (RawTypeBinding.__init__):
     27        (RawTypeBinding.get_code_generator):
     28        (RawTypeBinding.get_in_c_type_text):
     29        (RawTypeBinding.get_setter_value_expression_pattern):
     30        (RawTypeBinding.reduce_to_raw_type):
     31        (TypeData.__init__):
     32        (TypeData.get_binding):
     33        * inspector/InspectorValues.h:
     34
    1352012-01-12  Pierre Rossi  <pierre.rossi@gmail.com>
    236
  • trunk/Source/WebCore/inspector/CodeGeneratorInspector.py

    r104716 r104829  
    899899                return PlainObjectBinding
    900900        elif json_typable["type"] == "array":
    901             if "items" in json_typable:
    902 
    903                 class CodeGenerator:
    904                     @staticmethod
    905                     def generate_type_builder(writer, forward_listener):
    906 
    907                         class AdHocTypeContext:
    908                             @staticmethod
    909                             def get_type_name_fix():
    910                                 class NameFix:
    911                                     class_name = fixed_type_name.class_name + "Item"
    912 
     901
     902            class ArrayBinding:
     903                @staticmethod
     904                def get_code_generator():
     905
     906                    class CodeGenerator:
     907                        @staticmethod
     908                        def generate_type_builder(writer, forward_listener):
     909                            helper.write_doc(writer)
     910                            class_name = fixed_type_name.class_name
     911                            fixed_type_name.output_comment(writer)
     912                            writer.newline("class ")
     913                            writer.append(class_name)
     914                            writer.append(" : public InspectorArray {\n")
     915                            writer.newline("private:\n")
     916                            writer.newline("    %s() { }\n" % fixed_type_name.class_name)
     917                            writer.append("\n")
     918                            writer.newline("public:\n")
     919                            ad_hoc_type_writer = writer.insert_writer("    ")
     920
     921                            if "items" in json_typable:
     922
     923                                class AdHocTypeContext:
    913924                                    @staticmethod
    914                                     def output_comment(writer):
    915                                         fixed_type_name.output_comment(writer)
    916                                         writer.newline("// Named as an item of array.\n")
    917 
    918                                 return NameFix
    919 
    920                             @staticmethod
    921                             def call_generate_type_builder(code_generator):
    922                                 code_generator.generate_type_builder(writer, forward_listener)
    923 
    924                         resolve_param_type(json_typable["items"], context_domain_name, AdHocTypeContext)
    925 
    926                     @staticmethod
    927                     def register_use(forward_listener):
    928                         pass
    929 
    930                 default_binding_code_generator = CodeGenerator
    931 
    932         else:
    933             default_binding_code_generator = None
     925                                    def get_type_name_fix():
     926                                        class NameFix:
     927                                            class_name = "Item"
     928
     929                                            @staticmethod
     930                                            def output_comment(writer):
     931                                                pass
     932
     933                                        return NameFix
     934
     935                                    @staticmethod
     936                                    def call_generate_type_builder(code_generator):
     937                                        code_generator.generate_type_builder(ad_hoc_type_writer, forward_listener)
     938
     939                                item_type_binding = resolve_param_type(json_typable["items"], context_domain_name, AdHocTypeContext)
     940                            else:
     941                                item_type_binding = RawTypeBinding(RawTypes.Any)
     942
     943                            for item_type_opt in MethodGenerateModes.get_modes(item_type_binding):
     944                                writer.newline("    void addItem")
     945                                writer.append("(%s value)\n" % item_type_opt.get_c_param_type_text(item_type_binding))
     946                                writer.newline("    {\n")
     947                                writer.newline("        this->push%s(%s);\n"
     948                                    % (item_type_binding.reduce_to_raw_type().get_setter_name(),
     949                                       item_type_opt.get_setter_value_expression(item_type_binding, "value")))
     950                                writer.newline("    }\n")
     951
     952                            writer.append("\n")
     953                            writer.newline("    static PassRefPtr<%s> create() {\n" % fixed_type_name.class_name)
     954                            writer.newline("        return adoptRef(new %s());\n" % fixed_type_name.class_name)
     955                            writer.newline("    }\n")
     956
     957                            code_generator = item_type_binding.get_code_generator()
     958                            if code_generator:
     959                                code_generator.register_use(forward_listener)
     960
     961                            writer.newline("};\n\n")
     962
     963                        @staticmethod
     964                        def generate_forward_declaration(writer):
     965                            class_name = fixed_type_name.class_name
     966                            writer.newline("class ")
     967                            writer.append(class_name)
     968                            writer.append(";\n")
     969
     970                        @staticmethod
     971                        def register_use(forward_listener):
     972                            helper.add_to_forward_listener(forward_listener)
     973
     974                    return CodeGenerator
     975
     976                @classmethod
     977                def get_in_c_type_text(cls, optional):
     978                    return "PassRefPtr<%s%s>" % (helper.full_name_prefix, fixed_type_name.class_name)
     979
     980                @staticmethod
     981                def get_setter_value_expression_pattern():
     982                    return None
     983
     984                @staticmethod
     985                def reduce_to_raw_type():
     986                    return RawTypes.Array
     987
     988            return ArrayBinding
    934989
    935990        raw_type = RawTypes.get(json_typable["type"])
    936991
    937         class RawTypesBinding:
    938             @staticmethod
    939             def get_code_generator():
    940                 return default_binding_code_generator
    941 
    942             @classmethod
    943             def get_in_c_type_text(cls, optional):
    944                 return cls.reduce_to_raw_type().get_c_param_type(ParamType.EVENT, optional).get_text()
    945 
    946             @staticmethod
    947             def get_setter_value_expression_pattern():
    948                 return None
    949 
    950             @staticmethod
    951             def reduce_to_raw_type():
    952                 return raw_type
    953 
    954         return RawTypesBinding
     992        return RawTypeBinding(raw_type)
     993
     994
     995class RawTypeBinding:
     996    def __init__(self, raw_type):
     997        self.raw_type_ = raw_type
     998
     999    def get_code_generator(self):
     1000        return None
     1001
     1002    def get_in_c_type_text(self, optional):
     1003        return self.raw_type_.get_c_param_type(ParamType.EVENT, optional).get_text()
     1004
     1005    def get_setter_value_expression_pattern(self):
     1006        return None
     1007
     1008    def reduce_to_raw_type(self):
     1009        return self.raw_type_
    9551010
    9561011
     
    9671022        raw_type = RawTypes.get(json_type_name)
    9681023        self.raw_type_ = raw_type
    969         self.binding_ = TypeBindings.create_named_type_declaration(json_type, json_domain["domain"], self)
     1024        self.binding_being_resolved_ = False
     1025        self.binding_ = None
    9701026
    9711027    def get_raw_type(self):
     
    9731029
    9741030    def get_binding(self):
     1031        if not self.binding_:
     1032            if self.binding_being_resolved_:
     1033                raise Error("Type %s is already being resolved" % self.json_type_["type"])
     1034            # Resolve only lazily, because resolving one named type may require resolving some other named type.
     1035            self.binding_being_resolved_ = True
     1036            try:
     1037                self.binding_ = TypeBindings.create_named_type_declaration(self.json_type_, self.json_domain_["domain"], self)
     1038            finally:
     1039                self.binding_being_resolved_ = False
     1040
    9751041        return self.binding_
    9761042
  • trunk/Source/WebCore/inspector/InspectorValues.h

    r102440 r104829  
    245245    const_iterator end() const { return m_data.end(); }
    246246
    247 private:
     247protected:
    248248    InspectorArray();
     249
     250private:
    249251    Vector<RefPtr<InspectorValue> > m_data;
    250252};
Note: See TracChangeset for help on using the changeset viewer.