mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #4882 from ethereum/removeTrailingWhitespace
Remove trailing whitespace for all files in the repository.
This commit is contained in:
commit
f27d7edfd6
@ -184,7 +184,7 @@ deploy:
|
|||||||
# Both the build and deploy steps for Emscripten are only run within the Ubuntu
|
# 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
|
# 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.
|
# scripts because TravisCI doesn't provide much in the way of conditional logic.
|
||||||
|
|
||||||
- provider: script
|
- provider: script
|
||||||
script: test $SOLC_EMSCRIPTEN != On || (scripts/release_emscripten.sh)
|
script: test $SOLC_EMSCRIPTEN != On || (scripts/release_emscripten.sh)
|
||||||
skip_cleanup: true
|
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:
|
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>`.
|
- 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:
|
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.
|
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.
|
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
|
To get started with Solidity, you can use [Remix](https://remix.ethereum.org/), which is an
|
||||||
browser-based IDE. Here are some example contracts:
|
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)
|
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)
|
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)
|
4. [Micropayment Channel](https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html#micropayment-channel)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
# generates BuildInfo.h
|
# generates BuildInfo.h
|
||||||
#
|
#
|
||||||
# this module expects
|
# this module expects
|
||||||
# ETH_SOURCE_DIR - main CMAKE_SOURCE_DIR
|
# ETH_SOURCE_DIR - main CMAKE_SOURCE_DIR
|
||||||
# ETH_DST_DIR - main CMAKE_BINARY_DIR
|
# ETH_DST_DIR - main CMAKE_BINARY_DIR
|
||||||
|
@ -1,565 +1,565 @@
|
|||||||
{
|
{
|
||||||
"0.1.0": {
|
"0.1.0": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-07-10"
|
"released": "2015-07-10"
|
||||||
},
|
},
|
||||||
"0.1.1": {
|
"0.1.1": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-08-04"
|
"released": "2015-08-04"
|
||||||
},
|
},
|
||||||
"0.1.2": {
|
"0.1.2": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-08-20"
|
"released": "2015-08-20"
|
||||||
},
|
},
|
||||||
"0.1.3": {
|
"0.1.3": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-09-25"
|
"released": "2015-09-25"
|
||||||
},
|
},
|
||||||
"0.1.4": {
|
"0.1.4": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-09-30"
|
"released": "2015-09-30"
|
||||||
},
|
},
|
||||||
"0.1.5": {
|
"0.1.5": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-10-07"
|
"released": "2015-10-07"
|
||||||
},
|
},
|
||||||
"0.1.6": {
|
"0.1.6": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-10-16"
|
"released": "2015-10-16"
|
||||||
},
|
},
|
||||||
"0.1.7": {
|
"0.1.7": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-11-17"
|
"released": "2015-11-17"
|
||||||
},
|
},
|
||||||
"0.2.0": {
|
"0.2.0": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2015-12-02"
|
"released": "2015-12-02"
|
||||||
},
|
},
|
||||||
"0.2.1": {
|
"0.2.1": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2016-01-30"
|
"released": "2016-01-30"
|
||||||
},
|
},
|
||||||
"0.2.2": {
|
"0.2.2": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits",
|
"ArrayAccessCleanHigherOrderBits",
|
||||||
"AncientCompiler"
|
"AncientCompiler"
|
||||||
],
|
],
|
||||||
"released": "2016-02-17"
|
"released": "2016-02-17"
|
||||||
},
|
},
|
||||||
"0.3.0": {
|
"0.3.0": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits",
|
"CleanBytesHigherOrderBits",
|
||||||
"ArrayAccessCleanHigherOrderBits"
|
"ArrayAccessCleanHigherOrderBits"
|
||||||
],
|
],
|
||||||
"released": "2016-03-11"
|
"released": "2016-03-11"
|
||||||
},
|
},
|
||||||
"0.3.1": {
|
"0.3.1": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits"
|
"CleanBytesHigherOrderBits"
|
||||||
],
|
],
|
||||||
"released": "2016-03-31"
|
"released": "2016-03-31"
|
||||||
},
|
},
|
||||||
"0.3.2": {
|
"0.3.2": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin",
|
"OptimizerClearStateOnCodePathJoin",
|
||||||
"CleanBytesHigherOrderBits"
|
"CleanBytesHigherOrderBits"
|
||||||
],
|
],
|
||||||
"released": "2016-04-18"
|
"released": "2016-04-18"
|
||||||
},
|
},
|
||||||
"0.3.3": {
|
"0.3.3": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin"
|
"OptimizerClearStateOnCodePathJoin"
|
||||||
],
|
],
|
||||||
"released": "2016-05-27"
|
"released": "2016-05-27"
|
||||||
},
|
},
|
||||||
"0.3.4": {
|
"0.3.4": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin"
|
"OptimizerClearStateOnCodePathJoin"
|
||||||
],
|
],
|
||||||
"released": "2016-05-31"
|
"released": "2016-05-31"
|
||||||
},
|
},
|
||||||
"0.3.5": {
|
"0.3.5": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther",
|
"SendFailsForZeroEther",
|
||||||
"DynamicAllocationInfiniteLoop",
|
"DynamicAllocationInfiniteLoop",
|
||||||
"OptimizerClearStateOnCodePathJoin"
|
"OptimizerClearStateOnCodePathJoin"
|
||||||
],
|
],
|
||||||
"released": "2016-06-10"
|
"released": "2016-06-10"
|
||||||
},
|
},
|
||||||
"0.3.6": {
|
"0.3.6": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"SendFailsForZeroEther"
|
"SendFailsForZeroEther"
|
||||||
],
|
],
|
||||||
"released": "2016-08-10"
|
"released": "2016-08-10"
|
||||||
},
|
},
|
||||||
"0.4.0": {
|
"0.4.0": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"LibrariesNotCallableFromPayableFunctions"
|
"LibrariesNotCallableFromPayableFunctions"
|
||||||
],
|
],
|
||||||
"released": "2016-09-08"
|
"released": "2016-09-08"
|
||||||
},
|
},
|
||||||
"0.4.1": {
|
"0.4.1": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3",
|
"OptimizerStaleKnowledgeAboutSHA3",
|
||||||
"LibrariesNotCallableFromPayableFunctions"
|
"LibrariesNotCallableFromPayableFunctions"
|
||||||
],
|
],
|
||||||
"released": "2016-09-09"
|
"released": "2016-09-09"
|
||||||
},
|
},
|
||||||
"0.4.10": {
|
"0.4.10": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction"
|
"ConstantOptimizerSubtraction"
|
||||||
],
|
],
|
||||||
"released": "2017-03-15"
|
"released": "2017-03-15"
|
||||||
},
|
},
|
||||||
"0.4.11": {
|
"0.4.11": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral"
|
"SkipEmptyStringLiteral"
|
||||||
],
|
],
|
||||||
"released": "2017-05-03"
|
"released": "2017-05-03"
|
||||||
},
|
},
|
||||||
"0.4.12": {
|
"0.4.12": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput"
|
"ECRecoverMalformedInput"
|
||||||
],
|
],
|
||||||
"released": "2017-07-03"
|
"released": "2017-07-03"
|
||||||
},
|
},
|
||||||
"0.4.13": {
|
"0.4.13": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput"
|
"ECRecoverMalformedInput"
|
||||||
],
|
],
|
||||||
"released": "2017-07-06"
|
"released": "2017-07-06"
|
||||||
},
|
},
|
||||||
"0.4.14": {
|
"0.4.14": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue"
|
"DelegateCallReturnValue"
|
||||||
],
|
],
|
||||||
"released": "2017-07-31"
|
"released": "2017-07-31"
|
||||||
},
|
},
|
||||||
"0.4.15": {
|
"0.4.15": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector"
|
"ZeroFunctionSelector"
|
||||||
],
|
],
|
||||||
"released": "2017-08-08"
|
"released": "2017-08-08"
|
||||||
},
|
},
|
||||||
"0.4.16": {
|
"0.4.16": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector"
|
"ZeroFunctionSelector"
|
||||||
],
|
],
|
||||||
"released": "2017-08-24"
|
"released": "2017-08-24"
|
||||||
},
|
},
|
||||||
"0.4.17": {
|
"0.4.17": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData",
|
"EventStructWrongData",
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector"
|
"ZeroFunctionSelector"
|
||||||
],
|
],
|
||||||
"released": "2017-09-21"
|
"released": "2017-09-21"
|
||||||
},
|
},
|
||||||
"0.4.18": {
|
"0.4.18": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData",
|
"EventStructWrongData",
|
||||||
"NestedArrayFunctionCallDecoder"
|
"NestedArrayFunctionCallDecoder"
|
||||||
],
|
],
|
||||||
"released": "2017-10-18"
|
"released": "2017-10-18"
|
||||||
},
|
},
|
||||||
"0.4.19": {
|
"0.4.19": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData",
|
"EventStructWrongData",
|
||||||
"NestedArrayFunctionCallDecoder"
|
"NestedArrayFunctionCallDecoder"
|
||||||
],
|
],
|
||||||
"released": "2017-11-30"
|
"released": "2017-11-30"
|
||||||
},
|
},
|
||||||
"0.4.2": {
|
"0.4.2": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage",
|
"HighOrderByteCleanStorage",
|
||||||
"OptimizerStaleKnowledgeAboutSHA3"
|
"OptimizerStaleKnowledgeAboutSHA3"
|
||||||
],
|
],
|
||||||
"released": "2016-09-17"
|
"released": "2016-09-17"
|
||||||
},
|
},
|
||||||
"0.4.20": {
|
"0.4.20": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData",
|
"EventStructWrongData",
|
||||||
"NestedArrayFunctionCallDecoder"
|
"NestedArrayFunctionCallDecoder"
|
||||||
],
|
],
|
||||||
"released": "2018-02-14"
|
"released": "2018-02-14"
|
||||||
},
|
},
|
||||||
"0.4.21": {
|
"0.4.21": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData",
|
"EventStructWrongData",
|
||||||
"NestedArrayFunctionCallDecoder"
|
"NestedArrayFunctionCallDecoder"
|
||||||
],
|
],
|
||||||
"released": "2018-03-07"
|
"released": "2018-03-07"
|
||||||
},
|
},
|
||||||
"0.4.22": {
|
"0.4.22": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData",
|
"EventStructWrongData",
|
||||||
"OneOfTwoConstructorsSkipped"
|
"OneOfTwoConstructorsSkipped"
|
||||||
],
|
],
|
||||||
"released": "2018-04-16"
|
"released": "2018-04-16"
|
||||||
},
|
},
|
||||||
"0.4.23": {
|
"0.4.23": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData"
|
"EventStructWrongData"
|
||||||
],
|
],
|
||||||
"released": "2018-04-19"
|
"released": "2018-04-19"
|
||||||
},
|
},
|
||||||
"0.4.24": {
|
"0.4.24": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"EventStructWrongData"
|
"EventStructWrongData"
|
||||||
],
|
],
|
||||||
"released": "2018-05-16"
|
"released": "2018-05-16"
|
||||||
},
|
},
|
||||||
"0.4.3": {
|
"0.4.3": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"HighOrderByteCleanStorage"
|
"HighOrderByteCleanStorage"
|
||||||
],
|
],
|
||||||
"released": "2016-10-25"
|
"released": "2016-10-25"
|
||||||
},
|
},
|
||||||
"0.4.4": {
|
"0.4.4": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored"
|
"IdentityPrecompileReturnIgnored"
|
||||||
],
|
],
|
||||||
"released": "2016-10-31"
|
"released": "2016-10-31"
|
||||||
},
|
},
|
||||||
"0.4.5": {
|
"0.4.5": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored",
|
"IdentityPrecompileReturnIgnored",
|
||||||
"OptimizerStateKnowledgeNotResetForJumpdest"
|
"OptimizerStateKnowledgeNotResetForJumpdest"
|
||||||
],
|
],
|
||||||
"released": "2016-11-21"
|
"released": "2016-11-21"
|
||||||
},
|
},
|
||||||
"0.4.6": {
|
"0.4.6": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction",
|
"ConstantOptimizerSubtraction",
|
||||||
"IdentityPrecompileReturnIgnored"
|
"IdentityPrecompileReturnIgnored"
|
||||||
],
|
],
|
||||||
"released": "2016-11-22"
|
"released": "2016-11-22"
|
||||||
},
|
},
|
||||||
"0.4.7": {
|
"0.4.7": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction"
|
"ConstantOptimizerSubtraction"
|
||||||
],
|
],
|
||||||
"released": "2016-12-15"
|
"released": "2016-12-15"
|
||||||
},
|
},
|
||||||
"0.4.8": {
|
"0.4.8": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction"
|
"ConstantOptimizerSubtraction"
|
||||||
],
|
],
|
||||||
"released": "2017-01-13"
|
"released": "2017-01-13"
|
||||||
},
|
},
|
||||||
"0.4.9": {
|
"0.4.9": {
|
||||||
"bugs": [
|
"bugs": [
|
||||||
"NestedArrayFunctionCallDecoder",
|
"NestedArrayFunctionCallDecoder",
|
||||||
"ZeroFunctionSelector",
|
"ZeroFunctionSelector",
|
||||||
"DelegateCallReturnValue",
|
"DelegateCallReturnValue",
|
||||||
"ECRecoverMalformedInput",
|
"ECRecoverMalformedInput",
|
||||||
"SkipEmptyStringLiteral",
|
"SkipEmptyStringLiteral",
|
||||||
"ConstantOptimizerSubtraction"
|
"ConstantOptimizerSubtraction"
|
||||||
],
|
],
|
||||||
"released": "2017-01-31"
|
"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:
|
At this stage you should be able to see a message similar to the following:
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
Scanning dependencies of target solfuzzer
|
Scanning dependencies of target solfuzzer
|
||||||
[ 98%] Building CXX object test/tools/CMakeFiles/solfuzzer.dir/fuzzer.cpp.o
|
[ 98%] Building CXX object test/tools/CMakeFiles/solfuzzer.dir/fuzzer.cpp.o
|
||||||
afl-cc 2.52b by <lcamtuf@google.com>
|
afl-cc 2.52b by <lcamtuf@google.com>
|
||||||
afl-as 2.52b by <lcamtuf@google.com>
|
afl-as 2.52b by <lcamtuf@google.com>
|
||||||
[+] Instrumented 1949 locations (64-bit, non-hardened mode, ratio 100%).
|
[+] 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:
|
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)
|
... (truncated messages)
|
||||||
[*] Validating target binary...
|
[*] Validating target binary...
|
||||||
|
|
||||||
|
@ -141,14 +141,14 @@ Solidity Tools
|
|||||||
|
|
||||||
* `ABI to solidity interface converter <https://gist.github.com/chriseth/8f533d133fa0c15b0d6eaf3ec502c82b>`_
|
* `ABI to solidity interface converter <https://gist.github.com/chriseth/8f533d133fa0c15b0d6eaf3ec502c82b>`_
|
||||||
A script for generating contract interfaces from the ABI of a smart contract.
|
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.
|
Fully automated online static analyzer for smart contracts, providing a security report based on vulnerability patterns.
|
||||||
|
|
||||||
* `Sūrya <https://github.com/ConsenSys/surya/>`_
|
* `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.
|
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.
|
Rich tool package to interact with the EVM. Includes a VM, Etherchain API, and a trace-viewer with gas cost display.
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
|
@ -35,7 +35,7 @@ npm / Node.js
|
|||||||
=============
|
=============
|
||||||
|
|
||||||
Use `npm` for a convenient and portable way to install `solcjs`, a Solidity compiler. The
|
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
|
:ref:`commandline-compiler` documentation assumes you are using
|
||||||
the full-featured compiler, `solc`. So if you install `solcjs` from `npm` then you will
|
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>`_.
|
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 add-apt-repository ppa:ethereum/ethereum-dev
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install solc
|
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:
|
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
|
.. code-block:: bash
|
||||||
@ -123,13 +123,13 @@ We will re-add the pre-built bottles soon.
|
|||||||
brew tap ethereum/ethereum
|
brew tap ethereum/ethereum
|
||||||
brew install solidity
|
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.
|
Homebrew formula directly from Github.
|
||||||
|
|
||||||
View
|
View
|
||||||
`solidity.rb commits on Github <https://github.com/ethereum/homebrew-ethereum/commits/master/solidity.rb>`_.
|
`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``.
|
specific commit of ``solidity.rb``.
|
||||||
|
|
||||||
Install it using ``brew``:
|
Install it using ``brew``:
|
||||||
@ -272,7 +272,7 @@ Building Solidity is quite similar on Linux, macOS and other Unices:
|
|||||||
or even easier:
|
or even easier:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
#note: this will install binaries solc and soltest at usr/local/bin
|
#note: this will install binaries solc and soltest at usr/local/bin
|
||||||
./scripts/build.sh
|
./scripts/build.sh
|
||||||
|
|
||||||
@ -302,7 +302,7 @@ If you are interested what CMake options are available run ``cmake .. -LH``.
|
|||||||
|
|
||||||
SMT Solvers
|
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.
|
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.*
|
*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
|
.. code-block:: bash
|
||||||
|
|
||||||
# disables only Z3 SMT Solver.
|
# disables only Z3 SMT Solver.
|
||||||
cmake .. -DUSE_Z3=OFF
|
cmake .. -DUSE_Z3=OFF
|
||||||
|
|
||||||
# disables only CVC4 SMT Solver.
|
# disables only CVC4 SMT Solver.
|
||||||
cmake .. -DUSE_CVC4=OFF
|
cmake .. -DUSE_CVC4=OFF
|
||||||
|
484
docs/make.bat
484
docs/make.bat
@ -1,242 +1,242 @@
|
|||||||
@ECHO OFF
|
@ECHO OFF
|
||||||
|
|
||||||
REM Command file for Sphinx documentation
|
REM Command file for Sphinx documentation
|
||||||
|
|
||||||
if "%SPHINXBUILD%" == "" (
|
if "%SPHINXBUILD%" == "" (
|
||||||
set SPHINXBUILD=sphinx-build
|
set SPHINXBUILD=sphinx-build
|
||||||
)
|
)
|
||||||
set BUILDDIR=_build
|
set BUILDDIR=_build
|
||||||
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
|
||||||
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
set I18NSPHINXOPTS=%SPHINXOPTS% .
|
||||||
if NOT "%PAPER%" == "" (
|
if NOT "%PAPER%" == "" (
|
||||||
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
|
||||||
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "" goto help
|
if "%1" == "" goto help
|
||||||
|
|
||||||
if "%1" == "help" (
|
if "%1" == "help" (
|
||||||
:help
|
:help
|
||||||
echo.Please use `make ^<target^>` where ^<target^> is one of
|
echo.Please use `make ^<target^>` where ^<target^> is one of
|
||||||
echo. html to make standalone HTML files
|
echo. html to make standalone HTML files
|
||||||
echo. dirhtml to make HTML files named index.html in directories
|
echo. dirhtml to make HTML files named index.html in directories
|
||||||
echo. singlehtml to make a single large HTML file
|
echo. singlehtml to make a single large HTML file
|
||||||
echo. pickle to make pickle files
|
echo. pickle to make pickle files
|
||||||
echo. json to make JSON files
|
echo. json to make JSON files
|
||||||
echo. htmlhelp to make HTML files and a HTML help project
|
echo. htmlhelp to make HTML files and a HTML help project
|
||||||
echo. qthelp to make HTML files and a qthelp project
|
echo. qthelp to make HTML files and a qthelp project
|
||||||
echo. devhelp to make HTML files and a Devhelp project
|
echo. devhelp to make HTML files and a Devhelp project
|
||||||
echo. epub to make an epub
|
echo. epub to make an epub
|
||||||
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
|
||||||
echo. text to make text files
|
echo. text to make text files
|
||||||
echo. man to make manual pages
|
echo. man to make manual pages
|
||||||
echo. texinfo to make Texinfo files
|
echo. texinfo to make Texinfo files
|
||||||
echo. gettext to make PO message catalogs
|
echo. gettext to make PO message catalogs
|
||||||
echo. changes to make an overview over all changed/added/deprecated items
|
echo. changes to make an overview over all changed/added/deprecated items
|
||||||
echo. xml to make Docutils-native XML files
|
echo. xml to make Docutils-native XML files
|
||||||
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
echo. pseudoxml to make pseudoxml-XML files for display purposes
|
||||||
echo. linkcheck to check all external links for integrity
|
echo. linkcheck to check all external links for integrity
|
||||||
echo. doctest to run all doctests embedded in the documentation if enabled
|
echo. doctest to run all doctests embedded in the documentation if enabled
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "clean" (
|
if "%1" == "clean" (
|
||||||
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
|
||||||
del /q /s %BUILDDIR%\*
|
del /q /s %BUILDDIR%\*
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
%SPHINXBUILD% 2> nul
|
%SPHINXBUILD% 2> nul
|
||||||
if errorlevel 9009 (
|
if errorlevel 9009 (
|
||||||
echo.
|
echo.
|
||||||
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
|
||||||
echo.installed, then set the SPHINXBUILD environment variable to point
|
echo.installed, then set the SPHINXBUILD environment variable to point
|
||||||
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
echo.to the full path of the 'sphinx-build' executable. Alternatively you
|
||||||
echo.may add the Sphinx directory to PATH.
|
echo.may add the Sphinx directory to PATH.
|
||||||
echo.
|
echo.
|
||||||
echo.If you don't have Sphinx installed, grab it from
|
echo.If you don't have Sphinx installed, grab it from
|
||||||
echo.http://sphinx-doc.org/
|
echo.http://sphinx-doc.org/
|
||||||
exit /b 1
|
exit /b 1
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "html" (
|
if "%1" == "html" (
|
||||||
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
%SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
echo.Build finished. The HTML pages are in %BUILDDIR%/html.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "dirhtml" (
|
if "%1" == "dirhtml" (
|
||||||
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
%SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "singlehtml" (
|
if "%1" == "singlehtml" (
|
||||||
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
%SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "pickle" (
|
if "%1" == "pickle" (
|
||||||
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
%SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; now you can process the pickle files.
|
echo.Build finished; now you can process the pickle files.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "json" (
|
if "%1" == "json" (
|
||||||
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
%SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; now you can process the JSON files.
|
echo.Build finished; now you can process the JSON files.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "htmlhelp" (
|
if "%1" == "htmlhelp" (
|
||||||
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
%SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; now you can run HTML Help Workshop with the ^
|
echo.Build finished; now you can run HTML Help Workshop with the ^
|
||||||
.hhp project file in %BUILDDIR%/htmlhelp.
|
.hhp project file in %BUILDDIR%/htmlhelp.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "qthelp" (
|
if "%1" == "qthelp" (
|
||||||
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
%SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Solidity.qhcp
|
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Solidity.qhcp
|
||||||
echo.To view the help file:
|
echo.To view the help file:
|
||||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Solidity.ghc
|
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Solidity.ghc
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "devhelp" (
|
if "%1" == "devhelp" (
|
||||||
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
%SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished.
|
echo.Build finished.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "epub" (
|
if "%1" == "epub" (
|
||||||
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
%SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
echo.Build finished. The epub file is in %BUILDDIR%/epub.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "latex" (
|
if "%1" == "latex" (
|
||||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "latexpdf" (
|
if "%1" == "latexpdf" (
|
||||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
cd %BUILDDIR%/latex
|
cd %BUILDDIR%/latex
|
||||||
make all-pdf
|
make all-pdf
|
||||||
cd %BUILDDIR%/..
|
cd %BUILDDIR%/..
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "latexpdfja" (
|
if "%1" == "latexpdfja" (
|
||||||
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
%SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
|
||||||
cd %BUILDDIR%/latex
|
cd %BUILDDIR%/latex
|
||||||
make all-pdf-ja
|
make all-pdf-ja
|
||||||
cd %BUILDDIR%/..
|
cd %BUILDDIR%/..
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
echo.Build finished; the PDF files are in %BUILDDIR%/latex.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "text" (
|
if "%1" == "text" (
|
||||||
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
%SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The text files are in %BUILDDIR%/text.
|
echo.Build finished. The text files are in %BUILDDIR%/text.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "man" (
|
if "%1" == "man" (
|
||||||
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
%SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
echo.Build finished. The manual pages are in %BUILDDIR%/man.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "texinfo" (
|
if "%1" == "texinfo" (
|
||||||
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
%SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "gettext" (
|
if "%1" == "gettext" (
|
||||||
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
%SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "changes" (
|
if "%1" == "changes" (
|
||||||
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
%SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.The overview file is in %BUILDDIR%/changes.
|
echo.The overview file is in %BUILDDIR%/changes.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "linkcheck" (
|
if "%1" == "linkcheck" (
|
||||||
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
%SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Link check complete; look for any errors in the above output ^
|
echo.Link check complete; look for any errors in the above output ^
|
||||||
or in %BUILDDIR%/linkcheck/output.txt.
|
or in %BUILDDIR%/linkcheck/output.txt.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "doctest" (
|
if "%1" == "doctest" (
|
||||||
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
%SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Testing of doctests in the sources finished, look at the ^
|
echo.Testing of doctests in the sources finished, look at the ^
|
||||||
results in %BUILDDIR%/doctest/output.txt.
|
results in %BUILDDIR%/doctest/output.txt.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "xml" (
|
if "%1" == "xml" (
|
||||||
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
%SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
echo.Build finished. The XML files are in %BUILDDIR%/xml.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
if "%1" == "pseudoxml" (
|
if "%1" == "pseudoxml" (
|
||||||
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
%SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
|
||||||
if errorlevel 1 exit /b 1
|
if errorlevel 1 exit /b 1
|
||||||
echo.
|
echo.
|
||||||
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
: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
|
Furthermore, Mist can use the userdoc to display a confirmation message to the user
|
||||||
whenever they interact with the contract.
|
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
|
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.
|
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
|
This is of course not the case if storage pointers are passed as function arguments as in the case for
|
||||||
the high-level libraries.
|
the high-level libraries.
|
||||||
|
|
||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The use of ``callcode`` is discouraged and will be removed in the future.
|
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.
|
// Return the comment if available.
|
||||||
if (string const* cmt = comment())
|
if (string const* cmt = comment())
|
||||||
return cmt->data();
|
return cmt->data();
|
||||||
|
|
||||||
// Fallback to base what().
|
// Fallback to base what().
|
||||||
// Boost accepts nullptr, but the C++ standard doesn't
|
// Boost accepts nullptr, but the C++ standard doesn't
|
||||||
// and crashes on some platforms.
|
// 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
|
#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
|
#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_ {};
|
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>
|
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> {};
|
: 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>
|
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> {};
|
: public mpl::bool_<is_convertible<expression<tag, Arg1, Arg2, Arg3, Arg4>, number<B, ET> >::value> {};
|
||||||
|
|
||||||
template <class Backend, expression_template_option ExpressionTemplates>
|
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());
|
return eval_eq(a.backend(), b.backend());
|
||||||
}
|
}
|
||||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
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)
|
operator == (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_eq;
|
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));
|
return eval_eq(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
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)
|
operator == (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_eq;
|
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));
|
return eval_eq(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
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)
|
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;
|
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));
|
return eval_eq(t.backend(), result_type::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
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)
|
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;
|
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));
|
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>
|
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)
|
operator == (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_eq;
|
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());
|
return !eval_eq(a.backend(), b.backend());
|
||||||
}
|
}
|
||||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
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)
|
operator != (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_eq;
|
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));
|
return !eval_eq(a.backend(), number<Backend, et_on>::canonical_value(b));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
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)
|
operator != (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_eq;
|
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));
|
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>
|
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)
|
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;
|
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));
|
return !eval_eq(t.backend(), result_type::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
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)
|
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;
|
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));
|
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>
|
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)
|
operator != (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_eq;
|
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());
|
return eval_lt(a.backend(), b.backend());
|
||||||
}
|
}
|
||||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
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)
|
operator < (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_lt;
|
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));
|
return eval_lt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
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)
|
operator < (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_gt;
|
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));
|
return eval_gt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
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)
|
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;
|
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));
|
return eval_gt(t.backend(), result_type::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
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)
|
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;
|
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));
|
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>
|
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)
|
operator < (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_lt;
|
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());
|
return eval_gt(a.backend(), b.backend());
|
||||||
}
|
}
|
||||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
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)
|
operator > (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_gt;
|
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));
|
return eval_gt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
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)
|
operator > (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_lt;
|
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));
|
return eval_lt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
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)
|
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;
|
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;
|
return a > t;
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
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)
|
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;
|
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;
|
return t > b;
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Tagb, class A1b, class A2b, class A3b, class A4b>
|
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)
|
operator > (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_gt;
|
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());
|
return !eval_gt(a.backend(), b.backend());
|
||||||
}
|
}
|
||||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
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)
|
operator <= (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_gt;
|
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));
|
return !eval_gt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
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)
|
operator <= (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_lt;
|
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));
|
return !eval_lt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
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)
|
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;
|
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));
|
return !eval_lt(t.backend(), result_type::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
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)
|
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;
|
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));
|
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>
|
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)
|
operator <= (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_gt;
|
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());
|
return !eval_lt(a.backend(), b.backend());
|
||||||
}
|
}
|
||||||
template <class Backend, expression_template_option ExpressionTemplates, class Arithmetic>
|
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)
|
operator >= (const number<Backend, ExpressionTemplates>& a, const Arithmetic& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_lt;
|
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));
|
return !eval_lt(a.backend(), number<Backend, ExpressionTemplates>::canonical_value(b));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Backend, expression_template_option ExpressionTemplates>
|
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)
|
operator >= (const Arithmetic& a, const number<Backend, ExpressionTemplates>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_gt;
|
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));
|
return !eval_gt(b.backend(), number<Backend, ExpressionTemplates>::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Arithmetic, class Tag, class A1, class A2, class A3, class A4>
|
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)
|
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;
|
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));
|
return !eval_gt(t.backend(), result_type::canonical_value(a));
|
||||||
}
|
}
|
||||||
template <class Tag, class A1, class A2, class A3, class A4, class Arithmetic>
|
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)
|
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;
|
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));
|
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>
|
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)
|
operator >= (const detail::expression<Tag, A1, A2, A3, A4>& a, const detail::expression<Tagb, A1b, A2b, A3b, A4b>& b)
|
||||||
{
|
{
|
||||||
using default_ops::eval_lt;
|
using default_ops::eval_lt;
|
||||||
|
@ -281,19 +281,19 @@ bool ExpressionCompiler::visit(TupleExpression const& _tuple)
|
|||||||
if (_tuple.isInlineArray())
|
if (_tuple.isInlineArray())
|
||||||
{
|
{
|
||||||
ArrayType const& arrayType = dynamic_cast<ArrayType const&>(*_tuple.annotation().type);
|
ArrayType const& arrayType = dynamic_cast<ArrayType const&>(*_tuple.annotation().type);
|
||||||
|
|
||||||
solAssert(!arrayType.isDynamicallySized(), "Cannot create dynamically sized inline array.");
|
solAssert(!arrayType.isDynamicallySized(), "Cannot create dynamically sized inline array.");
|
||||||
m_context << max(u256(32u), arrayType.memorySize());
|
m_context << max(u256(32u), arrayType.memorySize());
|
||||||
utils().allocateMemory();
|
utils().allocateMemory();
|
||||||
m_context << Instruction::DUP1;
|
m_context << Instruction::DUP1;
|
||||||
|
|
||||||
for (auto const& component: _tuple.components())
|
for (auto const& component: _tuple.components())
|
||||||
{
|
{
|
||||||
component->accept(*this);
|
component->accept(*this);
|
||||||
utils().convertType(*component->annotation().type, *arrayType.baseType(), true);
|
utils().convertType(*component->annotation().type, *arrayType.baseType(), true);
|
||||||
utils().storeInMemoryDynamic(*arrayType.baseType(), true);
|
utils().storeInMemoryDynamic(*arrayType.baseType(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_context << Instruction::POP;
|
m_context << Instruction::POP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1569,7 +1569,7 @@ void ExpressionCompiler::endVisit(Literal const& _literal)
|
|||||||
{
|
{
|
||||||
CompilerContext::LocationSetter locationSetter(m_context, _literal);
|
CompilerContext::LocationSetter locationSetter(m_context, _literal);
|
||||||
TypePointer type = _literal.annotation().type;
|
TypePointer type = _literal.annotation().type;
|
||||||
|
|
||||||
switch (type->category())
|
switch (type->category())
|
||||||
{
|
{
|
||||||
case Type::Category::RationalNumber:
|
case Type::Category::RationalNumber:
|
||||||
@ -1827,7 +1827,7 @@ void ExpressionCompiler::appendExternalFunctionCall(
|
|||||||
auto funKind = _functionType.kind();
|
auto funKind = _functionType.kind();
|
||||||
|
|
||||||
solAssert(funKind != FunctionType::Kind::BareStaticCall || m_context.evmVersion().hasStaticCall(), "");
|
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 returnSuccessCondition = funKind == FunctionType::Kind::BareCall || funKind == FunctionType::Kind::BareCallCode || funKind == FunctionType::Kind::BareDelegateCall || funKind == FunctionType::Kind::BareStaticCall;
|
||||||
bool isCallCode = funKind == FunctionType::Kind::BareCallCode;
|
bool isCallCode = funKind == FunctionType::Kind::BareCallCode;
|
||||||
bool isDelegateCall = funKind == FunctionType::Kind::BareDelegateCall || funKind == FunctionType::Kind::DelegateCall;
|
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(_second == 0, "There should not be a second size argument to type " + string(Token::toString(_baseType)) + ".");
|
||||||
solAssert(
|
solAssert(
|
||||||
_first <= 256 && _first % 8 == 0,
|
_first <= 256 && _first % 8 == 0,
|
||||||
"No elementary type " + string(Token::toString(_baseType)) + to_string(_first) + "."
|
"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
|
else
|
||||||
return make_tuple(Token::FixedMxN, m, n);
|
return make_tuple(Token::FixedMxN, m, n);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return make_tuple(Token::Identifier, 0, 0);
|
return make_tuple(Token::Identifier, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
if isfile(path):
|
if isfile(path):
|
||||||
extract_and_write(path, path)
|
extract_and_write(path, path)
|
||||||
else:
|
else:
|
||||||
for root, subdirs, files in os.walk(path):
|
for root, subdirs, files in os.walk(path):
|
||||||
if '_build' in subdirs:
|
if '_build' in subdirs:
|
||||||
subdirs.remove('_build')
|
subdirs.remove('_build')
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
## method = ftp
|
## method = ftp
|
||||||
## incoming = ~ethereum/ethereum-dev
|
## incoming = ~ethereum/ethereum-dev
|
||||||
## login = anonymous
|
## login = anonymous
|
||||||
##
|
##
|
||||||
## [ethereum]
|
## [ethereum]
|
||||||
## fqdn = ppa.launchpad.net
|
## fqdn = ppa.launchpad.net
|
||||||
## method = ftp
|
## method = ftp
|
||||||
|
@ -35,7 +35,7 @@ for v in versions:
|
|||||||
continue
|
continue
|
||||||
versions[v]['bugs'] += [bug['name']]
|
versions[v]['bugs'] += [bug['name']]
|
||||||
|
|
||||||
new_contents = json.dumps(versions, sort_keys=True, indent=4)
|
new_contents = json.dumps(versions, sort_keys=True, indent=4, separators=(',', ': '))
|
||||||
with open(path + '/../docs/bugs_by_version.json', 'r') as bugs_by_version:
|
with open(path + '/../docs/bugs_by_version.json', 'r') as bugs_by_version:
|
||||||
old_contents = bugs_by_version.read()
|
old_contents = bugs_by_version.read()
|
||||||
with open(path + '/../docs/bugs_by_version.json', 'w') as bugs_by_version:
|
with open(path + '/../docs/bugs_by_version.json', 'w') as bugs_by_version:
|
||||||
|
@ -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 {
|
contract test {
|
||||||
/// @dev Multiplies a number by 7 and adds second parameter
|
/// @dev Multiplies a number by 7 and adds second parameter
|
||||||
/// @param a Documentation for the first parameter
|
/// @param a Documentation for the first parameter
|
||||||
/// @param
|
/// @param
|
||||||
function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; }
|
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 {
|
contract test {
|
||||||
/// @dev Multiplies a number by 7 and adds second parameter
|
/// @dev Multiplies a number by 7 and adds second parameter
|
||||||
/// @param a Documentation for the first 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; }
|
function mul(uint a, uint second) public returns (uint d) { return a * 7 + second; }
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
|
Loading…
Reference in New Issue
Block a user