File indexing completed on 2024-04-14 03:50:20
0001 #!/usr/bin/env python 0002 # 0003 # SPDX-FileCopyrightText: 2016 Shaheed Haque <srhaque@theiet.org> 0004 # SPDX-FileCopyrightText: 2016 Stephen Kelly <steveire@gmail.com> 0005 # 0006 # SPDX-License-Identifier: BSD-3-Clause 0007 0008 from __future__ import print_function 0009 0010 import rules_engine 0011 0012 def container_rules(): 0013 return [ 0014 # 0015 # SIP does not seem to be able to handle these. 0016 # 0017 [".*", "(QMetaTypeId|QTypeInfo)<.*>", ".*", ".*", ".*", rules_engine.container_discard], 0018 # 0019 # SIP does not seem to be able to handle templated containers. 0020 # 0021 [".*", ".*<.*", ".*", ".*", ".*", rules_engine.container_discard], 0022 ] 0023 0024 def function_rules(): 0025 return [ 0026 # 0027 # Discard functions emitted by QOBJECT. 0028 # 0029 [".*", "metaObject|qt_metacast|tr|trUtf8|qt_metacall|qt_check_for_QOBJECT_macro|qt_check_for_QGADGET_macro", ".*", ".*", ".*", rules_engine.function_discard], 0030 # 0031 # SIP does not support operator=. 0032 # 0033 [".*", "operator=", ".*", ".*", ".*", rules_engine.function_discard], 0034 0035 [".*", ".*", ".*", ".*", ".*::QPrivateSignal.*", rules_engine.function_discard], 0036 # 0037 # TODO: Temporarily remove any functions which require templates. SIP seems to support, e.g. QPairs, 0038 # but we have not made them work yet. 0039 # 0040 0041 [".*", ".*", ".+", ".*", ".*", rules_engine.function_discard], 0042 [".*", ".*<.*>.*", ".*", ".*", ".*", rules_engine.function_discard], 0043 0044 [".*", ".*", ".*", ".*", ".*std::function.*", rules_engine.function_discard], 0045 [".*", ".*", ".*", ".*", ".*std::numeric_limits.*", rules_engine.function_discard], 0046 [".*", ".*", ".*", ".*", ".*QPair.*", rules_engine.function_discard], 0047 [".*", ".*", ".*", ".*QPair.*", ".*", rules_engine.function_discard], 0048 0049 [".*", ".*", ".*", ".*", ".*QDebug.*", rules_engine.function_discard], 0050 [".*", ".*", ".*", ".*QDebug.*", ".*", rules_engine.function_discard], 0051 0052 [".*", ".*", ".*", ".*", ".*QExplicitlySharedDataPointer.*", rules_engine.function_discard], 0053 [".*", ".*", ".*", ".*QExplicitlySharedDataPointer.*", ".*", rules_engine.function_discard], 0054 0055 [".*", ".*", ".*", ".*", ".*Private.*", rules_engine.function_discard], 0056 [".*", ".*", ".*", "mode_t", ".*", rules_engine.return_rewrite_mode_t_as_int], 0057 [".*", "d_func", ".*", ".*", ".*", rules_engine.function_discard], 0058 0059 [".*", "operator\|", ".*", ".*", ".*", rules_engine.function_discard], 0060 ] 0061 0062 def parameter_rules(): 0063 return [ 0064 # 0065 # Annotate with Transfer or TransferThis when we see a parent object. 0066 # 0067 [".*", ".*", ".*", r"[KQ][A-Za-z_0-9]+\W*\*\W*parent", ".*", rules_engine.parameter_transfer_to_parent], 0068 [".*", ".*", ".*", "mode_t.*", ".*", rules_engine.param_rewrite_mode_t_as_int], 0069 [".*", ".*", ".*", ".*enum .*", ".*", rules_engine.parameter_strip_class_enum], 0070 ] 0071 0072 def variable_rules(): 0073 return [ 0074 # 0075 # Discard variable emitted by QOBJECT. 0076 # 0077 [".*", "staticMetaObject", ".*", rules_engine.variable_discard], 0078 # 0079 # Discard "private" variables. 0080 # 0081 [".*", "d_ptr", ".*", rules_engine.variable_discard], 0082 [".*", "d", ".*Private.*", rules_engine.variable_discard], 0083 ] 0084 0085 def typedef_rules(): 0086 return [] 0087 0088 def forward_declaration_rules(): 0089 return [] 0090 0091 class RuleSet(rules_engine.RuleSet): 0092 """ 0093 SIP file generator rules. This is a set of (short, non-public) functions 0094 and regular expression-based matching rules. 0095 """ 0096 def __init__(self): 0097 self._container_db = rules_engine.ContainerRuleDb(container_rules) 0098 self._forward_declaration_db = rules_engine.ForwardDeclarationRuleDb(forward_declaration_rules) 0099 self._fn_db = rules_engine.FunctionRuleDb(function_rules) 0100 self._param_db = rules_engine.ParameterRuleDb(parameter_rules) 0101 self._typedef_db = rules_engine.TypedefRuleDb(typedef_rules) 0102 self._var_db = rules_engine.VariableRuleDb(variable_rules) 0103 self._methodcode = rules_engine.MethodCodeDb({}) 0104 self._modulecode = rules_engine.ModuleCodeDb({}) 0105 0106 def container_rules(self): 0107 return self._container_db 0108 0109 def forward_declaration_rules(self): 0110 return self._forward_declaration_db 0111 0112 def function_rules(self): 0113 return self._fn_db 0114 0115 def parameter_rules(self): 0116 return self._param_db 0117 0118 def typedef_rules(self): 0119 return self._typedef_db 0120 0121 def variable_rules(self): 0122 return self._var_db 0123 0124 def methodcode_rules(self): 0125 return self._methodcode 0126 0127 def modulecode_rules(self): 0128 return self._modulecode 0129 0130 def methodcode(self, function, sip): 0131 return self._methodcode.apply(function, sip) 0132 0133 def modulecode(self, filename, sip): 0134 return self._modulecode.apply(filename, sip)