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); }
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; }
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); }
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); }