Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf7d047c

Browse files
authored
[mypyc] Generate error on duplicate function definitions (#16309)
Previously we produced duplicate functions in C, which caused Ccompiler errors.
1 parent090a414 commitf7d047c

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

‎mypyc/irbuild/builder.py‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ def __init__(
175175
self.graph=graph
176176
self.ret_types:list[RType]= []
177177
self.functions:list[FuncIR]= []
178+
self.function_names:set[tuple[str|None,str]]=set()
178179
self.classes:list[ClassIR]= []
179180
self.final_names:list[tuple[str,RType]]= []
180181
self.callable_class_names:set[str]=set()
@@ -1326,6 +1327,14 @@ def error(self, msg: str, line: int) -> None:
13261327
defnote(self,msg:str,line:int)->None:
13271328
self.errors.note(msg,self.module_path,line)
13281329

1330+
defadd_function(self,func_ir:FuncIR,line:int)->None:
1331+
name= (func_ir.class_name,func_ir.name)
1332+
ifnameinself.function_names:
1333+
self.error(f'Duplicate definition of "{name[1]}" not supported by mypyc',line)
1334+
return
1335+
self.function_names.add(name)
1336+
self.functions.append(func_ir)
1337+
13291338

13301339
defgen_arg_defaults(builder:IRBuilder)->None:
13311340
"""Generate blocks for arguments that have default values.

‎mypyc/irbuild/function.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ def transform_func_def(builder: IRBuilder, fdef: FuncDef) -> None:
103103
iffunc_reg:
104104
builder.assign(get_func_target(builder,fdef),func_reg,fdef.line)
105105
maybe_insert_into_registry_dict(builder,fdef)
106-
builder.functions.append(func_ir)
106+
builder.add_function(func_ir,fdef.line)
107107

108108

109109
deftransform_overloaded_func_def(builder:IRBuilder,o:OverloadedFuncDef)->None:

‎mypyc/test-data/irbuild-statements.test‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1123,3 +1123,27 @@ L6:
11231123
r14 = CPy_NoErrOccured()
11241124
L7:
11251125
return 1
1126+
1127+
[case testConditionalFunctionDefinition]
1128+
if int():
1129+
def foo() -> int:
1130+
return 0
1131+
else:
1132+
def foo() -> int: # E
1133+
return 1
1134+
1135+
def bar() -> int:
1136+
return 0
1137+
1138+
if int():
1139+
def bar() -> int: # E
1140+
return 1
1141+
[out]
1142+
main:5: error: Duplicate definition of "foo" not supported by mypyc
1143+
main:12: error: Duplicate definition of "bar" not supported by mypyc
1144+
1145+
[case testRepeatedUnderscoreFunctions]
1146+
def _(arg): pass
1147+
def _(arg): pass
1148+
[out]
1149+
main:2: error: Duplicate definition of "_" not supported by mypyc

‎mypyc/test-data/run-misc.test‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,10 +1117,6 @@ for _ in range(2):
11171117
except AssertionError:
11181118
pass
11191119

1120-
[case testRepeatedUnderscoreFunctions]
1121-
def _(arg): pass
1122-
def _(arg): pass
1123-
11241120
[case testUnderscoreFunctionsInMethods]
11251121

11261122
class A:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp