def generate_members(self):
     guards = set([object.annotations.get('conditional') for object in self.internals if 'conditional' in object.annotations])
     lines = [BuiltinsGenerator.wrap_with_guard(" || ".join(guards), "    JSC::VM& m_vm;")]
     for object in self.internals:
         member = "    %s %s;" % (self.member_type(object), self.member_name(object))
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), member))
     return '\n'.join(lines)
示例#2
0
 def generate_constructor(self):
     guards = set([object.annotations.get('conditional') for object in self.internals if 'conditional' in object.annotations])
     lines = ["JSBuiltinInternalFunctions::JSBuiltinInternalFunctions(JSC::VM& vm)",
              BuiltinsGenerator.wrap_with_guard(" || ".join(guards), "    : m_vm(vm)")]
     for object in self.internals:
         initializer = "    , %s(m_vm)" % self.member_name(object)
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), initializer))
     lines.append("{")
     lines.append("    UNUSED_PARAM(vm);")
     lines.append("}\n")
     return '\n'.join(lines)
示例#3
0
 def generate_constructor(self):
     lines = ["    explicit JSBuiltinFunctions(JSC::VM& vm)",
              "        : m_vm(vm)"]
     for object in self.model().objects:
         member_init = "        , %s(m_vm)" % self.member_name(object)
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), member_init))
     lines.append("    {")
     for object in self.model().objects:
         if not 'internal' in object.annotations:
             continue
         internal_export_names = "        %s.exportNames();" % self.member_name(object)
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), internal_export_names))
     lines.append("    }\n")
     return '\n'.join(lines)
 def generate_constructor(self):
     lines = ["    explicit JSBuiltinFunctions(JSC::VM& vm)",
              "        : m_vm(vm)"]
     for object in self.model().objects:
         member_init = "        , %s(&m_vm)" % self.member_name(object)
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), member_init))
     lines.append("    {")
     for object in self.model().objects:
         if not 'internal' in object.annotations:
             continue
         internal_export_names = "        %s.exportNames();" % self.member_name(object)
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), internal_export_names))
     lines.append("    }\n")
     return '\n'.join(lines)
示例#5
0
    def generate_initialize_method(self):
        lines = ["void JSBuiltinInternalFunctions::initialize(JSDOMGlobalObject& globalObject)",
                "{",
                "    UNUSED_PARAM(globalObject);"]

        for object in self.internals:
            init = "    %s.init(globalObject);" % self.member_name(object)
            lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), init))
        lines.append("")

        guards = set([object.annotations.get('conditional') for object in self.internals if 'conditional' in object.annotations])
        lines.append(BuiltinsGenerator.wrap_with_guard(" || ".join(guards), self._generate_initialize_static_globals()))

        lines.append("}")
        return '\n'.join(lines)
示例#6
0
 def generate_accessors(self):
     lines = []
     for object in self.model().objects:
         accessor = "    %s& %s() { return %s; }" % (self.member_type(object), self.accessor_name(object), self.member_name(object))
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), accessor))
     lines.append("")
     return '\n'.join(lines)
示例#7
0
    def generate_section_for_global_private_code_name_macro(self):
        args = {
            'macroPrefix': self.model().framework.setting('macro_prefix'),
        }

        lines = []
        lines.append(
            "#define %(macroPrefix)s_FOREACH_BUILTIN_FUNCTION_PRIVATE_GLOBAL_NAME(macro) \\"
            % args)
        functions = [
            function for function in self.model().all_functions()
            if function.is_global_private
        ]
        functions.sort(key=lambda x: x.function_name)
        for function in functions:
            function_args = {
                'varName': get_var_name(function),
                'funcName': function.function_name,
                'codeName': BuiltinsGenerator.mangledNameForFunction(function),
            }

            lines.append(
                "    macro(%(varName)s, %(funcName)s, %(codeName)s) \\" %
                function_args)

        return '\n'.join(lines)
示例#8
0
 def generate_members(self):
     guards = set([
         object.annotations.get('conditional') for object in self.internals
         if 'conditional' in object.annotations
     ])
     lines = [
         BuiltinsGenerator.wrap_with_guard(" || ".join(guards),
                                           "    JSC::VM& m_vm;")
     ]
     for object in self.internals:
         member = "    %s %s;" % (self.member_type(object),
                                  self.member_name(object))
         lines.append(
             BuiltinsGenerator.wrap_with_guard(
                 object.annotations.get('conditional'), member))
     return '\n'.join(lines)
 def generate_accessors(self):
     lines = []
     for object in self.internals:
         accessor = "    %s& %s() { return %s; }" % (self.member_type(object), self.accessor_name(object), self.member_name(object))
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), accessor))
     lines.append("")
     return '\n'.join(lines)
 def generate_members(self):
     lines = ["    JSC::VM& m_vm;"]
     for object in self.model().objects:
         member = "    %s %s;" % (self.member_type(object),
                                  self.member_name(object))
         lines.append(
             BuiltinsGenerator.wrap_with_guard(
                 object.annotations.get('conditional'), member))
     return '\n'.join(lines)
示例#11
0
 def generate_visit_method(self):
     lines = ["void JSBuiltinInternalFunctions::visit(JSC::SlotVisitor& visitor)",
              "{"]
     for object in self.internals:
         visit = "    %s.visit(visitor);" % self.member_name(object)
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), visit))
     lines.append("    UNUSED_PARAM(visitor);")
     lines.append("}\n")
     return '\n'.join(lines)
示例#12
0
 def _generate_initialize_static_globals(self):
     lines = ["    JSVMClientData& clientData = *static_cast<JSVMClientData*>(m_vm.clientData);",
              "    JSDOMGlobalObject::GlobalPropertyInfo staticGlobals[] = {"]
     for object in self.internals:
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), self.property_macro(object)))
     lines.append("    };")
     lines.append("    globalObject.addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));")
     lines.append("    UNUSED_PARAM(clientData);")
     return '\n'.join(lines)
示例#13
0
 def generate_constructor(self):
     lines = [
         "JSBuiltinInternalFunctions::JSBuiltinInternalFunctions(JSC::VM& vm)",
         "    : m_vm(vm)"
     ]
     for object in self.internals:
         initializer = "    , %s(m_vm)" % self.member_name(object)
         lines.append(
             BuiltinsGenerator.wrap_with_guard(
                 object.annotations.get('conditional'), initializer))
     lines.append("{\n}\n")
     return '\n'.join(lines)
    def generate_externs_for_object(self, object):
        lines = []

        for function in object.functions:
            function_args = {
                'codeName': BuiltinsGenerator.mangledNameForFunction(function) + 'Code',
            }

            lines.append("""extern const char* s_%(codeName)s;
extern const int s_%(codeName)sLength;
extern const JSC::ConstructAbility s_%(codeName)sConstructAbility;""" % function_args)

        return lines
示例#15
0
    def generate_externs_for_object(self, object):
        lines = []

        for function in object.functions:
            function_args = {
                'codeName': BuiltinsGenerator.mangledNameForFunction(function) + 'Code',
            }

            lines.append("""extern const char* s_%(codeName)s;
extern const int s_%(codeName)sLength;
extern const JSC::ConstructAbility s_%(codeName)sConstructAbility;""" % function_args)

        return lines
示例#16
0
    def generate_methods(self):
        lines = [
            "void JSBuiltinInternalFunctions::visit(JSC::SlotVisitor& visitor)",
            "{"
        ]
        for object in self.internals:
            visit = "    %s.visit(visitor);" % self.member_name(object)
            lines.append(
                BuiltinsGenerator.wrap_with_guard(
                    object.annotations.get('conditional'), visit))
        lines.append("    UNUSED_PARAM(visitor);\n}")

        lines.append(
            "void JSBuiltinInternalFunctions::initialize(JSDOMGlobalObject& globalObject)"
        )
        lines.append("{")
        for object in self.internals:
            init = "    %s.init(globalObject);" % self.member_name(object)
            lines.append(
                BuiltinsGenerator.wrap_with_guard(
                    object.annotations.get('conditional'), init))

        lines.append(
            "    JSVMClientData& clientData = *static_cast<JSVMClientData*>(m_vm.clientData);"
        )
        lines.append(
            "    JSDOMGlobalObject::GlobalPropertyInfo staticGlobals[] = {")
        for object in self.internals:
            lines.append(
                BuiltinsGenerator.wrap_with_guard(
                    object.annotations.get('conditional'),
                    self.property_macro(object)))
        lines.append("    };")
        lines.append(
            "    globalObject.addStaticGlobals(staticGlobals, WTF_ARRAY_LENGTH(staticGlobals));"
        )
        lines.append("    UNUSED_PARAM(clientData);")
        lines.append("}")
        return '\n'.join(lines)
    def generate_section_for_code_table_macro(self):
        args = {
            'macroPrefix': self.model().framework.setting('macro_prefix'),
        }

        lines = []
        lines.append("#define %(macroPrefix)s_FOREACH_BUILTIN_CODE(macro) \\" % args)
        for function in self.model().all_functions():
            function_args = {
                'funcName': function.function_name,
                'codeName': BuiltinsGenerator.mangledNameForFunction(function) + 'Code',
            }

            lines.append("    macro(%(codeName)s, %(funcName)s, s_%(codeName)sLength) \\" % function_args)
        return '\n'.join(lines)
    def generate_section_for_code_table_macro(self):
        args = {
            'macroPrefix': self.model().framework.setting('macro_prefix'),
        }

        lines = []
        lines.append("#define %(macroPrefix)s_FOREACH_BUILTIN_CODE(macro) \\" % args)
        for function in self.model().all_functions():
            function_args = {
                'funcName': function.function_name,
                'codeName': BuiltinsGenerator.mangledNameForFunction(function) + 'Code',
            }

            lines.append("    macro(%(codeName)s, %(funcName)s, s_%(codeName)sLength) \\" % function_args)
        return '\n'.join(lines)
    def generate_macros_for_object(self, object):
        args = {
            'macroPrefix': self.model().framework.setting('macro_prefix'),
            'objectMacro': object.object_name.replace('.', '').upper(),
        }

        lines = []
        lines.append("#define %(macroPrefix)s_FOREACH_%(objectMacro)s_BUILTIN_DATA(macro) \\" % args)
        for function in object.functions:
            function_args = {
                'funcName': function.function_name,
                'mangledName': BuiltinsGenerator.mangledNameForFunction(function),
                'paramCount': len(function.parameters),
            }

            lines.append("    macro(%(funcName)s, %(mangledName)s, %(paramCount)d) \\" % function_args)
        return lines
    def generate_macros_for_object(self, object):
        args = {
            'macroPrefix': self.macro_prefix(),
            'objectMacro': object.object_name.replace('.', '_').upper(),
        }

        lines = []
        lines.append("#define %(macroPrefix)s_FOREACH_%(objectMacro)s_BUILTIN_DATA(macro) \\" % args)
        for function in object.functions:
            function_args = {
                'funcName': function.function_name,
                'mangledName': BuiltinsGenerator.mangledNameForFunction(function),
                'paramCount': len(function.parameters),
            }

            lines.append("    macro(%(funcName)s, %(mangledName)s, %(paramCount)d) \\" % function_args)
        return lines
    def generate_section_for_global_private_code_name_macro(self):
        args = {
            'macroPrefix': self.model().framework.setting('macro_prefix'),
        }

        lines = []
        lines.append("#define %(macroPrefix)s_FOREACH_BUILTIN_FUNCTION_PRIVATE_GLOBAL_NAME(macro) \\" % args)
        functions = filter(lambda function: function.is_global_private, self.model().all_functions())
        functions.sort(key=lambda x: x.function_name)
        for function in functions:
            function_args = {
                'funcName': function.function_name,
                'codeName': BuiltinsGenerator.mangledNameForFunction(function),
            }

            lines.append("    macro(%(funcName)s, %(codeName)s) \\" % function_args)

        return '\n'.join(lines)
示例#22
0
 def __init__(self, model):
     BuiltinsGenerator.__init__(self, model)
     self.internals = filter(lambda object: 'internal' in object.annotations, model.objects)
 def generate_members(self):
     lines = ["    JSC::VM& m_vm;"]
     for object in self.model().objects:
         member = "    %s %s;" % (self.member_type(object), self.member_name(object))
         lines.append(BuiltinsGenerator.wrap_with_guard(object.annotations.get('conditional'), member))
     return '\n'.join(lines)
 def __init__(self, model):
     BuiltinsGenerator.__init__(self, model)
     self.internals = [
         object for object in model.objects
         if 'internal' in object.annotations
     ]
 def __init__(self, model):
     BuiltinsGenerator.__init__(self, model)
 def output_filename(self):
     return "%sBuiltins.cpp" % BuiltinsGenerator.mangledNameForObject(self.object)
 def __init__(self, model, object):
     BuiltinsGenerator.__init__(self, model)
     self.object = object
 def __init__(self, model):
     BuiltinsGenerator.__init__(self, model)
     self.internals = [object for object in model.objects if 'internal' in object.annotations]