From 244647e6a3855c8dc9ca61f11a153582b81fb2ed Mon Sep 17 00:00:00 2001 From: Alvin <524715@vistacollege.nl> Date: Tue, 22 Jul 2025 18:23:41 +0200 Subject: [PATCH] feat: Implement built-in functions (len, type) --- examples/built_ins.fem | 10 ++++++++++ src/interpreter.py | 14 ++++++++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 examples/built_ins.fem diff --git a/examples/built_ins.fem b/examples/built_ins.fem new file mode 100644 index 0000000..f8db3b8 --- /dev/null +++ b/examples/built_ins.fem @@ -0,0 +1,10 @@ +my_string is "Hello" +my_list is [1, 2, 3] + +UwU Boy len(my_string) +UwU Boy len(my_list) + +UwU Boy type(my_string) +UwU Boy type(my_list) +UwU Boy type(123) +UwU Boy type(Kawaii) \ No newline at end of file diff --git a/src/interpreter.py b/src/interpreter.py index c26654a..ac623fd 100644 --- a/src/interpreter.py +++ b/src/interpreter.py @@ -3,7 +3,9 @@ class Interpreter: self.ast = ast self.scope_stack = [{}] self.functions = { - "ask": self._ask_builtin + "ask": self._ask_builtin, + "len": self._len_builtin, + "type": self._type_builtin } def _ask_builtin(self, prompt): @@ -174,6 +176,14 @@ class Interpreter: def visit_ReturnStatement(self, node): raise ReturnValue(self.visit(node.value)) + @staticmethod + def _len_builtin(obj): + return len(obj) + + @staticmethod + def _type_builtin(obj): + return str(type(obj).__name__) + class ReturnValue(Exception): def __init__(self, value): - self.value = value + self.value = value \ No newline at end of file