# Package icyllis.arc3d.compiler.tree

@Internal package icyllis.arc3d.compiler.tree
Abstract syntax tree, this package is NOT part of any public API.

- Related Packages
  Package
  Description
  icyllis.arc3d.compiler
  Arc3D Shading Language, based on GLSL 450, inspired by SkSL 300.
  icyllis.arc3d.compiler.analysis
  icyllis.arc3d.compiler.glsl
  icyllis.arc3d.compiler.lex
  icyllis.arc3d.compiler.spirv
- Class
  Description
  AnonymousField
  A symbol which should be interpreted as a field access.
  BinaryExpression
  A binary operation.
  BlockStatement
  A block of multiple statements functioning as a single statement.
  BreakStatement
  A break statement.
  ConditionalExpression
  A conditional expression (condition ? true-expression : false-expression).
  ConstructorArray
  Represents the construction of an array type, such as "float[5](x, y, z, w, 1)".
  ConstructorArrayCast
  Represents the typecasting of an array.
  ConstructorCall
  Base class representing a constructor call: type_name( args, ...
  ConstructorCompound
  Represents a vector or matrix that is composed of other expressions, such as `float3(pos.xy, 1)` or `float3x3(a.xyz, b.xyz, 0, 0, 1)`
  ConstructorCompoundCast
  Represents the construction of a vector/matrix typecast, such as `half3(myInt3)` or `float4x4(myHalf4x4)`.
  ConstructorDiagonalMatrix
  Represents the construction of a diagonal matrix, such as `mat4x4(n)`.
  ConstructorMatrixResize
  Represents the construction of a matrix resize operation, such as `mat4x4(myMat2x2)`.
  ConstructorScalarCast
  Represents the construction of a scalar cast, such as `float(intVariable)`.
  ConstructorStruct
  Represents the construction of a struct object, such as "Color(red, green, blue, 1)".
  ConstructorVectorSplat
  Represents the construction of a vector splat (broadcast), such as `float3(n)`.
  ContinueStatement
  A continue statement.
  DiscardStatement
  A discard statement, fragment shader only.
  EmptyStatement
  A no-op statement ";".
  Expression
  Abstract superclass of all expressions.
  ExpressionStatement
  A lone expression being used as a statement.
  FieldAccess
  An expression which selects a field from a struct/block, as in 'foo.bar'.
  ForLoop
  for (init; condition; step) loop-statement
  FunctionCall
  A function invocation: function_name( args, ...
  FunctionDecl
  Represents a function declaration (function symbol).
  FunctionDefinition
  A function definition (a function declaration plus an associated block of code).
  FunctionPrototype
  A function prototype (a function declaration as a top-level element)
  FunctionReference
  An identifier referring to a function name.
  GlobalVariableDecl
  A variable declaration appearing at global scope.
  IfStatement
  if (condition) true-statement else false-statement
  IndexExpression
  An expression that accesses an element of an array, vector, or matrix, as in 'base [ index ]'.
  InterfaceBlock
  An interface block declaration invalid input: '&' definition, as in:
  Layout
  Represents a layout block appearing before a variable declaration, as in:
  Literal
  A constant value.
  Modifiers
  Represents a layout block and a set of modifier keywords (in, out, uniform, etc.) appearing before a variable or interface block declaration, as in:
  Node
  Represents a node in the AST.
  Node.ElementKind
  Node.ExpressionKind
  Node.StatementKind
  Node.SymbolKind
  Poison
  Represents an ill-formed expression.
  PostfixExpression
  An expression modified by a unary operator appearing after it.
  PrefixExpression
  An expression modified by a unary operator appearing before it.
  ReturnStatement
  A return statement.
  Statement
  Abstract supertype of all statements.
  StructDefinition
  A struct at global scope, as in:
  SwitchCase
  A single case of a 'switch' statement.
  SwitchStatement
  Swizzle
  Represents a vector component selection (shuffling) such as 'float3(1, 2, 3).zyx'.
  Symbol
  Represents a symbol table entry.
  TopLevelElement
  Represents a top-level element (e.g.
  TreeVisitor
  Utility class to visit every element, statement, and expression in a program IR.
  Type
  Represents a type symbol, such as int or float4.
  Type.AliasType
  Type.ArrayType
  Type.CoercionCost
  CoercionCost.
  Type.Field
  Represents a single field in a struct/block type.
  Type.GenericType
  Type.ImageType
  Type.MatrixType
  Type.SamplerType
  Type.ScalarType
  Type.StructType
  Type.VectorType
  TypeReference
  Represents an identifier referring to a type.
  Variable
  Represents a variable symbol, whether local, global, or a function parameter.
  VariableDecl
  Variable declaration.
  VariableReference
  A reference to a variable, through which it can be read or written.