X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=templates%2Ffunction_definition.c;h=fb7a090ffb5551ea40289b187150428ca20098e1;hp=24c73f801488bfea3154bb0591f4e23badc88c38;hb=d875a383425b06597d6ddc8a8c7fe67feec77962;hpb=728158b2204b6454eecc12bf2988b3f0cbb9ec81 diff --git a/templates/function_definition.c b/templates/function_definition.c index 24c73f8..fb7a090 100644 --- a/templates/function_definition.c +++ b/templates/function_definition.c @@ -1,8 +1,17 @@ -Object user${{name}}$implementation(EnvironmentPool* environmentPool, Environment* parent, size_t argc, Stack* stack) +Object user${{name}}$implementation(EnvironmentPool* environmentPool, Environment* parent, size_t argc, Stack* stack, jmp_buf parent_jump) { Environment* environment = EnvironmentPool_allocate(environmentPool); Environment_initialize(environment, parent); + + jmp_buf jump; + if(setjmp(jump) != 0) + { + Environment_setLive(environment, false); + fprintf(stderr, "Error in {{name}}\n"); + longjmp(parent_jump, 1); + } + Object result = builtin$nil; {% for argument_name in argument_name_list|reverse %}