Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
baas-ide
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
guxukai
baas-ide
Commits
fb3aeb91
Commit
fb3aeb91
authored
Oct 05, 2017
by
yann300
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
use solidity jsonio
parent
b90bca18
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
97 additions
and
52 deletions
+97
-52
sourceLocationTracker.js
src/code/sourceLocationTracker.js
+8
-12
astHelper.js
src/solidity/astHelper.js
+1
-1
solidityProxy.js
src/solidity/solidityProxy.js
+9
-8
astWalker.js
src/util/astWalker.js
+1
-1
internalCallTree.js
src/util/internalCallTree.js
+3
-0
sourceMappingDecoder.js
src/util/sourceMappingDecoder.js
+2
-2
astwalker.js
test/astwalker.js
+2
-2
helpers.js
test/helpers.js
+26
-0
ast.js
test/resources/ast.js
+1
-1
decodeInfo.js
test/solidity/decodeInfo.js
+13
-10
localDecoder.js
test/solidity/localDecoder.js
+13
-8
int.js
test/solidity/localsTests/int.js
+3
-0
storageDecoder.js
test/solidity/storageDecoder.js
+7
-3
storageLocation.js
test/solidity/storageLocation.js
+3
-1
sourceMappingDecoder.js
test/sourceMappingDecoder.js
+5
-3
No files found.
src/code/sourceLocationTracker.js
View file @
fb3aeb91
...
@@ -57,19 +57,15 @@ SourceLocationTracker.prototype.getSourceLocationFromVMTraceIndex = function (ad
...
@@ -57,19 +57,15 @@ SourceLocationTracker.prototype.getSourceLocationFromVMTraceIndex = function (ad
})
})
}
}
/**
* backwards compatibility - attribute name will certainly be changed
*/
function
srcmapRuntime
(
contract
)
{
return
contract
.
srcmapRuntime
?
contract
.
srcmapRuntime
:
contract
[
'srcmap-runtime'
]
}
function
getSourceMap
(
address
,
code
,
contracts
)
{
function
getSourceMap
(
address
,
code
,
contracts
)
{
var
isCreation
=
helper
.
isContractCreation
(
address
)
var
isCreation
=
helper
.
isContractCreation
(
address
)
var
byteProp
=
isCreation
?
'bytecode'
:
'runtimeBytecode'
var
bytes
for
(
var
k
in
contracts
)
{
for
(
var
file
in
contracts
)
{
if
(
util
.
compareByteCode
(
code
,
'0x'
+
contracts
[
k
][
byteProp
]))
{
for
(
var
contract
in
contracts
[
file
])
{
return
isCreation
?
contracts
[
k
].
srcmap
:
srcmapRuntime
(
contracts
[
k
])
bytes
=
isCreation
?
contracts
[
file
][
contract
].
evm
.
bytecode
.
object
:
contracts
[
file
][
contract
].
evm
.
deployedBytecode
.
object
if
(
util
.
compareByteCode
(
code
,
'0x'
+
bytes
))
{
return
isCreation
?
contracts
[
file
][
contract
].
evm
.
bytecode
.
sourceMap
:
contracts
[
file
][
contract
].
evm
.
deployedBytecode
.
sourceMap
}
}
}
}
}
return
null
return
null
...
@@ -82,7 +78,7 @@ function extractSourceMap (codeManager, address, contracts, cb) {
...
@@ -82,7 +78,7 @@ function extractSourceMap (codeManager, address, contracts, cb) {
if
(
sourceMap
)
{
if
(
sourceMap
)
{
cb
(
null
,
sourceMap
)
cb
(
null
,
sourceMap
)
}
else
{
}
else
{
cb
(
'no s
rc
map associated with the code '
+
address
)
cb
(
'no s
ource
map associated with the code '
+
address
)
}
}
}
else
{
}
else
{
cb
(
error
)
cb
(
error
)
...
...
src/solidity/astHelper.js
View file @
fb3aeb91
...
@@ -15,7 +15,7 @@ function extractContractDefinitions (sourcesList) {
...
@@ -15,7 +15,7 @@ function extractContractDefinitions (sourcesList) {
}
}
var
walker
=
new
AstWalker
()
var
walker
=
new
AstWalker
()
for
(
var
k
in
sourcesList
)
{
for
(
var
k
in
sourcesList
)
{
walker
.
walk
(
sourcesList
[
k
].
AST
,
{
'ContractDefinition'
:
function
(
node
)
{
walker
.
walk
(
sourcesList
[
k
].
legacy
AST
,
{
'ContractDefinition'
:
function
(
node
)
{
ret
.
contractsById
[
node
.
id
]
=
node
ret
.
contractsById
[
node
.
id
]
=
node
ret
.
sourcesByContract
[
node
.
id
]
=
k
ret
.
sourcesByContract
[
node
.
id
]
=
k
ret
.
contractsByName
[
k
+
':'
+
node
.
attributes
.
name
]
=
node
ret
.
contractsByName
[
k
+
':'
+
node
.
attributes
.
name
]
=
node
...
...
src/solidity/solidityProxy.js
View file @
fb3aeb91
...
@@ -19,7 +19,6 @@ class SolidityProxy {
...
@@ -19,7 +19,6 @@ class SolidityProxy {
*/
*/
reset
(
compilationResult
)
{
reset
(
compilationResult
)
{
this
.
sources
=
compilationResult
.
sources
this
.
sources
=
compilationResult
.
sources
this
.
sourceList
=
compilationResult
.
sourceList
this
.
contracts
=
compilationResult
.
contracts
this
.
contracts
=
compilationResult
.
contracts
this
.
cache
.
reset
()
this
.
cache
.
reset
()
}
}
...
@@ -113,9 +112,9 @@ class SolidityProxy {
...
@@ -113,9 +112,9 @@ class SolidityProxy {
* @return {Object} - AST of the current file
* @return {Object} - AST of the current file
*/
*/
ast
(
sourceLocation
)
{
ast
(
sourceLocation
)
{
var
file
=
this
.
sourceList
[
sourceLocation
.
file
]
var
file
=
this
.
fileNameFromIndex
(
sourceLocation
.
file
)
if
(
this
.
sources
[
file
])
{
if
(
this
.
sources
[
file
])
{
return
this
.
sources
[
file
].
AST
return
this
.
sources
[
file
].
legacy
AST
}
else
{
}
else
{
console
.
log
(
'AST not found for file id '
+
sourceLocation
.
file
)
console
.
log
(
'AST not found for file id '
+
sourceLocation
.
file
)
return
null
return
null
...
@@ -129,16 +128,18 @@ class SolidityProxy {
...
@@ -129,16 +128,18 @@ class SolidityProxy {
* @return {String} - filename
* @return {String} - filename
*/
*/
fileNameFromIndex
(
index
)
{
fileNameFromIndex
(
index
)
{
return
this
.
sourceList
[
index
]
return
Object
.
keys
(
this
.
contracts
)
[
index
]
}
}
}
}
function
contractNameFromCode
(
contracts
,
code
,
address
)
{
function
contractNameFromCode
(
contracts
,
code
,
address
)
{
var
isCreation
=
traceHelper
.
isContractCreation
(
address
)
var
isCreation
=
traceHelper
.
isContractCreation
(
address
)
var
byteProp
=
isCreation
?
'bytecode'
:
'runtimeBytecode'
for
(
var
file
in
contracts
)
{
for
(
var
k
in
contracts
)
{
for
(
var
contract
in
contracts
[
file
])
{
if
(
util
.
compareByteCode
(
code
,
'0x'
+
contracts
[
k
][
byteProp
]))
{
var
bytecode
=
isCreation
?
contracts
[
file
][
contract
].
evm
.
bytecode
.
object
:
contracts
[
file
][
contract
].
evm
.
deployedBytecode
.
object
return
k
if
(
util
.
compareByteCode
(
code
,
'0x'
+
bytecode
))
{
return
contract
}
}
}
}
}
return
null
return
null
...
...
src/util/astWalker.js
View file @
fb3aeb91
...
@@ -39,7 +39,7 @@ AstWalker.prototype.walk = function (ast, callback) {
...
@@ -39,7 +39,7 @@ AstWalker.prototype.walk = function (ast, callback) {
AstWalker
.
prototype
.
walkAstList
=
function
(
sourcesList
,
callback
)
{
AstWalker
.
prototype
.
walkAstList
=
function
(
sourcesList
,
callback
)
{
var
walker
=
new
AstWalker
()
var
walker
=
new
AstWalker
()
for
(
var
k
in
sourcesList
)
{
for
(
var
k
in
sourcesList
)
{
walker
.
walk
(
sourcesList
[
k
].
AST
,
callback
)
walker
.
walk
(
sourcesList
[
k
].
legacy
AST
,
callback
)
}
}
}
}
...
...
src/util/internalCallTree.js
View file @
fb3aeb91
...
@@ -40,6 +40,9 @@ class InternalCallTree {
...
@@ -40,6 +40,9 @@ class InternalCallTree {
createReducedTrace
(
this
,
traceManager
.
trace
.
length
-
1
)
createReducedTrace
(
this
,
traceManager
.
trace
.
length
-
1
)
this
.
event
.
trigger
(
'callTreeReady'
,
[
this
.
scopes
,
this
.
scopeStarts
])
this
.
event
.
trigger
(
'callTreeReady'
,
[
this
.
scopes
,
this
.
scopeStarts
])
}
}
},
(
reason
)
=>
{
console
.
log
(
'analyzing trace falls '
+
reason
)
this
.
event
.
trigger
(
'callTreeNotReady'
,
[
reason
])
})
})
}
}
})
})
...
...
src/util/sourceMappingDecoder.js
View file @
fb3aeb91
...
@@ -161,7 +161,7 @@ function findNodeAtSourceLocation (astNodeType, sourceLocation, ast) {
...
@@ -161,7 +161,7 @@ function findNodeAtSourceLocation (astNodeType, sourceLocation, ast) {
return
false
return
false
}
}
}
}
astWalker
.
walk
(
ast
.
AST
,
callback
)
astWalker
.
walk
(
ast
.
legacy
AST
,
callback
)
return
found
return
found
}
}
...
@@ -184,7 +184,7 @@ function nodesAtPosition (astNodeType, position, ast) {
...
@@ -184,7 +184,7 @@ function nodesAtPosition (astNodeType, position, ast) {
return
false
return
false
}
}
}
}
astWalker
.
walk
(
ast
.
AST
,
callback
)
astWalker
.
walk
(
ast
.
legacy
AST
,
callback
)
return
found
return
found
}
}
...
...
test/astwalker.js
View file @
fb3aeb91
...
@@ -8,7 +8,7 @@ tape('ASTWalker', function (t) {
...
@@ -8,7 +8,7 @@ tape('ASTWalker', function (t) {
st
.
plan
(
24
)
st
.
plan
(
24
)
var
astwalker
=
new
AstWalker
()
var
astwalker
=
new
AstWalker
()
astwalker
.
walk
(
node
.
ast
.
AST
,
function
(
node
)
{
astwalker
.
walk
(
node
.
ast
.
legacy
AST
,
function
(
node
)
{
if
(
node
.
name
===
'ContractDefinition'
)
{
if
(
node
.
name
===
'ContractDefinition'
)
{
checkContract
(
st
,
node
)
checkContract
(
st
,
node
)
}
}
...
@@ -24,7 +24,7 @@ tape('ASTWalker', function (t) {
...
@@ -24,7 +24,7 @@ tape('ASTWalker', function (t) {
st
.
equal
(
node
.
attributes
.
name
===
'set'
||
node
.
attributes
.
name
===
'get'
,
true
)
st
.
equal
(
node
.
attributes
.
name
===
'set'
||
node
.
attributes
.
name
===
'get'
,
true
)
return
true
return
true
}
}
astwalker
.
walk
(
node
.
ast
.
AST
,
callback
)
astwalker
.
walk
(
node
.
ast
.
legacy
AST
,
callback
)
})
})
})
})
...
...
test/helpers.js
0 → 100644
View file @
fb3aeb91
'use strict'
module
.
exports
=
{
compilerInput
:
(
contracts
)
=>
{
return
JSON
.
stringify
({
language
:
'Solidity'
,
sources
:
{
'test.sol'
:
{
content
:
contracts
}
},
settings
:
{
optimizer
:
{
enabled
:
false
,
runs
:
500
}
},
outputSelection
:
{
'*'
:
{
'*'
:
[
'metadata'
,
'evm.bytecode'
,
'abi'
,
'legacyAST'
,
'metadata'
,
'evm.assembly'
,
'evm.methodIdentifiers'
,
'evm.gasEstimates'
]
}
}
})
}
}
test/resources/ast.js
View file @
fb3aeb91
var
node
=
{}
var
node
=
{}
node
.
ast
=
{
"AST"
:{
"children"
:[{
"attributes"
:{
"fullyImplemented"
:
true
,
"isLibrary"
:
false
,
"linearizedBaseContracts"
:[
5640396
],
"name"
:
"test"
},
"children"
:[{
"attributes"
:{
"name"
:
"x"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5657860
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"21:3:11"
}],
"id"
:
5658100
,
"name"
:
"VariableDeclaration"
,
"src"
:
"21:5:11"
},{
"attributes"
:{
"name"
:
"y"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5658180
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"38:3:11"
}],
"id"
:
5658268
,
"name"
:
"VariableDeclaration"
,
"src"
:
"38:5:11"
},{
"attributes"
:{
"constant"
:
false
,
"name"
:
"set"
,
"public"
:
true
},
"children"
:[{
"children"
:[{
"attributes"
:{
"name"
:
"_x"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5658404
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"68:3:11"
}],
"id"
:
5658492
,
"name"
:
"VariableDeclaration"
,
"src"
:
"68:6:11"
}],
"id"
:
5658572
,
"name"
:
"ParameterList"
,
"src"
:
"67:8:11"
},{
"children"
:[{
"attributes"
:{
"name"
:
"_r"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5658628
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"85:3:11"
}],
"id"
:
5658716
,
"name"
:
"VariableDeclaration"
,
"src"
:
"85:6:11"
}],
"id"
:
5658796
,
"name"
:
"ParameterList"
,
"src"
:
"84:8:11"
},{
"children"
:[{
"children"
:[{
"attributes"
:{
"operator"
:
"="
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"x"
},
"id"
:
5658900
,
"name"
:
"Identifier"
,
"src"
:
"108:1:11"
},{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"_x"
},
"id"
:
5658980
,
"name"
:
"Identifier"
,
"src"
:
"112:2:11"
}],
"id"
:
5657492
,
"name"
:
"Assignment"
,
"src"
:
"108:6:11"
}],
"id"
:
5659028
,
"name"
:
"ExpressionStatement"
,
"src"
:
"108:6:11"
},{
"children"
:[{
"attributes"
:{
"operator"
:
"="
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"y"
},
"id"
:
5659116
,
"name"
:
"Identifier"
,
"src"
:
"125:1:11"
},{
"attributes"
:{
"string"
:
null
,
"type"
:
"int_const 10"
,
"value"
:
"10"
},
"id"
:
5659196
,
"name"
:
"Literal"
,
"src"
:
"129:2:11"
}],
"id"
:
5659252
,
"name"
:
"Assignment"
,
"src"
:
"125:6:11"
}],
"id"
:
5659316
,
"name"
:
"ExpressionStatement"
,
"src"
:
"125:6:11"
},{
"children"
:[{
"attributes"
:{
"operator"
:
"="
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"_r"
},
"id"
:
5659428
,
"name"
:
"Identifier"
,
"src"
:
"141:2:11"
},{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"x"
},
"id"
:
5639308
,
"name"
:
"Identifier"
,
"src"
:
"146:1:11"
}],
"id"
:
5639356
,
"name"
:
"Assignment"
,
"src"
:
"141:6:11"
}],
"id"
:
5639420
,
"name"
:
"ExpressionStatement"
,
"src"
:
"141:6:11"
}],
"id"
:
5639516
,
"name"
:
"Block"
,
"src"
:
"97:57:11"
}],
"id"
:
5639612
,
"name"
:
"FunctionDefinition"
,
"src"
:
"55:99:11"
},{
"attributes"
:{
"constant"
:
false
,
"name"
:
"get"
,
"public"
:
true
},
"children"
:[{
"children"
:[],
"id"
:
5639764
,
"name"
:
"ParameterList"
,
"src"
:
"179:2:11"
},{
"children"
:[{
"attributes"
:{
"name"
:
"x"
,
"type"
:
"uint256"
},
"children"
:[{
"attributes"
:{
"name"
:
"uint"
},
"id"
:
5639820
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"191:4:11"
}],
"id"
:
5639908
,
"name"
:
"VariableDeclaration"
,
"src"
:
"191:6:11"
},{
"attributes"
:{
"name"
:
"y"
,
"type"
:
"uint256"
},
"children"
:[{
"attributes"
:{
"name"
:
"uint"
},
"id"
:
5639988
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"199:4:11"
}],
"id"
:
5640076
,
"name"
:
"VariableDeclaration"
,
"src"
:
"199:6:11"
}],
"id"
:
5640156
,
"name"
:
"ParameterList"
,
"src"
:
"190:16:11"
},{
"children"
:[],
"id"
:
5640212
,
"name"
:
"Block"
,
"src"
:
"212:17:11"
}],
"id"
:
5640276
,
"name"
:
"FunctionDefinition"
,
"src"
:
"167:62:11"
}],
"id"
:
5640396
,
"name"
:
"ContractDefinition"
,
"src"
:
"0:231:11"
}],
"name"
:
"SourceUnit"
}}
node
.
ast
=
{
"
legacy
AST"
:{
"children"
:[{
"attributes"
:{
"fullyImplemented"
:
true
,
"isLibrary"
:
false
,
"linearizedBaseContracts"
:[
5640396
],
"name"
:
"test"
},
"children"
:[{
"attributes"
:{
"name"
:
"x"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5657860
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"21:3:11"
}],
"id"
:
5658100
,
"name"
:
"VariableDeclaration"
,
"src"
:
"21:5:11"
},{
"attributes"
:{
"name"
:
"y"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5658180
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"38:3:11"
}],
"id"
:
5658268
,
"name"
:
"VariableDeclaration"
,
"src"
:
"38:5:11"
},{
"attributes"
:{
"constant"
:
false
,
"name"
:
"set"
,
"public"
:
true
},
"children"
:[{
"children"
:[{
"attributes"
:{
"name"
:
"_x"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5658404
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"68:3:11"
}],
"id"
:
5658492
,
"name"
:
"VariableDeclaration"
,
"src"
:
"68:6:11"
}],
"id"
:
5658572
,
"name"
:
"ParameterList"
,
"src"
:
"67:8:11"
},{
"children"
:[{
"attributes"
:{
"name"
:
"_r"
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"name"
:
"int"
},
"id"
:
5658628
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"85:3:11"
}],
"id"
:
5658716
,
"name"
:
"VariableDeclaration"
,
"src"
:
"85:6:11"
}],
"id"
:
5658796
,
"name"
:
"ParameterList"
,
"src"
:
"84:8:11"
},{
"children"
:[{
"children"
:[{
"attributes"
:{
"operator"
:
"="
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"x"
},
"id"
:
5658900
,
"name"
:
"Identifier"
,
"src"
:
"108:1:11"
},{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"_x"
},
"id"
:
5658980
,
"name"
:
"Identifier"
,
"src"
:
"112:2:11"
}],
"id"
:
5657492
,
"name"
:
"Assignment"
,
"src"
:
"108:6:11"
}],
"id"
:
5659028
,
"name"
:
"ExpressionStatement"
,
"src"
:
"108:6:11"
},{
"children"
:[{
"attributes"
:{
"operator"
:
"="
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"y"
},
"id"
:
5659116
,
"name"
:
"Identifier"
,
"src"
:
"125:1:11"
},{
"attributes"
:{
"string"
:
null
,
"type"
:
"int_const 10"
,
"value"
:
"10"
},
"id"
:
5659196
,
"name"
:
"Literal"
,
"src"
:
"129:2:11"
}],
"id"
:
5659252
,
"name"
:
"Assignment"
,
"src"
:
"125:6:11"
}],
"id"
:
5659316
,
"name"
:
"ExpressionStatement"
,
"src"
:
"125:6:11"
},{
"children"
:[{
"attributes"
:{
"operator"
:
"="
,
"type"
:
"int256"
},
"children"
:[{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"_r"
},
"id"
:
5659428
,
"name"
:
"Identifier"
,
"src"
:
"141:2:11"
},{
"attributes"
:{
"type"
:
"int256"
,
"value"
:
"x"
},
"id"
:
5639308
,
"name"
:
"Identifier"
,
"src"
:
"146:1:11"
}],
"id"
:
5639356
,
"name"
:
"Assignment"
,
"src"
:
"141:6:11"
}],
"id"
:
5639420
,
"name"
:
"ExpressionStatement"
,
"src"
:
"141:6:11"
}],
"id"
:
5639516
,
"name"
:
"Block"
,
"src"
:
"97:57:11"
}],
"id"
:
5639612
,
"name"
:
"FunctionDefinition"
,
"src"
:
"55:99:11"
},{
"attributes"
:{
"constant"
:
false
,
"name"
:
"get"
,
"public"
:
true
},
"children"
:[{
"children"
:[],
"id"
:
5639764
,
"name"
:
"ParameterList"
,
"src"
:
"179:2:11"
},{
"children"
:[{
"attributes"
:{
"name"
:
"x"
,
"type"
:
"uint256"
},
"children"
:[{
"attributes"
:{
"name"
:
"uint"
},
"id"
:
5639820
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"191:4:11"
}],
"id"
:
5639908
,
"name"
:
"VariableDeclaration"
,
"src"
:
"191:6:11"
},{
"attributes"
:{
"name"
:
"y"
,
"type"
:
"uint256"
},
"children"
:[{
"attributes"
:{
"name"
:
"uint"
},
"id"
:
5639988
,
"name"
:
"ElementaryTypeName"
,
"src"
:
"199:4:11"
}],
"id"
:
5640076
,
"name"
:
"VariableDeclaration"
,
"src"
:
"199:6:11"
}],
"id"
:
5640156
,
"name"
:
"ParameterList"
,
"src"
:
"190:16:11"
},{
"children"
:[],
"id"
:
5640212
,
"name"
:
"Block"
,
"src"
:
"212:17:11"
}],
"id"
:
5640276
,
"name"
:
"FunctionDefinition"
,
"src"
:
"167:62:11"
}],
"id"
:
5640396
,
"name"
:
"ContractDefinition"
,
"src"
:
"0:231:11"
}],
"name"
:
"SourceUnit"
}}
node
.
source
=
`contract test {
node
.
source
=
`contract test {
int x;
int x;
...
...
test/solidity/decodeInfo.js
View file @
fb3aeb91
...
@@ -4,12 +4,14 @@ var compiler = require('solc')
...
@@ -4,12 +4,14 @@ var compiler = require('solc')
var
index
=
require
(
'../../src/index'
)
var
index
=
require
(
'../../src/index'
)
var
contracts
=
require
(
'./contracts/miscContracts'
)
var
contracts
=
require
(
'./contracts/miscContracts'
)
var
simplecontracts
=
require
(
'./contracts/simpleContract'
)
var
simplecontracts
=
require
(
'./contracts/simpleContract'
)
var
helpers
=
require
(
'../helpers.js'
)
tape
(
'solidity'
,
function
(
t
)
{
tape
(
'solidity'
,
function
(
t
)
{
t
.
test
(
'astHelper, decodeInfo'
,
function
(
st
)
{
t
.
test
(
'astHelper, decodeInfo'
,
function
(
st
)
{
var
output
=
compiler
.
compile
(
contracts
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
contracts
))
output
=
JSON
.
parse
(
output
)
var
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':contractUint'
,
output
.
sources
)
var
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:contractUint'
,
output
.
sources
)
var
states
=
index
.
solidity
.
astHelper
.
extractStatesDefinitions
(
output
.
sources
)
var
states
=
index
.
solidity
.
astHelper
.
extractStatesDefinitions
(
output
.
sources
)
var
stateDef
=
state
.
stateDefinitions
var
stateDef
=
state
.
stateDefinitions
var
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'contractUint'
)
var
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'contractUint'
)
...
@@ -21,7 +23,7 @@ tape('solidity', function (t) {
...
@@ -21,7 +23,7 @@ tape('solidity', function (t) {
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
4
].
attributes
.
type
,
states
,
'contractUint'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
4
].
attributes
.
type
,
states
,
'contractUint'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
16
,
'bytes16'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
16
,
'bytes16'
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':contractStructAndArray'
,
output
.
sources
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:contractStructAndArray'
,
output
.
sources
)
stateDef
=
state
.
stateDefinitions
stateDef
=
state
.
stateDefinitions
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
1
].
attributes
.
type
,
states
,
'contractStructAndArray'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
1
].
attributes
.
type
,
states
,
'contractStructAndArray'
)
checkDecodeInfo
(
st
,
decodeInfo
,
2
,
32
,
'struct contractStructAndArray.structDef'
)
checkDecodeInfo
(
st
,
decodeInfo
,
2
,
32
,
'struct contractStructAndArray.structDef'
)
...
@@ -30,7 +32,7 @@ tape('solidity', function (t) {
...
@@ -30,7 +32,7 @@ tape('solidity', function (t) {
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
3
].
attributes
.
type
,
states
,
'contractStructAndArray'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
3
].
attributes
.
type
,
states
,
'contractStructAndArray'
)
checkDecodeInfo
(
st
,
decodeInfo
,
2
,
32
,
'bytes12[4]'
)
checkDecodeInfo
(
st
,
decodeInfo
,
2
,
32
,
'bytes12[4]'
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':contractArray'
,
output
.
sources
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:contractArray'
,
output
.
sources
)
stateDef
=
state
.
stateDefinitions
stateDef
=
state
.
stateDefinitions
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'contractArray'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'contractArray'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
32
,
'uint32[5]'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
32
,
'uint32[5]'
)
...
@@ -39,12 +41,12 @@ tape('solidity', function (t) {
...
@@ -39,12 +41,12 @@ tape('solidity', function (t) {
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
2
].
attributes
.
type
,
states
,
'contractArray'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
2
].
attributes
.
type
,
states
,
'contractArray'
)
checkDecodeInfo
(
st
,
decodeInfo
,
4
,
32
,
'int16[][3][][4]'
)
checkDecodeInfo
(
st
,
decodeInfo
,
4
,
32
,
'int16[][3][][4]'
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':contractEnum'
,
output
.
sources
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:contractEnum'
,
output
.
sources
)
stateDef
=
state
.
stateDefinitions
stateDef
=
state
.
stateDefinitions
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
1
].
attributes
.
type
,
states
,
'contractEnum'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
1
].
attributes
.
type
,
states
,
'contractEnum'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
2
,
'enum'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
2
,
'enum'
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':contractSmallVariable'
,
output
.
sources
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:contractSmallVariable'
,
output
.
sources
)
stateDef
=
state
.
stateDefinitions
stateDef
=
state
.
stateDefinitions
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'contractSmallVariable'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'contractSmallVariable'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
1
,
'int8'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
1
,
'int8'
)
...
@@ -59,9 +61,10 @@ tape('solidity', function (t) {
...
@@ -59,9 +61,10 @@ tape('solidity', function (t) {
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
5
].
attributes
.
type
,
states
,
'contractSmallVariable'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
5
].
attributes
.
type
,
states
,
'contractSmallVariable'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
2
,
'int16'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
2
,
'int16'
)
output
=
compiler
.
compile
(
simplecontracts
,
0
)
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
simplecontracts
))
output
=
JSON
.
parse
(
output
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':simpleContract'
,
output
.
sources
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:simpleContract'
,
output
.
sources
)
states
=
index
.
solidity
.
astHelper
.
extractStatesDefinitions
(
output
.
sources
)
states
=
index
.
solidity
.
astHelper
.
extractStatesDefinitions
(
output
.
sources
)
stateDef
=
state
.
stateDefinitions
stateDef
=
state
.
stateDefinitions
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
2
].
attributes
.
type
,
states
,
'simpleContract'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
2
].
attributes
.
type
,
states
,
'simpleContract'
)
...
@@ -71,12 +74,12 @@ tape('solidity', function (t) {
...
@@ -71,12 +74,12 @@ tape('solidity', function (t) {
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
4
].
attributes
.
type
,
states
,
'simpleContract'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
4
].
attributes
.
type
,
states
,
'simpleContract'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
1
,
'enum'
)
checkDecodeInfo
(
st
,
decodeInfo
,
1
,
1
,
'enum'
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
':test2'
,
output
.
sources
)
state
=
index
.
solidity
.
astHelper
.
extractStateDefinitions
(
'
test.sol
:test2'
,
output
.
sources
)
stateDef
=
state
.
stateDefinitions
stateDef
=
state
.
stateDefinitions
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'test1'
)
decodeInfo
=
index
.
solidity
.
decodeInfo
.
parseType
(
stateDef
[
0
].
attributes
.
type
,
states
,
'test1'
)
checkDecodeInfo
(
st
,
decodeInfo
,
0
,
32
,
'struct test1.str'
)
checkDecodeInfo
(
st
,
decodeInfo
,
0
,
32
,
'struct test1.str'
)
state
=
index
.
solidity
.
stateDecoder
.
extractStateVariables
(
':test2'
,
output
.
sources
)
state
=
index
.
solidity
.
stateDecoder
.
extractStateVariables
(
'
test.sol
:test2'
,
output
.
sources
)
checkDecodeInfo
(
st
,
decodeInfo
,
0
,
32
,
'struct test1.str'
)
checkDecodeInfo
(
st
,
decodeInfo
,
0
,
32
,
'struct test1.str'
)
st
.
end
()
st
.
end
()
...
...
test/solidity/localDecoder.js
View file @
fb3aeb91
...
@@ -12,6 +12,7 @@ var intLocalTest = require('./localsTests/int')
...
@@ -12,6 +12,7 @@ var intLocalTest = require('./localsTests/int')
var
miscLocalTest
=
require
(
'./localsTests/misc'
)
var
miscLocalTest
=
require
(
'./localsTests/misc'
)
var
misc2LocalTest
=
require
(
'./localsTests/misc2'
)
var
misc2LocalTest
=
require
(
'./localsTests/misc2'
)
var
structArrayLocalTest
=
require
(
'./localsTests/structArray'
)
var
structArrayLocalTest
=
require
(
'./localsTests/structArray'
)
var
helpers
=
require
(
'../helpers.js'
)
tape
(
'solidity'
,
function
(
t
)
{
tape
(
'solidity'
,
function
(
t
)
{
t
.
test
(
'local decoder'
,
function
(
st
)
{
t
.
test
(
'local decoder'
,
function
(
st
)
{
...
@@ -47,14 +48,18 @@ function initVM (st, address) {
...
@@ -47,14 +48,18 @@ function initVM (st, address) {
}
}
function
test
(
st
,
vm
,
privateKey
)
{
function
test
(
st
,
vm
,
privateKey
)
{
var
output
=
compiler
.
compile
(
intLocal
.
contract
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
intLocal
.
contract
))
intLocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
':intLocal'
].
bytecode
,
output
,
function
()
{
output
=
JSON
.
parse
(
output
)
output
=
compiler
.
compile
(
miscLocal
.
contract
,
0
)
intLocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
'test.sol'
][
'intLocal'
].
evm
.
bytecode
.
object
,
output
,
function
()
{
miscLocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
':miscLocal'
].
bytecode
,
output
,
function
()
{
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
miscLocal
.
contract
))
output
=
compiler
.
compile
(
miscLocal
.
contract
,
0
)
output
=
JSON
.
parse
(
output
)
misc2LocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
':miscLocal2'
].
bytecode
,
output
,
function
()
{
miscLocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
'test.sol'
][
'miscLocal'
].
evm
.
bytecode
.
object
,
output
,
function
()
{
output
=
compiler
.
compile
(
structArrayLocal
.
contract
,
0
)
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
miscLocal
.
contract
))
structArrayLocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
':structArrayLocal'
].
bytecode
,
output
,
function
()
{})
output
=
JSON
.
parse
(
output
)
misc2LocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
'test.sol'
][
'miscLocal2'
].
evm
.
bytecode
.
object
,
output
,
function
()
{
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
structArrayLocal
.
contract
))
output
=
JSON
.
parse
(
output
)
structArrayLocalTest
(
st
,
vm
,
privateKey
,
output
.
contracts
[
'test.sol'
][
'structArrayLocal'
].
evm
.
bytecode
.
object
,
output
,
function
()
{})
})
})
})
})
})
})
...
...
test/solidity/localsTests/int.js
View file @
fb3aeb91
...
@@ -29,6 +29,9 @@ module.exports = function (st, vm, privateKey, contractBytecode, compilationResu
...
@@ -29,6 +29,9 @@ module.exports = function (st, vm, privateKey, contractBytecode, compilationResu
callTree
.
event
.
register
(
'callTreeBuildFailed'
,
(
error
)
=>
{
callTree
.
event
.
register
(
'callTreeBuildFailed'
,
(
error
)
=>
{
st
.
fail
(
error
)
st
.
fail
(
error
)
})
})
callTree
.
event
.
register
(
'callTreeNotReady'
,
(
reason
)
=>
{
st
.
fail
(
reason
)
})
callTree
.
event
.
register
(
'callTreeReady'
,
(
scopes
,
scopeStarts
)
=>
{
callTree
.
event
.
register
(
'callTreeReady'
,
(
scopes
,
scopeStarts
)
=>
{
try
{
try
{
st
.
equals
(
scopeStarts
[
0
],
''
)
st
.
equals
(
scopeStarts
[
0
],
''
)
...
...
test/solidity/storageDecoder.js
View file @
fb3aeb91
...
@@ -3,6 +3,7 @@ var tape = require('tape')
...
@@ -3,6 +3,7 @@ var tape = require('tape')
var
compiler
=
require
(
'solc'
)
var
compiler
=
require
(
'solc'
)
var
stateDecoder
=
require
(
'../../src/index'
).
solidity
.
stateDecoder
var
stateDecoder
=
require
(
'../../src/index'
).
solidity
.
stateDecoder
var
MockStorageResolver
=
require
(
'./mockStorageResolver'
)
var
MockStorageResolver
=
require
(
'./mockStorageResolver'
)
var
helpers
=
require
(
'../helpers.js'
)
tape
(
'solidity'
,
function
(
t
)
{
tape
(
'solidity'
,
function
(
t
)
{
t
.
test
(
'storage decoder'
,
function
(
st
)
{
t
.
test
(
'storage decoder'
,
function
(
st
)
{
...
@@ -18,7 +19,8 @@ tape('solidity', function (t) {
...
@@ -18,7 +19,8 @@ tape('solidity', function (t) {
function
testIntStorage
(
st
,
cb
)
{
function
testIntStorage
(
st
,
cb
)
{
var
intStorage
=
require
(
'./contracts/intStorage'
)
var
intStorage
=
require
(
'./contracts/intStorage'
)
var
output
=
compiler
.
compile
(
intStorage
.
contract
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
intStorage
.
contract
))
output
=
JSON
.
parse
(
output
)
var
mockStorageResolver
var
mockStorageResolver
for
(
var
storage
of
[
intStorage
.
fullStorage
,
shrinkStorage
(
intStorage
.
fullStorage
)])
{
for
(
var
storage
of
[
intStorage
.
fullStorage
,
shrinkStorage
(
intStorage
.
fullStorage
)])
{
mockStorageResolver
=
new
MockStorageResolver
(
storage
)
mockStorageResolver
=
new
MockStorageResolver
(
storage
)
...
@@ -64,7 +66,8 @@ function testIntStorage (st, cb) {
...
@@ -64,7 +66,8 @@ function testIntStorage (st, cb) {
function
testByteStorage
(
st
,
cb
)
{
function
testByteStorage
(
st
,
cb
)
{
var
byteStorage
=
require
(
'./contracts/byteStorage'
)
var
byteStorage
=
require
(
'./contracts/byteStorage'
)
var
output
=
compiler
.
compile
(
byteStorage
.
contract
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
byteStorage
.
contract
))
output
=
JSON
.
parse
(
output
)
var
mockStorageResolver
var
mockStorageResolver
for
(
var
storage
of
[
byteStorage
.
storage
,
shrinkStorage
(
byteStorage
.
storage
)])
{
for
(
var
storage
of
[
byteStorage
.
storage
,
shrinkStorage
(
byteStorage
.
storage
)])
{
mockStorageResolver
=
new
MockStorageResolver
(
storage
)
mockStorageResolver
=
new
MockStorageResolver
(
storage
)
...
@@ -176,7 +179,8 @@ function shrinkStorage (storage) {
...
@@ -176,7 +179,8 @@ function shrinkStorage (storage) {
function
testStructArrayStorage
(
st
,
cb
)
{
function
testStructArrayStorage
(
st
,
cb
)
{
var
structArrayStorage
=
require
(
'./contracts/structArrayStorage'
)
var
structArrayStorage
=
require
(
'./contracts/structArrayStorage'
)
var
output
=
compiler
.
compile
(
structArrayStorage
.
contract
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
structArrayStorage
.
contract
))
output
=
JSON
.
parse
(
output
)
var
mockStorageResolver
=
new
MockStorageResolver
(
structArrayStorage
.
storage
)
var
mockStorageResolver
=
new
MockStorageResolver
(
structArrayStorage
.
storage
)
stateDecoder
.
solidityState
(
mockStorageResolver
,
output
.
sources
,
'structArrayStorage'
).
then
((
decoded
)
=>
{
stateDecoder
.
solidityState
(
mockStorageResolver
,
output
.
sources
,
'structArrayStorage'
).
then
((
decoded
)
=>
{
st
.
equal
(
decoded
[
'intStructDec'
].
value
[
'i8'
].
value
,
'32'
)
st
.
equal
(
decoded
[
'intStructDec'
].
value
[
'i8'
].
value
,
'32'
)
...
...
test/solidity/storageLocation.js
View file @
fb3aeb91
...
@@ -3,10 +3,12 @@ var tape = require('tape')
...
@@ -3,10 +3,12 @@ var tape = require('tape')
var
compiler
=
require
(
'solc'
)
var
compiler
=
require
(
'solc'
)
var
index
=
require
(
'../../src/index'
)
var
index
=
require
(
'../../src/index'
)
var
contracts
=
require
(
'./contracts/miscContracts'
)
var
contracts
=
require
(
'./contracts/miscContracts'
)
var
helpers
=
require
(
'../helpers.js'
)
tape
(
'solidity'
,
function
(
t
)
{
tape
(
'solidity'
,
function
(
t
)
{
t
.
test
(
'storage location'
,
function
(
st
)
{
t
.
test
(
'storage location'
,
function
(
st
)
{
var
output
=
compiler
.
compile
(
contracts
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
contracts
))
output
=
JSON
.
parse
(
output
)
var
stateDec
=
index
.
solidity
.
stateDecoder
.
extractStateVariables
(
'contractUint'
,
output
.
sources
)
var
stateDec
=
index
.
solidity
.
stateDecoder
.
extractStateVariables
(
'contractUint'
,
output
.
sources
)
checkLocation
(
st
,
stateDec
[
0
].
storagelocation
,
0
,
0
)
checkLocation
(
st
,
stateDec
[
0
].
storagelocation
,
0
,
0
)
checkLocation
(
st
,
stateDec
[
1
].
storagelocation
,
1
,
0
)
checkLocation
(
st
,
stateDec
[
1
].
storagelocation
,
1
,
0
)
...
...
test/sourceMappingDecoder.js
View file @
fb3aeb91
...
@@ -2,14 +2,16 @@
...
@@ -2,14 +2,16 @@
var
tape
=
require
(
'tape'
)
var
tape
=
require
(
'tape'
)
var
SourceMappingDecoder
=
require
(
'../src/util/sourceMappingDecoder'
)
var
SourceMappingDecoder
=
require
(
'../src/util/sourceMappingDecoder'
)
var
compiler
=
require
(
'solc'
)
var
compiler
=
require
(
'solc'
)
var
helpers
=
require
(
'./helpers.js'
)
tape
(
'SourceMappingDecoder'
,
function
(
t
)
{
tape
(
'SourceMappingDecoder'
,
function
(
t
)
{
t
.
test
(
'SourceMappingDecoder.findNodeAtInstructionIndex'
,
function
(
st
)
{
t
.
test
(
'SourceMappingDecoder.findNodeAtInstructionIndex'
,
function
(
st
)
{
var
output
=
compiler
.
compile
(
contracts
,
0
)
var
output
=
compiler
.
compileStandardWrapper
(
helpers
.
compilerInput
(
contracts
))
output
=
JSON
.
parse
(
output
)
var
sourceMappingDecoder
=
new
SourceMappingDecoder
()
var
sourceMappingDecoder
=
new
SourceMappingDecoder
()
var
node
=
sourceMappingDecoder
.
findNodeAtInstructionIndex
(
'FunctionDefinition'
,
2
,
output
.
contracts
[
'
:test'
].
srcmapRuntime
,
output
.
sources
[
'
'
])
var
node
=
sourceMappingDecoder
.
findNodeAtInstructionIndex
(
'FunctionDefinition'
,
2
,
output
.
contracts
[
'
test.sol'
][
'test'
].
evm
.
deployedBytecode
.
sourceMap
,
output
.
sources
[
'test.sol
'
])
st
.
equal
(
node
,
null
)
st
.
equal
(
node
,
null
)
node
=
sourceMappingDecoder
.
findNodeAtInstructionIndex
(
'FunctionDefinition'
,
80
,
output
.
contracts
[
'
:test'
].
srcmapRuntime
,
output
.
sources
[
'
'
])
node
=
sourceMappingDecoder
.
findNodeAtInstructionIndex
(
'FunctionDefinition'
,
80
,
output
.
contracts
[
'
test.sol'
][
'test'
].
evm
.
deployedBytecode
.
sourceMap
,
output
.
sources
[
'test.sol
'
])
st
.
notEqual
(
node
,
null
)
st
.
notEqual
(
node
,
null
)
if
(
node
)
{
if
(
node
)
{
st
.
equal
(
node
.
attributes
.
name
,
'f1'
)
st
.
equal
(
node
.
attributes
.
name
,
'f1'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment