forked from LeenkxTeam/LNXSDK
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;
|
|
}
|