Browse Source

cli: add -p switch, print result of --eval

v0.7.4-release
Ben Noordhuis 13 years ago
parent
commit
3d22dbf27b
  1. 12
      src/node.cc
  2. 4
      src/node.js
  3. 15
      test/simple/test-cli-eval.js

12
src/node.cc

@ -115,6 +115,7 @@ static Persistent<String> uncaught_exception_symbol;
static Persistent<String> emit_symbol; static Persistent<String> emit_symbol;
static bool print_eval = false;
static char *eval_string = NULL; static char *eval_string = NULL;
static int option_end_index = 0; static int option_end_index = 0;
static bool use_debug_agent = false; static bool use_debug_agent = false;
@ -1987,6 +1988,7 @@ Handle<Object> SetupProcessObject(int argc, char *argv[]) {
// -e, --eval // -e, --eval
if (eval_string) { if (eval_string) {
process->Set(String::NewSymbol("_eval"), String::New(eval_string)); process->Set(String::NewSymbol("_eval"), String::New(eval_string));
process->Set(String::NewSymbol("_print_eval"), Boolean::New(print_eval));
} }
size_t size = 2*PATH_MAX; size_t size = 2*PATH_MAX;
@ -2127,6 +2129,7 @@ static void PrintHelp() {
"Options:\n" "Options:\n"
" -v, --version print node's version\n" " -v, --version print node's version\n"
" -e, --eval script evaluate script\n" " -e, --eval script evaluate script\n"
" -p, --print print result of --eval\n"
" --v8-options print v8 command line options\n" " --v8-options print v8 command line options\n"
" --vars print various compiled-in variables\n" " --vars print various compiled-in variables\n"
" --max-stack-size=val set max v8 stack size (bytes)\n" " --max-stack-size=val set max v8 stack size (bytes)\n"
@ -2170,13 +2173,20 @@ static void ParseArgs(int argc, char **argv) {
} else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) { } else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
PrintHelp(); PrintHelp();
exit(0); exit(0);
} else if (strcmp(arg, "--eval") == 0 || strcmp(arg, "-e") == 0) { } else if (strcmp(arg, "--eval") == 0 || strcmp(arg, "-e") == 0 ||
strcmp(arg, "-pe") == 0) {
if (argc <= i + 1) { if (argc <= i + 1) {
fprintf(stderr, "Error: --eval requires an argument\n"); fprintf(stderr, "Error: --eval requires an argument\n");
exit(1); exit(1);
} }
if (arg[1] == 'p') {
print_eval = true;
}
argv[i] = const_cast<char*>(""); argv[i] = const_cast<char*>("");
eval_string = argv[++i]; eval_string = argv[++i];
} else if (strcmp(arg, "--print") == 0 || strcmp(arg, "-p") == 0) {
print_eval = true;
argv[i] = const_cast<char*>("");
} else if (strcmp(arg, "--v8-options") == 0) { } else if (strcmp(arg, "--v8-options") == 0) {
argv[i] = const_cast<char*>("--help"); argv[i] = const_cast<char*>("--help");
} else if (argv[i][0] != '-') { } else if (argv[i][0] != '-') {

4
src/node.js

@ -77,8 +77,8 @@
var module = new Module('eval'); var module = new Module('eval');
module.filename = path.join(cwd, 'eval'); module.filename = path.join(cwd, 'eval');
module.paths = Module._nodeModulePaths(cwd); module.paths = Module._nodeModulePaths(cwd);
module._compile('eval(process._eval)', 'eval'); var result = module._compile('return eval(process._eval)', 'eval');
if (process._print_eval) console.log(result);
} else if (process.argv[1]) { } else if (process.argv[1]) {
// make process.argv[1] into a full path // make process.argv[1] into a full path
var path = NativeModule.require('path'); var path = NativeModule.require('path');

15
test/simple/test-cli-eval.js

@ -46,6 +46,21 @@ child.exec(nodejs + ' --eval "console.error(42)"',
assert.equal(stderr, '42\n'); assert.equal(stderr, '42\n');
}); });
// assert that nothing is written to stdout
['--print --eval', '-p -e', '-pe'].forEach(function(s) {
var cmd = nodejs + ' ' + s + ' ';
child.exec(cmd + '42',
function(err, stdout, stderr) {
assert.equal(stdout, '42\n');
});
child.exec(cmd + "'[]'",
function(err, stdout, stderr) {
assert.equal(stdout, '[]\n');
});
});
// assert that module loading works // assert that module loading works
child.exec(nodejs + ' --eval "require(\'' + filename + '\')"', child.exec(nodejs + ' --eval "require(\'' + filename + '\')"',
function(status, stdout, stderr) { function(status, stdout, stderr) {

Loading…
Cancel
Save