示例#1
0
文件: CFCClass.c 项目: hernan604/lucy
void
CFCClass_resolve_types(CFCClass *self, CFCClass **classes) {
    for (size_t i = 0; self->functions[i] != NULL; i++) {
        CFCFunction_resolve_types(self->functions[i], classes);
    }
    for (size_t i = 0; self->methods[i] != NULL; i++) {
        CFCMethod_resolve_types(self->methods[i], classes);
    }
    for (size_t i = 0; self->member_vars[i] != NULL; i++) {
        CFCVariable_resolve_type(self->member_vars[i], classes);
    }
    for (size_t i = 0; self->inert_vars[i] != NULL; i++) {
        CFCVariable_resolve_type(self->inert_vars[i], classes);
    }
}
示例#2
0
static void
S_run_final_tests(CFCTest *test) {
    CFCParser *parser = CFCParser_new();
    CFCParcel *neato_parcel
        = CFCTest_parse_parcel(test, parser, "parcel Neato;");
    CFCClass *obj_class
        = CFCTest_parse_class(test, parser, "class Obj {}");
    CFCClass *foo_class
        = CFCTest_parse_class(test, parser, "class Neato::Foo {}");
    CFCType *return_type = CFCTest_parse_type(test, parser, "Obj*");
    CFCParamList *param_list
        = CFCTest_parse_param_list(test, parser, "(Foo *self)");

    CFCMethod *not_final
        = CFCMethod_new(neato_parcel, NULL, "Neato::Foo", "Foo",
                        "Return_An_Obj", return_type, param_list,
                        NULL, 0, 0);
    CFCMethod_resolve_types(not_final);
    CFCMethod *final = CFCMethod_finalize(not_final);
    OK(test, CFCMethod_compatible(not_final, final),
       "finalize clones properly");
    OK(test, !CFCMethod_final(not_final), "not final by default");
    OK(test, CFCMethod_final(final), "finalize");

    CFCBase_decref((CFCBase*)parser);
    CFCBase_decref((CFCBase*)neato_parcel);
    CFCBase_decref((CFCBase*)obj_class);
    CFCBase_decref((CFCBase*)foo_class);
    CFCBase_decref((CFCBase*)return_type);
    CFCBase_decref((CFCBase*)param_list);
    CFCBase_decref((CFCBase*)not_final);
    CFCBase_decref((CFCBase*)final);

    CFCClass_clear_registry();
    CFCParcel_reap_singletons();
}