Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
gauss:stackfull brian$ cat config.diff diff --git a/vm/config_parser.cpp b/vm/config_parser.cpp index de17700..5e12dee 100644 --- a/vm/config_parser.cpp +++ b/vm/config_parser.cpp @@ -27,6 +27,18 @@ namespace rubinius { return str; } + void ConfigParser::process_argv(int argc, char** argv) { + for(int i=1; i < argc; i++) { + char* arg = argv[i]; + if(strncmp(arg, "-X", 2) == 0) { + import_line(arg + 2); + continue; + } + + if(arg[0] != '-' || strcmp(arg, "--") == 0) return; + } + } + ConfigParser::Entry* ConfigParser::parse_line(const char* line) { char* var = strdup(line); char* equals = strstr(var, "="); diff --git a/vm/config_parser.hpp b/vm/config_parser.hpp index 0968f52..813482e 100644 --- a/vm/config_parser.hpp +++ b/vm/config_parser.hpp @@ -23,6 +23,7 @@ namespace rubinius { virtual ~ConfigParser(); + void process_argv(int argc, char** argv); Entry* parse_line(const char* line); void import_line(const char* line); void import_stream(std::istream&); diff --git a/vm/drivers/cli.cpp b/vm/drivers/cli.cpp index 8ac9250..29353f2 100644 --- a/vm/drivers/cli.cpp +++ b/vm/drivers/cli.cpp @@ -60,8 +60,7 @@ static void load_runtime_kernel(Environment& env, std::string root) { * function does not deal with that subject. */ int main(int argc, char** argv) { - Environment env; - env.load_config_argv(argc, argv); + Environment env(argc, argv); env.state->init_stack_size(); env.state->set_stack_start(&env); diff --git a/vm/drivers/compile.cpp b/vm/drivers/compile.cpp index d6ad250..c53d6ee 100644 --- a/vm/drivers/compile.cpp +++ b/vm/drivers/compile.cpp @@ -59,7 +59,7 @@ int main(int argc, char** argv) { string input(argv[1]); string output(argv[2]); - Environment env; + Environment env(argc, argv); ifstream stream(input.c_str()); diff --git a/vm/environment.cpp b/vm/environment.cpp index 43aeffd..7d08293 100644 --- a/vm/environment.cpp +++ b/vm/environment.cpp @@ -27,9 +27,14 @@ namespace rubinius { - Environment::Environment() { + Environment::Environment(int argc, char** argv) { + ConfigParser* config = new ConfigParser(); + config->process_argv(argc, argv); + shared = manager.create_shared_state(); - state = shared->new_vm(); + shared->user_config = config; + + state = shared->new_vm(); state->initialize(VM::default_bytes); TaskProbe* probe = TaskProbe::create(state); @@ -59,18 +64,6 @@ namespace rubinius { shared->set_signal_thread(st); } - void Environment::load_config_argv(int argc, char** argv) { - for(int i=1; i < argc; i++) { - char* arg = argv[i]; - if(strncmp(arg, "-X", 2) == 0) { - state->user_config->import_line(arg + 2); - continue; - } - - if(arg[0] != '-' || strcmp(arg, "--") == 0) return; - } - } - void Environment::load_argv(int argc, char** argv) { bool process_xflags = true; state->set_const("ARG0", String::create(state, argv[0])); diff --git a/vm/environment.hpp b/vm/environment.hpp index 9ee5dd8..d448ef6 100644 --- a/vm/environment.hpp +++ b/vm/environment.hpp @@ -15,7 +15,7 @@ namespace rubinius { SharedState* shared; VM* state; - Environment(); + Environment(int argc, char** argv); ~Environment(); void load_config_argv(int argc, char** argv); diff --git a/vm/vm.cpp b/vm/vm.cpp index 47b7384..fa8982e 100644 --- a/vm/vm.cpp +++ b/vm/vm.cpp @@ -68,13 +68,13 @@ namespace rubinius { : id_(id) , saved_call_frame_(0) , shared(shared) + , user_config(shared.user_config) , globals(shared.globals) , om(shared.om) , global_cache(shared.global_cache) , config(shared.config) , interrupts(shared.interrupts) , symbols(shared.symbols) - , user_config(shared.user_config) , check_local_interrupts(false) , thread_state_(this) , thread(this, (Thread*)Qnil) @@ -91,9 +91,6 @@ namespace rubinius { VM::register_state(this); - user_config = new ConfigParser(); - shared.user_config = user_config; - om = new ObjectMemory(this, bytes); shared.om = om; diff --git a/vm/vm.hpp b/vm/vm.hpp index a686da7..5860ff9 100644 --- a/vm/vm.hpp +++ b/vm/vm.hpp @@ -164,6 +164,7 @@ namespace rubinius { thread::Mutex local_lock_; Waiter* waiter_; + ConfigParser *user_config; Globals& globals; ObjectMemory* om; event::Loop* events; @@ -173,7 +174,6 @@ namespace rubinius { Configuration& config; Interrupts& interrupts; SymbolTable& symbols; - ConfigParser *user_config; bool check_local_interrupts;
This paste will be private.
From the Design Piracy series on my blog: