X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=templates%2Fprogram.c;h=73d9334c8b9176907aeee46ca7868bc65e9a7295;hp=0d6d947f06f3b7d5689f34537a3697971c9b1e17;hb=6e7ba75736ca8b463a263e7d58aa8f6bff62faaf;hpb=b8839fd25de742a5846a7189f761f591aa4689a9 diff --git a/templates/program.c b/templates/program.c index 0d6d947..73d9334 100644 --- a/templates/program.c +++ b/templates/program.c @@ -326,6 +326,23 @@ Object builtin$print$implementation(size_t argc, Object* args) Object builtin$print = { CLOSURE, (Instance)builtin$print$implementation }; {% endif %} +{% for function_definition in function_definition_list %} +Object user${{function_definition.name}}$implementation(size_t argc, Object* args) +{ + Environment* environment = Environment_construct(); + + {% for statement in function_definition.statement_list %} + {{ generate_statement(statement) }} + {% endfor %} + + Object result = {{ generate_statement(function_definition.statement_list[-1]) }} + Environment_destruct(environment); + return result; +} + +Object user${{function_definition.name}} = { CLOSURE, (Instance)user${{function_definition.name}}$implementation }; +{% endfor %} + int main(int argc, char** argv) { Environment* environment = Environment_construct(); @@ -336,7 +353,7 @@ int main(int argc, char** argv) {% endfor %} {% for statement in statements %} - {{ statement }} + {{ generate_statement(statement) }} {% endfor %} Environment_destruct(environment);