yul-parser 0.1.1

Yul language parser
Documentation
use serde::{Deserialize, Serialize};
use zkp_u256::U256;

#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
pub struct SourceFile {
    pub objects: Vec<Object>,
}

#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
pub struct Object {
    pub name: String,
    pub code: Vec<Statement>,
    pub data: Vec<ObjectData>,
}

#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
pub enum ObjectData {
    Object(Object),
    Literal { name: String, value: Vec<u8> },
}

#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
pub enum Statement {
    Block {
        code: Vec<Statement>,
    },
    FunctionDefinition {
        name:      String,
        arguments: Vec<String>,
        returns:   Vec<String>,
        code:      Vec<Statement>,
    },
    VariableDeclaration {
        variables: Vec<String>,
        value:     Option<Expression>,
    },
    Assignment {
        variables: Vec<String>,
        value:     Expression,
    },
    If {
        condition: Expression,
        code:      Vec<Statement>,
    },
    Expression {
        expression: Expression,
    },
    Switch {
        condition: Expression,
        cases:     Vec<SwitchCase>,
    },
    ForLoop {
        pre:       Vec<Statement>,
        condition: Expression,
        post:      Vec<Statement>,
        body:      Vec<Statement>,
    },
    Break,
    Continue,
    Leave,
}

#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
pub enum Expression {
    FunctionCall {
        name:      String,
        arguments: Vec<Expression>,
    },
    Identifier(String),
    Literal(U256),
}

#[derive(Clone, PartialEq, Eq, Debug, Serialize, Deserialize)]
pub enum SwitchCase {
    Case { value: U256, code: Vec<Statement> },
    Default { code: Vec<Statement> },
}