Skip to content

gnidan/solasm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

solasm

Solidity Assembler in Rust

Build Status Coverage Status Lines of Code # of Files

Current Status

  • Parser
  • AST pretty-printing
  • Semantics checking
  • Desuraging phase
  • Opcode generation
  • Runtime interpreter?

Installing

$ git clone git@github.com:gnidan/solasm.git
$ cd solasm
$ cargo build

Running

After building, find executable at ./target/debug/solasm.

Outputting formatted ASM

Pass --ast option: solasm --ast:

File test.asm:

{function frobinate(x,y)->(z,t){z:=add(cos(x),sin(y))t:=sub(sin(x),cos(y))}for{let i:=0}lt(i,5){inc(i)}{mul(i,8)mstore(i)}switch i case underfrobbed(i):{frobinate(4,1)frobinate(6, 7)}case overfrobbed(i):{frobinate(0, 0)}}

Run:

cat test.asm | solasm --ast

Output:

{
  function frobinate(x, y) -> (z, t) {
    z := add(cos(x), sin(y))
    t := sub(sin(x), cos(y))
  }
  for { let i := 0 } lt(i, 5) { inc(i) } {
    mul(i, 8)
    mstore(i)
  }
  switch i
  case underfrobbed(i): {
    frobinate(4, 1)
    frobinate(6, 7)
  }
  case overfrobbed(i): { frobinate(0, 0) }
}