function calls work!!!

This commit is contained in:
SpookyDervish
2025-10-15 06:59:29 +11:00
parent 170146ee7e
commit 049db7c53a
6 changed files with 119 additions and 15 deletions

View File

@@ -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