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 ); }
static void test_unexistant_var(t_test *test) { char *tab[] = {"TEST1=content1", "TEST2=content2", NULL}; t_info info; test->debug = 1; ft_init_env(&info, tab); env_add_var(&info, strdup("yolo"), strdup("swag")); env_remove_var(&info, "JHG"); ft_free_env(info.env); }
void read_eval_print( stack_frame_t *frame ){ linenoiseSetMultiLine( 1 ); linenoiseSetCompletionCallback( goj_linenoise_complete ); linenoiseSetHintsCallback( goj_linenoise_hints ); really_global_frame = frame; char *buf = ""; unsigned n = 0; token_t *tree; while ( buf ){ buf = linenoise( "> " ); n++; if ( buf ){ tree = parse_scheme_tokens( buf ); if ( tree ){ char varexpr[64]; linenoiseHistoryAdd( buf ); frame->ptr = tree; eval_loop( frame ); snprintf( varexpr, sizeof(varexpr) - 1, "..%u", n ); env_add_var( frame->env, varexpr, frame->end, NO_RECURSE, VAR_IMMUTABLE ); env_add_var( frame->env, "..last", frame->end, NO_RECURSE, VAR_MUTABLE ); printf( "..%u = ", n ); print_token( frame->end, OUTPUT_READABLE ); putchar( '\n' ); } } // Free the statement that was read free( buf ); } }
static void test_simple_test_null(t_test *test) { char *tab[] = {"TEST1=content1", "TEST2=content2", NULL}; t_info info; test->debug = 1; ft_init_env(&info, tab); env_add_var(&info, strdup("yolo"), strdup("swag")); env_remove_var(&info, NULL); mt_assert(!info.env->next->next->next); ft_free_env(info.env); }
static void test_last_var(t_test *test) { char **tab = NULL; t_info info; test->debug = 1; ft_init_env(&info, tab); env_add_var(&info, strdup("yolo"), strdup("swag")); env_remove_var(&info, "yolo"); mt_assert(!info.env); ft_free_env(info.env); }
void env_update_var(t_info *info, char *var, char *content) { t_env *tmp; if ((tmp = search_env_var(info, var))) { free(tmp->content); tmp->content = ft_strdup(content); } else env_add_var(info, ft_strdup(var), ft_strdup(content)); }