Skip to content

Commit d17aceb

Browse files
committed
fix static analysis errors
1 parent 7320bc7 commit d17aceb

1 file changed

Lines changed: 125 additions & 26 deletions

File tree

‎x2py/semantics/ir2ast.py‎

Lines changed: 125 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1261,7 +1261,7 @@ def _populate_codegen_class_methods(self, cls, node, class_scope):
12611261
)
12621262
)
12631263

1264-
def _visit_SemanticModule(self, node):
1264+
def _prepare_semantic_module(self, node):
12651265
if node.metadata.get(models.PYI_LOADED_METADATA) and not node.metadata.get(
12661266
models.PYI_NATIVE_CONTRACT_PREPARED_METADATA
12671267
):
@@ -1280,10 +1280,45 @@ def _visit_SemanticModule(self, node):
12801280
for semantic_class in node.classes:
12811281
custom_types.setdefault(semantic_class.name, _class_type(semantic_class))
12821282
self.scope.insert_cls_construct(custom_types[semantic_class.name])
1283+
return custom_types, class_lookup, class_descendants, class_order
1284+
1285+
def _lower_module_child(self, item, *, custom_types, class_lookup, class_descendants, class_order):
1286+
return self._lower_child(
1287+
item,
1288+
custom_types=custom_types,
1289+
class_lookup=class_lookup,
1290+
class_descendants=class_descendants,
1291+
class_order=class_order,
1292+
)
12831293

1294+
def _record_module_conversion_metadata(
1295+
self,
1296+
item,
1297+
converted,
1298+
*,
1299+
python_exports,
1300+
native_imports,
1301+
overload_target_names=frozenset(),
1302+
) -> None:
1303+
python_exports[id(converted)] = _semantic_python_exports(item, converted, self.scope)
1304+
native_import = _pyi_native_import(item, converted, overload_target_names=overload_target_names)
1305+
if native_import is not None:
1306+
native_imports.append(native_import)
1307+
1308+
def _lower_module_classes(
1309+
self,
1310+
node,
1311+
*,
1312+
custom_types,
1313+
class_lookup,
1314+
class_descendants,
1315+
class_order,
1316+
python_exports,
1317+
native_imports,
1318+
):
12841319
class_items = [item for item in node.classes if _is_public(item)]
12851320
classes = [
1286-
self._lower_child(
1321+
self._lower_module_child(
12871322
item,
12881323
custom_types=custom_types,
12891324
class_lookup=class_lookup,
@@ -1292,18 +1327,32 @@ def _visit_SemanticModule(self, node):
12921327
)
12931328
for item in class_items
12941329
]
1330+
for item, converted in zip(class_items, classes, strict=True):
1331+
self._record_module_conversion_metadata(
1332+
item,
1333+
converted,
1334+
python_exports=python_exports,
1335+
native_imports=native_imports,
1336+
)
1337+
native_imports.extend(_pyi_class_overload_native_imports(item, converted))
1338+
return classes
1339+
1340+
def _lower_module_functions(
1341+
self,
1342+
node,
1343+
*,
1344+
custom_types,
1345+
class_lookup,
1346+
class_descendants,
1347+
class_order,
1348+
python_exports,
1349+
native_imports,
1350+
):
12951351
funcs = []
12961352
generated_overload_sets = []
1297-
python_exports = {}
1298-
native_imports = []
12991353
overload_target_names = _pyi_overload_target_names(node)
1300-
for item, converted in zip(class_items, classes, strict=True):
1301-
python_exports[id(converted)] = _semantic_python_exports(item, converted, self.scope)
1302-
if native_import := _pyi_native_import(item, converted):
1303-
native_imports.append(native_import)
1304-
native_imports.extend(_pyi_class_overload_native_imports(item, converted))
13051354
for item in node.functions:
1306-
converted = self._lower_child(
1355+
converted = self._lower_module_child(
13071356
item,
13081357
custom_types=custom_types,
13091358
class_lookup=class_lookup,
@@ -1314,11 +1363,28 @@ def _visit_SemanticModule(self, node):
13141363
generated_overload_sets.append(converted)
13151364
else:
13161365
funcs.append(converted)
1317-
python_exports[id(converted)] = _semantic_python_exports(item, converted, self.scope)
1318-
if native_import := _pyi_native_import(item, converted, overload_target_names=overload_target_names):
1319-
native_imports.append(native_import)
1366+
self._record_module_conversion_metadata(
1367+
item,
1368+
converted,
1369+
python_exports=python_exports,
1370+
native_imports=native_imports,
1371+
overload_target_names=overload_target_names,
1372+
)
1373+
return funcs, generated_overload_sets
1374+
1375+
def _lower_module_overload_sets(
1376+
self,
1377+
node,
1378+
*,
1379+
custom_types,
1380+
class_lookup,
1381+
class_descendants,
1382+
class_order,
1383+
python_exports,
1384+
native_imports,
1385+
):
13201386
overload_sets = [
1321-
self._lower_child(
1387+
self._lower_module_child(
13221388
item,
13231389
custom_types=custom_types,
13241390
class_lookup=class_lookup,
@@ -1328,28 +1394,61 @@ def _visit_SemanticModule(self, node):
13281394
for item in node.overload_sets
13291395
]
13301396
for item, converted in zip(node.overload_sets, overload_sets, strict=True):
1331-
python_exports[id(converted)] = _semantic_python_exports(item, converted, self.scope)
1332-
if native_import := _pyi_native_import(item, converted):
1333-
native_imports.append(native_import)
1397+
self._record_module_conversion_metadata(
1398+
item,
1399+
converted,
1400+
python_exports=python_exports,
1401+
native_imports=native_imports,
1402+
)
1403+
return overload_sets
1404+
1405+
def _lower_module_declarations(self, node, *, custom_types, python_exports, native_imports):
13341406
declarations = [self._lower_child(item, custom_types=custom_types) for item in node.variables]
13351407
for item, converted in zip(node.variables, declarations, strict=True):
1336-
python_exports[id(converted)] = _semantic_python_exports(item, converted, self.scope)
1337-
if native_import := _pyi_native_import(item, converted):
1338-
native_imports.append(native_import)
1408+
self._record_module_conversion_metadata(
1409+
item,
1410+
converted,
1411+
python_exports=python_exports,
1412+
native_imports=native_imports,
1413+
)
1414+
return declarations
1415+
1416+
@staticmethod
1417+
def _semantic_module_imports(node, native_imports):
1418+
if node.metadata.get(models.PYI_LOADED_METADATA):
1419+
return native_imports
1420+
return [Import(module_name, target=()) for module_name in node.metadata.get("wrapper_native_modules", ())]
1421+
1422+
def _visit_SemanticModule(self, node):
1423+
custom_types, class_lookup, class_descendants, class_order = self._prepare_semantic_module(node)
1424+
python_exports = {}
1425+
native_imports = []
1426+
lowering_context = {
1427+
"custom_types": custom_types,
1428+
"class_lookup": class_lookup,
1429+
"class_descendants": class_descendants,
1430+
"class_order": class_order,
1431+
"python_exports": python_exports,
1432+
"native_imports": native_imports,
1433+
}
1434+
classes = self._lower_module_classes(node, **lowering_context)
1435+
funcs, generated_overload_sets = self._lower_module_functions(node, **lowering_context)
1436+
overload_sets = self._lower_module_overload_sets(node, **lowering_context)
1437+
declarations = self._lower_module_declarations(
1438+
node,
1439+
custom_types=custom_types,
1440+
python_exports=python_exports,
1441+
native_imports=native_imports,
1442+
)
13391443
name = self.scope.get_new_public_name(node.name, object_type="module", owner=node.name)
13401444
explicit_exports = node.metadata.get(models.PYTHON_EXPORTS_PREPARED_METADATA)
1341-
imports = (
1342-
native_imports
1343-
if node.metadata.get(models.PYI_LOADED_METADATA)
1344-
else [Import(module_name, target=()) for module_name in node.metadata.get("wrapper_native_modules", ())]
1345-
)
13461445
return Module(
13471446
name,
13481447
declarations,
13491448
funcs,
13501449
overload_sets=[*generated_overload_sets, *overload_sets],
13511450
classes=classes,
1352-
imports=imports,
1451+
imports=self._semantic_module_imports(node, native_imports),
13531452
scope=self.scope,
13541453
python_exports=python_exports if explicit_exports else None,
13551454
)

0 commit comments

Comments
 (0)