function calls work!!!
This commit is contained in:
21
compiler.py
21
compiler.py
@@ -2,7 +2,7 @@ from llvmlite import ir
|
||||
|
||||
from AST import Node, NodeType, Program, Expression
|
||||
from AST import ExpressionStatement, AssignmentStatement, BlockStatement, ReturnStatement, FunctionStatement, ReassignStatement, IfStatement
|
||||
from AST import InfixExpression
|
||||
from AST import InfixExpression, CallExpression
|
||||
from AST import IntegerLiteral, FloatLiteral, IdentifierLiteral, BooleanLiteral
|
||||
|
||||
from environment import Environment
|
||||
@@ -69,6 +69,8 @@ class Compiler:
|
||||
# Expressions
|
||||
case NodeType.InfixExpression:
|
||||
self.__visit_infix_expression(node)
|
||||
case NodeType.CallExpression:
|
||||
self.__visit_call_expression(node)
|
||||
|
||||
# region Visit Methods
|
||||
def __visit_program(self, node: Program) -> None:
|
||||
@@ -257,6 +259,21 @@ class Compiler:
|
||||
Type = ir.IntType(1)
|
||||
|
||||
return value, Type
|
||||
|
||||
def __visit_call_expression(self, node: CallExpression) -> None:
|
||||
name: str = node.function.value
|
||||
params: list[Expression] = node.arguments
|
||||
|
||||
args = []
|
||||
types = []
|
||||
# TODO
|
||||
|
||||
match name:
|
||||
case _:
|
||||
func, ret_type = self.environment.lookup(name)
|
||||
ret = self.builder.call(func, args)
|
||||
|
||||
return ret, ret_type
|
||||
# endregion
|
||||
|
||||
# endregion
|
||||
@@ -283,4 +300,6 @@ class Compiler:
|
||||
# expression value
|
||||
case NodeType.InfixExpression:
|
||||
return self.__visit_infix_expression(node)
|
||||
case NodeType.CallExpression:
|
||||
return self.__visit_call_expression(node)
|
||||
# endregion
|
||||
Reference in New Issue
Block a user