diff options
author | Alex Browne <stephenalexbrowne@gmail.com> | 2018-06-22 04:14:13 +0800 |
---|---|---|
committer | Alex Browne <stephenalexbrowne@gmail.com> | 2018-06-22 04:14:13 +0800 |
commit | 4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7 (patch) | |
tree | aa612dce78d93d4084091485254c350d556757e8 /packages/sol-cov/src/revert_trace_subprovider.ts | |
parent | 88500e37146dc9152050fdd810f9f3c3cc5faf9f (diff) | |
download | dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.gz dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.tar.zst dexon-0x-contracts-4cf331067bfa2a99ea39551f9fb2ad330b1c3fb7.zip |
Fix some bugs in sol-cov
Diffstat (limited to 'packages/sol-cov/src/revert_trace_subprovider.ts')
-rw-r--r-- | packages/sol-cov/src/revert_trace_subprovider.ts | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/packages/sol-cov/src/revert_trace_subprovider.ts b/packages/sol-cov/src/revert_trace_subprovider.ts index fb2215eaa..fed305bd3 100644 --- a/packages/sol-cov/src/revert_trace_subprovider.ts +++ b/packages/sol-cov/src/revert_trace_subprovider.ts @@ -75,6 +75,7 @@ export class RevertTraceSubprovider extends TraceCollectionSubprovider { } const bytecodeHex = stripHexPrefix(bytecode); const sourceMap = isContractCreation ? contractData.sourceMap : contractData.sourceMapRuntime; + const pcToSourceRange = parseSourceMap( contractData.sourceCodes, sourceMap, @@ -88,16 +89,19 @@ export class RevertTraceSubprovider extends TraceCollectionSubprovider { // actually happens in assembly). In that case, we want to keep // searching backwards by decrementing the pc until we find a // mapped source range. - while (_.isUndefined(sourceRange)) { + while (_.isUndefined(sourceRange) && pc > 0) { sourceRange = pcToSourceRange[pc]; pc -= 1; - if (pc <= 0) { - this._logger.warn( - `could not find matching sourceRange for structLog: ${evmCallStackEntry.structLog}`, - ); - continue; - } } + if (_.isUndefined(sourceRange)) { + this._logger.warn( + `could not find matching sourceRange for structLog: ${JSON.stringify( + _.omit(evmCallStackEntry.structLog, 'stack'), + )}`, + ); + continue; + } + const fileIndex = contractData.sources.indexOf(sourceRange.fileName); const sourceSnippet = getSourceRangeSnippet(sourceRange, contractData.sourceCodes[fileIndex]); if (sourceSnippet !== null) { |