void op_listpush(void) { Var list; list = pop_args(count_args()); push(list); }
/* If this . script is supplied arguments, we save the dollar vars and replace them with the script arguments for the duration of the script's execution. If the script does not change the dollar vars, we restore what we saved. If the dollar vars are changed in the script, and we are not executing a shell function, we leave the new values alone and free the saved values. */ static void maybe_pop_dollar_vars () { if (variable_context == 0 && (dollar_vars_changed () & ARGS_SETBLTIN)) dispose_saved_dollar_vars (); else pop_dollar_vars (); if (debugging_mode) pop_args (); /* restore BASH_ARGC and BASH_ARGV */ set_dollar_vars_unchanged (); }
void op_message_expr(void) { Var args; Var msg, dest; args = pop_args(count_args()); msg = pop(); dest = pop(); if (dest.type != OBJ) { var_free(args); var_free(dest); var_free(msg); raise(E_INVIND); } else if (msg.type != STR) { var_free(args); var_free(msg); raise(E_TYPE); } else { send_message_and_block(frame.this, dest.v.obj, msg.v.str, args.v.list, dest.v.obj); } }
void op_message(void) { Var args; Var dest; String *msg; args = pop_args(count_args()); dest = pop(); if (dest.type != OBJ) { var_free(args); var_free(dest); frame.pc++; raise(E_INVIND); } else { msg = string_dup(sym_get(frame.on, frame.m->code[frame.pc])); frame.pc++; send_message_and_block(frame.this, dest.v.obj, msg, args.v.list, dest.v.obj); } }
int sporth_oscmorph4(sporth_stack *stack, void *ud) { plumber_data *pd = ud; SPFLOAT out; sporth_oscmorph *oscmorph; switch(pd->mode) { case PLUMBER_CREATE: #ifdef DEBUG_MODE fprintf(stderr, "oscmorph: Creating\n"); #endif oscmorph = malloc(sizeof(sporth_oscmorph)); sp_oscmorph_create(&oscmorph->data); oscmorph->nft = 4; oscmorph->ft = malloc(sizeof(sp_ftbl *) * 4); oscmorph->ftname = malloc(sizeof(char *) * 4); plumber_add_ugen(pd, SPORTH_OSCMORPH4, oscmorph); if(sporth_check_args(stack, "ffffssss") != SPORTH_OK) { fprintf(stderr,"Not enough arguments for oscmorph\n"); stack->error++; return PLUMBER_NOTOK; } get_strings(stack, oscmorph); pop_args(stack, oscmorph); if(search_for_ft(pd, oscmorph) == PLUMBER_NOTOK) { stack->error++; return PLUMBER_NOTOK; } sporth_stack_push_float(stack, 0); free_strings(oscmorph); break; case PLUMBER_INIT: #ifdef DEBUG_MODE fprintf(stderr, "oscmorph: Initialising\n"); #endif oscmorph = pd->last->ud; get_strings(stack, oscmorph); pop_args(stack, oscmorph); sp_oscmorph_init(pd->sp, oscmorph->data, oscmorph->ft, oscmorph->nft, oscmorph->phase); sporth_stack_push_float(stack, 0); free_strings(oscmorph); break; case PLUMBER_COMPUTE: oscmorph = pd->last->ud; pop_args(stack, oscmorph); set_args(oscmorph); sp_oscmorph_compute(pd->sp, oscmorph->data, NULL, &out); sporth_stack_push_float(stack, out); break; case PLUMBER_DESTROY: oscmorph = pd->last->ud; free(oscmorph->ftname); free(oscmorph->ft); sp_oscmorph_destroy(&oscmorph->data); free(oscmorph); break; default: fprintf(stderr, "oscmorph: Unknown mode!\n"); break; } return PLUMBER_OK; }