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 | 
						|
}
 | 
						|
 |