export type SourceLocation = { first_column : number ; last_column : number ; first_line : number ; last_line : number ; } ; export type BinaryExpressionOperator = "+" | "-" | "*" | "/" | "%" | "|" | "&" | "^" | "==" | "!=" | "<" | ">" | "<=" | ">=" ; export type AssignmentOperator = "+=" | "=" | "-=" | "*=" | "/=" | "%=" ; export type LogicalExpressionOperator = "&&" | "||" ; export type UnaryExpressionOperator = "+" | "-" | "!" ; export type IdentifierAstNode = { type : "IDENTIFIER" ; value : string ; loc : SourceLocation ; } ; export type CallExpressionAstNode = { type : "CALL_EXPRESSION" ; callee : IdentifierAstNode ; arguments : Ast [ ] ; loc : SourceLocation ; } ; export type NumberLiteralAstNode = { type : "NUMBER_LITERAL" ; value : number ; loc : SourceLocation ; } ; export type ScriptAstNode = { type : "SCRIPT" ; body : Ast [ ] ; loc : SourceLocation ; } ; export type ExpressionBlockAstNode = { type : "EXPRESSION_BLOCK" ; body : Ast [ ] ; loc : SourceLocation ; } ; export type BinaryExpressionAstNode = { type : "BINARY_EXPRESSION" ; left : Ast ; right : Ast ; operator : BinaryExpressionOperator ; loc : SourceLocation ; } ; export type AssignmentExpressionAstNode = { type : "ASSIGNMENT_EXPRESSION" ; left : IdentifierAstNode | CallExpressionAstNode ; right : Ast ; operator : AssignmentOperator ; loc : SourceLocation ; } ; export type LogicalExpressionAstNode = { type : "LOGICAL_EXPRESSION" ; left : Ast ; right : Ast ; operator : LogicalExpressionOperator ; loc : SourceLocation ; } ; export type UnaryExpressionAstNode = { type : "UNARY_EXPRESSION" ; value : Ast ; operator : UnaryExpressionOperator ; loc : SourceLocation ; } ; export type Ast = ScriptAstNode | ExpressionBlockAstNode | BinaryExpressionAstNode | CallExpressionAstNode | AssignmentExpressionAstNode | LogicalExpressionAstNode | UnaryExpressionAstNode | IdentifierAstNode | NumberLiteralAstNode ; export interface Shims extends Record < string , Function > { sin ( n ) : number ; cos ( n ) : number ; tan ( n ) : number ; asin ( n ) : number ; acos ( n ) : number ; atan ( n ) : number ; atan2 ( n , m ) : number ; rand ( n ) : number ; pow ( n , m ) : number ; log ( n ) : number ; log10 ( n ) : number ; exp ( n ) : number ; sigmoid ( n , m ) : number ; } export interface TypedFunction { args : number [ ] ; returns : number [ ] ; } export interface FunctionDefinition extends TypedFunction { binary : number [ ] ; localVariables ? : number [ ] ; } export type EelVersion = 1 | 2 ; export interface CompilerContext { resolveVar ( name ) : number ; resolveFunc ( name ) : number [ ] | null ; resolveLocal ( type ) : number ; rawSource : string ; }