Beispiel #1
0
bool ZorbaCMDProperties::loadProperties(int argc, char* argv[]) 
{
  std::string result = load_argv(argc, (const char **) argv);

  if (result.empty())
    result = check_args();

  if (result == "!HELP") 
  {
    std::cout << "Zorba XQuery Engine, Version: " 
              << zorba::Zorba::version() << std::endl;
    std::cout << "Available options:\n\n";
    std::cout << get_help_msg ();
    return false;
  }
  else if (result == "!VER") 
  {
    std::cout << "Zorba XQuery Engine, Version: " 
              << zorba::Zorba::version() << std::endl;
    return false;
  }
  else if (result.empty ())
  {
    return true;
  }
  else if (result [0] != '!')
  {
    std::cout << "Error: " << result << std::endl;
    return false;
  }
  else
  {
    return false;
  }  
}
Beispiel #2
0
  /**
   * Runs rbx from the filesystem. Searches for the Rubinius runtime files
   * according to the algorithm in find_runtime().
   */
  void Environment::run_from_filesystem() {
    int i = 0;
    state->vm()->set_root_stack(reinterpret_cast<uintptr_t>(&i),
                                VM::cStackDepthMax);

    std::string runtime = system_prefix() + RBX_RUNTIME_PATH;

    load_platform_conf(runtime);
    boot_vm();
    start_finalizer();

    load_argv(argc_, argv_);

    start_signals();
    state->vm()->initialize_config();

    load_tool();

    G(rubinius)->set_const(state, "Signature", Integer::from(state, signature_));

    if(LANGUAGE_20_ENABLED(state)) {
      runtime += "/20";
    } else if(LANGUAGE_19_ENABLED(state)) {
      runtime += "/19";
    } else {
      runtime += "/18";
    }
    G(rubinius)->set_const(state, "RUNTIME_PATH", String::create(state,
                           runtime.c_str(), runtime.size()));

    load_kernel(runtime);
    shared->finalizer_handler()->start_thread(state);

    run_file(runtime + "/loader.rbc");

    state->vm()->thread_state()->clear();

    Object* loader = G(rubinius)->get_const(state, state->symbol("Loader"));
    if(loader->nil_p()) {
      rubinius::bug("Unable to find loader");
    }

    OnStack<1> os(state, loader);

    Object* inst = loader->send(state, 0, state->symbol("new"));
    if(inst) {
      OnStack<1> os2(state, inst);

      inst->send(state, 0, state->symbol("main"));
    } else {
      rubinius::bug("Unable to instantiate loader");
    }
  }
Beispiel #3
0
int builtin_shift(Environment &env, const std::vector<std::string> &tokens, const fdmask &fds) {

	int n = 1;

	if (tokens.size() > 3) {
		fdputs("### Shift - Too many parameters were specified.\n", stderr);
		fdputs("# Usage - Shift [number]\n", stderr);
		return 1;
	}

	if (tokens.size() == 2) {

		value v(tokens[1]);
		if (v.is_number() && v.number >= 0) n = v.number;
		else {
			fdputs("### Shift - The parameter must be a positive number.\n", stderr);
			fdputs("# Usage - Shift [number]\n", stderr);
			return 1;
		}
	}

	if (n == 0) return 0;

	auto argv = load_argv(env);
	if (argv.empty()) return 0;

	std::move(argv.begin() + n , argv.end(), argv.begin());
	do {
		env.unset(std::to_string(argv.size()));
		argv.pop_back();
	} while (--n);

	env.set_argv(argv);

	return 0;
}
Beispiel #4
0
  void Environment::boot() {
    state->shared().start_diagnostics(state);

    std::string codedb_path = system_prefix() + RBX_CODEDB_PATH;

    {
      timer::StopWatch<timer::microseconds> timer(
          state->shared().boot_metrics()->platform_us);

      load_platform_conf(codedb_path);
    }

    {
      timer::StopWatch<timer::microseconds> timer(
          state->shared().boot_metrics()->memory_us);

      shared->om = new Memory(state->vm(), *shared);
    }

    shared->set_initialized();

    state->vm()->managed_phase(state);

    {
      timer::StopWatch<timer::microseconds> timer(
          state->shared().boot_metrics()->fields_us);

      TypeInfo::auto_learn_fields(state);
    }

    {
      timer::StopWatch<timer::microseconds> timer(
          state->shared().boot_metrics()->ontology_us);

      state->vm()->bootstrap_ontology(state);
    }

    start_finalizer(state);

    load_argv(argc_, argv_);

    // Start the main Ruby thread.
    Thread* main = 0;
    OnStack<1> os(state, main);

    {
      timer::StopWatch<timer::microseconds> timer(
          state->shared().boot_metrics()->main_thread_us);

      main = Thread::create(state, state->vm(), Thread::main_thread);
      main->start_thread(state, Thread::run);
    }

    VM* vm = SignalThread::new_vm(state);
    vm->set_stack_bounds(state->vm()->stack_size());

    State main_state(vm);
    state->shared().start_signals(&main_state);

    state->shared().set_running();
  }