summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/internal/bootstrap_node.js6
-rw-r--r--lib/internal/module.js35
-rw-r--r--lib/module.js29
3 files changed, 41 insertions, 29 deletions
diff --git a/lib/internal/bootstrap_node.js b/lib/internal/bootstrap_node.js
index 6380506b72..744dfa93e5 100644
--- a/lib/internal/bootstrap_node.js
+++ b/lib/internal/bootstrap_node.js
@@ -449,8 +449,10 @@
const vm = NativeModule.require('vm');
const internalModule = NativeModule.require('internal/module');
- // remove shebang and BOM
- source = internalModule.stripBOM(source.replace(/^#!.*/, ''));
+ // remove Shebang
+ source = internalModule.stripShebang(source);
+ // remove BOM
+ source = internalModule.stripBOM(source);
// wrap it
source = Module.wrap(source);
// compile the script, this will throw if it fails
diff --git a/lib/internal/module.js b/lib/internal/module.js
index 8fc8dfbf32..a2f990ee64 100644
--- a/lib/internal/module.js
+++ b/lib/internal/module.js
@@ -3,6 +3,7 @@
exports = module.exports = {
makeRequireFunction,
stripBOM,
+ stripShebang,
addBuiltinLibsToObject
};
@@ -50,6 +51,40 @@ function stripBOM(content) {
return content;
}
+/**
+ * Find end of shebang line and slice it off
+ */
+function stripShebang(content) {
+ // 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);
+ }
+ }
+ }
+ }
+ return content;
+}
+
exports.builtinLibs = [
'assert', 'buffer', 'child_process', 'cluster', 'crypto', 'dgram', 'dns',
'domain', 'events', 'fs', 'http', 'https', 'net', 'os', 'path', 'punycode',
diff --git a/lib/module.js b/lib/module.js
index fe83cd0ecb..c4576a4bbd 100644
--- a/lib/module.js
+++ b/lib/module.js
@@ -537,33 +537,8 @@ var resolvedArgv;
// the file.
// Returns exception, if any.
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);
- }
- }
- }
- }
+
+ content = internalModule.stripShebang(content);
// create wrapper function
var wrapper = Module.wrap(content);