コード例 #1
0
ファイル: gojira.c プロジェクト: mushrom/gojira
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 );
}
コード例 #2
0
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);
}
コード例 #3
0
ファイル: gojira.c プロジェクト: mushrom/gojira
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 );
	}
}
コード例 #4
0
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);
}
コード例 #5
0
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);
}
コード例 #6
0
ファイル: env_update_var.c プロジェクト: ulefebvr/42sh
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));
}