Skip to content

Commit 1b4adbd

Browse files
core.parser: fix handling of new type_params field in declarative functions
1 parent 9c2fbb0 commit 1b4adbd

File tree

2 files changed

+129
-51
lines changed

2 files changed

+129
-51
lines changed

enaml/core/parser/enaml.gram

Lines changed: 54 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -226,13 +226,24 @@ py_expr[enaml_ast.PythonExpression]:
226226
decl_funcdef:
227227
| 'async' a=sync_decl_fundef {
228228
enaml_ast.AsyncFuncDef(
229-
funcdef=ast.AsyncFunctionDef(
230-
name=a.funcdef.name,
231-
args=a.funcdef.args,
232-
returns=a.funcdef.returns,
233-
body=a.funcdef.body,
234-
decorator_list=a.funcdef.decorator_list,
235-
LOCATIONS,
229+
funcdef=(
230+
ast.AsyncFunctionDef(
231+
name=a.funcdef.name,
232+
args=a.funcdef.args,
233+
returns=a.funcdef.returns,
234+
body=a.funcdef.body,
235+
decorator_list=a.funcdef.decorator_list,
236+
type_params=[],
237+
LOCATIONS,
238+
) if sys.version_info >= (3, 12)
239+
else ast.AsyncFunctionDef(
240+
name=a.funcdef.name,
241+
args=a.funcdef.args,
242+
returns=a.funcdef.returns,
243+
body=a.funcdef.body,
244+
decorator_list=a.funcdef.decorator_list,
245+
LOCATIONS,
246+
)
236247
),
237248
is_override=a.is_override,
238249
LOCATIONS
@@ -243,27 +254,49 @@ decl_funcdef:
243254
sync_decl_fundef:
244255
| "func" a=NAME '(' b=[params] ')' r=['->' z=expression { z }] &&':' c=block {
245256
enaml_ast.FuncDef(
246-
funcdef=ast.FunctionDef(
247-
name=a.string,
248-
args=b or self.make_arguments(None, [], None, [], None),
249-
returns=r,
250-
body=self.validate_decl_func_body(c),
251-
decorator_list=[],
252-
LOCATIONS
257+
funcdef=(
258+
ast.FunctionDef(
259+
name=a.string,
260+
args=b or self.make_arguments(None, [], None, [], None),
261+
returns=r,
262+
body=self.validate_decl_func_body(c),
263+
decorator_list=[],
264+
type_params=[],
265+
LOCATIONS
266+
) if sys.version_info >= (3, 12)
267+
else ast.FunctionDef(
268+
name=a.string,
269+
args=b or self.make_arguments(None, [], None, [], None),
270+
returns=r,
271+
body=self.validate_decl_func_body(c),
272+
decorator_list=[],
273+
LOCATIONS
274+
)
253275
),
254276
is_override=False,
255277
LOCATIONS
256278
)
257279
}
258280
| a=NAME x='=' y='>' '(' b=[params] ')' r=['->' z=expression { z }] &&':' c=block {
259281
enaml_ast.FuncDef(
260-
funcdef=ast.FunctionDef(
261-
name=a.string,
262-
args=b or self.make_arguments(None, [], None, [], None),
263-
returns=r,
264-
body=self.validate_decl_func_body(c),
265-
decorator_list=[],
266-
LOCATIONS
282+
funcdef=(
283+
ast.FunctionDef(
284+
name=a.string,
285+
args=b or self.make_arguments(None, [], None, [], None),
286+
returns=r,
287+
body=self.validate_decl_func_body(c),
288+
decorator_list=[],
289+
type_params=[],
290+
LOCATIONS
291+
) if sys.version_info >= (3, 12)
292+
else ast.FunctionDef(
293+
name=a.string,
294+
args=b or self.make_arguments(None, [], None, [], None),
295+
returns=r,
296+
body=self.validate_decl_func_body(c),
297+
decorator_list=[],
298+
LOCATIONS
299+
)
267300
),
268301
is_override=True,
269302
LOCATIONS

enaml/core/parser/enaml_parser.py

Lines changed: 75 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -595,16 +595,31 @@ def decl_funcdef(self) -> Optional[Any]:
595595
tok = self._tokenizer.get_last_non_whitespace_token()
596596
end_lineno, end_col_offset = tok.end
597597
return enaml_ast.AsyncFuncDef(
598-
funcdef=ast.AsyncFunctionDef(
599-
name=a.funcdef.name,
600-
args=a.funcdef.args,
601-
returns=a.funcdef.returns,
602-
body=a.funcdef.body,
603-
decorator_list=a.funcdef.decorator_list,
604-
lineno=start_lineno,
605-
col_offset=start_col_offset,
606-
end_lineno=end_lineno,
607-
end_col_offset=end_col_offset,
598+
funcdef=(
599+
ast.AsyncFunctionDef(
600+
name=a.funcdef.name,
601+
args=a.funcdef.args,
602+
returns=a.funcdef.returns,
603+
body=a.funcdef.body,
604+
decorator_list=a.funcdef.decorator_list,
605+
type_params=[],
606+
lineno=start_lineno,
607+
col_offset=start_col_offset,
608+
end_lineno=end_lineno,
609+
end_col_offset=end_col_offset,
610+
)
611+
if sys.version_info >= (3, 12)
612+
else ast.AsyncFunctionDef(
613+
name=a.funcdef.name,
614+
args=a.funcdef.args,
615+
returns=a.funcdef.returns,
616+
body=a.funcdef.body,
617+
decorator_list=a.funcdef.decorator_list,
618+
lineno=start_lineno,
619+
col_offset=start_col_offset,
620+
end_lineno=end_lineno,
621+
end_col_offset=end_col_offset,
622+
)
608623
),
609624
is_override=a.is_override,
610625
lineno=start_lineno,
@@ -637,16 +652,31 @@ def sync_decl_fundef(self) -> Optional[Any]:
637652
tok = self._tokenizer.get_last_non_whitespace_token()
638653
end_lineno, end_col_offset = tok.end
639654
return enaml_ast.FuncDef(
640-
funcdef=ast.FunctionDef(
641-
name=a.string,
642-
args=b or self.make_arguments(None, [], None, [], None),
643-
returns=r,
644-
body=self.validate_decl_func_body(c),
645-
decorator_list=[],
646-
lineno=start_lineno,
647-
col_offset=start_col_offset,
648-
end_lineno=end_lineno,
649-
end_col_offset=end_col_offset,
655+
funcdef=(
656+
ast.FunctionDef(
657+
name=a.string,
658+
args=b or self.make_arguments(None, [], None, [], None),
659+
returns=r,
660+
body=self.validate_decl_func_body(c),
661+
decorator_list=[],
662+
type_params=[],
663+
lineno=start_lineno,
664+
col_offset=start_col_offset,
665+
end_lineno=end_lineno,
666+
end_col_offset=end_col_offset,
667+
)
668+
if sys.version_info >= (3, 12)
669+
else ast.FunctionDef(
670+
name=a.string,
671+
args=b or self.make_arguments(None, [], None, [], None),
672+
returns=r,
673+
body=self.validate_decl_func_body(c),
674+
decorator_list=[],
675+
lineno=start_lineno,
676+
col_offset=start_col_offset,
677+
end_lineno=end_lineno,
678+
end_col_offset=end_col_offset,
679+
)
650680
),
651681
is_override=False,
652682
lineno=start_lineno,
@@ -670,16 +700,31 @@ def sync_decl_fundef(self) -> Optional[Any]:
670700
end_lineno, end_col_offset = tok.end
671701
return (
672702
enaml_ast.FuncDef(
673-
funcdef=ast.FunctionDef(
674-
name=a.string,
675-
args=b or self.make_arguments(None, [], None, [], None),
676-
returns=r,
677-
body=self.validate_decl_func_body(c),
678-
decorator_list=[],
679-
lineno=start_lineno,
680-
col_offset=start_col_offset,
681-
end_lineno=end_lineno,
682-
end_col_offset=end_col_offset,
703+
funcdef=(
704+
ast.FunctionDef(
705+
name=a.string,
706+
args=b or self.make_arguments(None, [], None, [], None),
707+
returns=r,
708+
body=self.validate_decl_func_body(c),
709+
decorator_list=[],
710+
type_params=[],
711+
lineno=start_lineno,
712+
col_offset=start_col_offset,
713+
end_lineno=end_lineno,
714+
end_col_offset=end_col_offset,
715+
)
716+
if sys.version_info >= (3, 12)
717+
else ast.FunctionDef(
718+
name=a.string,
719+
args=b or self.make_arguments(None, [], None, [], None),
720+
returns=r,
721+
body=self.validate_decl_func_body(c),
722+
decorator_list=[],
723+
lineno=start_lineno,
724+
col_offset=start_col_offset,
725+
end_lineno=end_lineno,
726+
end_col_offset=end_col_offset,
727+
)
683728
),
684729
is_override=True,
685730
lineno=start_lineno,

0 commit comments

Comments
 (0)