Enum glsl_lang::ast::ExprData

source ·
pub enum ExprData {
Show 16 variants Variable(Node<IdentifierData>), IntConst(i32), UIntConst(u32), BoolConst(bool), FloatConst(f32), DoubleConst(f64), Unary(Node<UnaryOpData>, Box<Node<ExprData>>), Binary(Node<BinaryOpData>, Box<Node<ExprData>>, Box<Node<ExprData>>), Ternary(Box<Node<ExprData>>, Box<Node<ExprData>>, Box<Node<ExprData>>), Assignment(Box<Node<ExprData>>, Node<AssignmentOpData>, Box<Node<ExprData>>), Bracket(Box<Node<ExprData>>, Box<Node<ExprData>>), FunCall(Node<FunIdentifierData>, Vec<Node<ExprData>>), Dot(Box<Node<ExprData>>, Node<IdentifierData>), PostInc(Box<Node<ExprData>>), PostDec(Box<Node<ExprData>>), Comma(Box<Node<ExprData>>, Box<Node<ExprData>>),
}
Expand description

The most general form of an expression.

As you can see if you read the variant list, in GLSL, an assignment is an expression. This is a bit silly but think of an assignment as a statement first then an expression which evaluates to what the statement “returns”.

An expression is either an assignment or a list (comma) of assignments.

Variants§

§

Variable(Node<IdentifierData>)

A variable expression, using an identifier.

§

IntConst(i32)

Integral constant expression.

§

UIntConst(u32)

Unsigned integral constant expression.

§

BoolConst(bool)

Boolean constant expression.

§

FloatConst(f32)

Single precision floating expression.

§

DoubleConst(f64)

Double precision floating expression.

§

Unary(Node<UnaryOpData>, Box<Node<ExprData>>)

A unary expression, gathering a single expression and a unary operator.

§

Binary(Node<BinaryOpData>, Box<Node<ExprData>>, Box<Node<ExprData>>)

A binary expression, gathering two expressions and a binary operator.

§

Ternary(Box<Node<ExprData>>, Box<Node<ExprData>>, Box<Node<ExprData>>)

A ternary conditional expression, gathering three expressions.

§

Assignment(Box<Node<ExprData>>, Node<AssignmentOpData>, Box<Node<ExprData>>)

An assignment is also an expression. Gathers an expression that defines what to assign to, an assignment operator and the value to associate with.

§

Bracket(Box<Node<ExprData>>, Box<Node<ExprData>>)

Add an array specifier to an expression.

§

FunCall(Node<FunIdentifierData>, Vec<Node<ExprData>>)

A functional call. It has a function identifier and a list of expressions (arguments).

§

Dot(Box<Node<ExprData>>, Node<IdentifierData>)

An expression associated with a field selection (struct).

§

PostInc(Box<Node<ExprData>>)

Post-incrementation of an expression.

§

PostDec(Box<Node<ExprData>>)

Post-decrementation of an expression.

§

Comma(Box<Node<ExprData>>, Box<Node<ExprData>>)

An expression that contains several, separated with comma.

Implementations§

source§

impl ExprData

source

pub fn variable(name: impl Into<IdentifierData>) -> ExprData

Construct an Expr::Variable(name) from an identifier name

source

pub fn as_rs_ident(&self) -> Option<&str>

Try to parse this function identifier as a glsl-lang-quote Rust identifier

Trait Implementations§

source§

impl Clone for ExprData

source§

fn clone(&self) -> ExprData

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ExprData

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
source§

impl From<ExprData> for InitializerData

source§

fn from(e: ExprData) -> InitializerData

Converts to this type from the input type.
source§

impl From<Node<ExprData>> for ExprData

source§

fn from(node: Node<ExprData>) -> ExprData

Converts to this type from the input type.
source§

impl From<bool> for ExprData

source§

fn from(x: bool) -> ExprData

Converts to this type from the input type.
source§

impl From<f32> for ExprData

source§

fn from(x: f32) -> ExprData

Converts to this type from the input type.
source§

impl From<f64> for ExprData

source§

fn from(x: f64) -> ExprData

Converts to this type from the input type.
source§

impl From<i32> for ExprData

source§

fn from(x: i32) -> ExprData

Converts to this type from the input type.
source§

impl From<u32> for ExprData

source§

fn from(x: u32) -> ExprData

Converts to this type from the input type.
source§

impl NodeContent for ExprData

source§

fn into_node<T>(self) -> Node<T>
where T: From<Self> + NodeContent,

Convert the contents into a node
source§

fn spanned(self, start: LexerPosition, end: LexerPosition) -> Node<Self>

Add span information to a syntax node
source§

impl NodeContentDisplay for ExprData

source§

fn name() -> Option<&'static str>

Name of the node Read more
source§

fn display_extra(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Display extra information for the node Read more
source§

fn display_children( &self, level: usize, f: &mut Formatter<'_> ) -> Result<(), Error>

Display the node’s children Read more
source§

impl PartialEq for ExprData

source§

fn eq(&self, other: &ExprData) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl StructuralPartialEq for ExprData

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, 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> NodeDisplay for T

source§

fn name() -> Option<&'static str>

Name of the syntax node’s type
source§

fn start(&self) -> Option<TextSize>

Starting position of the node
source§

fn end(&self) -> Option<TextSize>

Ending position of the node
source§

fn source_id(&self) -> Option<FileId>

Source id of the node
source§

fn display(&self) -> NodeDisplayWrapper<'_, T>

Obtain a display wrapper for the current node
source§

fn display_extra(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Display extra information for the node Read more
source§

fn display_children( &self, level: usize, f: &mut Formatter<'_> ) -> Result<(), Error>

Display the node’s children Read more
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.