source mapping decoder changes

pull/7/head
yann300 9 years ago
parent 40f6c6379c
commit 030ac5e8d7
  1. 37
      src/helpers/util.js
  2. 3
      src/index.js
  3. 15
      src/trace/traceManager.js
  4. 34
      src/util/sourceMappingDecoder.js

@ -44,34 +44,31 @@ module.exports = {
/*
Binary Search:
Assumes that @arg array is sorted increasingly
returns the smallest i such that target >= changes[i]
returns arary.length - 1 (if all elements in array are smaller than target)
returns 0 (if target is smaller than the first element of array || if array is empty)
return smallest i such that changes[i] <= target does not hold,
or changes.length if all elements are < target.
It returns the index where target could be inserted to maintain the order of the array
*/
findLowerBound: function (target, array) {
if (array.length === 0) {
return 0
}
return findLowerBoundInternal(target, array, 0, array.length - 1)
return findLowerBoundInternal(target, array, 0, array.length)
},
findLowerBoundValue: function (target, array) {
var index = this.findLowerBound(target, array)
return array[index]
}
}
function findLowerBoundInternal (target, array, lowerbound, higherbound) {
if (array[higherbound] < target) {
return higherbound
} else if (array[lowerbound] > target) {
return lowerbound
}
var middle
while (lowerbound + 1 !== higherbound) {
middle = Math.floor((higherbound + lowerbound) / 2)
if (array[middle] > target) {
higherbound = middle
} else if (array[middle] < target) {
function findLowerBoundInternal (target, array, lowerbound, length) {
while (length > 1) {
var half = length >> 1
var middle = lowerbound + half
if (array[middle] < target) {
length = length - (middle - lowerbound)
lowerbound = middle
higherbound = array.length - 1
} else if (array[middle] === target) {
return middle
} else {
length = half
}
}
return lowerbound

@ -9,9 +9,6 @@ var SourceMappingDecoder = require('./util/sourceMappingDecoder')
if (typeof (module) !== 'undefined' && typeof (module.exports) !== 'undefined') {
module.exports = modules()
}
if (typeof (window) !== 'undefined') {
window.remix = modules()
}
function modules () {
return {

@ -80,8 +80,7 @@ TraceManager.prototype.getStorageAt = function (stepIndex, tx, callback, address
return callback(check, null)
}
if (!address) {
var stoChangeIndex = util.findLowerBound(stepIndex, this.traceCache.storageChanges)
var stoChange = this.traceCache.storageChanges[stoChangeIndex]
var stoChange = util.findLowerBoundValue(stepIndex, this.traceCache.storageChanges)
if (stoChange === undefined) return callback('no storage found', null)
address = this.traceCache.sstore[stoChange].address
}
@ -124,8 +123,7 @@ TraceManager.prototype.getCallDataAt = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
var callDataChangeIndex = util.findLowerBound(stepIndex, this.traceCache.callDataChanges)
var callDataChange = this.traceCache.callDataChanges[callDataChangeIndex]
var callDataChange = util.findLowerBoundValue(stepIndex, this.traceCache.callDataChanges)
if (callDataChange === undefined) return callback('no calldata found', null)
callback(null, [this.traceCache.callsData[callDataChange]])
}
@ -135,8 +133,7 @@ TraceManager.prototype.getCallStackAt = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
var callStackChangeIndex = util.findLowerBound(stepIndex, this.traceCache.callChanges)
var callStackChange = this.traceCache.callChanges[callStackChangeIndex]
var callStackChange = util.findLowerBoundValue(stepIndex, this.traceCache.callChanges)
if (callStackChange === undefined) return callback('no callstack found', null)
callback(null, this.traceCache.callStack[callStackChange].callStack)
}
@ -161,8 +158,7 @@ TraceManager.prototype.getLastCallChangeSince = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
var callChangeIndex = util.findLowerBound(stepIndex, this.traceCache.callChanges)
var callChange = this.traceCache.callChanges[callChangeIndex]
var callChange = util.findLowerBoundValue(stepIndex, this.traceCache.callChanges)
if (callChange === undefined) {
callback(null, 0)
} else {
@ -208,8 +204,7 @@ TraceManager.prototype.getMemoryAt = function (stepIndex, callback) {
if (check) {
return callback(check, null)
}
var lastChangesIndex = util.findLowerBound(stepIndex, this.traceCache.memoryChanges)
var lastChanges = this.traceCache.memoryChanges[lastChangesIndex]
var lastChanges = util.findLowerBoundValue(stepIndex, this.traceCache.memoryChanges)
if (lastChanges === undefined) return callback('no memory found', null)
callback(null, this.trace[lastChanges].memory)
}

@ -77,15 +77,6 @@ SourceMappingDecoder.prototype.getLinebreakPositions = function (source) {
ret.push(pos)
}
return ret
/*
var lines = source.split('\n')
var currentPos = 0
var ret = []
for (var k in lines) {
ret.push(currentPos + lines[k].length)
currentPos += lines[k].length + 1
}
return ret*/
}
/**
@ -93,7 +84,7 @@ SourceMappingDecoder.prototype.getLinebreakPositions = function (source) {
*
* @param {Object} sourceLocation - object containing attributes {source} and {length}
* @param {Array} lineBreakPositions - array returned by the function 'getLinebreakPositions'
* @@return {Object} returns an object {start: {line, column}, end: {line, column}}
* @@return {Object} returns an object {start: {line, column}, end: {line, column}} (line count start at 0)
*/
SourceMappingDecoder.prototype.convertOffsetToLineColumn = function (sourceLocation, lineBreakPositions) {
if (sourceLocation.start >= 0 && sourceLocation.length >= 0) {
@ -109,22 +100,15 @@ SourceMappingDecoder.prototype.convertOffsetToLineColumn = function (sourceLocat
}
}
function convertFromCharPosition (pos, lineColumnLayout) {
var lowerBound = util.findLowerBound(pos, lineColumnLayout)
var line
if (lowerBound === 0) {
line = 0
} else if (lowerBound < pos) {
line = lowerBound + 1
} else {
line = lowerBound
}
var column
if (lowerBound === 0) {
column = pos
} else {
column = pos - 1 - lineColumnLayout[line - 1]
function convertFromCharPosition (pos, lineBreakPositions) {
var line = util.findLowerBound(pos, lineBreakPositions)
if (lineBreakPositions[line] < pos) {
line = line + 1
}
var column = lineBreakPositions[line - 1] ? (pos - lineBreakPositions[line - 1] - 1) : pos
return {
line: line,
column: column

Loading…
Cancel
Save