271 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
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;
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
}
 |