X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=templates%2Fprogram.c;h=18d861690d109f09d07f5afab181a3f1f618e508;hp=a59988182644188e7eaabfba3b1e5eb8c598e607;hb=bca87656ab93d4b99b4b007bfd54580bdb19f9dc;hpb=ad9360cb4b392987edff8e3a650a2fbbc51f7046 diff --git a/templates/program.c b/templates/program.c index a599881..18d8616 100644 --- a/templates/program.c +++ b/templates/program.c @@ -586,6 +586,14 @@ Object operator${{ id.name }}(Stack* stack, jmp_buf parent_jump) assert(left.type == {{ id.in_type.upper() }}); assert(right.type == {{ id.in_type.upper() }}); + {% if id.name == 'integerDivide' or id.name == 'modularDivide' %} + if(right.instance.integer == 0) + { + fprintf(stderr, "DivisionByZeroError\n"); + longjmp(parent_jump, 1); + } + {% endif %} + Object result; result.type = {{ id.out_type.upper() }}; result.instance.{{ id.out_type.lower() }} = left.instance.{{ id.in_type.lower() }} {{ id.operator }} right.instance.{{ id.in_type.lower() }}; @@ -686,10 +694,12 @@ int main(int argc, char** argv) jmp_buf jump; if(setjmp(jump) != 0) { - fprintf(stderr, "Error in __main__\n"); + fprintf(stderr, "\tin __main__\n"); Environment_setLive(environment, false); EnvironmentPool_destruct(environmentPool); - return 1; + + // TODO We would like to return something nonzero here, but that messes up Valgrind so we couldn't catch memory leaks + return 0; } // TODO Use the symbol from SYMBOL_LIST