コード例 #1
0
ファイル: interface.c プロジェクト: BluePanM/code
void
CRB_set_command_line_args(CRB_Interpreter *interpreter,
                          int argc, char **argv)
{
    int i;
    CRB_Char *wc_str;
    CRB_Value args;
    CRB_Value elem;

    args.type = CRB_ARRAY_VALUE;
    args.u.object = crb_create_array_i(interpreter, argc);
    CRB_push_value(interpreter, &args);

    for (i = 0; i < argc; i++) {
        wc_str = CRB_mbstowcs_alloc(interpreter, NULL, 0, argv[i]);
        if (wc_str == NULL) {
            fprintf(stderr, "bad command line argument(%dth)", i);
            return;
        }
        elem.type = CRB_STRING_VALUE;
        elem.u.object = crb_create_crowbar_string_i(interpreter, wc_str);
        CRB_array_set(interpreter, NULL, args.u.object, i, &elem);
    }
    CRB_add_global_variable(interpreter, "ARGS", &args, CRB_TRUE);

    CRB_pop_value(interpreter);
}
コード例 #2
0
ファイル: eval.c プロジェクト: Chainhelen/program_language
static CRB_Value
eval_assign_expression(CRB_Interpreter *inter, LocalEnvironment *env,
                        char *identifier, Expression *expression)
{
    CRB_Value   v;
    Variable    *left;

    v = eval_expression(inter, env, expression);

    left = crb_search_local_variable(env, identifier);
    if(left == NULL){
        left = search_global_variable_from_env(inter, env, identifier);
    }
    if(left != NULL){
        release_if_string(&left->vaule);
        left->value = v;
        release_if_string(&v);
    } else {
        if(env != NULL){
            crb_add_local_variable(env, identifier, &v);
        } else {
            CRB_add_global_variable(inter, identifier, &v);
        } 
        refer_if_string(&v);
    }

    return v;
}
コード例 #3
0
ファイル: native.c プロジェクト: yili3366/toy_compiler
void
crb_add_std_fp(CRB_Interpreter *inter)
{
    CRB_Value fp_value;

    fp_value.type = CRB_NATIVE_POINTER_VALUE;
    fp_value.u.native_pointer.info = &st_native_lib_info;

    fp_value.u.native_pointer.pointer = stdin;
    CRB_add_global_variable(inter, "STDIN", &fp_value);

    fp_value.u.native_pointer.pointer = stdout;
    CRB_add_global_variable(inter, "STDOUT", &fp_value);

    fp_value.u.native_pointer.pointer = stderr;
    CRB_add_global_variable(inter, "STDERR", &fp_value);
}
コード例 #4
0
ファイル: native.c プロジェクト: BluePanM/code
void
crb_add_std_fp(CRB_Interpreter *inter)
{
    CRB_Value fp_value;

    fp_value.type = CRB_NATIVE_POINTER_VALUE;
    fp_value.u.object = crb_create_native_pointer_i(inter, stdin,
                                                    &st_file_type_info);
    CRB_add_global_variable(inter, "STDIN", &fp_value, CRB_TRUE);

    fp_value.u.object = crb_create_native_pointer_i(inter, stdout,
                                                    &st_file_type_info);
    CRB_add_global_variable(inter, "STDOUT", &fp_value, CRB_TRUE);

    fp_value.u.object = crb_create_native_pointer_i(inter, stderr,
                                                    &st_file_type_info);
    CRB_add_global_variable(inter, "STDERR", &fp_value, CRB_TRUE);
}