aboutsummaryrefslogtreecommitdiff
path: root/compilador/parse/type.py
diff options
context:
space:
mode:
Diffstat (limited to 'compilador/parse/type.py')
-rw-r--r--compilador/parse/type.py38
1 files changed, 13 insertions, 25 deletions
diff --git a/compilador/parse/type.py b/compilador/parse/type.py
index 27b83d3..06c68d0 100644
--- a/compilador/parse/type.py
+++ b/compilador/parse/type.py
@@ -16,48 +16,36 @@ class ParseType:
return tok
return BuiltinType(tok.tipo)
- def prototype(self) -> (FuncType | Error):
+ def prototype(self, _type: Type) -> (FuncType | Error):
params: List[FuncParam] = []
- # Tipo
- tok = ParseType(self.parser)._type()
- if type(tok) is Error:
- return tok
- _type = tok
-
# (
tok = self.parser.want(Token.L_PAREN)
if type(tok) is Error:
return tok
- while True:
- tok = self.parser._try(Token.R_PAREN)
- if not tok:
- break
-
+
+ while not self.parser._try(Token.R_PAREN):
+
# Tipo
- tok = ParseType(self.parser)._type()
- if type(tok) is Error:
- return tok
- __type: Type = tok
+ __type = ParseType(self.parser)._type()
+ if type(__type) is Error:
+ return __type
# Identificador
- tok = self.parser.want(Token.IDENT)
- if type(tok) is Error:
- return tok
- name: str = tok
+ name = self.parser.want(Token.IDENT)
+ if type(name) is Error:
+ return name
params.append(FuncParam(name = name,
_type = __type))
# ,
- tok = self.parser._try(Token.COMMA)
- if not tok:
+ if self.parser._try(Token.COMMA):
continue
# )
- tok = self.parser.want(Token.R_PAREN)
- if type(tok) is Error:
- return tok
+ if self.parser._try(Token.R_PAREN):
+ break
return FuncType(result = _type,
params = params)