Commit Graph

551 Commits

Author SHA1 Message Date
chriseth
bfa4f45116 Split memcopy into three functions. 2016-12-11 17:57:15 +01:00
chriseth
4184525d4a Fix inline assembly. 2016-12-11 17:57:15 +01:00
Alex Beregszaszi
efd7b4bfbb Reset stack height after inline assembly block 2016-12-11 17:57:15 +01:00
Alex Beregszaszi
4a11200a27 Better assert message for appendInlineAssembnly 2016-12-11 17:57:15 +01:00
Alex Beregszaszi
b93589b3b6 Implement identity call in inline assembly 2016-12-11 17:57:15 +01:00
Alex Beregszaszi
bf5dac1fb2 Turn off the identity precompile for testing 2016-12-11 17:57:15 +01:00
Alex Beregszaszi
1bf412d9fd Implement CompilerUtils::memoryCopy using inline assembly 2016-12-11 17:57:15 +01:00
Alex Beregszaszi
4abc8ab5a9 Add usingIdentity option to CompilerUtils::memoryCopy 2016-12-11 17:57:15 +01:00
chriseth
84443eb560 Merge pull request #1351 from ethereum/truncate_bit
Truncate a boolean from calldata into one bit
2016-12-08 16:15:35 +01:00
Alex Beregszaszi
86d54c02cd Throw if calling the identity precompile (memoryCopy) failed 2016-12-02 13:18:39 +00:00
chriseth
6a7ff039df Use CBOR encoding. 2016-12-01 16:03:59 +01:00
chriseth
1e35526eb6 Fix tests. 2016-12-01 16:03:59 +01:00
chriseth
91ecc4533d Add swarm hash to the end of the bytecode. 2016-12-01 16:03:59 +01:00
chriseth
5789eaa78d Metadata stamp. 2016-12-01 16:03:59 +01:00
chriseth
55a719a79c Merge pull request #1462 from ethereum/fix-incorrect-assertion
codegen: assertion did not assert non-nullness
2016-12-01 15:14:31 +01:00
Yoichi Hirai
1e791f30aa
codegen: this commit removes one of duplicate assignments 2016-12-01 12:03:25 +01:00
Yoichi Hirai
e29047b24d
codegen: assertion did not assert non-nullness
This commit strengthens an assertion so that it makes sure that a pointer is not null.
Moreover, `isLocalVariable(variable)` is now positively asserted, following the error message.
2016-12-01 11:58:34 +01:00
Yoichi Hirai
d77c8f730c
codegen: clean not only booleans but all types before storing them into memory 2016-11-30 17:42:21 +01:00
Yoichi Hirai
547deec4be
codegen: clean any data from the input 2016-11-30 17:42:03 +01:00
Yoichi Hirai
fb9babce54
codegen: truncate booleans before they enter storage 2016-11-30 17:41:51 +01:00
Yoichi Hirai
0123e74a2e
codegen: cleanup booleans before storing them into memory 2016-11-30 17:41:46 +01:00
Yoichi Hirai
03ccc6df70
codegen: truncate a boolean calldata down to one bit 2016-11-30 17:41:38 +01:00
Alex Beregszaszi
f1bc979c0f Use solUnimplemented wherever possible 2016-11-28 09:51:02 +00:00
Yoichi Hirai
0be5859503
codegen: cleanup values to fit in storage bytes 2016-11-25 15:50:46 +01:00
Yoichi Hirai
548b7ce42d
codegen: storing of non-value types; add some assertions 2016-11-25 15:45:18 +01:00
Yoichi Hirai
fa486f5b44
codegen: shorten the bit truncation 2016-11-25 15:45:18 +01:00
Yoichi Hirai
9d25b5601e
codegen: merge type conversion and cleaning up 2016-11-25 15:45:18 +01:00
Yoichi Hirai
3fb9625127
codegen: document _chopSignBits parameter of convertType function 2016-11-25 15:45:17 +01:00
Yoichi Hirai
ea628001d5
codegen: add an option to CovertType so that it can truncate sign bits 2016-11-25 15:45:16 +01:00
Yoichi Hirai
56d6641086
codegen: cleanup stored values in a more consistent way 2016-11-25 15:44:36 +01:00
Yoichi Hirai
5b8a773986
codegen: cleanup value types before storing them 2016-11-24 11:31:45 +01:00
VoR0220
3f9f725737 Fix licensing headers
Signed-off-by: VoR0220 <rj@erisindustries.com>
2016-11-23 12:22:33 +01:00
Alex Beregszaszi
910269a29f Add appendCallValueCheck 2016-11-17 17:23:35 +00:00
Alex Beregszaszi
ceeb8f4a2b Add payable check for constructor in codegen 2016-11-17 17:23:35 +00: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
0335ed4cb4 Simple peephole optimizer that is activated even if not requested. 2016-11-16 14:37:19 +01:00
chriseth
e51f852504 Converted sub assembly to smart pointer. 2016-11-16 14:37:18 +01:00
chriseth
e543bd34c0 Stored combined creation and runtime tags.
Includes a change to Assembly to allow tags from sub-assemblies to be
used.

Sorry, this get a bit bigger than I thought.
2016-11-16 14:37:18 +01:00
chriseth
e1df3bd77f Fix tests. 2016-11-16 14:37:18 +01:00
Yoichi Hirai
c9f9b2ab4d codegen: add a compilation mode and a runtime context to CompilerContext 2016-11-16 14:37:18 +01:00
chriseth
47794c1da4 Implement uninitialized storage functions. 2016-11-16 14:37:18 +01:00
chriseth
cc847df3c2 Bugfix in code generator. 2016-11-16 14:37:18 +01:00
chriseth
ff3553a348 Change alignment. 2016-11-16 14:37:18 +01:00
chriseth
95d7555e3c External functions in storage. 2016-11-16 14:37:17 +01:00
chriseth
dd173f83e3 Code generator for function types. 2016-11-16 14:37:17 +01:00
Rhett Aultman
58e75c7a48 Unimplemented features moved to their own exception (#1361)
Unimplemented features moved to their own exception

InternalCompilerError is an exception that really should be reserved for
actual internal errors of the compiler.  Unimplemented features can now
use either solUnimplemented( ) or, if it should be conditional, then
solUnimplementedAssert( ).

* Revert some unimplemented exceptions, add handlers

The jsonCompiler and CommandLineInterface needed handlers for the
new UnimplementedFeatureException, and some cases I had moved on to
the new exception were better treated as real internal compiler
errors.

* Standardize on "Unimplemented feature" message
2016-11-14 20:41:58 +00:00
chriseth
07e4cd6e32 Merge pull request #1372 from ethereum/invalid_enum_as_external_ret
Invalid enum as external ret
2016-11-14 19:46:25 +01:00
Yoichi Hirai
dbcbfafda8
codegen: overflow checking also during conversion from enums 2016-11-14 17:09:53 +01:00
Yoichi Hirai
1ff67b492a
codegen: add a missing break; 2016-11-14 16:14:59 +01:00
Yoichi Hirai
81f5734cbe
codegen: move the enum overflow checking closer to the conversion into enums 2016-11-14 11:11:39 +01:00
Yoichi Hirai
20c2ca3992
ast, codegen: disallow conversion between different enum types 2016-11-11 17:48:03 +01:00
Yoichi Hirai
0a6c937dcb
codegen: shorten the overflow checking when converting into enums 2016-11-11 17:48:03 +01:00
Yoichi Hirai
98dcd883e4
codegen: check the value range after converting something to an enum element 2016-11-11 17:48:03 +01:00
Rhett Aultman
4524ad0870 Add support for do/while loops
This commit adds support for a standard do <statement> while <expr>;
form of statement.  While loops were already being supported; supporting
a do/while loop mostly involves reusing code from while loops but putting
the conditional checking last.
2016-11-10 07:07:25 -08:00
chriseth
9920e88eea Clear all value types prior to storing. 2016-10-31 16:40:30 +01:00
chriseth
e00a4b47c0 Merge pull request #1264 from ethereum/988
State variable under contract's name
2016-10-25 12:50:24 +02:00
chriseth
f25aa0c68b More checks for missing mobile type. 2016-10-24 16:45:25 +02:00
Yoichi Hirai
5245a3cf74
codegen: refactor common code 2016-10-24 16:34:23 +02:00
Yoichi Hirai
acba7b92e5
codegen: if a member access has been resolved as a variable, follow that
This fixes at least the first example in #988
2016-10-24 16:34:23 +02:00
Yoichi Hirai
7cee39fc17
codegen: skip contract L for L.Foo where Foo is a type
Fixes #1116
2016-10-24 15:30:26 +02:00
Alex Beregszaszi
0e33b63468 Allow warnings for inline assembly block 2016-10-20 13:25:28 +01:00
Alex Beregszaszi
aefb6e5fcf Rename dev::sha3 to dev::keccak256 2016-10-06 14:53:40 +01:00
chriseth
212e016091 Merge pull request #1104 from ethereum/fixmemcosts
Fix memory resize costs during call
2016-09-17 12:30:41 +02:00
chriseth
5a45990458 Access output memory area so that we do not pay for resize during call. 2016-09-17 11:29:54 +02:00
chriseth
727c6fac85 Allow value transfer to library functions. 2016-09-17 11:29:27 +02:00
chriseth
9ca7472089 Provide gas stipend manually for send(0). 2016-09-06 12:37:01 +02:00
chriseth
f687635e47 Merge pull request #665 from axic/feature/accept-ether
BREAKING: Add payable modifier
2016-09-06 12:25:19 +02:00
chriseth
114502f8ad Merge pull request #1006 from ethereum/nenewaccountgas
Do not pay new account gas.
2016-09-06 11:13:31 +02: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
chriseth
bf3f45c948 Improve error message. 2016-09-05 17:11:23 +02:00
chriseth
69c175fe22 Do not pay new account gas.
If we checked that the target contract exists, we do not have
to pay the "new account gas".
2016-09-05 15:52:44 +02:00
chriseth
4134834ff3 Guard encoding crashes with assertions. 2016-09-01 20:07:14 +02:00
chriseth
4bfe09897e Make fallback function throw by default. 2016-08-30 15:31:50 +02:00
chriseth
b2507e9f10 Merge pull request #839 from chriseth/checkcode
BREAKING: Make function calls throw if target does not have code.
2016-08-17 16:44:15 +02:00
chriseth
d6579a0a5f Merge pull request #888 from chriseth/throwOnDivZero
Throw on division by zero.
2016-08-17 16:43:13 +02:00
chriseth
774bb8ab3b Make function calls throw if target does not have code.
Low-level calls still just execute and will actually report "success".
This allows `x.call.value(y)()` for x being a non-contract account.
2016-08-17 11:30:40 +02:00
chriseth
9c83109549 BREAKING: return only exits current function/modifier 2016-08-17 11:29:31 +02:00
chriseth
e7084d9e16 Throw on division by zero. 2016-08-17 11:27:15 +02:00
chriseth
d5505e21eb Merge pull request #838 from chriseth/ecrecover
Make ecrecover return zero for malformed input.
2016-08-17 11:05:20 +02:00
chriseth
77f4424589 Provide inline assembly to the code generator. (#840)
* Directly usable inline assembly.

* Add missing header.
2016-08-16 16:27:20 +02:00
chriseth
d731225d02 Actually better to return zero on error. 2016-08-16 14:53:01 +02:00
chriseth
034d436933 Make ecrecover throw for malformed input. 2016-08-16 14:53:01 +02:00
chriseth
2a560b798b Throw if contract creation fails. 2016-08-16 14:49:44 +02:00
Denton Liu
5ee846e39f Remove After from ExpressionCompiler 2016-08-11 10:15:59 -04:00
chriseth
b7c26f4628 Merge pull request #722 from NicolaiSoeborg/develop
Fixes to grammar.txt [WIP]
2016-08-10 21:18:56 +02:00
Alex Beregszaszi
17f760e2a9 Fix identity precompile gas calculation 2016-08-06 00:18:21 +01:00
chriseth
58cc6cbb37 Bugfix: Allocate empty array. 2016-07-28 17:24:18 +02:00
Nicolai
c800f8c97d Remove the remains of "expresison" 2016-07-14 22:56:45 +02:00
chriseth
d593166d66 Merge pull request #641 from axic/patch/shift-parser
Trivial shift parser fixes
2016-06-09 00:21:51 +02:00
Alex Beregszaszi
0cb820cf98 Include SHR case in ExpressionCompiler::appendShiftOperatorCode 2016-06-07 19:39:14 +01:00
chriseth
ab7a22f4a0 Disallow implementation of abstract function by constructor of derived class. 2016-06-06 19:38:22 +02:00
chriseth
708129abd5 Fixes for invalid cleanups for small types. 2016-05-20 16:52:40 +02:00
chriseth
6b859a2bff Refactor compiler to avoid weird swap of contexts 2016-05-20 14:20:45 +02:00
chriseth
67ca3bb4b9 Allow access to functions in inline assembly. 2016-05-12 12:30:48 +02: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
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
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
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
652bc583c0 Remove non-determinism in missing code queue. 2016-05-03 01:14:26 +02:00
chriseth
b125090208 Bugfix: static arrays in constructor arguments 2016-04-15 18:42:44 +02:00
chriseth
35ffcac35b Fix for bug about deleting dynamic array of structs. 2016-04-15 16:49:59 +02:00
chriseth
f227050c20 Make solidity independent from ethcore. 2016-04-06 20:56:00 +02:00
Dimitry
d2cee6f9c6 reduce unnecessary solidity:: namespace 2016-04-04 15:41:35 +04:00
Dimitry
9816510065 enable solidity test 2016-04-04 15:18:24 +04:00
Dimitry
858c41260d rename namespace for instruction.h/cpp in libevmasm 2016-04-02 15:56:43 +03:00
Dimitry
ccbd3ff63f move libevmcore to solidity 2016-04-01 23:11:01 +03:00
chriseth
2c29492227 Correctly clean higher order bits for index access. 2016-03-31 10:33:45 +02:00
chriseth
f049430723 Code generation (missing external access and source locations). 2016-03-30 02:37:00 +02:00
Bob Summerwill
a1ce66b304 Fixed Windows warnings 2016-03-18 01:22:15 -07:00
chriseth
e5514becb8 BREAKING: Implement delegatecall and make default for library calls. 2016-03-11 17:49:32 +01:00
chriseth
29faf1b298 Index access for bytesXX. 2016-02-09 17:07:04 +01:00
Lu Guanqun
b003290638 [cond-expr] fixup according to code review 2016-01-22 17:14:00 +00:00
Lu Guanqun
c781b130ef [cond-expr] make the codegen one instruction less 2016-01-22 17:14:00 +00:00
Lu Guanqun
ff4f1666ab [cond-expr] generate assembly for _ ? _ : _ 2016-01-22 17:14:00 +00:00
chriseth
2364c55735 Detect library name clashes. 2016-01-14 11:36:13 +01:00
RJ Catalano
ac664e7f86 final changes to typechecker, the expression compiler, and a couple more tests for good measure 2016-01-11 14:25:59 -06:00
RJ
c78b9c5737 Update ExpressionCompiler.cpp 2016-01-10 21:49:36 -06:00
RJ
72a641fe9f Update ExpressionCompiler.cpp 2016-01-10 21:37:47 -06:00
RJ
e18eaa4615 Update ExpressionCompiler.cpp 2016-01-10 01:12:17 -06:00
Lu Guanqun
568da11369 support decayed tuple expression as left value 2016-01-04 16:11:36 +08:00
chriseth
54e3637d23 Add structs and enums to contract types. 2015-12-18 16:50:14 +01:00
chriseth
39f57a9c71 Fix: Segfaults connected to paramater types.
parameterTypes does not return by const reference anymore.
2015-12-09 17:57:34 +01:00
chriseth
7f415da886 Code generation for calling bound methods. 2015-12-01 12:35:34 +01:00
chriseth
35b310cfaf Simplify and optimise stack rotation. 2015-11-30 18:50:47 +01:00
chriseth
e9c7837c15 Merge pull request #251 from chriseth/bind2
Bind library functions to types.
2015-11-30 16:06:44 +01:00
chriseth
a8736b7b27 Merge pull request #256 from chriseth/selfdestruct
Introduce selfdestruct alias for suicide.
2015-11-30 16:06:18 +01:00
chriseth
6796afc2f8 Bugfix for constructor unpacking with fixed-size arrays. 2015-11-29 01:03:39 +01:00
chriseth
93b3237c6a Add bound functions to types. 2015-11-29 00:16:07 +01:00
chriseth
b97bb086de Introduce selfdestruct alias for suicide. 2015-11-29 00:10:07 +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
879844dd0a Code generation for creating arrays. 2015-11-26 13:10:12 +01:00
chriseth
68f1da1e3a Fixed string inside struct allocation bug. 2015-11-24 14:54:37 +01:00
Gav Wood
2554d6104a Merge pull request #236 from ethereum/hot_gav
Fix up for new API from EIP-1.1.
2015-11-23 12:42:28 +01:00
Gav Wood
bff172cf65 Fix up for new API from EIP-1.1. 2015-11-21 14:34:21 +01:00
chriseth
8dfc964e7d Merge pull request #227 from chriseth/addmod
Addmod and mulmod.
2015-11-19 13:16:13 +01:00
Gav Wood
3be0ae6e2c Merge pull request #204 from ethereum/hot_gav
The Big Refactor
2015-11-19 12:20:46 +01:00
Gav Wood
938b6793f1 Minor API change - must provide SealEngine to Executive now. 2015-11-19 10:19:53 +01:00
chriseth
0cf8d022ae Addmod and mulmod. 2015-11-18 17:12:39 +01:00
chriseth
f4de369bad Merge pull request #218 from chriseth/fix_overwriteMemory
Fix memory overwrite problem for arrays.
2015-11-17 14:46:19 +01:00
chriseth
0c900f9b8a Fix memory overwrite problem for arrays. 2015-11-16 18:32:21 +01:00
chriseth
a35f91816b Fix dynamic indexed event arguments - applies sha3. 2015-11-16 17:09:09 +01:00
chriseth
a5c227778d Bugfix: Returning literal strings in tuples. 2015-10-31 23:13:45 +01:00
chriseth
e48ee59549 Fix override warning. 2015-10-23 12:51:49 +02:00
chriseth
e3dffb611f File reorganisation. 2015-10-21 00:46:01 +02:00