-
Notifications
You must be signed in to change notification settings - Fork 160
Description
When making an example program following the L_fun grammar, I expect the following program to be able to parse and type check:
def foo() -> void :
print(1)
the type annotation, void, gets parsed as Name('void') similar to int and bool.
In type_check_Lfun.py, there is no case for Name('void') and so type checking the program causes an error instead:
def parse_type_annot(self, annot):
match annot:
case Name(id):
if id == 'int':
return IntType()
elif id == 'bool':
return BoolType()
else:
raise Exception('parse_type_annot: unexpected ' + repr(annot))
Exception: parse_type_annot: unexpected Name('void')
Omitting the -> void return type annotation causes the python.ast parser to put a None as the return type annotation rather than VoidType() like we might expect.
Adding a case for id == 'void' seems to work, but before I make a pull request, I wanted to see if I am missing anything by doing so.
Since VoidType() has an explicit case in parse_type_annot(...), I could imagine that there is another way for the parser to produce a VoidType() annotation itself without me adding this case.
Thanks!