leo-ast

Crates.io Authors License

This directory contains the code for the AST of a Leo Program.

Node Types

There are several types of nodes in the AST that then have further breakdowns.

All nodes store a Span, which is useful for tracking the lines and columns of where the node was taken from in the Leo Program.

Program/File

The top level nodes in a Leo Program.

Imports

Represents an import statement in a Leo Program. A list of these are stored on the Program. It stores the path to an import and what is being imported.

NOTE: The import does not contain the source code of the imported Leo Program.

Circuits

A circuit node represents a defined Circuit in a Leo Program. A order preserving map of these are stored on the Program. Contains the Circuit's name, as well as it's members. The members are a function, or a variable. For both of them the Circuit preserves their names.

Decorators

An annotation node is a decorator that can be applied to a function. Stored on the function themselves despite being a top-level node. The node stores the name of the annotation, as well as any args passed to it.

Functions

A function node represents a defined function in a Leo Program. A order preserving map of these are stored on the Program. A function node stores the following information:

Global Consts

A global const is a bit special and has no special node for itself, but rather is a definition statement. A order preserving map of these are stored on the Program.

Types

The different types in a Leo Program. Types themselves are not a node, but rather just information to be stored on a node.

Address

The address type follows the BIP_0173 format starting with aleo1.

Boolean

The boolean type consists of two values true and false.

Char

The char type resents a character from the inclusive range [0, 10FFFF].

Field

The field type an unsigned number up to the modulus length of the field.

Group

The group type a set of affine points on the elliptic curve passed.

IntegerType

The integer type represents a range of integer types.

U8

A integer in the inclusive range [0, 255].

U16

A integer in the inclusive range [0, 65535].

U32

A integer in the inclusive range [0, 4294967295].

U64

A integer in the inclusive range [0, 18446744073709551615].

U128

A integer in the inclusive range [0, 340282366920938463463374607431768211455].

I8

A integer in the inclusive range [-128, 127].

I16

A integer in the inclusive range [-32768, 32767].

I32

A integer in the inclusive range [-2147483648, 2147483647].

I64

A integer in the inclusive range [-9223372036854775808, 9223372036854775807].

I128

A integer in the inclusive range [-170141183460469231731687303715884105728, 170141183460469231731687303715884105727].

Array

The array type contains another type, then the number of elements of that type greater than 0.

Tuple

The tuple type contains n types, where n is greater than or equal to 0.

Circuit

The circuit type, every circuit represents a different type.

SelfType

The self type represented by Self and only usable inside a circuit.

Statements

The statement level nodes in a Leo Program.

Assignment Statements

An assignment statement node stores the following:

Block Statements

A block statement node stores the following:

Conditional Statements

A conditional statement node stores the following:

Console Statements

A console statement node stores the following:

Definition Statements

A definition statement node stores the following:

Expression Statements

An expression statement node stores the following:

Iteration Statements

A iteration statement node stores the following:

Return Statements

A return statement node stores the following:

Expressions

The expression nodes in a Leo Program.

ArrayAccess Expressions

An array access expression node stores the following:

ArrayInit Expressions

An array init expression node stores the following:

ArrayInline Expressions

An array inline expression node stores the following:

ArrayRangeAccess Expressions

An array range access expression node stores the following:

Binary Expressions

A binary expression node stores the following:


Call Expressions

A call expression node stores the following:

CircuitInit Expressions

A circuit init expression node stores the following:

CircuitMemberAccess Expressions

A circuit member access expression node stores the following:

CircuitStaticFunctionAccess Expressions

A circuit static function access expression node stores the following:

Identifier Expressions

An identifer expression node stores the following:

Ternary Expressions

A ternary expression node stores the following:

TupleAccess Expressions

A tuple access expression node stores the following:

TupleInit Expressions

A tuple init expression node stores the following:

Unary Expressions

An unary expression node stores the following:


Value Expressions

A value expression node stores one of the following: