static void handle_stack(reachable_method_stack_t* s, reachable_types_t* r, uint32_t* next_type_id) { while(s != NULL) { reachable_method_t* m; s = reachable_method_stack_pop(s, &m); AST_GET_CHILDREN(m->r_fun, cap, id, typeparams, params, result, can_error, body); m->param_count = ast_childcount(params); m->params = (reachable_type_t**)ponyint_pool_alloc_size( m->param_count * sizeof(reachable_type_t*)); ast_t* param = ast_child(params); size_t i = 0; while(param != NULL) { AST_GET_CHILDREN(param, p_id, p_type); m->params[i++] = add_type(&s, r, next_type_id, p_type); param = ast_sibling(param); } m->result = add_type(&s, r, next_type_id, result); reachable_expr(&s, r, next_type_id, body); } }
static void handle_stack(reachable_method_stack_t* s, reachable_types_t* r, uint32_t* next_type_id) { while(s != NULL) { reachable_method_t* m; s = reachable_method_stack_pop(s, &m); AST_GET_CHILDREN(m->r_fun, cap, id, typeparams, params, result, can_error, body); ast_t* param = ast_child(params); while(param != NULL) { AST_GET_CHILDREN(param, p_id, p_type); add_type(&s, r, next_type_id, p_type); param = ast_sibling(param); } add_type(&s, r, next_type_id, result); reachable_expr(&s, r, next_type_id, body); } }