diff --git a/captain.sh b/captain.sh index fb4fd2c..a84475c 100755 --- a/captain.sh +++ b/captain.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash kraken="kraken" diff --git a/stdlib/c_generator.krak b/stdlib/c_generator.krak index d645bd3..88a899d 100644 --- a/stdlib/c_generator.krak +++ b/stdlib/c_generator.krak @@ -625,8 +625,14 @@ obj c_generator (Object) { else num++ } - for (var i = 0; i < num; i++;) - defer_stack->from_top(i).second.for_each_reverse(fun(node: *ast_node) to_ret += generate(node, enclosing_object, enclosing_func, null>>>(), false);) + for (var i = 0; i < num; i++;) { + defer_stack->push(make_pair(false, stack<*ast_node>())) + /*defer_stack->from_top(i+1).second.for_each_reverse(fun(node: *ast_node) to_ret += generate(node, enclosing_object, enclosing_func, null>>>(), false);)*/ + defer_stack->from_top(i+1).second.for_each_reverse(fun(node: *ast_node) to_ret += generate(node, enclosing_object, enclosing_func, defer_stack, false);) + if (defer_stack->top().second.size()) + to_ret += generate_from_defer_stack(defer_stack, 1, enclosing_object, enclosing_func); + defer_stack->pop() + } return to_ret } fun generate_defer_statement(node: *ast_node, enclosing_object: *ast_node, enclosing_func: *ast_node, defer_stack: *stack>>): code_triple {