1041 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			1041 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C)2005-2019 Haxe Foundation
 | 
						|
 *
 | 
						|
 * Permission is hereby granted, free of charge, to any person obtaining a
 | 
						|
 * copy of this software and associated documentation files (the "Software"),
 | 
						|
 * to deal in the Software without restriction, including without limitation
 | 
						|
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | 
						|
 * and/or sell copies of the Software, and to permit persons to whom the
 | 
						|
 * Software is furnished to do so, subject to the following conditions:
 | 
						|
 *
 | 
						|
 * The above copyright notice and this permission notice shall be included in
 | 
						|
 * all copies or substantial portions of the Software.
 | 
						|
 *
 | 
						|
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
						|
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
						|
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
						|
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
						|
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | 
						|
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | 
						|
 * DEALINGS IN THE SOFTWARE.
 | 
						|
 */
 | 
						|
 | 
						|
package haxe.macro;
 | 
						|
 | 
						|
#if (macro && !doc_gen)
 | 
						|
@:coreType abstract Position {}
 | 
						|
#else
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a position in a file.
 | 
						|
**/
 | 
						|
typedef Position = {
 | 
						|
	/**
 | 
						|
		Reference to the filename.
 | 
						|
	**/
 | 
						|
	var file:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Position of the first character.
 | 
						|
	**/
 | 
						|
	var min:Int;
 | 
						|
 | 
						|
	/**
 | 
						|
		Position of the last character.
 | 
						|
	**/
 | 
						|
	var max:Int;
 | 
						|
}
 | 
						|
#end
 | 
						|
 | 
						|
enum StringLiteralKind {
 | 
						|
	DoubleQuotes;
 | 
						|
	SingleQuotes;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a constant.
 | 
						|
	@see https://haxe.org/manual/expression-constants.html
 | 
						|
**/
 | 
						|
enum Constant {
 | 
						|
	/**
 | 
						|
		Represents an integer literal.
 | 
						|
	**/
 | 
						|
	CInt(v:String);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a float literal.
 | 
						|
	**/
 | 
						|
	CFloat(f:String);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a string literal.
 | 
						|
	**/
 | 
						|
	CString(s:String, ?kind:StringLiteralKind);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents an identifier.
 | 
						|
	**/
 | 
						|
	CIdent(s:String);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a regular expression literal.
 | 
						|
 | 
						|
		Example: `~/haxe/i`
 | 
						|
 | 
						|
		- The first argument `haxe` is a string with regular expression pattern.
 | 
						|
		- The second argument `i` is a string with regular expression flags.
 | 
						|
 | 
						|
		@see https://haxe.org/manual/std-regex.html
 | 
						|
	**/
 | 
						|
	CRegexp(r:String, opt:String);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	A binary operator.
 | 
						|
	@see https://haxe.org/manual/types-numeric-operators.html
 | 
						|
**/
 | 
						|
enum Binop {
 | 
						|
	/**
 | 
						|
		`+`
 | 
						|
	**/
 | 
						|
	OpAdd;
 | 
						|
 | 
						|
	/**
 | 
						|
		`*`
 | 
						|
	**/
 | 
						|
	OpMult;
 | 
						|
 | 
						|
	/**
 | 
						|
		`/`
 | 
						|
	**/
 | 
						|
	OpDiv;
 | 
						|
 | 
						|
	/**
 | 
						|
		`-`
 | 
						|
	**/
 | 
						|
	OpSub;
 | 
						|
 | 
						|
	/**
 | 
						|
		`=`
 | 
						|
	**/
 | 
						|
	OpAssign;
 | 
						|
 | 
						|
	/**
 | 
						|
		`==`
 | 
						|
	**/
 | 
						|
	OpEq;
 | 
						|
 | 
						|
	/**
 | 
						|
		`!=`
 | 
						|
	**/
 | 
						|
	OpNotEq;
 | 
						|
 | 
						|
	/**
 | 
						|
		`>`
 | 
						|
	**/
 | 
						|
	OpGt;
 | 
						|
 | 
						|
	/**
 | 
						|
		`>=`
 | 
						|
	**/
 | 
						|
	OpGte;
 | 
						|
 | 
						|
	/**
 | 
						|
		`<`
 | 
						|
	**/
 | 
						|
	OpLt;
 | 
						|
 | 
						|
	/**
 | 
						|
		`<=`
 | 
						|
	**/
 | 
						|
	OpLte;
 | 
						|
 | 
						|
	/**
 | 
						|
		`&`
 | 
						|
	**/
 | 
						|
	OpAnd;
 | 
						|
 | 
						|
	/**
 | 
						|
		`|`
 | 
						|
	**/
 | 
						|
	OpOr;
 | 
						|
 | 
						|
	/**
 | 
						|
		`^`
 | 
						|
	**/
 | 
						|
	OpXor;
 | 
						|
 | 
						|
	/**
 | 
						|
		`&&`
 | 
						|
	**/
 | 
						|
	OpBoolAnd;
 | 
						|
 | 
						|
	/**
 | 
						|
		`||`
 | 
						|
	**/
 | 
						|
	OpBoolOr;
 | 
						|
 | 
						|
	/**
 | 
						|
		`<<`
 | 
						|
	**/
 | 
						|
	OpShl;
 | 
						|
 | 
						|
	/**
 | 
						|
		`>>`
 | 
						|
	**/
 | 
						|
	OpShr;
 | 
						|
 | 
						|
	/**
 | 
						|
		`>>>`
 | 
						|
	**/
 | 
						|
	OpUShr;
 | 
						|
 | 
						|
	/**
 | 
						|
		`%`
 | 
						|
	**/
 | 
						|
	OpMod;
 | 
						|
 | 
						|
	/**
 | 
						|
		`+=` `-=` `/=` `*=` `<<=` `>>=` `>>>=` `|=` `&=` `^=` `%=`
 | 
						|
	**/
 | 
						|
	OpAssignOp(op:Binop);
 | 
						|
 | 
						|
	/**
 | 
						|
		`...`
 | 
						|
	**/
 | 
						|
	OpInterval;
 | 
						|
 | 
						|
	/**
 | 
						|
		`=>`
 | 
						|
	**/
 | 
						|
	OpArrow;
 | 
						|
 | 
						|
	/**
 | 
						|
		`in`
 | 
						|
	**/
 | 
						|
	OpIn;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	A unary operator.
 | 
						|
	@see https://haxe.org/manual/types-numeric-operators.html
 | 
						|
**/
 | 
						|
enum Unop {
 | 
						|
	/**
 | 
						|
		`++`
 | 
						|
	**/
 | 
						|
	OpIncrement;
 | 
						|
 | 
						|
	/**
 | 
						|
		`--`
 | 
						|
	**/
 | 
						|
	OpDecrement;
 | 
						|
 | 
						|
	/**
 | 
						|
		`!`
 | 
						|
	**/
 | 
						|
	OpNot;
 | 
						|
 | 
						|
	/**
 | 
						|
		`-`
 | 
						|
	**/
 | 
						|
	OpNeg;
 | 
						|
 | 
						|
	/**
 | 
						|
		`~`
 | 
						|
	**/
 | 
						|
	OpNegBits;
 | 
						|
 | 
						|
	/**
 | 
						|
		`...`
 | 
						|
	**/
 | 
						|
	OpSpread;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a node in the AST.
 | 
						|
	@see https://haxe.org/manual/macro-reification-expression.html
 | 
						|
**/
 | 
						|
typedef Expr = {
 | 
						|
	/**
 | 
						|
		The expression kind.
 | 
						|
	**/
 | 
						|
	var expr:ExprDef;
 | 
						|
 | 
						|
	/**
 | 
						|
		The position of the expression.
 | 
						|
	**/
 | 
						|
	var pos:Position;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a AST node identical to `Expr`, but it allows constraining the
 | 
						|
	type of accepted expressions.
 | 
						|
	@see https://haxe.org/manual/macro-ExprOf.html
 | 
						|
**/
 | 
						|
typedef ExprOf<T> = Expr;
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a switch case.
 | 
						|
	@see https://haxe.org/manual/expression-switch.html
 | 
						|
**/
 | 
						|
typedef Case = {
 | 
						|
	/**
 | 
						|
		The value expressions of the case.
 | 
						|
	**/
 | 
						|
	var values:Array<Expr>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional guard expressions of the case, if available.
 | 
						|
	**/
 | 
						|
	var ?guard:Expr;
 | 
						|
 | 
						|
	/**
 | 
						|
		The expression of the case, if available.
 | 
						|
	**/
 | 
						|
	var ?expr:Expr;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a variable in the AST.
 | 
						|
	@see https://haxe.org/manual/expression-var.html
 | 
						|
**/
 | 
						|
typedef Var = {
 | 
						|
	/**
 | 
						|
		The name of the variable.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The type-hint of the variable, if available.
 | 
						|
	**/
 | 
						|
	var ?type:ComplexType;
 | 
						|
 | 
						|
	/**
 | 
						|
		The expression of the variable, if available.
 | 
						|
	**/
 | 
						|
	var ?expr:Expr;
 | 
						|
 | 
						|
	/**
 | 
						|
		Whether or not the variable can be assigned to.
 | 
						|
	**/
 | 
						|
	var ?isFinal:Bool;
 | 
						|
 | 
						|
	/**
 | 
						|
		Metadata associatied with the variable, if available.
 | 
						|
	**/
 | 
						|
	var ?meta:Metadata;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a catch in the AST.
 | 
						|
	@see https://haxe.org/manual/expression-try-catch.html
 | 
						|
**/
 | 
						|
typedef Catch = {
 | 
						|
	/**
 | 
						|
		The name of the catch variable.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The type of the catch.
 | 
						|
	**/
 | 
						|
	var ?type:ComplexType;
 | 
						|
 | 
						|
	/**
 | 
						|
		The expression of the catch.
 | 
						|
	**/
 | 
						|
	var expr:Expr;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents the way something is quoted.
 | 
						|
**/
 | 
						|
enum QuoteStatus {
 | 
						|
	/**
 | 
						|
		No quotes
 | 
						|
	**/
 | 
						|
	Unquoted;
 | 
						|
 | 
						|
	/**
 | 
						|
		Double quotes `"`
 | 
						|
	**/
 | 
						|
	Quoted;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents the field of an object declaration.
 | 
						|
**/
 | 
						|
typedef ObjectField = {
 | 
						|
	/**
 | 
						|
		The name of the field.
 | 
						|
	**/
 | 
						|
	var field:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The field expression.
 | 
						|
	**/
 | 
						|
	var expr:Expr;
 | 
						|
 | 
						|
	/**
 | 
						|
		How the field name is quoted.
 | 
						|
	**/
 | 
						|
	var ?quotes:QuoteStatus;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents function kind in the AST
 | 
						|
**/
 | 
						|
enum FunctionKind {
 | 
						|
	/**
 | 
						|
		Anonymous function
 | 
						|
	**/
 | 
						|
	FAnonymous;
 | 
						|
 | 
						|
	/**
 | 
						|
		Named function
 | 
						|
	**/
 | 
						|
	FNamed(name:String, ?inlined:Bool);
 | 
						|
 | 
						|
	/**
 | 
						|
		Arrow function
 | 
						|
	**/
 | 
						|
	FArrow;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents the kind of a node in the AST.
 | 
						|
**/
 | 
						|
enum ExprDef {
 | 
						|
	/**
 | 
						|
		A constant.
 | 
						|
	**/
 | 
						|
	EConst(c:Constant);
 | 
						|
 | 
						|
	/**
 | 
						|
		Array access `e1[e2]`.
 | 
						|
	**/
 | 
						|
	EArray(e1:Expr, e2:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		Binary operator `e1 op e2`.
 | 
						|
	**/
 | 
						|
	EBinop(op:Binop, e1:Expr, e2:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		Field access on `e.field`.
 | 
						|
	**/
 | 
						|
	EField(e:Expr, field:String);
 | 
						|
 | 
						|
	/**
 | 
						|
		Parentheses `(e)`.
 | 
						|
	**/
 | 
						|
	EParenthesis(e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		An object declaration.
 | 
						|
	**/
 | 
						|
	EObjectDecl(fields:Array<ObjectField>);
 | 
						|
 | 
						|
	/**
 | 
						|
		An array declaration `[el]`.
 | 
						|
	**/
 | 
						|
	EArrayDecl(values:Array<Expr>);
 | 
						|
 | 
						|
	/**
 | 
						|
		A call `e(params)`.
 | 
						|
	**/
 | 
						|
	ECall(e:Expr, params:Array<Expr>);
 | 
						|
 | 
						|
	/**
 | 
						|
		A constructor call `new t(params)`.
 | 
						|
	**/
 | 
						|
	ENew(t:TypePath, params:Array<Expr>);
 | 
						|
 | 
						|
	/**
 | 
						|
		An unary operator `op` on `e`:
 | 
						|
 | 
						|
		- `e++` (`op = OpIncrement, postFix = true`)
 | 
						|
		- `e--` (`op = OpDecrement, postFix = true`)
 | 
						|
		- `++e` (`op = OpIncrement, postFix = false`)
 | 
						|
		- `--e` (`op = OpDecrement, postFix = false`)
 | 
						|
		- `-e` (`op = OpNeg, postFix = false`)
 | 
						|
		- `!e` (`op = OpNot, postFix = false`)
 | 
						|
		- `~e` (`op = OpNegBits, postFix = false`)
 | 
						|
	**/
 | 
						|
	EUnop(op:Unop, postFix:Bool, e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		Variable declarations.
 | 
						|
	**/
 | 
						|
	EVars(vars:Array<Var>);
 | 
						|
 | 
						|
	/**
 | 
						|
		A function declaration.
 | 
						|
	**/
 | 
						|
	EFunction(kind:Null<FunctionKind>, f:Function);
 | 
						|
 | 
						|
	/**
 | 
						|
		A block of expressions `{exprs}`.
 | 
						|
	**/
 | 
						|
	EBlock(exprs:Array<Expr>);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `for` expression.
 | 
						|
	**/
 | 
						|
	EFor(it:Expr, expr:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		An `if (econd) eif` or `if (econd) eif else eelse` expression.
 | 
						|
	**/
 | 
						|
	EIf(econd:Expr, eif:Expr, eelse:Null<Expr>);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a `while` expression.
 | 
						|
 | 
						|
		When `normalWhile` is `true` it is `while (...)`.
 | 
						|
 | 
						|
		When `normalWhile` is `false` it is `do {...} while (...)`.
 | 
						|
	**/
 | 
						|
	EWhile(econd:Expr, e:Expr, normalWhile:Bool);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a `switch` expression with related cases and an optional.
 | 
						|
		`default` case if `edef != null`.
 | 
						|
	**/
 | 
						|
	ESwitch(e:Expr, cases:Array<Case>, edef:Null<Expr>);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a `try`-expression with related catches.
 | 
						|
	**/
 | 
						|
	ETry(e:Expr, catches:Array<Catch>);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `return` or `return e` expression.
 | 
						|
	**/
 | 
						|
	EReturn(?e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `break` expression.
 | 
						|
	**/
 | 
						|
	EBreak;
 | 
						|
 | 
						|
	/**
 | 
						|
		A `continue` expression.
 | 
						|
	**/
 | 
						|
	EContinue;
 | 
						|
 | 
						|
	/**
 | 
						|
		An `untyped e` source code.
 | 
						|
	**/
 | 
						|
	EUntyped(e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `throw e` expression.
 | 
						|
	**/
 | 
						|
	EThrow(e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `cast e` or `cast (e, m)` expression.
 | 
						|
	**/
 | 
						|
	ECast(e:Expr, t:Null<ComplexType>);
 | 
						|
 | 
						|
	/**
 | 
						|
		Used internally to provide completion.
 | 
						|
	**/
 | 
						|
	EDisplay(e:Expr, displayKind:DisplayKind);
 | 
						|
 | 
						|
	/**
 | 
						|
		Used internally to provide completion.
 | 
						|
	**/
 | 
						|
	EDisplayNew(t:TypePath);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `(econd) ? eif : eelse` expression.
 | 
						|
	**/
 | 
						|
	ETernary(econd:Expr, eif:Expr, eelse:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `(e:t)` expression.
 | 
						|
	**/
 | 
						|
	ECheckType(e:Expr, t:ComplexType);
 | 
						|
 | 
						|
	/**
 | 
						|
		A `@m e` expression.
 | 
						|
	**/
 | 
						|
	EMeta(s:MetadataEntry, e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		An `expr is Type` expression.
 | 
						|
	**/
 | 
						|
	EIs(e:Expr, t:ComplexType);
 | 
						|
}
 | 
						|
 | 
						|
enum DisplayKind {
 | 
						|
	DKCall;
 | 
						|
	DKDot;
 | 
						|
	DKStructure;
 | 
						|
	DKMarked;
 | 
						|
	DKPattern(outermost:Bool);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a type syntax in the AST.
 | 
						|
**/
 | 
						|
enum ComplexType {
 | 
						|
	/**
 | 
						|
		Represents the type path.
 | 
						|
	**/
 | 
						|
	TPath(p:TypePath);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a function type.
 | 
						|
		@see https://haxe.org/manual/types-function.html
 | 
						|
	**/
 | 
						|
	TFunction(args:Array<ComplexType>, ret:ComplexType);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents an anonymous structure type.
 | 
						|
		@see https://haxe.org/manual/types-anonymous-structure.html
 | 
						|
	**/
 | 
						|
	TAnonymous(fields:Array<Field>);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents parentheses around a type, e.g. the `(Int -> Void)` part in
 | 
						|
		`(Int -> Void) -> String`.
 | 
						|
	**/
 | 
						|
	TParent(t:ComplexType);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents typedef extensions `> Iterable<T>`.
 | 
						|
		The array `p` holds the type paths to the given types.
 | 
						|
		@see https://haxe.org/manual/type-system-extensions.html
 | 
						|
	**/
 | 
						|
	TExtend(p:Array<TypePath>, fields:Array<Field>);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents an optional type.
 | 
						|
	**/
 | 
						|
	TOptional(t:ComplexType);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a type with a name.
 | 
						|
	**/
 | 
						|
	TNamed(n:String, t:ComplexType);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents an intersection type `T1 & T2 & ... & TN`.
 | 
						|
	**/
 | 
						|
	TIntersection(tl:Array<ComplexType>);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a type path in the AST.
 | 
						|
**/
 | 
						|
typedef TypePath = {
 | 
						|
	/**
 | 
						|
		Represents the package of the type path.
 | 
						|
	**/
 | 
						|
	var pack:Array<String>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The name of the type path.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Optional parameters of the type path.
 | 
						|
	**/
 | 
						|
	var ?params:Array<TypeParam>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Sub is set on module sub-type access:
 | 
						|
		`pack.Module.Type` has `name = "Module"`, `sub = "Type"`, if available.
 | 
						|
	**/
 | 
						|
	var ?sub:String;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a concrete type parameter in the AST.
 | 
						|
 | 
						|
	Haxe allows expressions in concrete type parameters, e.g.
 | 
						|
	`new YourType<["hello", "world"]>`. In that case the value is `TPExpr` while
 | 
						|
	in the normal case it's `TPType`.
 | 
						|
**/
 | 
						|
enum TypeParam {
 | 
						|
	TPType(t:ComplexType);
 | 
						|
	TPExpr(e:Expr);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a type parameter declaration in the AST.
 | 
						|
**/
 | 
						|
typedef TypeParamDecl = {
 | 
						|
	/**
 | 
						|
		The name of the type parameter.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional constraints of the type parameter.
 | 
						|
	**/
 | 
						|
	var ?constraints:Array<ComplexType>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional parameters of the type parameter.
 | 
						|
	**/
 | 
						|
	var ?params:Array<TypeParamDecl>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The metadata of the type parameter.
 | 
						|
	**/
 | 
						|
	var ?meta:Metadata;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a function in the AST.
 | 
						|
**/
 | 
						|
typedef Function = {
 | 
						|
	/**
 | 
						|
		A list of function arguments.
 | 
						|
	**/
 | 
						|
	var args:Array<FunctionArg>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The return type-hint of the function, if available.
 | 
						|
	**/
 | 
						|
	var ?ret:ComplexType;
 | 
						|
 | 
						|
	/**
 | 
						|
		The expression of the function body, if available.
 | 
						|
	**/
 | 
						|
	var ?expr:Expr;
 | 
						|
 | 
						|
	/**
 | 
						|
		An optional list of function parameter type declarations.
 | 
						|
	**/
 | 
						|
	var ?params:Array<TypeParamDecl>;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a function argument in the AST.
 | 
						|
**/
 | 
						|
typedef FunctionArg = {
 | 
						|
	/**
 | 
						|
		The name of the function argument.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		Whether or not the function argument is optional.
 | 
						|
	**/
 | 
						|
	var ?opt:Bool;
 | 
						|
 | 
						|
	/**
 | 
						|
		The type-hint of the function argument, if available.
 | 
						|
	**/
 | 
						|
	var ?type:ComplexType;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional value of the function argument, if available.
 | 
						|
	**/
 | 
						|
	var ?value:Expr;
 | 
						|
 | 
						|
	/**
 | 
						|
		The metadata of the function argument.
 | 
						|
	**/
 | 
						|
	var ?meta:Metadata;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a metadata entry in the AST.
 | 
						|
**/
 | 
						|
typedef MetadataEntry = {
 | 
						|
	/**
 | 
						|
		The name of the metadata entry.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional parameters of the metadata entry.
 | 
						|
	**/
 | 
						|
	var ?params:Array<Expr>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The position of the metadata entry.
 | 
						|
	**/
 | 
						|
	var pos:Position;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents metadata in the AST.
 | 
						|
**/
 | 
						|
typedef Metadata = Array<MetadataEntry>;
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a field in the AST.
 | 
						|
**/
 | 
						|
typedef Field = {
 | 
						|
	/**
 | 
						|
		The name of the field.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The documentation of the field, if available. If the field has no
 | 
						|
		documentation, the value is `null`.
 | 
						|
	**/
 | 
						|
	var ?doc:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The access modifiers of the field. By default fields have private access.
 | 
						|
		@see https://haxe.org/manual/class-field-access-modifier.html
 | 
						|
	**/
 | 
						|
	var ?access:Array<Access>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The kind of the field.
 | 
						|
	**/
 | 
						|
	var kind:FieldType;
 | 
						|
 | 
						|
	/**
 | 
						|
		The position of the field.
 | 
						|
	**/
 | 
						|
	var pos:Position;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional metadata of the field.
 | 
						|
	**/
 | 
						|
	var ?meta:Metadata;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents an access modifier.
 | 
						|
	@see https://haxe.org/manual/class-field-access-modifier.html
 | 
						|
**/
 | 
						|
enum Access {
 | 
						|
	/**
 | 
						|
		Public access modifier, grants access from anywhere.
 | 
						|
		@see https://haxe.org/manual/class-field-visibility.html
 | 
						|
	**/
 | 
						|
	APublic;
 | 
						|
 | 
						|
	/**
 | 
						|
		Private access modifier, grants access to class and its sub-classes
 | 
						|
		only.
 | 
						|
		@see https://haxe.org/manual/class-field-visibility.html
 | 
						|
	**/
 | 
						|
	APrivate;
 | 
						|
 | 
						|
	/**
 | 
						|
		Static access modifier.
 | 
						|
	**/
 | 
						|
	AStatic;
 | 
						|
 | 
						|
	/**
 | 
						|
		Override access modifier.
 | 
						|
		@see https://haxe.org/manual/class-field-override.html
 | 
						|
	**/
 | 
						|
	AOverride;
 | 
						|
 | 
						|
	/**
 | 
						|
		Dynamic (re-)bindable access modifier.
 | 
						|
		@see https://haxe.org/manual/class-field-dynamic.html
 | 
						|
	**/
 | 
						|
	ADynamic;
 | 
						|
 | 
						|
	/**
 | 
						|
		Inline access modifier. Allows expressions to be directly inserted in
 | 
						|
		place of calls to them.
 | 
						|
		@see https://haxe.org/manual/class-field-inline.html
 | 
						|
	**/
 | 
						|
	AInline;
 | 
						|
 | 
						|
	/**
 | 
						|
		Macro access modifier. Allows expression macro functions. These are
 | 
						|
		normal functions which are executed as soon as they are typed.
 | 
						|
	**/
 | 
						|
	AMacro;
 | 
						|
 | 
						|
	/**
 | 
						|
		Final access modifier. For functions, they can not be overridden. For
 | 
						|
		variables, it means they can be assigned to only once.
 | 
						|
	**/
 | 
						|
	AFinal;
 | 
						|
 | 
						|
	/**
 | 
						|
		Extern access modifier.
 | 
						|
	**/
 | 
						|
	AExtern;
 | 
						|
 | 
						|
	/**
 | 
						|
		Abstract access modifier.
 | 
						|
	**/
 | 
						|
	AAbstract;
 | 
						|
 | 
						|
	/**
 | 
						|
		Overload access modifier.
 | 
						|
	**/
 | 
						|
	AOverload;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents the field type in the AST.
 | 
						|
**/
 | 
						|
enum FieldType {
 | 
						|
	/**
 | 
						|
		Represents a variable field type.
 | 
						|
	**/
 | 
						|
	FVar(t:Null<ComplexType>, ?e:Expr);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a function field type.
 | 
						|
	**/
 | 
						|
	FFun(f:Function);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a property with getter and setter field type.
 | 
						|
	**/
 | 
						|
	FProp(get:String, set:String, ?t:ComplexType, ?e:Expr);
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a type definition.
 | 
						|
**/
 | 
						|
typedef TypeDefinition = {
 | 
						|
	/**
 | 
						|
		The package of the type definition.
 | 
						|
	**/
 | 
						|
	var pack:Array<String>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The name of the type definition.
 | 
						|
	**/
 | 
						|
	var name:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The documentation of the type, if available. If the type has no
 | 
						|
		documentation, the value is `null`.
 | 
						|
	**/
 | 
						|
	var ?doc:String;
 | 
						|
 | 
						|
	/**
 | 
						|
		The position to the type definition.
 | 
						|
	**/
 | 
						|
	var pos:Position;
 | 
						|
 | 
						|
	/**
 | 
						|
		The optional metadata of the type definition.
 | 
						|
	**/
 | 
						|
	var ?meta:Metadata;
 | 
						|
 | 
						|
	/**
 | 
						|
		The parameter type declarations of the type definition.
 | 
						|
	**/
 | 
						|
	var ?params:Array<TypeParamDecl>;
 | 
						|
 | 
						|
	/**
 | 
						|
		Whether or not the type is extern.
 | 
						|
	**/
 | 
						|
	var ?isExtern:Bool;
 | 
						|
 | 
						|
	/**
 | 
						|
		The kind of the type definition.
 | 
						|
	**/
 | 
						|
	var kind:TypeDefKind;
 | 
						|
 | 
						|
	/**
 | 
						|
		The fields of the type definition.
 | 
						|
	**/
 | 
						|
	var fields:Array<Field>;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents a type definition kind.
 | 
						|
**/
 | 
						|
enum TypeDefKind {
 | 
						|
	/**
 | 
						|
		Represents an enum kind.
 | 
						|
	**/
 | 
						|
	TDEnum;
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a structure kind.
 | 
						|
	**/
 | 
						|
	TDStructure;
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a class kind.
 | 
						|
	**/
 | 
						|
	TDClass(?superClass:TypePath, ?interfaces:Array<TypePath>, ?isInterface:Bool, ?isFinal:Bool, ?isAbstract:Bool);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents an alias/typedef kind.
 | 
						|
	**/
 | 
						|
	TDAlias(t:ComplexType); // ignore TypeDefinition.fields
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents an abstract kind.
 | 
						|
	**/
 | 
						|
	TDAbstract(tthis:Null<ComplexType>, ?from:Array<ComplexType>, ?to:Array<ComplexType>);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents a module-level field.
 | 
						|
	**/
 | 
						|
	TDField(kind:FieldType, ?access:Array<Access>); // ignore TypeDefinition.fields
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	This error can be used to handle or produce compilation errors in macros.
 | 
						|
**/
 | 
						|
class Error extends Exception {
 | 
						|
	/**
 | 
						|
		The position of the error.
 | 
						|
	**/
 | 
						|
	public var pos:Position;
 | 
						|
 | 
						|
	/**
 | 
						|
		Instantiates an error with given message and position.
 | 
						|
	**/
 | 
						|
	public function new(message:String, pos:Position, ?previous:Exception) {
 | 
						|
		super(message, previous);
 | 
						|
		this.pos = pos;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents the import mode.
 | 
						|
	@see https://haxe.org/manual/type-system-import.html
 | 
						|
**/
 | 
						|
enum ImportMode {
 | 
						|
	/**
 | 
						|
		Represents a default import `import c`.
 | 
						|
	**/
 | 
						|
	INormal;
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents the alias import `import c as alias`.
 | 
						|
	**/
 | 
						|
	IAsName(alias:String);
 | 
						|
 | 
						|
	/**
 | 
						|
		Represents the wildcard import `import *`.
 | 
						|
	**/
 | 
						|
	IAll;
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
	Represents the import expression.
 | 
						|
**/
 | 
						|
typedef ImportExpr = {
 | 
						|
	/**
 | 
						|
		The path to the import expression.
 | 
						|
	**/
 | 
						|
	var path:Array<{pos:Position, name:String}>;
 | 
						|
 | 
						|
	/**
 | 
						|
		The mode of the import expression.
 | 
						|
	**/
 | 
						|
	var mode:ImportMode;
 | 
						|
}
 |