From 693054491f3e7e950f8a51eafc3c5b33d47545fd Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Tue, 21 Apr 2026 18:12:15 +0200 Subject: [PATCH] :goat: First order functions --- README.md | 22 +++ centvrion/ast_nodes.py | 51 ++++-- centvrion/compiler/context.py | 4 + centvrion/compiler/emit_expr.py | 72 ++++++-- centvrion/compiler/emit_stmt.py | 18 +- centvrion/compiler/emitter.py | 63 ++++++- centvrion/compiler/runtime/cent_runtime.c | 5 + centvrion/compiler/runtime/cent_runtime.h | 26 ++- centvrion/lexer.py | 1 + centvrion/parser.py | 6 +- language/main.tex | 3 +- snippets/fvnctio.cent | 9 + snippets/fvnctio.png | Bin 0 -> 36536 bytes snippets/invoca_expr.cent | 11 ++ snippets/invoca_expr.png | Bin 0 -> 89889 bytes snippets/syntaxes/centvrion.sublime-syntax | 2 +- tests.py | 158 +++++++++++++++++- .../syntaxes/cent.tmLanguage.json | 2 +- 18 files changed, 407 insertions(+), 46 deletions(-) create mode 100644 snippets/fvnctio.cent create mode 100644 snippets/fvnctio.png create mode 100644 snippets/invoca_expr.cent create mode 100644 snippets/invoca_expr.png diff --git a/README.md b/README.md index 01b3a94..e80507f 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,28 @@ Calling a function is done with the `INVOCA` keyword. > CXXI ``` +## First-class functions +Functions are first-class values in CENTVRION. They can be assigned to variables, passed as arguments, returned from functions, and stored in arrays or dicts. + +Anonymous functions are created with the `FVNCTIO` keyword: + +![FVNCTIO](snippets/fvnctio.png) + +``` +> XIV +``` + +`INVOCA` accepts any expression as the callee, not just a name: + +![INVOCA expressions](snippets/invoca_expr.png) +``` +> VI +> VI +> XVI +``` + +Note: CENTVRION does **not** have closures. When a function is called, it receives a copy of the *caller's* scope, not the scope where it was defined. Variables from a function's definition site are only available if they also exist in the caller's scope at call time. + ## Built-ins ### DICE `DICE(value, ...)` diff --git a/centvrion/ast_nodes.py b/centvrion/ast_nodes.py index d87ddcb..4c6df95 100644 --- a/centvrion/ast_nodes.py +++ b/centvrion/ast_nodes.py @@ -144,6 +144,8 @@ def make_string(val, magnvm=False, svbnvlla=False) -> str: for k, v in val.value().items() ) return "{" + inner + "}" + elif isinstance(val, ValFunc): + return "FVNCTIO" else: raise CentvrionError(f"Cannot display {val!r}") @@ -577,6 +579,31 @@ class Defini(Node): return vtable, ValNul() +class Fvnctio(Node): + def __init__(self, parameters: list[ID], statements: list[Node]) -> None: + self.parameters = parameters + self.statements = statements + + def __eq__(self, other): + return (type(self) == type(other) + and self.parameters == other.parameters + and self.statements == other.statements) + + def __repr__(self) -> str: + parameter_string = f"parameters([{rep_join(self.parameters)}])" + statements_string = f"statements([{rep_join(self.statements)}])" + fvn_string = rep_join([parameter_string, statements_string]) + return f"Fvnctio({fvn_string})" + + def print(self): + params = ", ".join(p.print() for p in self.parameters) + body = "\n".join(s.print() for s in self.statements) + return f"FVNCTIO ({params}) VT {{\n{body}\n}}" + + def _eval(self, vtable): + return vtable, ValFunc(self.parameters, self.statements) + + class Redi(Node): def __init__(self, values: list[Node]) -> None: self.values = values @@ -954,32 +981,36 @@ class PerStatement(Node): class Invoca(Node): - def __init__(self, name, parameters) -> None: - self.name = name + def __init__(self, callee, parameters) -> None: + self.callee = callee self.parameters = parameters def __eq__(self, other): - return type(self) == type(other) and self.name == other.name and self.parameters == other.parameters + return (type(self) == type(other) + and self.callee == other.callee + and self.parameters == other.parameters) def __repr__(self) -> str: parameters_string = f"parameters([{rep_join(self.parameters)}])" - invoca_string = rep_join([self.name, parameters_string]) + invoca_string = rep_join([self.callee, parameters_string]) return f"Invoca({invoca_string})" def print(self): args = ", ".join(p.print() for p in self.parameters) - return f"INVOCA {self.name.print()} ({args})" + return f"INVOCA {self.callee.print()} ({args})" def _eval(self, vtable): params = [p.eval(vtable)[1] for p in self.parameters] - if self.name.name not in vtable: - raise CentvrionError(f"Undefined function: {self.name.name}") - func = vtable[self.name.name] + vtable, func = self.callee.eval(vtable) if not isinstance(func, ValFunc): - raise CentvrionError(f"{self.name.name} is not a function") + callee_desc = (self.callee.name + if isinstance(self.callee, ID) else "expression") + raise CentvrionError(f"{callee_desc} is not a function") if len(params) != len(func.params): + callee_desc = (self.callee.name + if isinstance(self.callee, ID) else "FVNCTIO") raise CentvrionError( - f"{self.name.name} expects {len(func.params)} argument(s), got {len(params)}" + f"{callee_desc} expects {len(func.params)} argument(s), got {len(params)}" ) func_vtable = vtable.copy() for i, param in enumerate(func.params): diff --git a/centvrion/compiler/context.py b/centvrion/compiler/context.py index fb26b27..e900e54 100644 --- a/centvrion/compiler/context.py +++ b/centvrion/compiler/context.py @@ -7,6 +7,10 @@ class EmitContext: self.functions = {} # source-level name / alias → c_func_name; populated by emitter pre-pass self.func_resolve = {} + # id(Fvnctio_node) → c_func_name; populated by lambda lifting pass + self.lambda_names = {} + # [(c_name, Fvnctio_node), ...]; populated by lambda lifting pass + self.lambdas = [] def fresh_tmp(self): name = f"_t{self._tmp_counter}" diff --git a/centvrion/compiler/emit_expr.py b/centvrion/compiler/emit_expr.py index 24d0219..1d635d9 100644 --- a/centvrion/compiler/emit_expr.py +++ b/centvrion/compiler/emit_expr.py @@ -3,7 +3,7 @@ from centvrion.ast_nodes import ( String, InterpolatedString, Numeral, Fractio, Bool, Nullus, ID, BinOp, UnaryMinus, UnaryNot, ArrayIndex, DataArray, DataRangeArray, DataDict, - BuiltIn, Invoca, + BuiltIn, Invoca, Fvnctio, num_to_int, frac_to_fraction, ) @@ -162,6 +162,9 @@ def emit_expr(node, ctx): if isinstance(node, Invoca): return _emit_invoca(node, ctx) + if isinstance(node, Fvnctio): + return _emit_fvnctio(node, ctx) + raise NotImplementedError(type(node).__name__) @@ -261,7 +264,8 @@ def _emit_builtin(node, ctx): def _emit_invoca(node, ctx): """ Emits a user-defined function call. - Requires ctx.functions[name] = [param_names] populated by the emitter pre-pass. + Supports both static resolution (ID callee with known function) and + dynamic dispatch (arbitrary expression callee via CENT_FUNC values). """ lines = [] param_vars = [] @@ -270,21 +274,59 @@ def _emit_invoca(node, ctx): lines.extend(p_lines) param_vars.append(p_var) - func_name = node.name.name - c_func_name = ctx.func_resolve.get(func_name) - if c_func_name is None: - raise CentvrionError(f"Undefined function: {func_name}") + # Try static resolution for simple ID callees + if isinstance(node.callee, ID): + c_func_name = ctx.func_resolve.get(node.callee.name) + if c_func_name is not None: + call_scope_var = ctx.fresh_tmp() + "_sc" + lines.append(f"CentScope {call_scope_var} = cent_scope_copy(&_scope);") + param_names = ctx.functions[c_func_name] + if len(param_vars) != len(param_names): + raise CentvrionError( + f"Function '{node.callee.name}' expects {len(param_names)} argument(s), " + f"got {len(param_vars)}" + ) + for i, pname in enumerate(param_names): + lines.append(f'cent_scope_set(&{call_scope_var}, "{pname}", {param_vars[i]});') + tmp = ctx.fresh_tmp() + lines.append(f"CentValue {tmp} = {c_func_name}({call_scope_var});") + return lines, tmp + + # Dynamic dispatch: evaluate callee, call via function pointer + callee_lines, callee_var = emit_expr(node.callee, ctx) + lines.extend(callee_lines) + lines.append(f'if ({callee_var}.type != CENT_FUNC) cent_type_error("cannot call non-function");') call_scope_var = ctx.fresh_tmp() + "_sc" lines.append(f"CentScope {call_scope_var} = cent_scope_copy(&_scope);") - - param_names = ctx.functions[c_func_name] - if len(param_vars) != len(param_names): - raise CentvrionError( - f"Function '{func_name}' expects {len(param_names)} argument(s), got {len(param_vars)}" + nargs = len(param_vars) + lines.append( + f"if ({callee_var}.fnval.param_count != {nargs}) " + f'cent_runtime_error("wrong number of arguments");' + ) + for i, pv in enumerate(param_vars): + lines.append( + f'cent_scope_set(&{call_scope_var}, ' + f'{callee_var}.fnval.param_names[{i}], {pv});' ) - for i, pname in enumerate(param_names): - lines.append(f'cent_scope_set(&{call_scope_var}, "{pname}", {param_vars[i]});') - tmp = ctx.fresh_tmp() - lines.append(f"CentValue {tmp} = {c_func_name}({call_scope_var});") + lines.append(f"CentValue {tmp} = {callee_var}.fnval.fn({call_scope_var});") + return lines, tmp + + +def _emit_fvnctio(node, ctx): + """Emit a FVNCTIO lambda expression as a CENT_FUNC value.""" + c_name = ctx.lambda_names[id(node)] + param_names = ctx.functions[c_name] + tmp = ctx.fresh_tmp() + lines = [] + # Build static param name array + params_arr = ctx.fresh_tmp() + "_pn" + lines.append( + f"static const char *{params_arr}[] = {{" + + ", ".join(f'"{p}"' for p in param_names) + + "};" + ) + lines.append( + f"CentValue {tmp} = cent_func_val({c_name}, {params_arr}, {len(param_names)});" + ) return lines, tmp diff --git a/centvrion/compiler/emit_stmt.py b/centvrion/compiler/emit_stmt.py index 877f65e..9f71a45 100644 --- a/centvrion/compiler/emit_stmt.py +++ b/centvrion/compiler/emit_stmt.py @@ -11,9 +11,6 @@ def emit_stmt(node, ctx): Returns lines — list of C statements. """ if isinstance(node, Designa): - # Function alias: resolved at compile time, no runtime code needed - if isinstance(node.value, ID) and node.value.name in ctx.func_resolve: - return [] val_lines, val_var = emit_expr(node.value, ctx) return val_lines + [f'cent_scope_set(&_scope, "{node.id.name}", {val_var});'] @@ -87,7 +84,20 @@ def emit_stmt(node, ctx): return lines if isinstance(node, Defini): - # Function definitions are hoisted by emitter.py; no-op here. + # Top-level definitions are handled by emitter.py (hoisted + scope-set). + # Nested definitions (inside another function) need runtime scope-set. + if ctx.current_function is not None: + name = node.name.name + c_name = ctx.func_resolve[name] + param_names = ctx.functions[c_name] + pn_var = ctx.fresh_tmp() + "_pn" + return [ + f"static const char *{pn_var}[] = {{" + + ", ".join(f'"{p}"' for p in param_names) + + "};", + f'cent_scope_set(&_scope, "{name}", ' + f"cent_func_val({c_name}, {pn_var}, {len(param_names)}));", + ] return [] if isinstance(node, Redi): diff --git a/centvrion/compiler/emitter.py b/centvrion/compiler/emitter.py index 72df9b9..5ce1bcd 100644 --- a/centvrion/compiler/emitter.py +++ b/centvrion/compiler/emitter.py @@ -1,11 +1,32 @@ import os -from centvrion.ast_nodes import Defini, Designa, ID +from centvrion.ast_nodes import Defini, Designa, Fvnctio, ID, Node from centvrion.compiler.context import EmitContext from centvrion.compiler.emit_stmt import emit_stmt, _emit_body _RUNTIME_DIR = os.path.join(os.path.dirname(__file__), "runtime") +def _collect_lambdas(node, ctx, counter): + """Walk AST recursively, find all Fvnctio nodes, assign C names.""" + if isinstance(node, Fvnctio): + c_name = f"_cent_lambda_{counter[0]}" + counter[0] += 1 + ctx.lambda_names[id(node)] = c_name + ctx.functions[c_name] = [p.name for p in node.parameters] + ctx.lambdas.append((c_name, node)) + for attr in vars(node).values(): + if isinstance(attr, Node): + _collect_lambdas(attr, ctx, counter) + elif isinstance(attr, list): + for item in attr: + if isinstance(item, Node): + _collect_lambdas(item, ctx, counter) + elif isinstance(item, tuple): + for elem in item: + if isinstance(elem, Node): + _collect_lambdas(elem, ctx, counter) + + def compile_program(program): """Return a complete C source string for the given Program AST node.""" ctx = EmitContext() @@ -26,10 +47,11 @@ def compile_program(program): ctx.functions[c_name] = [p.name for p in stmt.parameters] ctx.func_resolve[name] = c_name func_definitions.append((c_name, stmt)) - elif isinstance(stmt, Designa) and isinstance(stmt.value, ID): - rhs = stmt.value.name - if rhs in ctx.func_resolve: - ctx.func_resolve[stmt.id.name] = ctx.func_resolve[rhs] + + # Lambda lifting: find all Fvnctio nodes in the entire AST + counter = [0] + for stmt in program.statements: + _collect_lambdas(stmt, ctx, counter) lines = [] @@ -39,13 +61,13 @@ def compile_program(program): "", ] - # Forward declarations + # Forward declarations (named functions + lambdas) for c_name in ctx.functions: lines.append(f"CentValue {c_name}(CentScope _scope);") if ctx.functions: lines.append("") - # Hoisted function definitions + # Hoisted named function definitions for c_name, stmt in func_definitions: ctx.current_function = c_name lines.append(f"CentValue {c_name}(CentScope _scope) {{") @@ -55,6 +77,16 @@ def compile_program(program): lines += ["_func_return:", " return _return_val;", "}", ""] ctx.current_function = None + # Hoisted lambda definitions + for c_name, fvnctio_node in ctx.lambdas: + ctx.current_function = c_name + lines.append(f"CentValue {c_name}(CentScope _scope) {{") + lines.append(" CentValue _return_val = cent_null();") + for l in _emit_body(fvnctio_node.statements, ctx): + lines.append(f" {l}") + lines += ["_func_return:", " return _return_val;", "}", ""] + ctx.current_function = None + # main() lines.append("int main(void) {") lines.append(" cent_init();") @@ -62,8 +94,25 @@ def compile_program(program): lines.append(" cent_magnvm = 1;") lines.append(" CentScope _scope = {0};") lines.append(" CentValue _return_val = cent_null();") + + # Build a map from id(Defini_node) → c_name for scope registration + defini_c_names = {id(stmt): c_name for c_name, stmt in func_definitions} + for stmt in program.statements: if isinstance(stmt, Defini): + name = stmt.name.name + c_name = defini_c_names[id(stmt)] + param_names = ctx.functions[c_name] + pn_var = f"_pn_{c_name}" + lines.append( + f" static const char *{pn_var}[] = {{" + + ", ".join(f'"{p}"' for p in param_names) + + "};" + ) + lines.append( + f' cent_scope_set(&_scope, "{name}", ' + f"cent_func_val({c_name}, {pn_var}, {len(param_names)}));" + ) continue for l in emit_stmt(stmt, ctx): lines.append(f" {l}") diff --git a/centvrion/compiler/runtime/cent_runtime.c b/centvrion/compiler/runtime/cent_runtime.c index ebbb93b..c7099a4 100644 --- a/centvrion/compiler/runtime/cent_runtime.c +++ b/centvrion/compiler/runtime/cent_runtime.c @@ -290,6 +290,10 @@ static int write_val(CentValue v, char *buf, int bufsz) { return total; } + case CENT_FUNC: + if (buf && bufsz > 7) { memcpy(buf, "FVNCTIO", 7); buf[7] = '\0'; } + return 7; + case CENT_DICT: { /* "{key VT val, key VT val}" */ int total = 2; /* '{' + '}' */ @@ -454,6 +458,7 @@ CentValue cent_eq(CentValue a, CentValue b) { switch (a.type) { case CENT_STR: return cent_bool(strcmp(a.sval, b.sval) == 0); case CENT_BOOL: return cent_bool(a.bval == b.bval); + case CENT_FUNC: return cent_bool(a.fnval.fn == b.fnval.fn); case CENT_NULL: return cent_bool(1); default: cent_type_error("'EST' not supported for this type"); diff --git a/centvrion/compiler/runtime/cent_runtime.h b/centvrion/compiler/runtime/cent_runtime.h index b20eee2..673a9c8 100644 --- a/centvrion/compiler/runtime/cent_runtime.h +++ b/centvrion/compiler/runtime/cent_runtime.h @@ -15,12 +15,23 @@ typedef enum { CENT_LIST, CENT_FRAC, CENT_DICT, + CENT_FUNC, CENT_NULL } CentType; typedef struct CentValue CentValue; typedef struct CentList CentList; typedef struct CentDict CentDict; +struct CentScope; /* forward declaration */ + +/* First-class function value */ +typedef CentValue (*CentFuncPtr)(struct CentScope); + +typedef struct { + CentFuncPtr fn; + const char **param_names; + int param_count; +} CentFuncInfo; /* Duodecimal fraction: num/den stored as exact integers */ typedef struct { @@ -48,14 +59,15 @@ struct CentValue { char *sval; /* CENT_STR */ int bval; /* CENT_BOOL */ CentList lval; /* CENT_LIST */ - CentFrac fval; /* CENT_FRAC */ - CentDict dval; /* CENT_DICT */ + CentFrac fval; /* CENT_FRAC */ + CentDict dval; /* CENT_DICT */ + CentFuncInfo fnval; /* CENT_FUNC */ }; }; /* Scope: flat name→value array. Stack-allocated by the caller; cent_scope_set uses cent_arena when it needs to grow. */ -typedef struct { +typedef struct CentScope { const char **names; CentValue *vals; int len; @@ -111,6 +123,14 @@ static inline CentValue cent_list(CentValue *items, int len, int cap) { r.lval.cap = cap; return r; } +static inline CentValue cent_func_val(CentFuncPtr fn, const char **param_names, int param_count) { + CentValue r; + r.type = CENT_FUNC; + r.fnval.fn = fn; + r.fnval.param_names = param_names; + r.fnval.param_count = param_count; + return r; +} static inline CentValue cent_dict_val(CentValue *keys, CentValue *vals, int len, int cap) { CentValue r; r.type = CENT_DICT; diff --git a/centvrion/lexer.py b/centvrion/lexer.py index bc85dcc..6a46c80 100644 --- a/centvrion/lexer.py +++ b/centvrion/lexer.py @@ -18,6 +18,7 @@ keyword_tokens = [("KEYWORD_"+i, i) for i in [ "ET", "FACE", "FALSITAS", + "FVNCTIO", "INVOCA", "IN", "MINVE", diff --git a/centvrion/parser.py b/centvrion/parser.py index ea6e04f..3c207c5 100644 --- a/centvrion/parser.py +++ b/centvrion/parser.py @@ -287,10 +287,14 @@ class Parser(): def unary_not(tokens): return ast_nodes.UnaryNot(tokens[1]) - @self.pg.production('expression : KEYWORD_INVOCA id expressions') + @self.pg.production('expression : KEYWORD_INVOCA expression expressions') def invoca(tokens): return ast_nodes.Invoca(tokens[1], tokens[2]) + @self.pg.production('expression : KEYWORD_FVNCTIO ids KEYWORD_VT SYMBOL_LCURL statements SYMBOL_RCURL') + def fvnctio(tokens): + return ast_nodes.Fvnctio(tokens[1], tokens[4]) + @self.pg.production('expression : SYMBOL_LPARENS expression SYMBOL_RPARENS') def parens(tokens): return tokens[1] diff --git a/language/main.tex b/language/main.tex index 99d4502..415083f 100644 --- a/language/main.tex +++ b/language/main.tex @@ -55,7 +55,8 @@ \languageline{expression}{\texttt{(} \textit{expression} \texttt{)}} \\ \languageline{expression}{\textbf{id}} \\ \languageline{expression}{\textbf{builtin} \texttt{(} \textit{optional-expressions} \texttt{)}} \\ - \languageline{expression}{\texttt{INVOCA} \textbf{id} \texttt{(} \textit{optional-expressions} \texttt{)}} \\ + \languageline{expression}{\texttt{INVOCA} \textit{expression} \texttt{(} \textit{optional-expressions} \texttt{)}} \\ + \languageline{expression}{\texttt{FVNCTIO} \texttt{(} \textit{optional-ids} \texttt{)} \texttt{VT} \textit{scope}} \\ \languageline{expression}{\textit{literal}} \\ \languageline{expression}{\textit{expression} \texttt{[} \textit{expression} \texttt{]}} \\ \languageline{expression}{\textit{expression} \textbf{binop} \textit{expression}} \\ diff --git a/snippets/fvnctio.cent b/snippets/fvnctio.cent new file mode 100644 index 0000000..917099e --- /dev/null +++ b/snippets/fvnctio.cent @@ -0,0 +1,9 @@ +DEFINI apply (f, x) VT { + REDI (INVOCA f (x)) +} + +DESIGNA dbl VT FVNCTIO (n) VT { + REDI (n * II) +} + +DICE(INVOCA apply (dbl, VII)) diff --git a/snippets/fvnctio.png b/snippets/fvnctio.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f277463f43b5ff800f1331fd468e92477098ff GIT binary patch literal 36536 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 VXb^-vmi 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 literal 0 HcmV?d00001 diff --git a/snippets/syntaxes/centvrion.sublime-syntax b/snippets/syntaxes/centvrion.sublime-syntax index 0390bcf..c794c8b 100644 --- a/snippets/syntaxes/centvrion.sublime-syntax +++ b/snippets/syntaxes/centvrion.sublime-syntax @@ -78,7 +78,7 @@ contexts: scope: support.class.module.centvrion keywords: - - match: '\b(AETERNVM|ALVID|AVGE|AVT|CONTINVA|DEFINI|DESIGNA|DISPAR|DONICVM|DVM|ERVMPE|EST|ET|FACE|INVOCA|IN|MINVE|MINVS|NON|PER|PLVS|REDI|RELIQVVM|SI|TABVLA|TVNC|VSQVE|VT|CVM)\b' + - match: '\b(AETERNVM|ALVID|AVGE|AVT|CONTINVA|DEFINI|DESIGNA|DISPAR|DONICVM|DVM|ERVMPE|EST|ET|FACE|FVNCTIO|INVOCA|IN|MINVE|MINVS|NON|PER|PLVS|REDI|RELIQVVM|SI|TABVLA|TVNC|VSQVE|VT|CVM)\b' scope: keyword.control.centvrion operators: diff --git a/tests.py b/tests.py index dfd2a5d..a064a17 100644 --- a/tests.py +++ b/tests.py @@ -12,9 +12,9 @@ from fractions import Fraction from centvrion.ast_nodes import ( ArrayIndex, Bool, BinOp, BuiltIn, DataArray, DataDict, DataRangeArray, Defini, Continva, Designa, DesignaDestructure, DesignaIndex, DumStatement, - Erumpe, ExpressionStatement, ID, InterpolatedString, Invoca, ModuleCall, - Nullus, Numeral, PerStatement, Program, Redi, SiStatement, String, - UnaryMinus, UnaryNot, Fractio, frac_to_fraction, fraction_to_frac, + Erumpe, ExpressionStatement, Fvnctio, ID, InterpolatedString, Invoca, + ModuleCall, Nullus, Numeral, PerStatement, Program, Redi, SiStatement, + String, UnaryMinus, UnaryNot, Fractio, frac_to_fraction, fraction_to_frac, num_to_int, int_to_num, make_string, ) from centvrion.compiler.emitter import compile_program @@ -2047,5 +2047,157 @@ class TestDictDisplay(unittest.TestCase): run_test(self, source, nodes, value, output) +# --- First-class functions / FVNCTIO --- + +fvnctio_tests = [ + # Lambda assigned to variable, then called + ( + "DESIGNA f VT FVNCTIO (x) VT { REDI (x + I) }\nINVOCA f (V)", + Program([], [ + Designa(ID("f"), Fvnctio([ID("x")], [Redi([BinOp(ID("x"), Numeral("I"), "SYMBOL_PLUS")])])), + ExpressionStatement(Invoca(ID("f"), [Numeral("V")])), + ]), + ValInt(6), + ), + # IIFE: immediately invoked lambda + ( + "INVOCA FVNCTIO (x) VT { REDI (x * II) } (III)", + Program([], [ + ExpressionStatement(Invoca( + Fvnctio([ID("x")], [Redi([BinOp(ID("x"), Numeral("II"), "SYMBOL_TIMES")])]), + [Numeral("III")], + )), + ]), + ValInt(6), + ), + # Zero-arg lambda + ( + "INVOCA FVNCTIO () VT { REDI (XLII) } ()", + Program([], [ + ExpressionStatement(Invoca( + Fvnctio([], [Redi([Numeral("XLII")])]), + [], + )), + ]), + ValInt(42), + ), + # Function passed as argument + ( + "DEFINI apply (f, x) VT { REDI (INVOCA f (x)) }\n" + "DESIGNA dbl VT FVNCTIO (n) VT { REDI (n * II) }\n" + "INVOCA apply (dbl, V)", + Program([], [ + Defini(ID("apply"), [ID("f"), ID("x")], [ + Redi([Invoca(ID("f"), [ID("x")])]) + ]), + Designa(ID("dbl"), Fvnctio([ID("n")], [ + Redi([BinOp(ID("n"), Numeral("II"), "SYMBOL_TIMES")]) + ])), + ExpressionStatement(Invoca(ID("apply"), [ID("dbl"), Numeral("V")])), + ]), + ValInt(10), + ), + # Lambda uses caller-scope variable (copy-caller semantics) + ( + "DESIGNA n VT III\n" + "DESIGNA f VT FVNCTIO (x) VT { REDI (x + n) }\n" + "INVOCA f (V)", + Program([], [ + Designa(ID("n"), Numeral("III")), + Designa(ID("f"), Fvnctio([ID("x")], [ + Redi([BinOp(ID("x"), ID("n"), "SYMBOL_PLUS")]) + ])), + ExpressionStatement(Invoca(ID("f"), [Numeral("V")])), + ]), + ValInt(8), + ), + # Named function passed as value + ( + "DEFINI sqr (x) VT { REDI (x * x) }\n" + "DESIGNA f VT sqr\n" + "INVOCA f (IV)", + Program([], [ + Defini(ID("sqr"), [ID("x")], [Redi([BinOp(ID("x"), ID("x"), "SYMBOL_TIMES")])]), + Designa(ID("f"), ID("sqr")), + ExpressionStatement(Invoca(ID("f"), [Numeral("IV")])), + ]), + ValInt(16), + ), + # Nested lambdas + ( + "INVOCA FVNCTIO (x) VT { REDI (INVOCA FVNCTIO (y) VT { REDI (y + I) } (x)) } (V)", + Program([], [ + ExpressionStatement(Invoca( + Fvnctio([ID("x")], [ + Redi([Invoca( + Fvnctio([ID("y")], [Redi([BinOp(ID("y"), Numeral("I"), "SYMBOL_PLUS")])]), + [ID("x")], + )]) + ]), + [Numeral("V")], + )), + ]), + ValInt(6), + ), + # DICE on a function value + ( + "DESIGNA f VT FVNCTIO (x) VT { REDI (x) }\nDICE(f)", + Program([], [ + Designa(ID("f"), Fvnctio([ID("x")], [Redi([ID("x")])])), + ExpressionStatement(BuiltIn("DICE", [ID("f")])), + ]), + ValStr("FVNCTIO"), + "FVNCTIO\n", + ), + # Lambda stored in array, called via index + ( + "DESIGNA fns VT [FVNCTIO (x) VT { REDI (x + I) }, FVNCTIO (x) VT { REDI (x * II) }]\n" + "INVOCA fns[I] (V)", + Program([], [ + Designa(ID("fns"), DataArray([ + Fvnctio([ID("x")], [Redi([BinOp(ID("x"), Numeral("I"), "SYMBOL_PLUS")])]), + Fvnctio([ID("x")], [Redi([BinOp(ID("x"), Numeral("II"), "SYMBOL_TIMES")])]), + ])), + ExpressionStatement(Invoca( + ArrayIndex(ID("fns"), Numeral("I")), + [Numeral("V")], + )), + ]), + ValInt(6), + ), + # Lambda stored in dict, called via key + ( + 'DESIGNA d VT TABVLA {"add" VT FVNCTIO (x) VT { REDI (x + I) }}\n' + 'INVOCA d["add"] (V)', + Program([], [ + Designa(ID("d"), DataDict([ + (String("add"), Fvnctio([ID("x")], [Redi([BinOp(ID("x"), Numeral("I"), "SYMBOL_PLUS")])])), + ])), + ExpressionStatement(Invoca( + ArrayIndex(ID("d"), String("add")), + [Numeral("V")], + )), + ]), + ValInt(6), + ), + # Multi-param lambda + ( + "DESIGNA add VT FVNCTIO (a, b) VT { REDI (a + b) }\nINVOCA add (III, IV)", + Program([], [ + Designa(ID("add"), Fvnctio([ID("a"), ID("b")], [ + Redi([BinOp(ID("a"), ID("b"), "SYMBOL_PLUS")]) + ])), + ExpressionStatement(Invoca(ID("add"), [Numeral("III"), Numeral("IV")])), + ]), + ValInt(7), + ), +] + +class TestFvnctio(unittest.TestCase): + @parameterized.expand(fvnctio_tests) + def test_fvnctio(self, source, nodes, value, output=""): + run_test(self, source, nodes, value, output) + + if __name__ == "__main__": unittest.main() diff --git a/vscode-extension/syntaxes/cent.tmLanguage.json b/vscode-extension/syntaxes/cent.tmLanguage.json index 7f279ae..0b3a706 100644 --- a/vscode-extension/syntaxes/cent.tmLanguage.json +++ b/vscode-extension/syntaxes/cent.tmLanguage.json @@ -45,7 +45,7 @@ "patterns": [ { "name": "keyword.control.cent", - "match": "\\b(AETERNVM|ALVID|AVT|CONTINVA|CVM|DEFINI|DESIGNA|DONICVM|DVM|ERVMPE|ET|FACE|IN|INVOCA|NON|PER|REDI|SI|TVNC|VSQVE|VT)\\b" + "match": "\\b(AETERNVM|ALVID|AVT|CONTINVA|CVM|DEFINI|DESIGNA|DONICVM|DVM|ERVMPE|ET|FACE|FVNCTIO|IN|INVOCA|NON|PER|REDI|SI|TVNC|VSQVE|VT)\\b" }, { "name": "keyword.operator.comparison.cent",