Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
8541ddbd
Unverified
Commit
8541ddbd
authored
May 23, 2022
by
Martin Holst Swende
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
common/compiler, cmd/abigen: remove solc/vyper compiler integration
parent
59ac229f
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
3 additions
and
485 deletions
+3
-485
main.go
cmd/abigen/main.go
+2
-50
helpers.go
common/compiler/helpers.go
+0
-20
solidity.go
common/compiler/solidity.go
+1
-116
solidity_test.go
common/compiler/solidity_test.go
+0
-78
test.v.py
common/compiler/test.v.py
+0
-3
test_bad.v.py
common/compiler/test_bad.v.py
+0
-3
vyper.go
common/compiler/vyper.go
+0
-144
vyper_test.go
common/compiler/vyper_test.go
+0
-71
No files found.
cmd/abigen/main.go
View file @
8541ddbd
...
@@ -21,11 +21,9 @@ import (
...
@@ -21,11 +21,9 @@ import (
"fmt"
"fmt"
"io"
"io"
"os"
"os"
"path/filepath"
"regexp"
"regexp"
"strings"
"strings"
"github.com/ethereum/go-ethereum/accounts/abi"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/accounts/abi/bind"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/common/compiler"
"github.com/ethereum/go-ethereum/common/compiler"
...
@@ -59,24 +57,6 @@ var (
...
@@ -59,24 +57,6 @@ var (
Name
:
"combined-json"
,
Name
:
"combined-json"
,
Usage
:
"Path to the combined-json file generated by compiler"
,
Usage
:
"Path to the combined-json file generated by compiler"
,
}
}
solFlag
=
cli
.
StringFlag
{
Name
:
"sol"
,
Usage
:
"Path to the Ethereum contract Solidity source to build and bind"
,
}
solcFlag
=
cli
.
StringFlag
{
Name
:
"solc"
,
Usage
:
"Solidity compiler to use if source builds are requested"
,
Value
:
"solc"
,
}
vyFlag
=
cli
.
StringFlag
{
Name
:
"vy"
,
Usage
:
"Path to the Ethereum contract Vyper source to build and bind"
,
}
vyperFlag
=
cli
.
StringFlag
{
Name
:
"vyper"
,
Usage
:
"Vyper compiler to use if source builds are requested"
,
Value
:
"vyper"
,
}
excFlag
=
cli
.
StringFlag
{
excFlag
=
cli
.
StringFlag
{
Name
:
"exc"
,
Name
:
"exc"
,
Usage
:
"Comma separated types to exclude from binding"
,
Usage
:
"Comma separated types to exclude from binding"
,
...
@@ -107,10 +87,6 @@ func init() {
...
@@ -107,10 +87,6 @@ func init() {
binFlag
,
binFlag
,
typeFlag
,
typeFlag
,
jsonFlag
,
jsonFlag
,
solFlag
,
solcFlag
,
vyFlag
,
vyperFlag
,
excFlag
,
excFlag
,
pkgFlag
,
pkgFlag
,
outFlag
,
outFlag
,
...
@@ -122,7 +98,7 @@ func init() {
...
@@ -122,7 +98,7 @@ func init() {
}
}
func
abigen
(
c
*
cli
.
Context
)
error
{
func
abigen
(
c
*
cli
.
Context
)
error
{
utils
.
CheckExclusive
(
c
,
abiFlag
,
jsonFlag
,
solFlag
,
vyFlag
)
// Only one source can be selected.
utils
.
CheckExclusive
(
c
,
abiFlag
,
jsonFlag
)
// Only one source can be selected.
if
c
.
GlobalString
(
pkgFlag
.
Name
)
==
""
{
if
c
.
GlobalString
(
pkgFlag
.
Name
)
==
""
{
utils
.
Fatalf
(
"No destination package specified (--pkg)"
)
utils
.
Fatalf
(
"No destination package specified (--pkg)"
)
}
}
...
@@ -186,33 +162,9 @@ func abigen(c *cli.Context) error {
...
@@ -186,33 +162,9 @@ func abigen(c *cli.Context) error {
for
_
,
kind
:=
range
strings
.
Split
(
c
.
GlobalString
(
excFlag
.
Name
),
","
)
{
for
_
,
kind
:=
range
strings
.
Split
(
c
.
GlobalString
(
excFlag
.
Name
),
","
)
{
exclude
[
strings
.
ToLower
(
kind
)]
=
true
exclude
[
strings
.
ToLower
(
kind
)]
=
true
}
}
var
err
error
var
contracts
map
[
string
]
*
compiler
.
Contract
var
contracts
map
[
string
]
*
compiler
.
Contract
switch
{
if
c
.
GlobalIsSet
(
jsonFlag
.
Name
)
{
case
c
.
GlobalIsSet
(
solFlag
.
Name
)
:
contracts
,
err
=
compiler
.
CompileSolidity
(
c
.
GlobalString
(
solcFlag
.
Name
),
c
.
GlobalString
(
solFlag
.
Name
))
if
err
!=
nil
{
utils
.
Fatalf
(
"Failed to build Solidity contract: %v"
,
err
)
}
case
c
.
GlobalIsSet
(
vyFlag
.
Name
)
:
output
,
err
:=
compiler
.
CompileVyper
(
c
.
GlobalString
(
vyperFlag
.
Name
),
c
.
GlobalString
(
vyFlag
.
Name
))
if
err
!=
nil
{
utils
.
Fatalf
(
"Failed to build Vyper contract: %v"
,
err
)
}
contracts
=
make
(
map
[
string
]
*
compiler
.
Contract
)
for
n
,
contract
:=
range
output
{
name
:=
n
// Sanitize the combined json names to match the
// format expected by solidity.
if
!
strings
.
Contains
(
n
,
":"
)
{
// Remove extra path components
name
=
abi
.
ToCamelCase
(
strings
.
TrimSuffix
(
filepath
.
Base
(
name
),
".vy"
))
}
contracts
[
name
]
=
contract
}
case
c
.
GlobalIsSet
(
jsonFlag
.
Name
)
:
jsonOutput
,
err
:=
os
.
ReadFile
(
c
.
GlobalString
(
jsonFlag
.
Name
))
jsonOutput
,
err
:=
os
.
ReadFile
(
c
.
GlobalString
(
jsonFlag
.
Name
))
if
err
!=
nil
{
if
err
!=
nil
{
utils
.
Fatalf
(
"Failed to read combined-json from compiler: %v"
,
err
)
utils
.
Fatalf
(
"Failed to read combined-json from compiler: %v"
,
err
)
...
...
common/compiler/helpers.go
View file @
8541ddbd
...
@@ -17,14 +17,6 @@
...
@@ -17,14 +17,6 @@
// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
package
compiler
package
compiler
import
(
"bytes"
"os"
"regexp"
)
var
versionRegexp
=
regexp
.
MustCompile
(
`([0-9]+)\.([0-9]+)\.([0-9]+)`
)
// Contract contains information about a compiled contract, alongside its code and runtime code.
// Contract contains information about a compiled contract, alongside its code and runtime code.
type
Contract
struct
{
type
Contract
struct
{
Code
string
`json:"code"`
Code
string
`json:"code"`
...
@@ -51,15 +43,3 @@ type ContractInfo struct {
...
@@ -51,15 +43,3 @@ type ContractInfo struct {
DeveloperDoc
interface
{}
`json:"developerDoc"`
DeveloperDoc
interface
{}
`json:"developerDoc"`
Metadata
string
`json:"metadata"`
Metadata
string
`json:"metadata"`
}
}
func
slurpFiles
(
files
[]
string
)
(
string
,
error
)
{
var
concat
bytes
.
Buffer
for
_
,
file
:=
range
files
{
content
,
err
:=
os
.
ReadFile
(
file
)
if
err
!=
nil
{
return
""
,
err
}
concat
.
Write
(
content
)
}
return
concat
.
String
(),
nil
}
common/compiler/solidity.go
View file @
8541ddbd
...
@@ -14,26 +14,14 @@
...
@@ -14,26 +14,14 @@
// You should have received a copy of the GNU Lesser General Public License
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
// Package compiler wraps the
Solidity and Vyper compiler executables (solc; vyper)
.
// Package compiler wraps the
ABI compilation outputs
.
package
compiler
package
compiler
import
(
import
(
"bytes"
"encoding/json"
"encoding/json"
"errors"
"fmt"
"fmt"
"os/exec"
"strconv"
"strings"
)
)
// Solidity contains information about the solidity compiler.
type
Solidity
struct
{
Path
,
Version
,
FullVersion
string
Major
,
Minor
,
Patch
int
ExtraAllowedPath
[]
string
}
// --combined-output format
// --combined-output format
type
solcOutput
struct
{
type
solcOutput
struct
{
Contracts
map
[
string
]
struct
{
Contracts
map
[
string
]
struct
{
...
@@ -59,109 +47,6 @@ type solcOutputV8 struct {
...
@@ -59,109 +47,6 @@ type solcOutputV8 struct {
Version
string
Version
string
}
}
func
(
s
*
Solidity
)
allowedPaths
()
string
{
paths
:=
[]
string
{
"."
,
"./"
,
"../"
}
// default to support relative paths
if
len
(
s
.
ExtraAllowedPath
)
>
0
{
paths
=
append
(
paths
,
s
.
ExtraAllowedPath
...
)
}
return
strings
.
Join
(
paths
,
", "
)
}
func
(
s
*
Solidity
)
makeArgs
()
[]
string
{
p
:=
[]
string
{
"--combined-json"
,
"bin,bin-runtime,srcmap,srcmap-runtime,abi,userdoc,devdoc"
,
"--optimize"
,
// code optimizer switched on
"--allow-paths"
,
s
.
allowedPaths
(),
}
if
s
.
Major
>
0
||
s
.
Minor
>
4
||
s
.
Patch
>
6
{
p
[
1
]
+=
",metadata,hashes"
}
return
p
}
// SolidityVersion runs solc and parses its version output.
func
SolidityVersion
(
solc
string
)
(
*
Solidity
,
error
)
{
if
solc
==
""
{
solc
=
"solc"
}
var
out
bytes
.
Buffer
cmd
:=
exec
.
Command
(
solc
,
"--version"
)
cmd
.
Stdout
=
&
out
err
:=
cmd
.
Run
()
if
err
!=
nil
{
return
nil
,
err
}
matches
:=
versionRegexp
.
FindStringSubmatch
(
out
.
String
())
if
len
(
matches
)
!=
4
{
return
nil
,
fmt
.
Errorf
(
"can't parse solc version %q"
,
out
.
String
())
}
s
:=
&
Solidity
{
Path
:
cmd
.
Path
,
FullVersion
:
out
.
String
(),
Version
:
matches
[
0
]}
if
s
.
Major
,
err
=
strconv
.
Atoi
(
matches
[
1
]);
err
!=
nil
{
return
nil
,
err
}
if
s
.
Minor
,
err
=
strconv
.
Atoi
(
matches
[
2
]);
err
!=
nil
{
return
nil
,
err
}
if
s
.
Patch
,
err
=
strconv
.
Atoi
(
matches
[
3
]);
err
!=
nil
{
return
nil
,
err
}
return
s
,
nil
}
// CompileSolidityString builds and returns all the contracts contained within a source string.
func
CompileSolidityString
(
solc
,
source
string
)
(
map
[
string
]
*
Contract
,
error
)
{
if
len
(
source
)
==
0
{
return
nil
,
errors
.
New
(
"solc: empty source string"
)
}
s
,
err
:=
SolidityVersion
(
solc
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
CompileSource
(
source
)
}
// CompileSolidity compiles all given Solidity source files.
func
CompileSolidity
(
solc
string
,
sourcefiles
...
string
)
(
map
[
string
]
*
Contract
,
error
)
{
if
len
(
sourcefiles
)
==
0
{
return
nil
,
errors
.
New
(
"solc: no source files"
)
}
s
,
err
:=
SolidityVersion
(
solc
)
if
err
!=
nil
{
return
nil
,
err
}
return
s
.
CompileFiles
(
sourcefiles
...
)
}
// CompileSource builds and returns all the contracts contained within a source string.
func
(
s
*
Solidity
)
CompileSource
(
source
string
)
(
map
[
string
]
*
Contract
,
error
)
{
args
:=
append
(
s
.
makeArgs
(),
"--"
)
cmd
:=
exec
.
Command
(
s
.
Path
,
append
(
args
,
"-"
)
...
)
cmd
.
Stdin
=
strings
.
NewReader
(
source
)
return
s
.
run
(
cmd
,
source
)
}
// CompileFiles compiles all given Solidity source files.
func
(
s
*
Solidity
)
CompileFiles
(
sourcefiles
...
string
)
(
map
[
string
]
*
Contract
,
error
)
{
source
,
err
:=
slurpFiles
(
sourcefiles
)
if
err
!=
nil
{
return
nil
,
err
}
args
:=
append
(
s
.
makeArgs
(),
"--"
)
cmd
:=
exec
.
Command
(
s
.
Path
,
append
(
args
,
sourcefiles
...
)
...
)
return
s
.
run
(
cmd
,
source
)
}
func
(
s
*
Solidity
)
run
(
cmd
*
exec
.
Cmd
,
source
string
)
(
map
[
string
]
*
Contract
,
error
)
{
var
stderr
,
stdout
bytes
.
Buffer
cmd
.
Stderr
=
&
stderr
cmd
.
Stdout
=
&
stdout
if
err
:=
cmd
.
Run
();
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"solc: %v
\n
%s"
,
err
,
stderr
.
Bytes
())
}
return
ParseCombinedJSON
(
stdout
.
Bytes
(),
source
,
s
.
Version
,
s
.
Version
,
strings
.
Join
(
s
.
makeArgs
(),
" "
))
}
// ParseCombinedJSON takes the direct output of a solc --combined-output run and
// ParseCombinedJSON takes the direct output of a solc --combined-output run and
// parses it into a map of string contract name to Contract structs. The
// parses it into a map of string contract name to Contract structs. The
// provided source, language and compiler version, and compiler options are all
// provided source, language and compiler version, and compiler options are all
...
...
common/compiler/solidity_test.go
deleted
100644 → 0
View file @
59ac229f
// Copyright 2015 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
compiler
import
(
"os/exec"
"testing"
)
const
(
testSource
=
`
pragma solidity >0.0.0;
contract test {
/// @notice Will multiply `
+
"`a`"
+
` by 7.
function multiply(uint a) public returns(uint d) {
return a * 7;
}
}
`
)
func
skipWithoutSolc
(
t
*
testing
.
T
)
{
if
_
,
err
:=
exec
.
LookPath
(
"solc"
);
err
!=
nil
{
t
.
Skip
(
err
)
}
}
func
TestSolidityCompiler
(
t
*
testing
.
T
)
{
skipWithoutSolc
(
t
)
contracts
,
err
:=
CompileSolidityString
(
""
,
testSource
)
if
err
!=
nil
{
t
.
Fatalf
(
"error compiling source. result %v: %v"
,
contracts
,
err
)
}
if
len
(
contracts
)
!=
1
{
t
.
Errorf
(
"one contract expected, got %d"
,
len
(
contracts
))
}
c
,
ok
:=
contracts
[
"test"
]
if
!
ok
{
c
,
ok
=
contracts
[
"<stdin>:test"
]
if
!
ok
{
t
.
Fatal
(
"info for contract 'test' not present in result"
)
}
}
if
c
.
Code
==
""
{
t
.
Error
(
"empty code"
)
}
if
c
.
Info
.
Source
!=
testSource
{
t
.
Error
(
"wrong source"
)
}
if
c
.
Info
.
CompilerVersion
==
""
{
t
.
Error
(
"empty version"
)
}
}
func
TestSolidityCompileError
(
t
*
testing
.
T
)
{
skipWithoutSolc
(
t
)
contracts
,
err
:=
CompileSolidityString
(
""
,
testSource
[
4
:
])
if
err
==
nil
{
t
.
Errorf
(
"error expected compiling source. got none. result %v"
,
contracts
)
}
t
.
Logf
(
"error: %v"
,
err
)
}
common/compiler/test.v.py
deleted
100644 → 0
View file @
59ac229f
@
public
def
test
():
hello
:
int128
common/compiler/test_bad.v.py
deleted
100644 → 0
View file @
59ac229f
lic
def
test
():
hello
:
int128
common/compiler/vyper.go
deleted
100644 → 0
View file @
59ac229f
// Copyright 2019 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
// Package compiler wraps the Solidity and Vyper compiler executables (solc; vyper).
package
compiler
import
(
"bytes"
"encoding/json"
"errors"
"fmt"
"os/exec"
"strconv"
"strings"
)
// Vyper contains information about the vyper compiler.
type
Vyper
struct
{
Path
,
Version
,
FullVersion
string
Major
,
Minor
,
Patch
int
}
func
(
s
*
Vyper
)
makeArgs
()
[]
string
{
p
:=
[]
string
{
"-f"
,
"combined_json"
,
}
return
p
}
// VyperVersion runs vyper and parses its version output.
func
VyperVersion
(
vyper
string
)
(
*
Vyper
,
error
)
{
if
vyper
==
""
{
vyper
=
"vyper"
}
var
out
bytes
.
Buffer
cmd
:=
exec
.
Command
(
vyper
,
"--version"
)
cmd
.
Stdout
=
&
out
err
:=
cmd
.
Run
()
if
err
!=
nil
{
return
nil
,
err
}
matches
:=
versionRegexp
.
FindStringSubmatch
(
out
.
String
())
if
len
(
matches
)
!=
4
{
return
nil
,
fmt
.
Errorf
(
"can't parse vyper version %q"
,
out
.
String
())
}
s
:=
&
Vyper
{
Path
:
cmd
.
Path
,
FullVersion
:
out
.
String
(),
Version
:
matches
[
0
]}
if
s
.
Major
,
err
=
strconv
.
Atoi
(
matches
[
1
]);
err
!=
nil
{
return
nil
,
err
}
if
s
.
Minor
,
err
=
strconv
.
Atoi
(
matches
[
2
]);
err
!=
nil
{
return
nil
,
err
}
if
s
.
Patch
,
err
=
strconv
.
Atoi
(
matches
[
3
]);
err
!=
nil
{
return
nil
,
err
}
return
s
,
nil
}
// CompileVyper compiles all given Vyper source files.
func
CompileVyper
(
vyper
string
,
sourcefiles
...
string
)
(
map
[
string
]
*
Contract
,
error
)
{
if
len
(
sourcefiles
)
==
0
{
return
nil
,
errors
.
New
(
"vyper: no source files"
)
}
source
,
err
:=
slurpFiles
(
sourcefiles
)
if
err
!=
nil
{
return
nil
,
err
}
s
,
err
:=
VyperVersion
(
vyper
)
if
err
!=
nil
{
return
nil
,
err
}
args
:=
s
.
makeArgs
()
cmd
:=
exec
.
Command
(
s
.
Path
,
append
(
args
,
sourcefiles
...
)
...
)
return
s
.
run
(
cmd
,
source
)
}
func
(
s
*
Vyper
)
run
(
cmd
*
exec
.
Cmd
,
source
string
)
(
map
[
string
]
*
Contract
,
error
)
{
var
stderr
,
stdout
bytes
.
Buffer
cmd
.
Stderr
=
&
stderr
cmd
.
Stdout
=
&
stdout
if
err
:=
cmd
.
Run
();
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"vyper: %v
\n
%s"
,
err
,
stderr
.
Bytes
())
}
return
ParseVyperJSON
(
stdout
.
Bytes
(),
source
,
s
.
Version
,
s
.
Version
,
strings
.
Join
(
s
.
makeArgs
(),
" "
))
}
// ParseVyperJSON takes the direct output of a vyper --f combined_json run and
// parses it into a map of string contract name to Contract structs. The
// provided source, language and compiler version, and compiler options are all
// passed through into the Contract structs.
//
// The vyper output is expected to contain ABI and source mapping.
//
// Returns an error if the JSON is malformed or missing data, or if the JSON
// embedded within the JSON is malformed.
func
ParseVyperJSON
(
combinedJSON
[]
byte
,
source
string
,
languageVersion
string
,
compilerVersion
string
,
compilerOptions
string
)
(
map
[
string
]
*
Contract
,
error
)
{
var
output
map
[
string
]
interface
{}
if
err
:=
json
.
Unmarshal
(
combinedJSON
,
&
output
);
err
!=
nil
{
return
nil
,
err
}
// Compilation succeeded, assemble and return the contracts.
contracts
:=
make
(
map
[
string
]
*
Contract
)
for
name
,
info
:=
range
output
{
// Parse the individual compilation results.
if
name
==
"version"
{
continue
}
c
:=
info
.
(
map
[
string
]
interface
{})
contracts
[
name
]
=
&
Contract
{
Code
:
c
[
"bytecode"
]
.
(
string
),
RuntimeCode
:
c
[
"bytecode_runtime"
]
.
(
string
),
Info
:
ContractInfo
{
Source
:
source
,
Language
:
"Vyper"
,
LanguageVersion
:
languageVersion
,
CompilerVersion
:
compilerVersion
,
CompilerOptions
:
compilerOptions
,
SrcMap
:
c
[
"source_map"
],
SrcMapRuntime
:
""
,
AbiDefinition
:
c
[
"abi"
],
UserDoc
:
""
,
DeveloperDoc
:
""
,
Metadata
:
""
,
},
}
}
return
contracts
,
nil
}
common/compiler/vyper_test.go
deleted
100644 → 0
View file @
59ac229f
// Copyright 2019 The go-ethereum Authors
// This file is part of the go-ethereum library.
//
// The go-ethereum library is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// The go-ethereum library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
package
compiler
import
(
"os/exec"
"testing"
)
func
skipWithoutVyper
(
t
*
testing
.
T
)
{
if
_
,
err
:=
exec
.
LookPath
(
"vyper"
);
err
!=
nil
{
t
.
Skip
(
err
)
}
}
func
TestVyperCompiler
(
t
*
testing
.
T
)
{
skipWithoutVyper
(
t
)
testSource
:=
[]
string
{
"test.v.py"
}
source
,
err
:=
slurpFiles
(
testSource
)
if
err
!=
nil
{
t
.
Error
(
"couldn't read test files"
)
}
contracts
,
err
:=
CompileVyper
(
""
,
testSource
...
)
if
err
!=
nil
{
t
.
Fatalf
(
"error compiling test.v.py. result %v: %v"
,
contracts
,
err
)
}
if
len
(
contracts
)
!=
1
{
t
.
Errorf
(
"one contract expected, got %d"
,
len
(
contracts
))
}
c
,
ok
:=
contracts
[
"test.v.py"
]
if
!
ok
{
c
,
ok
=
contracts
[
"<stdin>:test"
]
if
!
ok
{
t
.
Fatal
(
"info for contract 'test.v.py' not present in result"
)
}
}
if
c
.
Code
==
""
{
t
.
Error
(
"empty code"
)
}
if
c
.
Info
.
Source
!=
source
{
t
.
Error
(
"wrong source"
)
}
if
c
.
Info
.
CompilerVersion
==
""
{
t
.
Error
(
"empty version"
)
}
}
func
TestVyperCompileError
(
t
*
testing
.
T
)
{
skipWithoutVyper
(
t
)
contracts
,
err
:=
CompileVyper
(
""
,
"test_bad.v.py"
)
if
err
==
nil
{
t
.
Errorf
(
"error expected compiling test_bad.v.py. got none. result %v"
,
contracts
)
}
t
.
Logf
(
"error: %v"
,
err
)
}
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