From c74aea420c662039072f606b2d5ef1c73426e481 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Sat, 24 Aug 2024 14:29:55 +0300 Subject: Add more code Add some funcitons to work with variables, add more instructions and add ability to stop the code from `ccl_instruction` --- src/variable.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/variable.c (limited to 'src/variable.c') diff --git a/src/variable.c b/src/variable.c new file mode 100644 index 0000000..38ea2e3 --- /dev/null +++ b/src/variable.c @@ -0,0 +1,32 @@ +#include "3cl.h" +#include "variable.h" + +#include +#include + + +struct CCLVariable *ccl_variable_get(struct CCLVariable *vars, char name) +{ + for (struct CCLVariable *var = vars;;var = var->next) + if (var->name == name) + return var; + else if (var->name == '_' || var->next == NULL) + return NULL; +} + +struct CCLVariable *ccl_variable_getany(struct CCL *ccl, struct CCLFrame *frame, char name) +{ + bool root = false; + struct CCLFrame *curframe; + struct CCLVariable *found; + + for (curframe = frame; curframe->type != CCL_PROC && curframe->type != CCL_ROOT; curframe = curframe->prev); + if (curframe->type == CCL_ROOT) + root = true; + + found = ccl_variable_get(&curframe->vars, name); + if (!found && !root) + return ccl_variable_get(&ccl->rootframe.vars, name); + + return NULL; +} -- cgit 1.4.1