export class Program { constructor() { this.body = []; this.isProgram = true; } } export class VariableDeclaration { constructor( type, name, value = null, next = null, immutable = false ) { this.type = type; this.name = name; this.value = value; this.next = next; this.immutable = immutable; this.isVariableDeclaration = true; } } export class Uniform { constructor( type, name ) { this.type = type; this.name = name; this.isUniform = true; } } export class Varying { constructor( type, name ) { this.type = type; this.name = name; this.isVarying = true; } } export class FunctionParameter { constructor( type, name, qualifier = null, immutable = true ) { this.type = type; this.name = name; this.qualifier = qualifier; this.immutable = immutable; this.isFunctionParameter = true; } } export class FunctionDeclaration { constructor( type, name, params = [] ) { this.type = type; this.name = name; this.params = params; this.body = []; this.isFunctionDeclaration = true; } } export class Expression { constructor( expression ) { this.expression = expression; this.isExpression = true; } } export class Ternary { constructor( cond, left, right ) { this.cond = cond; this.left = left; this.right = right; this.isTernary = true; } } export class Operator { constructor( type, left, right ) { this.type = type; this.left = left; this.right = right; this.isOperator = true; } } export class Unary { constructor( type, expression, after = false ) { this.type = type; this.expression = expression; this.after = after; this.isUnary = true; } } export class Number { constructor( value, type = 'float' ) { this.type = type; this.value = value; this.isNumber = true; } } export class String { constructor( value ) { this.value = value; this.isString = true; } } export class Conditional { constructor( cond = null ) { this.cond = cond; this.body = []; this.elseConditional = null; this.isConditional = true; } } export class FunctionCall { constructor( name, params = [] ) { this.name = name; this.params = params; this.isFunctionCall = true; } } export class Return { constructor( value ) { this.value = value; this.isReturn = true; } } export class Accessor { constructor( property ) { this.property = property; this.isAccessor = true; } } export class StaticElement { constructor( value ) { this.value = value; this.isStaticElement = true; } } export class DynamicElement { constructor( value ) { this.value = value; this.isDynamicElement = true; } } export class AccessorElements { constructor( property, elements = [] ) { this.property = property; this.elements = elements; this.isAccessorElements = true; } } export class For { constructor( initialization, condition, afterthought ) { this.initialization = initialization; this.condition = condition; this.afterthought = afterthought; this.body = []; this.isFor = true; } }