You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.2 KiB
103 lines
2.2 KiB
/*! |
|
* depd |
|
* Copyright(c) 2014 Douglas Christopher Wilson |
|
* MIT Licensed |
|
*/ |
|
|
|
'use strict' |
|
|
|
/** |
|
* Module exports. |
|
*/ |
|
|
|
module.exports = callSiteToString |
|
|
|
/** |
|
* Format a CallSite file location to a string. |
|
*/ |
|
|
|
function callSiteFileLocation (callSite) { |
|
var fileName |
|
var fileLocation = '' |
|
|
|
if (callSite.isNative()) { |
|
fileLocation = 'native' |
|
} else if (callSite.isEval()) { |
|
fileName = callSite.getScriptNameOrSourceURL() |
|
if (!fileName) { |
|
fileLocation = callSite.getEvalOrigin() |
|
} |
|
} else { |
|
fileName = callSite.getFileName() |
|
} |
|
|
|
if (fileName) { |
|
fileLocation += fileName |
|
|
|
var lineNumber = callSite.getLineNumber() |
|
if (lineNumber != null) { |
|
fileLocation += ':' + lineNumber |
|
|
|
var columnNumber = callSite.getColumnNumber() |
|
if (columnNumber) { |
|
fileLocation += ':' + columnNumber |
|
} |
|
} |
|
} |
|
|
|
return fileLocation || 'unknown source' |
|
} |
|
|
|
/** |
|
* Format a CallSite to a string. |
|
*/ |
|
|
|
function callSiteToString (callSite) { |
|
var addSuffix = true |
|
var fileLocation = callSiteFileLocation(callSite) |
|
var functionName = callSite.getFunctionName() |
|
var isConstructor = callSite.isConstructor() |
|
var isMethodCall = !(callSite.isToplevel() || isConstructor) |
|
var line = '' |
|
|
|
if (isMethodCall) { |
|
var methodName = callSite.getMethodName() |
|
var typeName = getConstructorName(callSite) |
|
|
|
if (functionName) { |
|
if (typeName && functionName.indexOf(typeName) !== 0) { |
|
line += typeName + '.' |
|
} |
|
|
|
line += functionName |
|
|
|
if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { |
|
line += ' [as ' + methodName + ']' |
|
} |
|
} else { |
|
line += typeName + '.' + (methodName || '<anonymous>') |
|
} |
|
} else if (isConstructor) { |
|
line += 'new ' + (functionName || '<anonymous>') |
|
} else if (functionName) { |
|
line += functionName |
|
} else { |
|
addSuffix = false |
|
line += fileLocation |
|
} |
|
|
|
if (addSuffix) { |
|
line += ' (' + fileLocation + ')' |
|
} |
|
|
|
return line |
|
} |
|
|
|
/** |
|
* Get constructor name of reviver. |
|
*/ |
|
|
|
function getConstructorName (obj) { |
|
var receiver = obj.receiver |
|
return (receiver.constructor && receiver.constructor.name) || null |
|
}
|
|
|