2020-12-11 19:05:42 +00:00
#!/usr/bin/env bash
2020-01-28 15:34:38 +00:00
# ------------------------------------------------------------------------------
# vim:ts=4:et
# This file is part of solidity.
#
# solidity is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# solidity 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 General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with solidity. If not, see <http://www.gnu.org/licenses/>
#
# (c) 2016-2019 solidity contributors.
# ------------------------------------------------------------------------------
2021-07-05 17:38:41 +00:00
YULARGS = ( --strict-assembly)
2021-09-30 14:17:36 +00:00
FULLARGS = ( --optimize --ignore-missing --combined-json "abi,asm,ast,bin,bin-runtime,devdoc,hashes,metadata,opcodes,srcmap,srcmap-runtime,userdoc" )
2020-12-11 20:34:55 +00:00
OLDARGS = ( --optimize --combined-json "abi,asm,ast,bin,bin-runtime,devdoc,interface,metadata,opcodes,srcmap,srcmap-runtime,userdoc" )
2020-01-28 15:34:38 +00:00
function compileFull( )
{
local expected_exit_code = 0
2021-07-12 14:31:29 +00:00
local expect_output = 'none'
case " $1 " in
'--expect-errors' )
expected_exit_code = 1
expect_output = 'warnings-or-errors'
shift;
; ;
'--expect-warnings' )
expect_output = 'warnings-or-errors'
shift;
; ;
'--ignore-warnings' )
expect_output = 'any'
shift;
; ;
esac
2020-12-11 20:34:55 +00:00
local args = ( " ${ FULLARGS [@] } " )
2020-01-28 15:34:38 +00:00
if [ [ $1 = '-v' ] ] ; then
2020-12-11 17:19:53 +00:00
if ( echo " $2 " | grep -Po '(?<=0.4.)\d+' >/dev/null) ; then
patch = $( echo " $2 " | grep -Po '(?<=0.4.)\d+' )
2020-01-28 15:34:38 +00:00
if ( ( patch < 22 ) ) ; then
2020-12-11 20:34:55 +00:00
args = ( " ${ OLDARGS [@] } " )
2020-01-28 15:34:38 +00:00
fi
fi
shift 2
fi
2020-12-11 20:34:55 +00:00
local files = ( " $@ " )
2020-01-28 15:34:38 +00:00
2020-12-11 17:26:47 +00:00
local stderr_path; stderr_path = $( mktemp)
2020-01-28 15:34:38 +00:00
2021-07-05 17:38:41 +00:00
if [ " ${ files : -4 } " = = ".yul" ]
then
args = ( " ${ YULARGS [@] } " )
fi
2020-01-28 15:34:38 +00:00
set +e
2020-12-11 20:34:55 +00:00
" $SOLC " " ${ args [@] } " " ${ files [@] } " >/dev/null 2>" $stderr_path "
2020-01-28 15:34:38 +00:00
local exit_code = $?
2021-07-05 17:38:41 +00:00
local errors; errors = $( grep -v -E \
-e 'Warning: This is a pre-release compiler version|Warning: Experimental features are turned on|pragma experimental ABIEncoderV2|^ +--> |^ +\||^[0-9]+ +\| ' \
2021-07-12 10:45:56 +00:00
-e 'Warning: Yul is still experimental. Please use the output with care.' \
-e '^No text representation found.$' < " $stderr_path "
)
2021-07-05 17:38:41 +00:00
2020-01-28 15:34:38 +00:00
set -e
rm " $stderr_path "
2021-07-12 14:31:29 +00:00
if [ [
$exit_code != " $expected_exit_code " ||
$errors != "" && $expect_output = = 'none' ||
$errors = = "" && $expect_output != 'none' && $expect_output != 'any' && $expected_exit_code = = 0
2020-01-28 15:34:38 +00:00
] ]
then
2021-07-12 14:31:29 +00:00
printError "TEST FAILURE"
printError " Actual exit code: $exit_code "
printError " Expected exit code: $expected_exit_code "
printError "==== Output ===="
2020-01-28 15:34:38 +00:00
echo " $errors "
2021-07-12 14:31:29 +00:00
printError "== Output end =="
printError ""
case " $expect_output " in
'none' ) printError "No output was expected." ; ;
'warnings-or-errors' ) printError "Expected warnings or errors." ; ;
esac
printError ""
2020-01-28 15:34:38 +00:00
printError "While calling:"
2021-07-12 14:31:29 +00:00
echo " \" $SOLC \" ${ args [*] } ${ files [*] } "
2020-01-28 15:34:38 +00:00
printError "Inside directory:"
2021-07-12 14:31:29 +00:00
echo " $( pwd ) "
printError "Input was:"
cat -- " ${ files [@] } "
2020-01-28 15:34:38 +00:00
false
fi
}