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; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } |