diff options
author | Iván Ávalos <avalos@disroot.org> | 2022-11-25 13:14:35 -0600 |
---|---|---|
committer | Iván Ávalos <avalos@disroot.org> | 2022-11-25 13:14:35 -0600 |
commit | 52d6d2107f14398ae59baaa893d596fb239c4679 (patch) | |
tree | 27f7170933fc0ecd57d7df5814517a7e3a7daad4 /compilador/parse/type.py | |
parent | eb4a3019bc0251e5b2b8229679e3c65d61d55336 (diff) | |
download | javanol-52d6d2107f14398ae59baaa893d596fb239c4679.tar.gz javanol-52d6d2107f14398ae59baaa893d596fb239c4679.tar.bz2 javanol-52d6d2107f14398ae59baaa893d596fb239c4679.zip |
Ya funcionan decl_global y decl_func
Diffstat (limited to 'compilador/parse/type.py')
-rw-r--r-- | compilador/parse/type.py | 38 |
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) |