void make_argument_var( stack_frame_t *frame, int lastopt, int argc, char *argv[] ){ int i; token_t *arglist = NULL; if ( lastopt ){ token_t *move; token_t *temp; for ( i = lastopt + 1; i < argc; i++ ){ temp = gc_alloc_token( get_current_gc( frame )); char *arg = argv[i]; temp->type = TYPE_STRING; temp->flags |= T_FLAG_HAS_SHARED; temp->data = shared_new( strdup( arg ), free_string ); if ( !arglist ){ arglist = move = temp; } else { move->next = temp; move = temp; } } } token_t *argvar = gc_alloc_token( get_current_gc( frame )); argvar->type = TYPE_LIST; argvar->down = arglist; env_add_var( frame->env, "*arguments*", argvar, NO_RECURSE, VAR_MUTABLE_BUILTIN ); }
int pa_shared_set(pa_core *c, const char *name, void *data) { pa_shared *p; pa_assert(c); pa_assert(name); pa_assert(data); pa_assert(c->shared); if (pa_hashmap_get(c->shared, name)) return -1; p = shared_new(name, data); pa_hashmap_put(c->shared, p->name, p); return 0; }