value_t assembler_init_stripped_down(assembler_t *assm, runtime_t *runtime) { assm->scope = NULL; assm->runtime = runtime; assm->fragment = null(); short_buffer_init(&assm->code); assm->stack_height = assm->high_water_mark = 0; reusable_scratch_memory_init(&assm->scratch_memory); return success(); }
value_t compile_method_ast_to_method(runtime_t *runtime, value_t method_ast, value_t fragment) { reusable_scratch_memory_t scratch; reusable_scratch_memory_init(&scratch); TRY_FINALLY { E_TRY_DEF(signature, build_method_signature(runtime, fragment, &scratch, get_method_ast_signature(method_ast))); E_TRY_DEF(method, new_heap_method(runtime, afMutable, signature, method_ast, nothing(), fragment, new_flag_set(kFlagSetAllOff))); E_RETURN(method); } FINALLY { reusable_scratch_memory_dispose(&scratch); } YRT }
TEST(syntax, param_ordering) { CREATE_RUNTIME(); CREATE_TEST_ARENA(); value_t any_guard_ast = new_heap_guard_ast(runtime, gtAny, null()); reusable_scratch_memory_t scratch; reusable_scratch_memory_init(&scratch); variant_t *sub = vValue(ROOT(runtime, subject_key)); variant_t *sel = vValue(ROOT(runtime, selector_key)); variant_t *just_sub = vArray(sub); variant_t *just_sel = vArray(sel); variant_t *just_0 = vArray(vInt(0)); variant_t *just_1 = vArray(vInt(1)); variant_t *just_2 = vArray(vInt(2)); variant_t *just_3 = vArray(vInt(3)); CHECK_ORDERING(4, vArray(just_0, just_1, just_2, just_3), 0 o 1 o 2 o 3); CHECK_ORDERING(4, vArray(just_3, just_2, just_1, just_0), 3 o 2 o 1 o 0); CHECK_ORDERING(4, vArray(just_2, just_0, just_3, just_1), 2 o 0 o 3 o 1); CHECK_ORDERING(3, vArray(just_2, just_0, just_3), 1 o 0 o 2); CHECK_ORDERING(2, vArray(just_2, just_3), 0 o 1); CHECK_ORDERING(3, vArray(just_2, vArray(vInt(0), vInt(1)), just_3), 1 o 0 o 2); CHECK_ORDERING(3, vArray(just_2, vArray(vInt(0), vInt(4)), just_3), 1 o 0 o 2); CHECK_ORDERING(3, vArray(just_2, vArray(vInt(5), vInt(4)), just_3), 0 o 2 o 1); CHECK_ORDERING(4, vArray(just_0, just_1, just_2, just_sel), 1 o 2 o 3 o 0); CHECK_ORDERING(4, vArray(just_0, just_sub, just_2, just_sel), 2 o 0 o 3 o 1); CHECK_ORDERING(3, vArray(just_0, vArray(sub, sel), just_3), 1 o 0 o 2); reusable_scratch_memory_dispose(&scratch); DISPOSE_TEST_ARENA(); DISPOSE_RUNTIME(); }