void script_parse_op_free (script_op_t *op) { if (!op) return; switch (op->type) { case SCRIPT_OP_TYPE_EXPRESSION: script_parse_exp_free (op->data.exp); break; case SCRIPT_OP_TYPE_OP_BLOCK: script_parse_op_list_free (op->data.list); break; case SCRIPT_OP_TYPE_IF: case SCRIPT_OP_TYPE_WHILE: case SCRIPT_OP_TYPE_DO_WHILE: case SCRIPT_OP_TYPE_FOR: script_parse_exp_free (op->data.cond_op.cond); script_parse_op_free (op->data.cond_op.op1); script_parse_op_free (op->data.cond_op.op2); break; case SCRIPT_OP_TYPE_RETURN: if (op->data.exp) script_parse_exp_free (op->data.exp); break; case SCRIPT_OP_TYPE_FAIL: case SCRIPT_OP_TYPE_BREAK: case SCRIPT_OP_TYPE_CONTINUE: break; } script_debug_remove_element (op); free (op); }
static void script_parse_op_list_free (ply_list_t *op_list) { ply_list_node_t *node; for (node = ply_list_get_first_node (op_list); node; node = ply_list_get_next_node (op_list, node)) { script_op_t *op = ply_list_node_get_data (node); script_parse_op_free (op); } ply_list_free (op_list); return; }
static void stop_animation (ply_boot_splash_plugin_t *plugin) { assert (plugin != NULL); assert (plugin->loop != NULL); if (!plugin->is_animating) return; plugin->is_animating = false; stop_script_animation (plugin); script_parse_op_free (plugin->script_main_op); }
void script_lib_plymouth_destroy (script_lib_plymouth_data_t *data) { script_parse_op_free (data->script_main_op); script_obj_unref (data->script_refresh_func); script_obj_unref (data->script_boot_progress_func); script_obj_unref (data->script_root_mounted_func); script_obj_unref (data->script_keyboard_input_func); script_obj_unref (data->script_update_status_func); script_obj_unref (data->script_display_normal_func); script_obj_unref (data->script_display_password_func); script_obj_unref (data->script_display_question_func); script_obj_unref (data->script_display_message_func); script_obj_unref (data->script_hide_message_func); script_obj_unref (data->script_quit_func); free (data); }
static void script_parse_exp_free (script_exp_t *exp) { if (!exp) return; switch (exp->type) { case SCRIPT_EXP_TYPE_PLUS: case SCRIPT_EXP_TYPE_MINUS: case SCRIPT_EXP_TYPE_MUL: case SCRIPT_EXP_TYPE_DIV: case SCRIPT_EXP_TYPE_MOD: case SCRIPT_EXP_TYPE_EQ: case SCRIPT_EXP_TYPE_NE: case SCRIPT_EXP_TYPE_GT: case SCRIPT_EXP_TYPE_GE: case SCRIPT_EXP_TYPE_LT: case SCRIPT_EXP_TYPE_LE: case SCRIPT_EXP_TYPE_AND: case SCRIPT_EXP_TYPE_OR: case SCRIPT_EXP_TYPE_EXTEND: case SCRIPT_EXP_TYPE_ASSIGN: case SCRIPT_EXP_TYPE_ASSIGN_PLUS: case SCRIPT_EXP_TYPE_ASSIGN_MINUS: case SCRIPT_EXP_TYPE_ASSIGN_MUL: case SCRIPT_EXP_TYPE_ASSIGN_DIV: case SCRIPT_EXP_TYPE_ASSIGN_MOD: case SCRIPT_EXP_TYPE_ASSIGN_EXTEND: case SCRIPT_EXP_TYPE_HASH: script_parse_exp_free (exp->data.dual.sub_a); script_parse_exp_free (exp->data.dual.sub_b); break; case SCRIPT_EXP_TYPE_NOT: case SCRIPT_EXP_TYPE_POS: case SCRIPT_EXP_TYPE_NEG: case SCRIPT_EXP_TYPE_PRE_INC: case SCRIPT_EXP_TYPE_PRE_DEC: case SCRIPT_EXP_TYPE_POST_INC: case SCRIPT_EXP_TYPE_POST_DEC: script_parse_exp_free (exp->data.sub); break; case SCRIPT_EXP_TYPE_TERM_NUMBER: case SCRIPT_EXP_TYPE_TERM_NULL: case SCRIPT_EXP_TYPE_TERM_LOCAL: case SCRIPT_EXP_TYPE_TERM_GLOBAL: case SCRIPT_EXP_TYPE_TERM_THIS: break; case SCRIPT_EXP_TYPE_TERM_SET: { ply_list_node_t *node; for (node = ply_list_get_first_node (exp->data.parameters); node; node = ply_list_get_next_node (exp->data.parameters, node)) { script_exp_t *sub = ply_list_node_get_data (node); script_parse_exp_free (sub); } ply_list_free (exp->data.parameters); break; } case SCRIPT_EXP_TYPE_FUNCTION_EXE: { ply_list_node_t *node; for (node = ply_list_get_first_node (exp->data.function_exe.parameters); node; node = ply_list_get_next_node (exp->data.function_exe.parameters, node)) { script_exp_t *sub = ply_list_node_get_data (node); script_parse_exp_free (sub); } ply_list_free (exp->data.function_exe.parameters); script_parse_exp_free (exp->data.function_exe.name); break; } case SCRIPT_EXP_TYPE_FUNCTION_DEF: /* FIXME merge the frees with one from op_free */ { if (exp->data.function_def->type == SCRIPT_FUNCTION_TYPE_SCRIPT) script_parse_op_free (exp->data.function_def->data.script); ply_list_node_t *node; for (node = ply_list_get_first_node (exp->data.function_def->parameters); node; node = ply_list_get_next_node (exp->data.function_def->parameters, node)) { char *arg = ply_list_node_get_data (node); free (arg); } ply_list_free (exp->data.function_def->parameters); free (exp->data.function_def); break; } case SCRIPT_EXP_TYPE_TERM_STRING: case SCRIPT_EXP_TYPE_TERM_VAR: free (exp->data.string); break; } script_debug_remove_element (exp); free (exp); }
void script_lib_math_destroy (script_lib_math_data_t *data) { script_parse_op_free (data->script_main_op); free (data); }