reasoning-gym/reasoning_gym/code/contrib/bfit/Compiler/Functions.py
Andreas Koepf ebb88e6c6a lint
2025-01-30 22:55:04 +01:00

37 lines
1.2 KiB
Python

from copy import deepcopy
from .Exceptions import BFSemanticError
functions = dict() # Global dictionary of function_name --> FunctionCompiler objects
def insert_function_object(function):
functions[function.name] = function
def get_function_object(name):
"""
must return a copy of the function
because we might need to compile function recursively
and if we don't work on different copies then we will interfere with the current token pointer etc
for example:
int increase(int n) { return n+1;}
int main() {int x = increase(increase(1));}
while compiling the first call, we start a compilation of the same function object in the second call
"""
return deepcopy(functions[name])
def check_function_exists(function_token, parameters_amount):
function_name = function_token.data
if function_name not in functions:
raise BFSemanticError("Function '%s' is undefined" % str(function_token))
function = functions[function_name]
if len(function.parameters) != parameters_amount:
raise BFSemanticError(
"Function '%s' has %s parameters (called it with %s parameters)"
% (str(function_token), len(function.parameters), parameters_amount)
)