mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Remove trailing whitespace for all files in the repository.
This commit is contained in:
parent
2783905bab
commit
a102f3b783
@ -184,7 +184,7 @@ deploy:
|
||||
# Both the build and deploy steps for Emscripten are only run within the Ubuntu
|
||||
# configurations (not for macOS). That is controlled by conditionals within the bash
|
||||
# scripts because TravisCI doesn't provide much in the way of conditional logic.
|
||||
|
||||
|
||||
- provider: script
|
||||
script: test $SOLC_EMSCRIPTEN != On || (scripts/release_emscripten.sh)
|
||||
skip_cleanup: true
|
||||
|
@ -193,7 +193,7 @@ for (map<ComplexTypeOne, ComplexTypeTwo>::iterator i = l.begin(); i != l.end();
|
||||
2. Generally avoid shortening a standard form that already includes all important information:
|
||||
- e.g. stick to `shared_ptr<X>` rather than shortening to `ptr<X>`.
|
||||
3. Where there are exceptions to this (due to excessive use and clear meaning), note the change prominently and use it consistently:
|
||||
- e.g. `using Guard = std::lock_guard<std::mutex>;` ///< Guard is used throughout the codebase since it is clear in meaning and used commonly.
|
||||
- e.g. `using Guard = std::lock_guard<std::mutex>;` ///< Guard is used throughout the codebase since it is clear in meaning and used commonly.
|
||||
4. In general expressions should be roughly as important/semantically meaningful as the space they occupy.
|
||||
5. Avoid introducing aliases for types unless they are very complicated. Consider the number of items a brain can keep track of at the same time.
|
||||
|
||||
|
@ -39,7 +39,7 @@ contract HelloWorld {
|
||||
To get started with Solidity, you can use [Remix](https://remix.ethereum.org/), which is an
|
||||
browser-based IDE. Here are some example contracts:
|
||||
|
||||
1. [Voting](https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#voting)
|
||||
1. [Voting](https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#voting)
|
||||
2. [Blind Auction](https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#blind-auction)
|
||||
3. [Safe remote purchase](https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#safe-remote-purchase)
|
||||
4. [Micropayment Channel](https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#micropayment-channel)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# generates BuildInfo.h
|
||||
#
|
||||
#
|
||||
# this module expects
|
||||
# ETH_SOURCE_DIR - main CMAKE_SOURCE_DIR
|
||||
# ETH_DST_DIR - main CMAKE_BINARY_DIR
|
||||
|
@ -1,565 +1,565 @@
|
||||
{
|
||||
"0.1.0": {
|
||||
"bugs": [
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-07-10"
|
||||
},
|
||||
},
|
||||
"0.1.1": {
|
||||
"bugs": [
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-08-04"
|
||||
},
|
||||
},
|
||||
"0.1.2": {
|
||||
"bugs": [
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-08-20"
|
||||
},
|
||||
},
|
||||
"0.1.3": {
|
||||
"bugs": [
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-09-25"
|
||||
},
|
||||
},
|
||||
"0.1.4": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-09-30"
|
||||
},
|
||||
},
|
||||
"0.1.5": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-10-07"
|
||||
},
|
||||
},
|
||||
"0.1.6": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-10-16"
|
||||
},
|
||||
},
|
||||
"0.1.7": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-11-17"
|
||||
},
|
||||
},
|
||||
"0.2.0": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2015-12-02"
|
||||
},
|
||||
},
|
||||
"0.2.1": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2016-01-30"
|
||||
},
|
||||
},
|
||||
"0.2.2": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits",
|
||||
"AncientCompiler"
|
||||
],
|
||||
],
|
||||
"released": "2016-02-17"
|
||||
},
|
||||
},
|
||||
"0.3.0": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits",
|
||||
"ArrayAccessCleanHigherOrderBits"
|
||||
],
|
||||
],
|
||||
"released": "2016-03-11"
|
||||
},
|
||||
},
|
||||
"0.3.1": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits"
|
||||
],
|
||||
],
|
||||
"released": "2016-03-31"
|
||||
},
|
||||
},
|
||||
"0.3.2": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin",
|
||||
"CleanBytesHigherOrderBits"
|
||||
],
|
||||
],
|
||||
"released": "2016-04-18"
|
||||
},
|
||||
},
|
||||
"0.3.3": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin"
|
||||
],
|
||||
],
|
||||
"released": "2016-05-27"
|
||||
},
|
||||
},
|
||||
"0.3.4": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin"
|
||||
],
|
||||
],
|
||||
"released": "2016-05-31"
|
||||
},
|
||||
},
|
||||
"0.3.5": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther",
|
||||
"DynamicAllocationInfiniteLoop",
|
||||
"OptimizerClearStateOnCodePathJoin"
|
||||
],
|
||||
],
|
||||
"released": "2016-06-10"
|
||||
},
|
||||
},
|
||||
"0.3.6": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"SendFailsForZeroEther"
|
||||
],
|
||||
],
|
||||
"released": "2016-08-10"
|
||||
},
|
||||
},
|
||||
"0.4.0": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"LibrariesNotCallableFromPayableFunctions"
|
||||
],
|
||||
],
|
||||
"released": "2016-09-08"
|
||||
},
|
||||
},
|
||||
"0.4.1": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3",
|
||||
"LibrariesNotCallableFromPayableFunctions"
|
||||
],
|
||||
],
|
||||
"released": "2016-09-09"
|
||||
},
|
||||
},
|
||||
"0.4.10": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction"
|
||||
],
|
||||
],
|
||||
"released": "2017-03-15"
|
||||
},
|
||||
},
|
||||
"0.4.11": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral"
|
||||
],
|
||||
],
|
||||
"released": "2017-05-03"
|
||||
},
|
||||
},
|
||||
"0.4.12": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput"
|
||||
],
|
||||
],
|
||||
"released": "2017-07-03"
|
||||
},
|
||||
},
|
||||
"0.4.13": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput"
|
||||
],
|
||||
],
|
||||
"released": "2017-07-06"
|
||||
},
|
||||
},
|
||||
"0.4.14": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue"
|
||||
],
|
||||
],
|
||||
"released": "2017-07-31"
|
||||
},
|
||||
},
|
||||
"0.4.15": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector"
|
||||
],
|
||||
],
|
||||
"released": "2017-08-08"
|
||||
},
|
||||
},
|
||||
"0.4.16": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector"
|
||||
],
|
||||
],
|
||||
"released": "2017-08-24"
|
||||
},
|
||||
},
|
||||
"0.4.17": {
|
||||
"bugs": [
|
||||
"EventStructWrongData",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"EventStructWrongData",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector"
|
||||
],
|
||||
],
|
||||
"released": "2017-09-21"
|
||||
},
|
||||
},
|
||||
"0.4.18": {
|
||||
"bugs": [
|
||||
"EventStructWrongData",
|
||||
"EventStructWrongData",
|
||||
"NestedArrayFunctionCallDecoder"
|
||||
],
|
||||
],
|
||||
"released": "2017-10-18"
|
||||
},
|
||||
},
|
||||
"0.4.19": {
|
||||
"bugs": [
|
||||
"EventStructWrongData",
|
||||
"EventStructWrongData",
|
||||
"NestedArrayFunctionCallDecoder"
|
||||
],
|
||||
],
|
||||
"released": "2017-11-30"
|
||||
},
|
||||
},
|
||||
"0.4.2": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage",
|
||||
"OptimizerStaleKnowledgeAboutSHA3"
|
||||
],
|
||||
],
|
||||
"released": "2016-09-17"
|
||||
},
|
||||
},
|
||||
"0.4.20": {
|
||||
"bugs": [
|
||||
"EventStructWrongData",
|
||||
"EventStructWrongData",
|
||||
"NestedArrayFunctionCallDecoder"
|
||||
],
|
||||
],
|
||||
"released": "2018-02-14"
|
||||
},
|
||||
},
|
||||
"0.4.21": {
|
||||
"bugs": [
|
||||
"EventStructWrongData",
|
||||
"EventStructWrongData",
|
||||
"NestedArrayFunctionCallDecoder"
|
||||
],
|
||||
],
|
||||
"released": "2018-03-07"
|
||||
},
|
||||
},
|
||||
"0.4.22": {
|
||||
"bugs": [
|
||||
"EventStructWrongData",
|
||||
"EventStructWrongData",
|
||||
"OneOfTwoConstructorsSkipped"
|
||||
],
|
||||
],
|
||||
"released": "2018-04-16"
|
||||
},
|
||||
},
|
||||
"0.4.23": {
|
||||
"bugs": [
|
||||
"EventStructWrongData"
|
||||
],
|
||||
],
|
||||
"released": "2018-04-19"
|
||||
},
|
||||
},
|
||||
"0.4.24": {
|
||||
"bugs": [
|
||||
"EventStructWrongData"
|
||||
],
|
||||
],
|
||||
"released": "2018-05-16"
|
||||
},
|
||||
},
|
||||
"0.4.3": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"HighOrderByteCleanStorage"
|
||||
],
|
||||
],
|
||||
"released": "2016-10-25"
|
||||
},
|
||||
},
|
||||
"0.4.4": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored"
|
||||
],
|
||||
],
|
||||
"released": "2016-10-31"
|
||||
},
|
||||
},
|
||||
"0.4.5": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored",
|
||||
"OptimizerStateKnowledgeNotResetForJumpdest"
|
||||
],
|
||||
],
|
||||
"released": "2016-11-21"
|
||||
},
|
||||
},
|
||||
"0.4.6": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction",
|
||||
"IdentityPrecompileReturnIgnored"
|
||||
],
|
||||
],
|
||||
"released": "2016-11-22"
|
||||
},
|
||||
},
|
||||
"0.4.7": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction"
|
||||
],
|
||||
],
|
||||
"released": "2016-12-15"
|
||||
},
|
||||
},
|
||||
"0.4.8": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction"
|
||||
],
|
||||
],
|
||||
"released": "2017-01-13"
|
||||
},
|
||||
},
|
||||
"0.4.9": {
|
||||
"bugs": [
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"NestedArrayFunctionCallDecoder",
|
||||
"ZeroFunctionSelector",
|
||||
"DelegateCallReturnValue",
|
||||
"ECRecoverMalformedInput",
|
||||
"SkipEmptyStringLiteral",
|
||||
"ConstantOptimizerSubtraction"
|
||||
],
|
||||
],
|
||||
"released": "2017-01-31"
|
||||
}
|
||||
}
|
@ -207,13 +207,13 @@ Next, build Solidity (or just the ``solfuzzer`` binary) with AFL as your compile
|
||||
At this stage you should be able to see a message similar to the following:
|
||||
|
||||
::
|
||||
|
||||
Scanning dependencies of target solfuzzer
|
||||
[ 98%] Building CXX object test/tools/CMakeFiles/solfuzzer.dir/fuzzer.cpp.o
|
||||
afl-cc 2.52b by <lcamtuf@google.com>
|
||||
afl-as 2.52b by <lcamtuf@google.com>
|
||||
|
||||
Scanning dependencies of target solfuzzer
|
||||
[ 98%] Building CXX object test/tools/CMakeFiles/solfuzzer.dir/fuzzer.cpp.o
|
||||
afl-cc 2.52b by <lcamtuf@google.com>
|
||||
afl-as 2.52b by <lcamtuf@google.com>
|
||||
[+] Instrumented 1949 locations (64-bit, non-hardened mode, ratio 100%).
|
||||
[100%] Linking CXX executable solfuzzer
|
||||
[100%] Linking CXX executable solfuzzer
|
||||
|
||||
If the instrumentation messages did not appear, try switching the cmake flags pointing to AFL's clang binaries:
|
||||
|
||||
@ -228,7 +228,7 @@ Othwerise, upon execution the fuzzer will halt with an error saying binary is no
|
||||
|
||||
::
|
||||
|
||||
afl-fuzz 2.52b by <lcamtuf@google.com>
|
||||
afl-fuzz 2.52b by <lcamtuf@google.com>
|
||||
... (truncated messages)
|
||||
[*] Validating target binary...
|
||||
|
||||
|
@ -141,14 +141,14 @@ Solidity Tools
|
||||
|
||||
* `ABI to solidity interface converter <https://gist.github.com/chriseth/8f533d133fa0c15b0d6eaf3ec502c82b>`_
|
||||
A script for generating contract interfaces from the ABI of a smart contract.
|
||||
|
||||
* `Securify <https://securify.ch/>`_
|
||||
|
||||
* `Securify <https://securify.ch/>`_
|
||||
Fully automated online static analyzer for smart contracts, providing a security report based on vulnerability patterns.
|
||||
|
||||
|
||||
* `Sūrya <https://github.com/ConsenSys/surya/>`_
|
||||
Utility tool for smart contract systems, offering a number of visual outputs and information about the contracts' structure. Also supports querying the function call graph.
|
||||
|
||||
* `EVM Lab <https://github.com/ethereum/evmlab/>`_
|
||||
|
||||
* `EVM Lab <https://github.com/ethereum/evmlab/>`_
|
||||
Rich tool package to interact with the EVM. Includes a VM, Etherchain API, and a trace-viewer with gas cost display.
|
||||
|
||||
.. note::
|
||||
|
@ -35,7 +35,7 @@ npm / Node.js
|
||||
=============
|
||||
|
||||
Use `npm` for a convenient and portable way to install `solcjs`, a Solidity compiler. The
|
||||
`solcjs` program has fewer features than all options further down this page. Our
|
||||
`solcjs` program has fewer features than all options further down this page. Our
|
||||
:ref:`commandline-compiler` documentation assumes you are using
|
||||
the full-featured compiler, `solc`. So if you install `solcjs` from `npm` then you will
|
||||
stop reading the documentation here and then continue to `solc-js <https://github.com/ethereum/solc-js>`_.
|
||||
@ -92,7 +92,7 @@ If you want to use the cutting edge developer version:
|
||||
sudo add-apt-repository ppa:ethereum/ethereum-dev
|
||||
sudo apt-get update
|
||||
sudo apt-get install solc
|
||||
|
||||
|
||||
We are also releasing a `snap package <https://snapcraft.io/>`_, which is installable in all the `supported Linux distros <https://snapcraft.io/docs/core/install>`_. To install the latest stable version of solc:
|
||||
|
||||
.. code-block:: bash
|
||||
@ -123,13 +123,13 @@ We will re-add the pre-built bottles soon.
|
||||
brew tap ethereum/ethereum
|
||||
brew install solidity
|
||||
|
||||
If you need a specific version of Solidity you can install a
|
||||
If you need a specific version of Solidity you can install a
|
||||
Homebrew formula directly from Github.
|
||||
|
||||
View
|
||||
View
|
||||
`solidity.rb commits on Github <https://github.com/ethereum/homebrew-ethereum/commits/master/solidity.rb>`_.
|
||||
|
||||
Follow the history links until you have a raw file link of a
|
||||
Follow the history links until you have a raw file link of a
|
||||
specific commit of ``solidity.rb``.
|
||||
|
||||
Install it using ``brew``:
|
||||
@ -272,7 +272,7 @@ Building Solidity is quite similar on Linux, macOS and other Unices:
|
||||
or even easier:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
#note: this will install binaries solc and soltest at usr/local/bin
|
||||
./scripts/build.sh
|
||||
|
||||
@ -302,7 +302,7 @@ If you are interested what CMake options are available run ``cmake .. -LH``.
|
||||
|
||||
SMT Solvers
|
||||
-----------
|
||||
Solidity can be built against SMT solvers and will do so by default if
|
||||
Solidity can be built against SMT solvers and will do so by default if
|
||||
they are found in the system. Each solver can be disabled by a `cmake` option.
|
||||
|
||||
*Note: In some cases, this can also be a potential workaround for build failures.*
|
||||
@ -313,7 +313,7 @@ Inside the build folder you can disable them, since they are enabled by default:
|
||||
.. code-block:: bash
|
||||
|
||||
# disables only Z3 SMT Solver.
|
||||
cmake .. -DUSE_Z3=OFF
|
||||
cmake .. -DUSE_Z3=OFF
|
||||
|
||||
# disables only CVC4 SMT Solver.
|
||||
cmake .. -DUSE_CVC4=OFF
|
||||
|
484
docs/make.bat
484
docs/make.bat
@ -1,242 +1,242 @@
|
||||
@ECHO OFF
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=_build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
|
||||
%SPHINXBUILD% 2> nul
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Solidity.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Solidity.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdf" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %BUILDDIR%/..
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdfja" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %BUILDDIR%/..
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "texinfo" (
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "gettext" (
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "xml" (
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pseudoxml" (
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
||||
@ECHO OFF
|
||||
|
||||
REM Command file for Sphinx documentation
|
||||
|
||||
if "%SPHINXBUILD%" == "" (
|
||||
set SPHINXBUILD=sphinx-build
|
||||
)
|
||||
set BUILDDIR=_build
|
||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||
if NOT "%PAPER%" == "" (
|
||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||
)
|
||||
|
||||
if "%1" == "" goto help
|
||||
|
||||
if "%1" == "help" (
|
||||
:help
|
||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||
echo. html to make standalone HTML files
|
||||
echo. dirhtml to make HTML files named index.html in directories
|
||||
echo. singlehtml to make a single large HTML file
|
||||
echo. pickle to make pickle files
|
||||
echo. json to make JSON files
|
||||
echo. htmlhelp to make HTML files and a HTML help project
|
||||
echo. qthelp to make HTML files and a qthelp project
|
||||
echo. devhelp to make HTML files and a Devhelp project
|
||||
echo. epub to make an epub
|
||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||
echo. text to make text files
|
||||
echo. man to make manual pages
|
||||
echo. texinfo to make Texinfo files
|
||||
echo. gettext to make PO message catalogs
|
||||
echo. changes to make an overview over all changed/added/deprecated items
|
||||
echo. xml to make Docutils-native XML files
|
||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||
echo. linkcheck to check all external links for integrity
|
||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "clean" (
|
||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||
del /q /s %BUILDDIR%\*
|
||||
goto end
|
||||
)
|
||||
|
||||
|
||||
%SPHINXBUILD% 2> nul
|
||||
if errorlevel 9009 (
|
||||
echo.
|
||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||
echo.may add the Sphinx directory to PATH.
|
||||
echo.
|
||||
echo.If you don't have Sphinx installed, grab it from
|
||||
echo.http://sphinx-doc.org/
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%1" == "html" (
|
||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "dirhtml" (
|
||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "singlehtml" (
|
||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pickle" (
|
||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the pickle files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "json" (
|
||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can process the JSON files.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "htmlhelp" (
|
||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "qthelp" (
|
||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Solidity.qhcp
|
||||
echo.To view the help file:
|
||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Solidity.ghc
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "devhelp" (
|
||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "epub" (
|
||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latex" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdf" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf
|
||||
cd %BUILDDIR%/..
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "latexpdfja" (
|
||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||
cd %BUILDDIR%/latex
|
||||
make all-pdf-ja
|
||||
cd %BUILDDIR%/..
|
||||
echo.
|
||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "text" (
|
||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "man" (
|
||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "texinfo" (
|
||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "gettext" (
|
||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "changes" (
|
||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.The overview file is in %BUILDDIR%/changes.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "linkcheck" (
|
||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Link check complete; look for any errors in the above output ^
|
||||
or in %BUILDDIR%/linkcheck/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "doctest" (
|
||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Testing of doctests in the sources finished, look at the ^
|
||||
results in %BUILDDIR%/doctest/output.txt.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "xml" (
|
||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||
goto end
|
||||
)
|
||||
|
||||
if "%1" == "pseudoxml" (
|
||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||
if errorlevel 1 exit /b 1
|
||||
echo.
|
||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||
goto end
|
||||
)
|
||||
|
||||
:end
|
||||
|
@ -131,7 +131,7 @@ user interface for the contract.
|
||||
Furthermore, Mist can use the userdoc to display a confirmation message to the user
|
||||
whenever they interact with the contract.
|
||||
|
||||
Additional information about Ethereum Natural Specification (NatSpec) can be found `here <https://github.com/ethereum/wiki/wiki/Ethereum-Natural-Specification-Format>`_.
|
||||
Additional information about Ethereum Natural Specification (NatSpec) can be found `here <https://github.com/ethereum/wiki/wiki/Ethereum-Natural-Specification-Format>`_.
|
||||
|
||||
Usage for Source Code Verification
|
||||
==================================
|
||||
|
@ -191,8 +191,8 @@ For more information, see the section on :ref:`address`.
|
||||
must align in order for the called contract to correctly access the storage variables of the calling contract by name.
|
||||
This is of course not the case if storage pointers are passed as function arguments as in the case for
|
||||
the high-level libraries.
|
||||
|
||||
|
||||
|
||||
|
||||
.. note::
|
||||
The use of ``callcode`` is discouraged and will be removed in the future.
|
||||
|
||||
|
@ -25,7 +25,7 @@ char const* Exception::what() const noexcept
|
||||
// Return the comment if available.
|
||||
if (string const* cmt = comment())
|
||||
return cmt->data();
|
||||
|
||||
|
||||
// Fallback to base what().
|
||||
// Boost accepts nullptr, but the C++ standard doesn't
|
||||
// and crashes on some platforms.
|
||||
|
@ -1,8 +1,8 @@
|
||||
|
||||
// This is a copy of boost/multiprecision/detail/number_compare.hpp from boost 1.59 to replace buggy version from 1.58.
|
||||
// This is a copy of boost/multiprecision/detail/number_compare.hpp from boost 1.59 to replace buggy version from 1.58.
|
||||
|
||||
#ifdef BOOST_MP_COMPARE_HPP
|
||||
#error This bug workaround header must be included before original boost/multiprecision/detail/number_compare.hpp
|
||||
#error This bug workaround header must be included before original boost/multiprecision/detail/number_compare.hpp
|
||||
#endif
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -150,11 +150,11 @@ template <class B, expression_template_option ET>
|
||||
struct is_valid_mixed_compare<number<B, ET>, number<B, ET> > : public mpl::false_ {};
|
||||
|
||||
template <class B, expression_template_option ET, class tag, class Arg1, class Arg2, class Arg3, class Arg4>
|
||||
struct is_valid_mixed_compare<number<B, ET>, expression<tag, Arg1, Arg2, Arg3, Arg4> >
|
||||
struct is_valid_mixed_compare<number<B, ET>, expression<tag, Arg1, Arg2, Arg3, Arg4> >
|
||||
: public mpl::bool_<is_convertible<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >::value> {};
|
||||
|
||||
template <class tag, class Arg1, class Arg2, class Arg3, class Arg4, class B, expression_template_option ET>
|
||||
struct is_valid_mixed_compare<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >
|
||||
struct is_valid_mixed_compare<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >
|
||||
: public mpl::bool_<is_convertible<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >::value> {};
|
||||
|
||||
template <class Backend, expression_template_option ExpressionTemplates>
|
||||
@ -196,7 +196,7 @@ inline bool operator == (const number<Backend, ExpressionTemplates>& a, const nu
|
||||
return eval_eq(a.backend(), b.backend());
|
||||
}
|
||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator == (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||
{
|
||||
using default_ops::eval_eq;
|
||||
@ -204,7 +204,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return eval_eq(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||
}
|
||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator == (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||
{
|
||||
using default_ops::eval_eq;
|
||||
@ -212,7 +212,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return eval_eq(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||
}
|
||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator == (const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -222,7 +222,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return eval_eq(t.backend(), result_type::canonical_value(a));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator == (const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -232,7 +232,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return eval_eq(t.backend(), result_type::canonical_value(b));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
operator == (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||
{
|
||||
using default_ops::eval_eq;
|
||||
@ -250,7 +250,7 @@ inline bool operator != (const number<Backend, ExpressionTemplates>& a, const nu
|
||||
return !eval_eq(a.backend(), b.backend());
|
||||
}
|
||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator != (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||
{
|
||||
using default_ops::eval_eq;
|
||||
@ -258,7 +258,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return !eval_eq(a.backend(), number<Backend, et_on>::canonical_value(b));
|
||||
}
|
||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator != (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||
{
|
||||
using default_ops::eval_eq;
|
||||
@ -266,7 +266,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return !eval_eq(b.backend(), number<Backend, et_on>::canonical_value(a));
|
||||
}
|
||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator != (const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -276,7 +276,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return !eval_eq(t.backend(), result_type::canonical_value(a));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator != (const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -286,7 +286,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return !eval_eq(t.backend(), result_type::canonical_value(b));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
operator != (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||
{
|
||||
using default_ops::eval_eq;
|
||||
@ -304,7 +304,7 @@ inline bool operator < (const number<Backend, ExpressionTemplates>& a, const num
|
||||
return eval_lt(a.backend(), b.backend());
|
||||
}
|
||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator < (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||
{
|
||||
using default_ops::eval_lt;
|
||||
@ -312,7 +312,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return eval_lt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||
}
|
||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator < (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||
{
|
||||
using default_ops::eval_gt;
|
||||
@ -320,7 +320,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return eval_gt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||
}
|
||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator < (const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -330,7 +330,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return eval_gt(t.backend(), result_type::canonical_value(a));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator < (const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -340,7 +340,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return eval_lt(t.backend(), result_type::canonical_value(b));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
operator < (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||
{
|
||||
using default_ops::eval_lt;
|
||||
@ -358,7 +358,7 @@ inline bool operator > (const number<Backend, ExpressionTemplates>& a, const num
|
||||
return eval_gt(a.backend(), b.backend());
|
||||
}
|
||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator > (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||
{
|
||||
using default_ops::eval_gt;
|
||||
@ -366,7 +366,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return eval_gt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||
}
|
||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator > (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||
{
|
||||
using default_ops::eval_lt;
|
||||
@ -374,7 +374,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return eval_lt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||
}
|
||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator > (const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -384,7 +384,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return a > t;
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator > (const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -394,7 +394,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return t > b;
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
operator > (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||
{
|
||||
using default_ops::eval_gt;
|
||||
@ -412,7 +412,7 @@ inline bool operator <= (const number<Backend, ExpressionTemplates>& a, const nu
|
||||
return !eval_gt(a.backend(), b.backend());
|
||||
}
|
||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator <= (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||
{
|
||||
using default_ops::eval_gt;
|
||||
@ -420,7 +420,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return !eval_gt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||
}
|
||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator <= (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||
{
|
||||
using default_ops::eval_lt;
|
||||
@ -428,7 +428,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return !eval_lt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||
}
|
||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator <= (const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -440,7 +440,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return !eval_lt(t.backend(), result_type::canonical_value(a));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator <= (const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -450,7 +450,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return !eval_gt(t.backend(), result_type::canonical_value(b));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
operator <= (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||
{
|
||||
using default_ops::eval_gt;
|
||||
@ -468,7 +468,7 @@ inline bool operator >= (const number<Backend, ExpressionTemplates>& a, const nu
|
||||
return !eval_lt(a.backend(), b.backend());
|
||||
}
|
||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator >= (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||
{
|
||||
using default_ops::eval_lt;
|
||||
@ -476,7 +476,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return !eval_lt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||
}
|
||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, ExpressionTemplates>, Arithmetic>::value, bool>::type
|
||||
operator >= (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||
{
|
||||
using default_ops::eval_gt;
|
||||
@ -484,7 +484,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<number<Backend, Expre
|
||||
return !eval_gt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||
}
|
||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator >= (const Arithmetic& a, const detail::expression<Tag, A1, A2, A3, A4>& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -494,7 +494,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return !eval_gt(t.backend(), result_type::canonical_value(a));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, Arithmetic>::value, bool>::type
|
||||
operator >= (const detail::expression<Tag, A1, A2, A3, A4>& a, const Arithmetic& b)
|
||||
{
|
||||
typedef typename detail::expression<Tag, A1, A2, A3, A4>::result_type result_type;
|
||||
@ -504,7 +504,7 @@ inline typename enable_if_c<detail::is_valid_mixed_compare<typename detail::expr
|
||||
return !eval_lt(t.backend(), result_type::canonical_value(b));
|
||||
}
|
||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
inline typename enable_if<is_same<typename detail::expression<Tag, A1, A2, A3, A4>::result_type, typename detail::expression<Tagb, A1b, A2b, A3b, A4b>::result_type>, bool>::type
|
||||
operator >= (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||
{
|
||||
using default_ops::eval_lt;
|
||||
|
@ -281,19 +281,19 @@ bool ExpressionCompiler::visit(TupleExpression const& _tuple)
|
||||
if (_tuple.isInlineArray())
|
||||
{
|
||||
ArrayType const& arrayType = dynamic_cast<ArrayType const&>(*_tuple.annotation().type);
|
||||
|
||||
|
||||
solAssert(!arrayType.isDynamicallySized(), "Cannot create dynamically sized inline array.");
|
||||
m_context << max(u256(32u), arrayType.memorySize());
|
||||
utils().allocateMemory();
|
||||
m_context << Instruction::DUP1;
|
||||
|
||||
|
||||
for (auto const& component: _tuple.components())
|
||||
{
|
||||
component->accept(*this);
|
||||
utils().convertType(*component->annotation().type, *arrayType.baseType(), true);
|
||||
utils().storeInMemoryDynamic(*arrayType.baseType(), true);
|
||||
utils().storeInMemoryDynamic(*arrayType.baseType(), true);
|
||||
}
|
||||
|
||||
|
||||
m_context << Instruction::POP;
|
||||
}
|
||||
else
|
||||
@ -1569,7 +1569,7 @@ void ExpressionCompiler::endVisit(Literal const& _literal)
|
||||
{
|
||||
CompilerContext::LocationSetter locationSetter(m_context, _literal);
|
||||
TypePointer type = _literal.annotation().type;
|
||||
|
||||
|
||||
switch (type->category())
|
||||
{
|
||||
case Type::Category::RationalNumber:
|
||||
@ -1827,7 +1827,7 @@ void ExpressionCompiler::appendExternalFunctionCall(
|
||||
auto funKind = _functionType.kind();
|
||||
|
||||
solAssert(funKind != FunctionType::Kind::BareStaticCall || m_context.evmVersion().hasStaticCall(), "");
|
||||
|
||||
|
||||
bool returnSuccessCondition = funKind == FunctionType::Kind::BareCall || funKind == FunctionType::Kind::BareCallCode || funKind == FunctionType::Kind::BareDelegateCall || funKind == FunctionType::Kind::BareStaticCall;
|
||||
bool isCallCode = funKind == FunctionType::Kind::BareCallCode;
|
||||
bool isDelegateCall = funKind == FunctionType::Kind::BareDelegateCall || funKind == FunctionType::Kind::DelegateCall;
|
||||
|
@ -63,7 +63,7 @@ void ElementaryTypeNameToken::assertDetails(Token::Value _baseType, unsigned con
|
||||
{
|
||||
solAssert(_second == 0, "There should not be a second size argument to type " + string(Token::toString(_baseType)) + ".");
|
||||
solAssert(
|
||||
_first <= 256 && _first % 8 == 0,
|
||||
_first <= 256 && _first % 8 == 0,
|
||||
"No elementary type " + string(Token::toString(_baseType)) + to_string(_first) + "."
|
||||
);
|
||||
}
|
||||
@ -165,7 +165,7 @@ tuple<Token::Value, unsigned int, unsigned int> Token::fromIdentifierOrKeyword(s
|
||||
else
|
||||
return make_tuple(Token::FixedMxN, m, n);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return make_tuple(Token::Identifier, 0, 0);
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ if __name__ == '__main__':
|
||||
|
||||
if isfile(path):
|
||||
extract_and_write(path, path)
|
||||
else:
|
||||
else:
|
||||
for root, subdirs, files in os.walk(path):
|
||||
if '_build' in subdirs:
|
||||
subdirs.remove('_build')
|
||||
|
@ -22,7 +22,7 @@
|
||||
## method = ftp
|
||||
## incoming = ~ethereum/ethereum-dev
|
||||
## login = anonymous
|
||||
##
|
||||
##
|
||||
## [ethereum]
|
||||
## fqdn = ppa.launchpad.net
|
||||
## method = ftp
|
||||
|
@ -148,7 +148,7 @@ hélló
|
||||
|
||||
Ḕ ḕ Ḗ ḗ Ḙ ḙ Ḛ
|
||||
|
||||
ἐ ἑ ἒ ἓ ἔ ἕ
|
||||
ἐ ἑ ἒ ἓ ἔ ἕ
|
||||
|
||||
₠ ₡ ₢ ₣ ₤ ₥
|
||||
|
||||
@ -164,9 +164,9 @@ hélló
|
||||
|
||||
␀ ␁ ␂ ␃ ␄ ␅
|
||||
|
||||
⑀ ⑁ ⑂ ⑃ ⑄
|
||||
⑀ ⑁ ⑂ ⑃ ⑄
|
||||
|
||||
① ② ③ ④ ⑤
|
||||
① ② ③ ④ ⑤
|
||||
|
||||
╘ ╙ ╚ ╛ ╜ ╝
|
||||
|
||||
@ -200,7 +200,7 @@ hélló
|
||||
|
||||
שּׁ שּׂ אַ אָ אּ
|
||||
|
||||
ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ
|
||||
ﮄ ﮅ ﮆ ﮇ ﮈ ﮉ
|
||||
|
||||
ﺵ ﺶ ﺷ ﺸ
|
||||
|
||||
|
@ -647,7 +647,7 @@ BOOST_AUTO_TEST_CASE(dev_documenting_no_paramname)
|
||||
contract test {
|
||||
/// @dev Multiplies a number by 7 and adds second parameter
|
||||
/// @param a Documentation for the first parameter
|
||||
/// @param
|
||||
/// @param
|
||||
function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; }
|
||||
}
|
||||
)";
|
||||
@ -675,7 +675,7 @@ BOOST_AUTO_TEST_CASE(dev_documenting_no_param_description)
|
||||
contract test {
|
||||
/// @dev Multiplies a number by 7 and adds second parameter
|
||||
/// @param a Documentation for the first parameter
|
||||
/// @param second
|
||||
/// @param second
|
||||
function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; }
|
||||
}
|
||||
)";
|
||||
|
Loading…
Reference in New Issue
Block a user