示例#1
0
void erase_term(Term* term)
{
    pre_erase_term(term);

    set_null(term_value(term));
    set_inputs(term, TermList());
    change_function(term, NULL);
    term->type = NULL;
    remove_nested_contents(term);

    // for each user, clear that user's input list of this term
    remove_from_any_user_lists(term);
    clear_from_dependencies_of_users(term);

    if (term->owningBlock != NULL) {
        // remove name binding if necessary
        term->owningBlock->removeNameBinding(term);

        // index may be invalid if something bad has happened
        ca_assert(term->index < term->owningBlock->length());
        term->owningBlock->_terms.setAt(term->index, NULL);

        term->owningBlock = NULL;
        term->index = -1;
    }

    dealloc_term(term);
}
示例#2
0
文件: lambda.c 项目: 74AC153/lam
void destroy_term(struct term *term)
{
    if(! term)
        return;
    switch(term->type) {
    case TYPE_VAR:
        break;
    case TYPE_LAMBDA:
        destroy_term(term->lambda.body);
        break;
    case TYPE_APPL:
        destroy_term(term->appl.fun);
        destroy_term(term->appl.arg);
        break;
    }
    dealloc_term(term);
}