Struct zingen::Assembler

source ·
pub struct Assembler {
    pub mp: usize,
    pub sp: u8,
    /* private fields */
}
Expand description

Low level assembler implementation for EVM.

Fields§

§mp: usize

Memory pointer for byte offset.

§sp: u8

Stack pointer, maximum 1024 items.

Implementations§

source§

impl Assembler

source

pub fn buffer(&self) -> &[u8]

Buffer of the assembler.

source

pub fn buffer_mut(&mut self) -> &mut Buffer

Mutable buffer of the assembler.

source

pub fn increment_gas(&mut self, gas: u128)

Increment the gas counter.

TODO: use number bigger than u256 for throwing proper errors. (#21)

source

pub fn increment_sp(&mut self, items: u8) -> Result<()>

Increment stack pointer

source

pub fn decrement_sp(&mut self, items: u8) -> Result<()>

Decrement stack pointer

source

pub fn increment_mp(&mut self, offset: usize) -> Result<()>

Increment memory pointer

source

pub fn decrement_mp(&mut self, offset: usize) -> Result<()>

Decrement memory pointer

source

pub fn emit(&mut self, byte: u8)

Emit a byte.

source

pub fn emitn(&mut self, bytes: &[u8])

Emit n bytes.

source

pub fn emit_op(&mut self, opcode: OpCode) -> Result<()>

Emit a single opcode.

Mock the stack input and output for checking the stack usages.

source§

impl Assembler

Basic instruction implementations

source

pub fn _stop(&mut self) -> Result<()>

EmitSTOP

source

pub fn _add(&mut self) -> Result<()>

EmitADD

source

pub fn _mul(&mut self) -> Result<()>

EmitMUL

source

pub fn _sub(&mut self) -> Result<()>

EmitSUB

source

pub fn _div(&mut self) -> Result<()>

EmitDIV

source

pub fn _sdiv(&mut self) -> Result<()>

EmitSDIV

source

pub fn _mod(&mut self) -> Result<()>

EmitMOD

source

pub fn _smod(&mut self) -> Result<()>

EmitSMOD

source

pub fn _addmod(&mut self) -> Result<()>

EmitADDMOD

source

pub fn _mulmod(&mut self) -> Result<()>

EmitMULMOD

source

pub fn _exp(&mut self) -> Result<()>

EmitEXP

source

pub fn _signextend(&mut self) -> Result<()>

EmitSIGNEXTEND

source

pub fn _lt(&mut self) -> Result<()>

EmitLT

source

pub fn _gt(&mut self) -> Result<()>

EmitGT

source

pub fn _slt(&mut self) -> Result<()>

EmitSLT

source

pub fn _sgt(&mut self) -> Result<()>

EmitSGT

source

pub fn _eq(&mut self) -> Result<()>

EmitEQ

source

pub fn _iszero(&mut self) -> Result<()>

EmitISZERO

source

pub fn _and(&mut self) -> Result<()>

EmitAND

source

pub fn _or(&mut self) -> Result<()>

EmitOR

source

pub fn _xor(&mut self) -> Result<()>

EmitXOR

source

pub fn _not(&mut self) -> Result<()>

EmitNOT

source

pub fn _byte(&mut self) -> Result<()>

EmitBYTE

source

pub fn _shl(&mut self) -> Result<()>

EmitSHL

source

pub fn _shr(&mut self) -> Result<()>

EmitSHR

source

pub fn _sar(&mut self) -> Result<()>

EmitSAR

source

pub fn _sha3(&mut self) -> Result<()>

EmitSHA3

source

pub fn _address(&mut self) -> Result<()>

EmitADDRESS

source

pub fn _balance(&mut self) -> Result<()>

EmitBALANCE

source

pub fn _origin(&mut self) -> Result<()>

EmitORIGIN

source

pub fn _caller(&mut self) -> Result<()>

EmitCALLER

source

pub fn _callvalue(&mut self) -> Result<()>

EmitCALLVALUE

source

pub fn _calldataload(&mut self) -> Result<()>

EmitCALLDATALOAD

source

pub fn _calldatasize(&mut self) -> Result<()>

EmitCALLDATASIZE

source

pub fn _calldatacopy(&mut self) -> Result<()>

EmitCALLDATACOPY

source

pub fn _codesize(&mut self) -> Result<()>

EmitCODESIZE

source

pub fn _codecopy(&mut self) -> Result<()>

EmitCODECOPY

source

pub fn _gasprice(&mut self) -> Result<()>

EmitGASPRICE

source

pub fn _extcodesize(&mut self) -> Result<()>

EmitEXTCODESIZE

source

pub fn _extcodecopy(&mut self) -> Result<()>

EmitEXTCODECOPY

source

pub fn _returndatasize(&mut self) -> Result<()>

EmitRETURNDATASIZE

source

pub fn _returndatacopy(&mut self) -> Result<()>

EmitRETURNDATACOPY

source

pub fn _blockhash(&mut self) -> Result<()>

EmitBLOCKHASH

source

pub fn _coinbase(&mut self) -> Result<()>

EmitCOINBASE

source

pub fn _timestamp(&mut self) -> Result<()>

EmitTIMESTAMP

source

pub fn _number(&mut self) -> Result<()>

EmitNUMBER

source

pub fn _difficulty(&mut self) -> Result<()>

EmitDIFFICULTY

source

pub fn _gaslimit(&mut self) -> Result<()>

EmitGASLIMIT

source

pub fn _pop(&mut self) -> Result<()>

EmitPOP

source

pub fn _mload(&mut self) -> Result<()>

EmitMLOAD

source

pub fn _mstore(&mut self) -> Result<()>

EmitMSTORE

source

pub fn _mstore8(&mut self) -> Result<()>

EmitMSTORE8

source

pub fn _sload(&mut self) -> Result<()>

EmitSLOAD

source

pub fn _sstore(&mut self) -> Result<()>

EmitSSTORE

source

pub fn _jump(&mut self) -> Result<()>

EmitJUMP

source

pub fn _jumpi(&mut self) -> Result<()>

EmitJUMPI

source

pub fn _pc(&mut self) -> Result<()>

EmitPC

source

pub fn _msize(&mut self) -> Result<()>

EmitMSIZE

source

pub fn _gas(&mut self) -> Result<()>

EmitGAS

source

pub fn _jumpdest(&mut self) -> Result<()>

EmitJUMPDEST

source

pub fn _push0(&mut self) -> Result<()>

EmitPUSH0

source

pub fn _push1(&mut self) -> Result<()>

EmitPUSH1

source

pub fn _push2(&mut self) -> Result<()>

EmitPUSH2

source

pub fn _push3(&mut self) -> Result<()>

EmitPUSH3

source

pub fn _push4(&mut self) -> Result<()>

EmitPUSH4

source

pub fn _push5(&mut self) -> Result<()>

EmitPUSH5

source

pub fn _push6(&mut self) -> Result<()>

EmitPUSH6

source

pub fn _push7(&mut self) -> Result<()>

EmitPUSH7

source

pub fn _push8(&mut self) -> Result<()>

EmitPUSH8

source

pub fn _push9(&mut self) -> Result<()>

EmitPUSH9

source

pub fn _push10(&mut self) -> Result<()>

EmitPUSH10

source

pub fn _push11(&mut self) -> Result<()>

EmitPUSH11

source

pub fn _push12(&mut self) -> Result<()>

EmitPUSH12

source

pub fn _push13(&mut self) -> Result<()>

EmitPUSH13

source

pub fn _push14(&mut self) -> Result<()>

EmitPUSH14

source

pub fn _push15(&mut self) -> Result<()>

EmitPUSH15

source

pub fn _push16(&mut self) -> Result<()>

EmitPUSH16

source

pub fn _push17(&mut self) -> Result<()>

EmitPUSH17

source

pub fn _push18(&mut self) -> Result<()>

EmitPUSH18

source

pub fn _push19(&mut self) -> Result<()>

EmitPUSH19

source

pub fn _push20(&mut self) -> Result<()>

EmitPUSH20

source

pub fn _push21(&mut self) -> Result<()>

EmitPUSH21

source

pub fn _push22(&mut self) -> Result<()>

EmitPUSH22

source

pub fn _push23(&mut self) -> Result<()>

EmitPUSH23

source

pub fn _push24(&mut self) -> Result<()>

EmitPUSH24

source

pub fn _push25(&mut self) -> Result<()>

EmitPUSH25

source

pub fn _push26(&mut self) -> Result<()>

EmitPUSH26

source

pub fn _push27(&mut self) -> Result<()>

EmitPUSH27

source

pub fn _push28(&mut self) -> Result<()>

EmitPUSH28

source

pub fn _push29(&mut self) -> Result<()>

EmitPUSH29

source

pub fn _push30(&mut self) -> Result<()>

EmitPUSH30

source

pub fn _push31(&mut self) -> Result<()>

EmitPUSH31

source

pub fn _push32(&mut self) -> Result<()>

EmitPUSH32

source

pub fn _dup1(&mut self) -> Result<()>

EmitDUP1

source

pub fn _dup2(&mut self) -> Result<()>

EmitDUP2

source

pub fn _dup3(&mut self) -> Result<()>

EmitDUP3

source

pub fn _dup4(&mut self) -> Result<()>

EmitDUP4

source

pub fn _dup5(&mut self) -> Result<()>

EmitDUP5

source

pub fn _dup6(&mut self) -> Result<()>

EmitDUP6

source

pub fn _dup7(&mut self) -> Result<()>

EmitDUP7

source

pub fn _dup8(&mut self) -> Result<()>

EmitDUP8

source

pub fn _dup9(&mut self) -> Result<()>

EmitDUP9

source

pub fn _dup10(&mut self) -> Result<()>

EmitDUP10

source

pub fn _dup11(&mut self) -> Result<()>

EmitDUP11

source

pub fn _dup12(&mut self) -> Result<()>

EmitDUP12

source

pub fn _dup13(&mut self) -> Result<()>

EmitDUP13

source

pub fn _dup14(&mut self) -> Result<()>

EmitDUP14

source

pub fn _dup15(&mut self) -> Result<()>

EmitDUP15

source

pub fn _dup16(&mut self) -> Result<()>

EmitDUP16

source

pub fn _swap1(&mut self) -> Result<()>

EmitSWAP1

source

pub fn _swap2(&mut self) -> Result<()>

EmitSWAP2

source

pub fn _swap3(&mut self) -> Result<()>

EmitSWAP3

source

pub fn _swap4(&mut self) -> Result<()>

EmitSWAP4

source

pub fn _swap5(&mut self) -> Result<()>

EmitSWAP5

source

pub fn _swap6(&mut self) -> Result<()>

EmitSWAP6

source

pub fn _swap7(&mut self) -> Result<()>

EmitSWAP7

source

pub fn _swap8(&mut self) -> Result<()>

EmitSWAP8

source

pub fn _swap9(&mut self) -> Result<()>

EmitSWAP9

source

pub fn _swap10(&mut self) -> Result<()>

EmitSWAP10

source

pub fn _swap11(&mut self) -> Result<()>

EmitSWAP11

source

pub fn _swap12(&mut self) -> Result<()>

EmitSWAP12

source

pub fn _swap13(&mut self) -> Result<()>

EmitSWAP13

source

pub fn _swap14(&mut self) -> Result<()>

EmitSWAP14

source

pub fn _swap15(&mut self) -> Result<()>

EmitSWAP15

source

pub fn _swap16(&mut self) -> Result<()>

EmitSWAP16

source

pub fn _log0(&mut self) -> Result<()>

EmitLOG0

source

pub fn _log1(&mut self) -> Result<()>

EmitLOG1

source

pub fn _log2(&mut self) -> Result<()>

EmitLOG2

source

pub fn _log3(&mut self) -> Result<()>

EmitLOG3

source

pub fn _log4(&mut self) -> Result<()>

EmitLOG4

source

pub fn _create(&mut self) -> Result<()>

EmitCREATE

source

pub fn _call(&mut self) -> Result<()>

EmitCALL

source

pub fn _callcode(&mut self) -> Result<()>

EmitCALLCODE

source

pub fn _return(&mut self) -> Result<()>

EmitRETURN

source

pub fn _delegatecall(&mut self) -> Result<()>

EmitDELEGATECALL

source

pub fn _create2(&mut self) -> Result<()>

EmitCREATE2

source

pub fn _staticcall(&mut self) -> Result<()>

EmitSTATICCALL

source

pub fn _revert(&mut self) -> Result<()>

EmitREVERT

source

pub fn _invalid(&mut self) -> Result<()>

EmitINVALID

source

pub fn _selfdestruct(&mut self) -> Result<()>

EmitSELFDESTRUCT

Trait Implementations§

source§

impl Default for Assembler

source§

fn default() -> Assembler

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more