Dependencies:
- Update llvm from 8 to 10
- Update pre-built docker images
Language Features:
- Solidity:
- Support abi.encode and abi.encodePacked. (including array type) [Experimental]
Compiler Features:
- Support optimization options:
--O0
: Disable optimizations--O1
: Enable trivial optimizations--O2
: Enable default optimizations--O3
: Enable expensive optimizations--Os
: Enable default optimizations for size--Oz
: Enable expensive optimizations for size
- Support EVM backend via EVM_LLVM 8
- In current stage, SOLL will generate LLVM IR for EVM backend target only.
- Developers should use generated LLVM IR files and compile them with llc from EVM_LLVM 8 to get EVM bytecodes.
- Disable integer lowering when using EVM backend. Only allow 256 bits integer type.
Bugfixes:
- Fix bad APInt trunc in parser
- Fix bad array size and index trunc in codegen
- Fix syntax error on
revert()
and array access
Language Features:
- Solidity:
- Support abi.encode and abi.encodePacked. (excluding array type)
- Support fallback keyword. (solidity spec >= 0.6.0)
- Support struct decleration. (with limited members’ types)
- Yul:
- Support tuple usage.
- return, declaration, assignment
- Support built-in functions.
return
,revert
log0
,log1
,log2
,log3
,log4
blockcoinbase
,blockdifficulty
,blockgaslimit
blocknumber
,blocktimestamp
,txorigin
,txgasprice
,gasleft
caller
,callvalue
,calldatasize
codecopy
,datacopy
datasize
,dataoffset
(limitation: couldn't be used apply on object itself)
- Support leave statement. (Yul spec >= 0.6.0)
- Support generate and deploy ewasm from Yul file. (Yul file was compiled from solc)
- Support tuple usage.
Compiler Features:
- Diagnostic Tool:
- Throw error messages for unimplemented features:
- Redefine constructor or fallback function.
- Add color on/off option.
- Throw error messages for unimplemented features:
- Add command-line action options for distinguishing generate ewasm could be deployed on-chain or normal case.
-deploy=Chain
: Ewasm VM (Hera) not support keccak256 yet, so for workaround use sha256 instead. (Default)-deploy=Normal
: Normal behavior.
- Add command-line action options for generating object files.
-action=EmitAssembly
: Emit a .s file.-action=EmitBC
: Emit a .bc file.-action=EmitLLVM
: Emit a .bc file.-action=EmitLLVMOnly
: Generate LLVM IR, but do not emit anything.-action=EmitCodeGenOnly
: Generate machine code, but don't emit anything.-action=EmitObj
: Emit a .o file.-action=EmitWasm
: Emit a .wasm file.
- Add command-line action options for misc.
-action=ParseSyntaxOnly
: Parse and perform semantic analysis.
Bugfixes:
- Add ImplicitCastExpr on return statement.
- Fix mismatch EEI functions
blockhash
. - Keep full event signature as topic 0 field when emitting event.
- Fix built-in function minor issues:
iszero
,shl
,shr
,sar
- Remove unexpected message when
soll -action=EmitFuncSig
. - Remove redundant slot access when load/store storage with bytes and string.
Language Features:
- Common:
- Support big number literal (
> uint64
)
- Support big number literal (
- Solidity:
- Support built-in units:
ether
,finney
,szabo
,wei
weeks
,days
,hours
,minutes
,seconds
- Replace
keccak256
andsha256
withsha3
for EVM backend. - Implement exponentiation operator.
- Support
this
to access member functions in the same contract.
- Support built-in units:
- Yul:
- Support
switch
statement. - Support function definition.
- Implement scoping logic and delay identifier lookup
- Support alias operators:
slt
->lts256
sgt
->gts256
sdiv
->divs256
- Handle memory relative mechanism:
- Use global variable to record memory size.
- Use
__heap_size
as memory offset. - Add helper functions to increase memory usage.
- Implement built-in functions:
calldataload
mload
,mstore
,mstore8
,msize
exp
- Support
- Diagnostic Tool:
- Throw error messages for unimplemented features:
- Constructor doesn’t support parameters. SOLL only accept constructor without any parameters.
- SOLL doesn’t support
array.push, array.pop
- Terminate codegen when error occurs
- Throw error messages for unimplemented features:
Bugfixes:
- Hex number literal:
- Support hex number literal (
0x...
)
- Support hex number literal (
<address>.balance
should return uint256 instead of uint128.- Reduce some useless endian transformation.
- Fix mismatch EEI functions:
<address>.balance
,<address>.send
,blockhash
Language Features:
- Support limited Yul language. See details here.
- Basic arithmetical, compare, sstore and sload built-in functions.
- For loop, If, Var declare and Assignment statements.
Compiler Features:
- Add command-line version option for checking the current SOLL version.
-version
- Add command-line language options for supporting Yul input file.
-lang=Sol
: Input file is written in Solidity. (Default)-lang=Yul
: Input file is written in Yul.
- Add testing framework for unittest and regression test.
- Integrate Solidity compilation test and libyul test from ethereum/solidity.
Language Features:
- Support partial built-in global variable
- msg.sender, msg.value, msg.data.
- tx.gasprice, tx.origin.
- block.coinbase, block.difficulty, block.gaslimit, block.number, block.timestamp.
- Support Constructor, Fallback function.
- Support Event mechanism.
- Support Payable mechanism.
- Support dynamic type. (Bytes/String)
Compiler Features:
- Be able to generate deployable Ewasm files.
- Support diagnostic message.
- Add command-line action options for generating metadata of Solidity contracts.
-action=EmitABI
: Generate ABI-action=EmitFuncSig
: Generate function signatures
- Support EVM1 bytecode target. (Depends on EVM_LLVM)
Bugfixes:
- Fix an endian issue that happened when someone calls the EEI function from wasm.
- Fix a parsing issue on array type.
Language Features:
- Type
- bool, integers, address.
- fixed-size array, mapping.
- Basic grammar support
- Support parentheses.
- Loop (while, do...while, for)
- Implicit/Explicit typecasting.
- Support state variable.
Compiler Features:
- Migrate Test suite to utils as a submodule.
- Add command-line action option.
-action=EmitLLVM
: Emit LLVM IR. (Default)-action=ASTDump
: Dump AST.
Bugfixes:
- Fix a precedence issue related to the binary operator.
Language Features:
- Type
- Support 64bit integer type only.
- Basic grammar support.
- Binary operator, Unary Operator, If statement, Function call.
- Builtin function
- require(), revert()
Compiler Features:
- Provide two compiling phases for generating wasm files.