Esempio n. 1
0
REPLServer.prototype.createContext = function() {
  var context;
  if (this.useGlobal) {
    context = global;
  } else {
    context = vm.createContext();
    for (var i in global) context[i] = global[i];
    context.console = new Console(this.outputStream);
    context.global = context;
    context.global.global = context;
  }

  const module = new Module('<repl>');
  module.paths = Module._resolveLookupPaths('<repl>', parentModule)[1];

  const require = internalModule.makeRequireFunction.call(module);
  context.module = module;
  context.require = require;


  this.underscoreAssigned = false;
  this.lines = [];
  this.lines.level = [];

  // make built-in modules available directly
  // (loaded lazily)
  exports._builtinLibs.forEach((name) => {
    Object.defineProperty(context, name, {
      get: () => {
        var lib = require(name);
        this.last = context[name] = lib;
        return lib;
      },
      // allow the creation of other globals with this name
      set: (val) => {
        delete context[name];
        context[name] = val;
      },
      configurable: true
    });
  });

  Object.defineProperty(context, '_', {
    configurable: true,
    get: () => {
      return this.last;
    },
    set: (value) => {
      this.last = value;
      if (!this.underscoreAssigned) {
        this.underscoreAssigned = true;
        this.outputStream.write('Expression assignment to _ now disabled.\n');
      }
    }
  });

  return context;
};
Esempio n. 2
0
File: repl.js Progetto: og01/node
REPLServer.prototype.createContext = function() {
  var context;
  if (this.useGlobal) {
    context = global;
  } else {
    context = vm.createContext();
    context.global = context;
    const _console = new Console(this.outputStream);
    Object.defineProperty(context, 'console', {
      configurable: true,
      enumerable: true,
      get: () => _console
    });
    Object.getOwnPropertyNames(global).filter((name) => {
      if (name === 'console' || name === 'global') return false;
      return GLOBAL_OBJECT_PROPERTY_MAP[name] === undefined;
    }).forEach((name) => {
      Object.defineProperty(context, name,
        Object.getOwnPropertyDescriptor(global, name));
    });
  }

  const module = new Module('<repl>');
  module.paths = Module._resolveLookupPaths('<repl>', parentModule)[1];

  const require = internalModule.makeRequireFunction.call(module);
  context.module = module;
  context.require = require;


  this.underscoreAssigned = false;
  this.lines = [];
  this.lines.level = [];

  internalModule.addBuiltinLibsToObject(context);

  Object.defineProperty(context, '_', {
    configurable: true,
    get: () => {
      return this.last;
    },
    set: (value) => {
      this.last = value;
      if (!this.underscoreAssigned) {
        this.underscoreAssigned = true;
        this.outputStream.write('Expression assignment to _ now disabled.\n');
      }
    }
  });

  return context;
};
Esempio n. 3
0
Module.prototype._compile = function(content, filename) {
  // remove shebang
  content = content.replace(shebangRe, '');

  // create wrapper function
  var wrapper = Module.wrap(content);

  var compiledWrapper = runInThisContext(wrapper,
                                      { filename: filename, lineOffset: 0 });
  if (global.v8debug) {
    if (!resolvedArgv) {
      // we enter the repl if we're not given a filename argument.
      if (process.argv[1]) {
        resolvedArgv = Module._resolveFilename(process.argv[1], null);
      } else {
        resolvedArgv = 'repl';
      }
    }

    // Set breakpoint on module start
    if (filename === resolvedArgv) {
      // Installing this dummy debug event listener tells V8 to start
      // the debugger.  Without it, the setBreakPoint() fails with an
      // 'illegal access' error.
      global.v8debug.Debug.setListener(function() {});
      global.v8debug.Debug.setBreakPoint(compiledWrapper, 0, 0);
    }
  }
  const dirname = path.dirname(filename);
  const require = internalModule.makeRequireFunction.call(this);

  Object.defineProperty(require, 'paths', { get: function() {
    throw new Error('require.paths is removed. Use ' +
                    'node_modules folders, or the NODE_PATH ' +
                    'environment variable instead.');
  }});

  require.registerExtension = function() {
    throw new Error('require.registerExtension() removed. Use ' +
                    'require.extensions instead.');
  };

  const args = [this.exports, require, this, filename, dirname];
  return compiledWrapper.apply(this.exports, args);
};
Esempio n. 4
0
REPLServer.prototype.createContext = function() {
  var context;
  if (this.useGlobal) {
    context = global;
  } else {
    context = vm.createContext();
    for (var i in global) context[i] = global[i];
    context.console = new Console(this.outputStream);
    context.global = context;
    context.global.global = context;
  }

  const module = new Module('<repl>');
  module.paths = Module._resolveLookupPaths('<repl>', parentModule)[1];

  const require = internalModule.makeRequireFunction.call(module);
  context.module = module;
  context.require = require;


  this.underscoreAssigned = false;
  this.lines = [];
  this.lines.level = [];

  internalModule.addBuiltinLibsToObject(context);

  Object.defineProperty(context, '_', {
    configurable: true,
    get: () => {
      return this.last;
    },
    set: (value) => {
      this.last = value;
      if (!this.underscoreAssigned) {
        this.underscoreAssigned = true;
        this.outputStream.write('Expression assignment to _ now disabled.\n');
      }
    }
  });

  return context;
};
Esempio n. 5
0
REPLServer.prototype.createContext = function() {
  var context;
  if (this.useGlobal) {
    context = global;
  } else {
    context = vm.createContext();
    for (var i in global) context[i] = global[i];
    context.console = new Console(this.outputStream);
    context.global = context;
    context.global.global = context;
  }

  const module = new Module('<repl>');
  module.paths = Module._resolveLookupPaths('<repl>', parentModule)[1];

  const require = internalModule.makeRequireFunction.call(module);
  context.module = module;
  context.require = require;

  this.lines = [];
  this.lines.level = [];

  // make built-in modules available directly
  // (loaded lazily)
  exports._builtinLibs.forEach(function(name) {
    Object.defineProperty(context, name, {
      get: function() {
        var lib = require(name);
        context._ = context[name] = lib;
        return lib;
      },
      // allow the creation of other globals with this name
      set: function(val) {
        delete context[name];
        context[name] = val;
      },
      configurable: true
    });
  });

  return context;
};
Esempio n. 6
0
Module.prototype._compile = function(content, filename) {
  // Remove shebang
  var contLen = content.length;
  if (contLen >= 2) {
    if (content.charCodeAt(0) === 35/*#*/ &&
        content.charCodeAt(1) === 33/*!*/) {
      if (contLen === 2) {
        // Exact match
        content = '';
      } else {
        // Find end of shebang line and slice it off
        var i = 2;
        for (; i < contLen; ++i) {
          var code = content.charCodeAt(i);
          if (code === 10/*\n*/ || code === 13/*\r*/)
            break;
        }
        if (i === contLen)
          content = '';
        else {
          // Note that this actually includes the newline character(s) in the
          // new output. This duplicates the behavior of the regular expression
          // that was previously used to replace the shebang line
          content = content.slice(i);
        }
      }
    }
  }

  // create wrapper function
  var wrapper = Module.wrap(content);

  var compiledWrapper = vm.runInThisContext(wrapper, {
    filename: filename,
    lineOffset: 0,
    displayErrors: true
  });

  if (process._debugWaitConnect) {
    if (!resolvedArgv) {
      // we enter the repl if we're not given a filename argument.
      if (process.argv[1]) {
        resolvedArgv = Module._resolveFilename(process.argv[1], null);
      } else {
        resolvedArgv = 'repl';
      }
    }

    // Set breakpoint on module start
    if (filename === resolvedArgv) {
      delete process._debugWaitConnect;
      const Debug = vm.runInDebugContext('Debug');
      Debug.setBreakPoint(compiledWrapper, 0, 0);
    }
  }
  var dirname = path.dirname(filename);
  var require = internalModule.makeRequireFunction.call(this);
  var args = [this.exports, require, this, filename, dirname];
  var depth = internalModule.requireDepth;
  if (depth === 0) stat.cache = new Map();
  var result = compiledWrapper.apply(this.exports, args);
  if (depth === 0) stat.cache = null;
  return result;
};
Esempio n. 7
0
 makeRequireFunction = function (m) {
   return im.makeRequireFunction.call(m);
 };