Commit Graph

326 Commits

Author SHA1 Message Date
chriseth
cc2f71e4ac Move dynamic type removal out of the type system. 2018-03-21 14:53:29 +00:00
chriseth
eecc26deec Make external library functions accessible. 2018-03-13 17:18:46 +01:00
Daniel Kirchner
fb4d01e2cd Add gasleft to FunctionType::richIdentifier(). 2018-03-06 17:29:04 +01:00
chriseth
08b6a72d37 Fix multi-dimensional arrays in the ABI. 2018-03-01 14:28:27 +01:00
Alex Beregszaszi
b62d43912b
Merge pull request #3589 from ethereum/identifiers
Clean up type identifiers
2018-02-26 20:27:26 +01:00
Alex Beregszaszi
b471983e3c Use new escaping helpers for type identifiers 2018-02-26 19:09:43 +01:00
Alex Beregszaszi
2e7067fbe4 Rename Types::identifier to Types::richIdentifier 2018-02-26 19:09:43 +01:00
Alex Beregszaszi
751705978e Add helpers escapeIdentifier to Types 2018-02-26 19:09:39 +01:00
chriseth
4da20bdf01 Fix: Function types for getters should not have storage pointers. 2018-02-26 11:17:40 +01:00
chriseth
917dd28eef Simplify FunctionType constructors. 2018-02-26 10:45:41 +01:00
chriseth
560fbd0df1 Always use shortened literal number representation. 2018-02-13 11:43:47 +01:00
Federico Bond
a320ffeafd Avoid output messages size blow-up using huge bignums literals 2018-02-12 22:53:33 +00:00
Kwang Yul Seo
d70ff5f8c3 Remove a redundant check
m_type can't be FunctionType::Kind::DelegateCall.
2017-11-13 09:54:55 +09:00
Alex Beregszaszi
475b818801 Remove obsolete createTypeError in AST 2017-10-05 20:18:46 +01:00
Alex Beregszaszi
09276cb9d3 Do not add members of address to contracts in experimental 0.5.0 2017-10-05 11:42:34 +01:00
Alex Beregszaszi
a9847c9551 Use solAssert and not assert 2017-10-04 13:05:55 +01:00
Alex Beregszaszi
d5d1a08b09 Pull out helper to apply address member to contract members 2017-09-28 14:54:15 +01:00
Alex Beregszaszi
aa6de49457 Simplify address overloading 2017-09-28 14:53:41 +01:00
Alex Beregszaszi
ee65ecfb3b Ensure that address types are always declared as 160bit 2017-09-26 22:46:33 +01:00
chriseth
0696545808 Check for interface types of members and cache recursion check. 2017-09-16 12:31:13 +01:00
chriseth
70d70e7816 Implement struct encoder. 2017-09-16 12:31:12 +01:00
chriseth
36a90289e6 Fix interface type conversion internal to structs. 2017-09-16 12:12:43 +01:00
chriseth
080be885f8 Function signatures containing structs. 2017-09-16 12:12:43 +01:00
chriseth
59ea19b3b9 Check for recursive structs. 2017-09-16 12:12:43 +01:00
chriseth
2e72bd163a Allow structs as part of function interfaces. 2017-09-16 12:12:43 +01:00
Alex Beregszaszi
fd1f8ab38b Rename .sig to .selector on function types 2017-09-13 11:40:57 +01:00
Alex Beregszaszi
58f7a27ee0 Add sig member on function type 2017-09-13 11:40:57 +01:00
chriseth
93b1cc9702 Merge pull request #2833 from ethereum/statemutability-builtins
Mark all built in functions with appropriate statemutability
2017-08-29 15:24:51 +02:00
Alex Beregszaszi
7fb4a64136 Move all file specific globals to anonymous namespace 2017-08-29 11:09:18 +01:00
Alex Beregszaszi
79e84a8fa4 Swap declaration/statemutability in FunctionType constructor 2017-08-28 19:43:35 +01:00
Alex Beregszaszi
aa94000a91 Mark all built in functions with appropriate statemutability 2017-08-28 19:43:35 +01:00
Alex Beregszaszi
c7cb00d49a Mark event non-payable and not view 2017-08-28 16:37:45 +01:00
Alex Beregszaszi
f2d6226718 Some smaller issues found by Covertiy Scan 2017-08-22 13:55:28 +01:00
Alex Beregszaszi
b25f0c52ac Reject the creation of interface with the new statement 2017-08-21 23:02:18 +01:00
Alex Beregszaszi
93be0dd923 FunctionType comparison/identifer to support all statemutability levels 2017-08-16 17:23:08 +01:00
chriseth
2411f5d839 Merge pull request #2704 from ethereum/newEncoder
New ABI encoder
2017-08-14 17:04:00 +02:00
Alex Beregszaszi
a26a5f20ce Remove constant/payable in all function types 2017-08-14 14:21:47 +01:00
Alex Beregszaszi
2a9ba937ba Replace constant/payable with StateMutability in AST 2017-08-14 14:21:47 +01:00
chriseth
77b26552b1 Allow multi-dimensional arrays in interfaces. 2017-08-14 12:44:25 +02:00
chriseth
a7a9ed4718 Merge pull request #2727 from ethereum/simplify-types
Simplify if/else statements in Types
2017-08-11 11:46:16 +02:00
Alex Beregszaszi
3dcf089c3f Simplify if/else statements in Types 2017-08-10 19:14:33 +01:00
gubatron
ad7a63f890 FunctionType operator== boolean refactor 2017-08-10 17:04:40 +01:00
Alex Beregszaszi
1b32cdcf21 Check for payable when comparing function types 2017-08-10 17:03:45 +01:00
chriseth
b38f31617e Add isDynamicallyEncoded member function to types. 2017-08-09 23:18:42 +01:00
Alex Beregszaszi
b7642dc8a7 Disallow gas modifier on sha255/ripemd160/ecrecover 2017-08-01 20:55:01 +01:00
Alex Beregszaszi
6d37f30d76 Rename Bare to Barecall 2017-08-01 10:47:10 +01:00
Alex Beregszaszi
d4e44ecb46 Disallow externalSignature for fallback functions 2017-07-27 21:52:58 +01:00
Alex Beregszaszi
8098030986 Use solAssert instead of boost throw where possible 2017-07-26 22:23:21 +01:00
chriseth
72917c4f35 Cleanup fixed point type changes 2017-07-19 22:13:42 +01:00
VoR0220
78769f3b39 Change fixed point types to have digit count
Signed-off-by: VoR0220 <rj@erisindustries.com>
2017-07-19 21:49:01 +01:00
Alex Beregszaszi
cb4875a28b Issue error properly for oversized arrays for calldata 2017-07-13 22:33:46 +02:00
Federico Bond
f20b150f38 Add type error when attempting value transfer to a non-payable contract 2017-07-12 23:57:53 -03:00
chriseth
01a1296e90 Helper functions. 2017-07-11 11:24:41 +02:00
chriseth
4407a13c17 Only allow equality checks for internal function types. 2017-06-26 16:30:37 +02:00
chriseth
f47e6e90fb Disallow comparisons between some types. 2017-06-26 16:30:36 +02:00
Alex Beregszaszi
d5f8ce90c7 Merge interface/Exceptions and interface/Utils 2017-06-22 11:25:07 +01:00
chriseth
dea7b864e6 Compact format for AST-Json with backwards compatibility 2017-05-17 11:14:33 +02:00
Alex Beregszaszi
3ae88377d6 Change references to FunctionType::Location 2017-03-16 12:49:52 +00:00
Alex Beregszaszi
7123f25210 Rename FunctionType::Location to FunctionType::Kind 2017-03-16 12:49:17 +00:00
chriseth
0c8a766146 Merge pull request #1698 from ethereum/exp-notation
Fix scientific notation in number literals
2017-03-15 14:55:45 +01:00
Alex Beregszaszi
e923f27ea8 Split out parseRational from isValidLiteral 2017-03-15 13:06:27 +00:00
Alex Beregszaszi
dde87de4cf Rename x to value 2017-03-15 13:06:27 +00:00
Alex Beregszaszi
a2b9f52ca4 Disallow radix points in hex literals 2017-03-15 13:06:27 +00:00
Alex Beregszaszi
07045d492f Do not try parsing hex numbers as scientific notation 2017-03-15 13:06:27 +00:00
Alex Beregszaszi
dfc8f890bf Support older version of boost 2017-03-15 13:06:27 +00:00
Alex Beregszaszi
1083e6da68 Support negative exponent 2017-03-15 13:06:26 +00:00
Alex Beregszaszi
924a8fff6b Fix exponentional notation in number literals 2017-03-15 13:06:24 +00:00
chriseth
f39763e91c Type checking for pure expressions. 2017-03-13 13:30:21 +01:00
Ryan Casey
fe8d09a3c1 Fix 'ambiguous overload for operator==' Boost error. 2017-03-09 17:04:26 -08:00
chriseth
a689152c4b Convert reference types to pointers in member function conversion. 2017-03-01 16:02:36 +01:00
chriseth
d2c79bf8e9 Merge pull request #1700 from ethereum/fixNoMobile
Some checks for the existence of mobile type.
2017-02-24 15:50:45 +01:00
chriseth
92bf5154fd Merge branch 'develop' into fixNoMobile 2017-02-24 10:39:55 +01:00
Alex Beregszaszi
4d290e551c Disallow setting .gas() on .transfer() 2017-02-24 00:27:36 +00:00
Alex Beregszaszi
81006dae98 Support gas modifier on addr.transfer() 2017-02-24 00:18:18 +00:00
Alex Beregszaszi
4264625c69 Implement address.transfer() 2017-02-24 00:17:45 +00:00
chriseth
c3c3cccbec Fix early exist for fatal errors. 2017-02-16 14:57:00 +01:00
chriseth
dcc16c81e2 Some checks for the existence of mobile type. 2017-02-16 11:46:27 +01:00
Alex Beregszaszi
f3158f92d6 Support revert() 2017-02-10 22:40:42 +00:00
Alex Beregszaszi
767ec1d670 Support explicit conversion of external function type to address 2017-02-01 12:23:47 +00:00
chriseth
a9c6ff4ac8 Refactor json return type generation. 2017-01-26 18:21:19 +01:00
chriseth
1316bb7565 Warn about invalid checksums of addresses. 2017-01-24 23:37:48 +01:00
chriseth
7159944f0f Reset AST node IDs between compilation runs. 2017-01-20 12:00:16 +01:00
chriseth
da178d967f Properly escape user strings and lists. 2017-01-19 13:23:58 +01:00
chriseth
3fed790a56 Type identifiers. 2017-01-19 13:23:57 +01:00
chriseth
2738045030 Cleaner shift handling and type conversion for binary operations. 2016-12-12 11:12:12 +01:00
chriseth
2df60bec92 Type after shift should be type of left operand. 2016-12-12 11:12:12 +01:00
Alex Beregszaszi
b8b4f5e9f9 Support bitshifting in variables 2016-12-12 11:12:10 +01:00
Alex Beregszaszi
a9e92cb686 Rename dev::validate to dev::validateUTF8 2016-11-28 22:28:21 +00:00
Alex Beregszaszi
c01426efec Make position optional in dev::validate 2016-11-28 22:27:55 +00:00
chriseth
da566b956e Indentation. 2016-11-25 14:36:44 +01:00
Yoichi Hirai
e136ec8704
ast: string literals that are not valid UTF are not convertible to strings 2016-11-25 13:36:06 +01:00
VoR0220
3f9f725737 Fix licensing headers
Signed-off-by: VoR0220 <rj@erisindustries.com>
2016-11-23 12:22:33 +01:00
chriseth
2c14a96820 Some more assertions and style changes. 2016-11-16 15:09:01 +01:00
chriseth
ec31d08775 Change encoding to address-funid and add "function" as ABI type. 2016-11-16 14:37:19 +01:00
chriseth
22b4d1b29a Check that no internals are used in any external function type. 2016-11-16 14:37:18 +01:00
chriseth
925d674146 Disallow payable internal functions. 2016-11-16 14:37:18 +01:00
chriseth
f21f794f3c delete for function types 2016-11-16 14:37:18 +01:00
chriseth
ff3553a348 Change alignment. 2016-11-16 14:37:18 +01:00
chriseth
62492b67e7 Changelog entry and small fixes. 2016-11-16 14:37:18 +01:00
chriseth
6f19559de0 Fix some type checks and tests for internal / external function parameters. 2016-11-16 14:37:17 +01:00
chriseth
dd173f83e3 Code generator for function types. 2016-11-16 14:37:17 +01:00
chriseth
cc8583ec7d Function types. 2016-11-16 14:37:17 +01:00
Alex Sinyagin
6db9fd498a Print canonical names of structs and enums in AST 2016-11-14 13:39:46 +00:00
Yoichi Hirai
20c2ca3992
ast, codegen: disallow conversion between different enum types 2016-11-11 17:48:03 +01:00
Yoichi Hirai
e6098f0039
ast: add EnumType::numberOfMembers() 2016-11-11 17:47:48 +01:00
Yoichi Hirai
6c15757618
Type checker: move the burden of computing mobile type to commonType
This solves #621
2016-11-11 15:51:54 +01:00
Yoichi Hirai
3ca5900b8c
ast: ban signed EXP, fixing #1246 2016-10-25 16:49:10 +02:00
chriseth
f25aa0c68b More checks for missing mobile type. 2016-10-24 16:45:25 +02:00
chriseth
2b00804d1d Fix crash in throw. 2016-10-24 14:32:49 +02:00
Yoichi Hirai
7887045a48
ast: simplifications suggested by @chriseth 2016-10-20 16:09:52 +02:00
Yoichi Hirai
ff9039b2a8
When a contract type is super, its members do not contain the functions of itself
Fixes #1151
2016-10-20 16:09:52 +02:00
Alex Beregszaszi
7ac27c957e Use >> (SAR) to denote constant shifts 2016-10-20 00:03:09 +01:00
Alex Beregszaszi
33250eef9e Reject negative shifts within constants 2016-10-20 00:03:09 +01:00
RJ
48f2028911 Support shifting constants 2016-10-20 00:03:09 +01:00
Alex Beregszaszi
fdd1108c1c Omit non-convertible bound functions 2016-10-19 10:41:04 +01:00
Alex Beregszaszi
003359a0b6 Ensure that bound functions cannot be defined without self type 2016-10-19 10:41:04 +01:00
Yoichi Hirai
8e11bac8de
Check if a fixedBytes fits an integer type
before looking up the size of the integer type.

Fixes #1150.
2016-10-13 20:17:13 +02:00
Alex Beregszaszi
aefb6e5fcf Rename dev::sha3 to dev::keccak256 2016-10-06 14:53:40 +01:00
Alex Beregszaszi
2d9c407456 Include assert for selfType on bound functions to avoid crash 2016-09-06 22:10:51 +01:00
chriseth
9c64edf110 Change function type to include and propagate payable and constant modifier. 2016-09-05 21:28:28 +02:00
Alex Beregszaszi
962531af96 Merged in changes from chriseth/payable 2016-09-05 21:28:28 +02:00
Alex Beregszaszi
a34f2f1a31 Support payable keyword for functions 2016-09-05 21:28:18 +02:00
Denton Liu
faf0b3f669 Remove After from Types.cpp 2016-08-11 10:15:59 -04:00
Alex Beregszaszi
5d9347f022 Remove dev::utf8 namespace 2016-08-08 20:05:31 +01:00
Alex Beregszaszi
f1df3dee53 Use size_t in dev::utf8::validate() 2016-08-08 20:05:31 +01:00
Alex Beregszaszi
e8c2e87397 Use utf8::validate in StringLiteral::toString 2016-08-08 19:57:41 +01:00
Alex Beregszaszi
bf76321c9e Move LiteralString::toString from the header 2016-08-08 19:08:31 +01:00
chriseth
754a992500 Inaccessible dynamic types 2016-06-02 12:52:25 +02:00
chriseth
708129abd5 Fixes for invalid cleanups for small types. 2016-05-20 16:52:40 +02:00
VoR0220
9192357452 updated docs
types

reference
2016-05-18 16:36:05 -05:00
VoR0220
6289410152 explicit conversion and loosening of binary operations on integer and fixed point types...still other problems
fixed some spaces and deleted lines from failing test
2016-05-18 15:52:09 -05:00
VoR0220
3ba308fb2e current debugging info 2016-05-18 15:52:09 -05:00
chriseth
d4206b7cd0 Remove unused tests and add asserts for not implemented parts in code generation.
quick fix on christian's rational

change so that ubuntu will stop yelling

be more specific with rational declaration for Windows sake

rational in namespace correction for windows
2016-05-10 16:03:33 -05:00
chriseth
656405240e Simplify interface of RationalNumber. 2016-05-10 19:40:37 +02:00
chriseth
cf226f0607 Special case for moving sign bit to fractional part. 2016-05-10 19:40:37 +02:00
chriseth
02e1c9be0d Cleanup. 2016-05-10 19:40:37 +02:00
chriseth
4dfe9a216c Disallow explicit fixed->enum, but allow bytes->fixed. 2016-05-10 19:40:37 +02:00
chriseth
ef7049f9a6 Some cleanup. 2016-05-10 19:40:37 +02:00
chriseth
22318c0c1a Replace "unsigned int" by "unsigned". 2016-05-10 19:40:37 +02:00
chriseth
80c368dac1 Prefer mobileType() to check rational range. 2016-05-10 19:40:35 +02:00
VoR0220
a6fc3c8f30 reorganized tests and fixed mobile types and implicit conversions of rationals and fixed point types
one final tweak

check for null types
2016-05-09 11:41:03 -05:00
VoR0220
bfc238c8d1 updated algorithm for bit finding...now to figure out literal value
tiny fixups

changed location of the check

got rid of extra space and fixed a couple of things

added binary results bits

change back literal value
2016-05-09 11:41:03 -05:00
VoR0220
5bddb2d6ff changed algorithm for finding bits 2016-05-09 11:41:03 -05:00
VoR0220
4b3e1f140c much better way of doing modulus 2016-05-09 11:41:03 -05:00
VoR0220
82039b732e added bytes conversion tests, resolved that, converted to binary scaling, refactored the find algo to prevent large numbers and take into account integer bytes
think we're good on solidity type name resolution now

removed couts

updates to documentation and more removed couts along with literal value implementation

forgot semicolons
2016-05-09 11:41:03 -05:00
VoR0220
f0ea817580 fixing modulus and Solidity Name and Type Resolution
minor fixes

current attempts at binary fixup
2016-05-09 11:41:03 -05:00
VoR0220
4b749fc333 changed names for Rational Constants and categories 2016-05-09 11:41:02 -05:00
VoR0220
4d283b2b30 currently what we have 2016-05-09 11:41:02 -05:00
RJ Catalano
93295ae8f8 got exponents up and working with their inverse, changed a few of the tests....something is working that likely shouldn't be
slight changes to how to flip the rational negative around...still trying to figure it out

tests added

updated tests

odd differences in trying soltest from solc binary, let me know if you can replicate

test not working for odd reason

fixed test problem with fixed literals...still need a way to log this error

broken up the tests, added some, changed some things in types and began compiler work

moar tests and prepping for rebuilding much of the types.cpp file

further fixing

infinite loop still happening but it's somewhere in the fixedPoint methodd

fractional bits needed algo improved! Eliminated 2 errors

Corrected problems with the previous commit. No infinite loops. Actually appear to have corrected an error
2016-05-09 11:41:02 -05:00
RJ Catalano
a1a2eac5fd size capabilities functioning properly for fixed types 2016-05-09 11:41:02 -05:00
RJ Catalano
91fda50922 fixed problem with var...probably a conversion problem for fixed in size capabilities
adding fixed type tests

Removing bitshift and regrouping fixed type tests together
2016-05-09 11:41:02 -05:00
RJ Catalano
6fa5e0fac9 Rational implemented...trying to figure out exponential 2016-05-09 11:41:02 -05:00
RJ Catalano
9a075458ad initial work for fixed types...potentially needing a constant literal type for this
notation

Rational implemented...trying to figure out exponential

fix for token bug, also quick fix for the wei and seconds

fixed problem with var...probably a conversion problem for fixed in size capabilities

adding fixed type tests

Removing bitshift and regrouping fixed type tests together

size capabilities functioning properly for fixed types

got exponents up and working with their inverse, changed a few of the tests....something is working that likely shouldn't be

slight changes to how to flip the rational negative around...still trying to figure it out

tests added

updated tests

odd differences in trying soltest from solc binary, let me know if you can replicate

test not working for odd reason

fixed test problem with fixed literals...still need a way to log this error

broken up the tests, added some, changed some things in types and began compiler work

moar tests and prepping for rebuilding much of the types.cpp file

further fixing

initial work for fixed types...potentially needing a constant literal type for this
2016-05-09 11:41:02 -05:00
chriseth
7ea3d950d7 Allow calling internal functions of libraries.
Internal functions of libraries can be called as if the library were a
base contract of the calling contract. As the calling convention for
internal functions is to not create a new call context, the code of
these functions will be pulled into the context of the caller,
duplicating their code. This might pull in code of further internal or
even private functions.

The use case for such functions is to allow libraries which can operate
on memory types such that these types can also be modified in place.
2016-05-03 22:41:18 +02:00
chriseth
299fef0c79 Do not allow value for delegatecall functions. 2016-03-11 17:50:09 +01:00
chriseth
e5514becb8 BREAKING: Implement delegatecall and make default for library calls. 2016-03-11 17:49:32 +01:00
RJ Catalano
9b67969fd6 further optimization, splitting function into pieces
generating strings on the fly, changed name, and added two tests
2016-02-18 11:23:00 -06:00
RJ Catalano
d2c0712f36 added const correctness to extract functions in Token
optimizations added in

more elegant solution created for m declaration

ubuntu wants to get rid of 0 <= first statement...so I will

change returnToken to token
2016-02-18 11:22:58 -06:00
RJ Catalano
84f2eb461b added two functions in Token to handle long identifiers, redid fromIdentifierOrKeyword, and made complementary changes in scanner and parser 2016-02-18 11:22:58 -06:00
RJ Catalano
f4da126018 tests added and changes made
fixed some silly problems in Token.cpp

windows error fix
2016-02-18 11:22:56 -06:00
RJ Catalano
7b918a7bc7 changes to redefine the token list, the scanner, and the parser and how they pass around variable types of different sizes
not ready for change to FixedPoint just yet

made this more const correct and added a switch statement for easier reading
2016-02-18 11:22:52 -06:00
LianaHus
5fb8953003 style fixes 2016-02-18 13:29:20 +01:00
chriseth
29faf1b298 Index access for bytesXX. 2016-02-09 17:07:04 +01:00
LianaHus
b2daa5a9d8 fixed assert on EI creation for structs containing only mapping or arrays 2016-01-15 17:36:06 +01:00
chriseth
2466fb68a0 Merge pull request #308 from chriseth/fixoverloadbug
Fix bug preventing overloads of different array types.
2015-12-21 15:37:51 +01:00
chriseth
54e3637d23 Add structs and enums to contract types. 2015-12-18 16:50:14 +01:00
chriseth
79c5d032fe Fix bug preventing overloads of different array types. 2015-12-18 13:56:37 +01:00
chriseth
603dc58040 Simple aliasing during import. 2015-12-18 12:46:56 +01:00
chriseth
7f415da886 Code generation for calling bound methods. 2015-12-01 12:35:34 +01:00
chriseth
f9e52c9db1 Also check the object type for bound functions. 2015-11-29 00:16:07 +01:00
chriseth
93b3237c6a Add bound functions to types. 2015-11-29 00:16:07 +01:00
chriseth
cc2df5f9f2 Invalidate cached members if scope changes. 2015-11-26 15:37:55 +01:00
chriseth
b47d593252 Do not store elements of a contract by AST node type. 2015-11-26 15:37:55 +01:00
chriseth
86495dfc57 Make members context-sensitive. 2015-11-26 15:37:55 +01:00
chriseth
68f1da1e3a Fixed string inside struct allocation bug. 2015-11-24 14:54:37 +01:00
chriseth
e3dffb611f File reorganisation. 2015-10-21 00:46:01 +02:00