Documentation ¶
Index ¶
- Constants
- Variables
- func AreSameType[T any](a, b any) bool
- func AreTypeAndValCoercible(a, b TypeAndVal) bool
- func AreTypesCoercible(a, b Type) bool
- func AstToString(n Node) string
- func DeclToString(e Decl) string
- func ExprToString(e Expr) string
- func GetBinaryTypes[T any](a, b any) (T, T)
- func GetTypeAndValName(a TypeAndVal) string
- func GetTypeName(a Type) string
- func IsArithmeticType(a Type) bool
- func IsArithmeticTypeAndVal(a TypeAndVal) bool
- func IsBaseType(a Type) bool
- func IsBaseTypeOfType(a Type, bt ...BaseType) bool
- func IsDeclNode(n Node) bool
- func IsExactType[T any](a any) bool
- func IsExprNode(n Node) bool
- func IsPluginNode(n Node) bool
- func IsSpecNode(n Node) bool
- func IsStmtNode(n Node) bool
- func PluginToString(e Node) string
- func PrintNode(n Node, tabs int, w io.Writer)
- func SpecToString(e Spec) string
- func SpewReport(w io.Writer, message string, msg_cnt *uint32)
- func StmtToString(e Stmt) string
- func Ternary[T any](cond bool, a, b T) T
- func Walk(n, parent Node, visitor func(n, parent Node) bool)
- type ArrayType
- type ArrayTypeAndVal
- type AssertStmt
- type BadDecl
- type BadExpr
- type BadSpec
- type BadStmt
- type BaseType
- type BasicLit
- type BinExpr
- type BlockStmt
- type BracketExpr
- type CallExpr
- type CaseStmt
- type ChainExpr
- type CharTypeAndVal
- type CommaExpr
- type ControlFlow
- type Decl
- type DeclStmt
- type DeleteStmt
- type EllipsesExpr
- type EnumSpec
- type Expr
- type ExprStmt
- type FieldExpr
- type FloatTypeAndVal
- type FlowStmt
- type ForStmt
- type FuncDecl
- type FuncLit
- type FuncType
- type FuncTypeAndVal
- type HandleTypeAndVal
- type IfStmt
- type IndexExpr
- type IntTypeAndVal
- type Interp
- type LitKind
- type Macro
- type MethodMapMethodSpec
- type MethodMapPropSpec
- type MethodMapSpec
- type MsgSpan
- type Name
- type NameSpaceExpr
- type NamedArg
- type Node
- type NullExpr
- type Parser
- func (parser *Parser) AbstractDecl() Spec
- func (parser *Parser) AddExpr() Expr
- func (parser *Parser) Advance(i int) Token
- func (parser *Parser) AssignExpr() Expr
- func (parser *Parser) BitAndExpr() Expr
- func (parser *Parser) BitOrExpr() Expr
- func (parser *Parser) BitXorExpr() Expr
- func (parser *Parser) DoBlock() Stmt
- func (parser *Parser) DoEnumSpec() Spec
- func (parser *Parser) DoFor() Stmt
- func (parser *Parser) DoFuncDeclarator(fdecl *FuncDecl)
- func (parser *Parser) DoFuncSignature() Spec
- func (parser *Parser) DoIf() Stmt
- func (parser *Parser) DoMethodMap() Spec
- func (parser *Parser) DoMethodMapProperty(prop *MethodMapPropSpec) *BadSpec
- func (parser *Parser) DoOldBlock() Stmt
- func (parser *Parser) DoOldFor() Stmt
- func (parser *Parser) DoOldIf() Stmt
- func (parser *Parser) DoOldTernary(a Expr) Expr
- func (parser *Parser) DoParamList() []Decl
- func (parser *Parser) DoStruct(is_enum bool) Spec
- func (parser *Parser) DoTernary(a Expr) Expr
- func (parser *Parser) DoTypeSet() Spec
- func (parser *Parser) DoTypedef() Spec
- func (parser *Parser) DoUsingSpec() Spec
- func (parser *Parser) DoVarDeclarator(vdecl *VarDecl, param bool)
- func (parser *Parser) DoVarOrFuncDecl(param bool) Decl
- func (parser *Parser) EqualExpr() Expr
- func (parser *Parser) ExprList(end, sep TokenKind, sep_at_end bool) []Expr
- func (parser *Parser) GetToken(offset int) Token
- func (parser *Parser) HasTokenKindSeq(kinds ...TokenKind) bool
- func (parser *Parser) LogicalAndExpr() Expr
- func (parser *Parser) LogicalOrExpr() Expr
- func (parser *Parser) MainExpr() Expr
- func (parser *Parser) MulExpr() Expr
- func (parser *Parser) OldAddExpr() Expr
- func (parser *Parser) OldAssignExpr() Expr
- func (parser *Parser) OldBitAndExpr() Expr
- func (parser *Parser) OldBitOrExpr() Expr
- func (parser *Parser) OldBitXorExpr() Expr
- func (parser *Parser) OldEqualExpr() Expr
- func (parser *Parser) OldExprList(end, sep TokenKind, sep_at_end bool) []Expr
- func (parser *Parser) OldLogicalAndExpr() Expr
- func (parser *Parser) OldLogicalOrExpr() Expr
- func (parser *Parser) OldMainExpr() Expr
- func (parser *Parser) OldMulExpr() Expr
- func (parser *Parser) OldPostfixExpr() Expr
- func (parser *Parser) OldPrefixExpr() Expr
- func (parser *Parser) OldPrimaryExpr() Expr
- func (parser *Parser) OldRelExpr() Expr
- func (parser *Parser) OldShiftExpr() Expr
- func (parser *Parser) OldStart() Node
- func (parser *Parser) OldStatement() Stmt
- func (parser *Parser) OldSubMainExpr() Expr
- func (parser *Parser) OldSwitch() Stmt
- func (parser *Parser) OldTypeExpr() Expr
- func (parser *Parser) OldWhile(t Token) Stmt
- func (parser *Parser) PostfixExpr() Expr
- func (parser *Parser) PrefixExpr() Expr
- func (parser *Parser) PrimaryExpr() Expr
- func (parser *Parser) RelExpr() Expr
- func (parser *Parser) ReportErrs() bool
- func (parser *Parser) ShiftExpr() Expr
- func (parser *Parser) Start() Node
- func (parser *Parser) Statement() Stmt
- func (parser *Parser) StorageClass() StorageClassFlags
- func (parser *Parser) SubMainExpr() Expr
- func (parser *Parser) Switch() Stmt
- func (parser *Parser) TopDecl() Node
- func (parser *Parser) TypeExpr(need_carots bool) Expr
- func (parser *Parser) VarOrFuncSpec() (StorageClassFlags, Spec)
- func (parser *Parser) ViewAsExpr() Expr
- func (parser *Parser) While(t Token) Stmt
- type Plugin
- type RefType
- type RefTypeAndVal
- type RetStmt
- type Scanner
- func (s *Scanner) Advance(i int)
- func (s Scanner) Col() uint16
- func (s Scanner) HasRuneSeq(runes ...rune) bool
- func (s *Scanner) LexBinary() (string, bool)
- func (s *Scanner) LexDecimal() (string, bool, bool)
- func (s *Scanner) LexFloat(starter int, has_num bool) (string, bool, bool)
- func (s *Scanner) LexHex() (string, bool)
- func (s *Scanner) LexOctal() (string, bool)
- func (s *Scanner) LexString(quote rune) (Token, bool)
- func (s Scanner) Line() uint16
- func (s Scanner) NumMsgs() uint32
- func (s Scanner) Read(i int) rune
- func (s *Scanner) SkipSpace()
- type Scope
- type SignatureSpec
- type Span
- type Spec
- type StaticAssert
- type StaticAssertStmt
- type Stmt
- type StorageClassFlags
- type StructSpec
- type SwitchStmt
- type TernaryExpr
- type ThisExpr
- type Token
- func (tok Token) IsDelimiter() bool
- func (tok Token) IsKeyword() bool
- func (tok Token) IsLiteral() bool
- func (tok Token) IsOperator() bool
- func (tok Token) IsPreprocDirective() bool
- func (tok Token) IsStorageClass() bool
- func (tok Token) IsType() bool
- func (tok Token) KindToString() string
- func (tok Token) String() string
- func (tok Token) ToString() string
- type TokenKind
- type TokenReader
- func ConcatStringLiterals(tr *TokenReader) *TokenReader
- func LexCodeString(code string, flags int, macros map[string]Macro) (*TokenReader, bool)
- func LexFile(filename string, flags int, macros map[string]Macro) (*TokenReader, bool)
- func MakeTokenReader(tokens []Token, lines *[]string) TokenReader
- func Preprocess(tr *TokenReader, flags int, macros map[string]Macro) (*TokenReader, bool)
- func RemoveComments(tr *TokenReader) *TokenReader
- func StripSpaceTokens(tr *TokenReader, allow_newlines bool) *TokenReader
- func Tokenize(src, filename string) *TokenReader
- type Type
- type TypeAndVal
- type TypeChecker
- type TypeDecl
- type TypeDefSpec
- type TypeSetSpec
- type TypeSpec
- type TypedExpr
- type UnaryExpr
- type UsingSpec
- type VarDecl
- type ViewAsExpr
- type VoidTypeAndVal
- type WhileStmt
Constants ¶
const ( IsPublic = StorageClassFlags(1 << iota) IsConst IsNative IsForward IsStatic IsStock IsPrivate IsProtected IsReadOnly IsSealed IsVirtual MaxStorageClasses )
const ( SP_GENFLAG_NEWLINE = 1 << iota SP_GENFLAG_SEMICOLON = 1 << iota SP_GENFLAG_ALL = -1 )
const ( // continue execution. FLOW_EXC = ControlFlow(iota) // doing loop 'continue'. FLOW_CNT // doing return. FLOW_RET // breaking out of loop. FLOW_BRK )
const ( IN_THEN = condInclCtx(iota) IN_ELIF IN_ELSE )
const ( COLOR_RED = "\x1B[31m" // used for errors. COLOR_GREEN = "\x1B[32m" COLOR_YELLOW = "\x1B[33m" COLOR_BLUE = "\x1B[34m" COLOR_MAGENTA = "\x1B[35m" // used for warnings. COLOR_CYAN = "\x1B[36m" COLOR_WHITE = "\x1B[37m" COLOR_RESET = "\033[0m" // used to reset the color. )
colorful strings for printing.
const ( // Runs preprocessor. LEXFLAG_PREPROCESS = (1 << iota) // Self explanatory, strips out all comment tokens. LEXFLAG_STRIP_COMMENTS = (1 << iota) // Keeps newlines. LEXFLAG_NEWLINES = (1 << iota) // Adds #include <sourcemod> automatically. LEXFLAG_SM_INCLUDE = (1 << iota) // Enable ALL the above flags. LEXFLAG_ALL = -1 )
const ( TKEoF = TokenKind(iota) TKComment // used for preprocessor, removed afterwards. TKNewline TKSpace TKTab TKBackSlash TKHashTok TKMacroArg // literal values TKIdent TKIntLit TKFloatLit TKStrLit TKCharLit // keywords // acquire, any, as, assert TKAcquire TKAs TKAssert // break, builtin TKBreak TKBuiltin // catch, case, cast_to, char, const, continue TKCatch TKCase TKCastTo TKChar TKConst TKContinue // decl, default, defined, delete, do, double TKDecl TKDefault TKDefined TKDelete TKDo TKDouble // else, enum, exit, explicit TKElse TKEnum TKExit TKExplicit // false, finally, for, foreach, forward, funcenum, functag, function TKFalse TKFinally TKFor TKForEach TKForward TKFuncEnum TKFuncTag TKFunction // goto TKGoto // if, implicit, import, in, int[8|16|32|64], intn, interface TKIf TKImplicit TKImport TKIn TKInt TKInt8 TKInt16 TKInt32 TKInt64 TKIntN TKInterface // let TKLet // methodmap TKMethodMap // namespace, native, new, null, __nullable__ TKNameSpace TKNative TKNew TKNull TKNullable // object, operator TKObject TKOperator // package, private, property, protected, public TKPackage TKPrivate TKProperty TKProtected TKPublic // readonly, return TKReadOnly TKReturn // sealed, sizeof, static, static_assert, stock, struct, switch TKSealed TKSizeof TKStatic TKStaticAssert TKStock TKStruct TKSwitch // this, throw, true, try, typedef, typeof, typeset TKThis TKThrow TKTrue TKTry TKTypedef TKTypeof TKTypeset // uint(8|16|32|64|n), union, using TKUInt8 TKUInt16 TKUInt32 TKUInt64 TKUnion TKUsing // var, variant, view_as, virtual, void, volatile TKVar TKVariant TKViewAs TKVirtual TKVoid TKVolatile // while, with TKWhile TKWith // preproc keywords // #assert #define #if #else #elseif #endif #endinput #endscript #error #warning #include #line #pragma #tryinclude #file #undef TKPPAssert TKPPDefine TKPPIf TKPPElse TKPPElseIf TKPPEndIf TKPPEndInput TKPPErr TKPPWarn TKPPInclude TKPPLine TKPPPragma TKPPTryInclude TKPPFile TKPPUndef // delimiters // ( ) [ ] { } , : ; # TKLParen TKRParen TKLBrack TKRBrack TKLCurl TKRCurl TKComma TKColon TKSemi TKHash // operators // + - * / % ! . .. ... TKAdd TKSub TKMul TKDiv TKMod TKNot TKDot TK2Dots TKEllipses // & | ^ ~ << >> >>> TKAnd TKAndNot // &~ SPTools extension TKOr TKXor TKCompl TKShAL TKShAR TKShLR // < > >= <= != == && || TKLess TKGreater TKGreaterE TKLessE TKNotEq TKEq TKAndL TKOrL // = += -= *= /= %= &= |= ^= <<= >>= >>>= TKAssign TKAddA TKSubA TKMulA TKDivA TKModA TKAndA TKAndNotA // &~= SPTools extension TKOrA TKXorA TKShALA TKShARA TKShLRA // ++ -- :: ? TKIncr TKDecr TK2Colons TKQMark TKMaxTokens )
const ( TOKFLAG_IGNORE_NEWLINE = (1 << iota) TOKFLAG_IGNORE_TAB = (1 << iota) TOKFLAG_IGNORE_SPACE = (1 << iota) TOKFLAG_IGNORE_COMMENT = (1 << iota) TOKFLAG_IGNORE_ALL = -1 )
const ( TYPE_VOID = BaseType(iota) TYPE_HANDLE TYPE_BOOL TYPE_INT TYPE_CHAR TYPE_FLOAT TYPE_ANY )
const DigitSep = '_'
DigitSep is used when lexing the various numeric literals SourcePawn can support such as hexadecimal, octal, binary, & decimal.
const ERR_LIMIT = 5
Variables ¶
var ( PreprocOne = Token{Lexeme: "1", Path: nil, Span: MakeSpan(0, 0, 0, 0), Kind: TKIntLit} PreprocZero = Token{Lexeme: "0", Path: nil, Span: MakeSpan(0, 0, 0, 0), Kind: TKIntLit} )
var ( Keywords = map[string]TokenKind{}/* 102 elements not displayed */ Opers = map[string]TokenKind{ "(": TKLParen, ")": TKRParen, "[": TKLBrack, "]": TKRBrack, "{": TKLCurl, "}": TKRCurl, ",": TKComma, ":": TKColon, ";": TKSemi, "#": TKHash, "+": TKAdd, "-": TKSub, "*": TKMul, "/": TKDiv, "%": TKMod, "!": TKNot, ".": TKDot, "..": TK2Dots, "...": TKEllipses, "&": TKAnd, "&~": TKAndNot, "|": TKOr, "^": TKXor, "~": TKCompl, "<<": TKShAL, ">>": TKShAR, ">>>": TKShLR, "<": TKLess, ">": TKGreater, ">=": TKGreaterE, "<=": TKLessE, "!=": TKNotEq, "==": TKEq, "&&": TKAndL, "||": TKOrL, "=": TKAssign, "+=": TKAddA, "-=": TKSubA, "*=": TKMulA, "/=": TKDivA, "%=": TKModA, "&=": TKAndA, "&~=": TKAndNotA, "|=": TKOrA, "^=": TKXorA, "<<=": TKShALA, ">>=": TKShARA, ">>>=": TKShLRA, "++": TKIncr, "--": TKDecr, "::": TK2Colons, "?": TKQMark, } TokenToStr = [...]string{}/* 165 elements not displayed */ )
var LitKindToStr = [...]string{ IntLit: "int literal", FloatLit: "float literal", CharLit: "char literal", StringLit: "string literal", BoolLit: "bool literal", }
var StorageClassToString = [...]string{ IsPublic: "public", IsConst: "const", IsNative: "native", IsForward: "forward", IsStatic: "static", IsStock: "stock", IsPrivate: "private", IsProtected: "protected", IsReadOnly: "readonly", IsSealed: "sealed", IsVirtual: "virtual", }
Functions ¶
func AreSameType ¶
func AreTypeAndValCoercible ¶
func AreTypeAndValCoercible(a, b TypeAndVal) bool
* 1. Two expressions are convertible when their reduced forms are the same. E.g 2 + 2 is convertible to 4 * 2. Two expressions are coercible when you can safely cast one to the other. E.g 22 : int32 might be coercible to 22 : int64
func AreTypesCoercible ¶
* 1. Two expressions are convertible when their reduced forms are the same. E.g 2 + 2 is convertible to 4 * 2. Two expressions are coercible when you can safely cast one to the other. E.g 22 : int32 might be coercible to 22 : int64
func AstToString ¶
func DeclToString ¶
func ExprToString ¶
func GetBinaryTypes ¶
for binary operations. please make sure they're both the same type by using 'AreSameType'.
func GetTypeAndValName ¶
func GetTypeAndValName(a TypeAndVal) string
func GetTypeName ¶
func IsArithmeticType ¶
func IsArithmeticTypeAndVal ¶
func IsArithmeticTypeAndVal(a TypeAndVal) bool
func IsBaseType ¶
func IsBaseTypeOfType ¶
func IsDeclNode ¶
func IsExactType ¶
func IsExprNode ¶
func IsPluginNode ¶
func IsSpecNode ¶
func IsStmtNode ¶
func PluginToString ¶
func SpecToString ¶
func StmtToString ¶
Types ¶
type ArrayTypeAndVal ¶
type ArrayTypeAndVal struct { Elems []TypeAndVal Dynamic bool // dynamically stack allocated. // contains filtered or unexported fields }
type AssertStmt ¶
type AssertStmt struct { X Expr // contains filtered or unexported fields }
assert a;
type BadSpec ¶
type BadSpec struct {
// contains filtered or unexported fields
}
Specifications here. Spec represents a constant or type definition.
type BadStmt ¶
type BadStmt struct {
// contains filtered or unexported fields
}
statement nodes here. Statement syntax write here.
type BlockStmt ¶
type BlockStmt struct { Stmts []Stmt // contains filtered or unexported fields }
{ *Stmts }
type BracketExpr ¶
type BracketExpr struct { Exprs []Expr // contains filtered or unexported fields }
{ a, b, c }
type CallExpr ¶
type CallExpr struct { ArgList []Expr // nil means no arguments Func Expr // contains filtered or unexported fields }
f(a,b,...z)
type CaseStmt ¶
type CaseStmt struct { Case Expr // single or comma expression. Body Stmt // contains filtered or unexported fields }
case a[, b, ...z]:
type ChainExpr ¶
type ChainExpr struct { A Expr Bs []Expr Kinds []TokenKind // contains filtered or unexported fields }
a # b [ # c ... z ]
type CharTypeAndVal ¶
type CharTypeAndVal struct { Value byte // contains filtered or unexported fields }
func ConvertToChar ¶
func ConvertToChar(a TypeAndVal) (CharTypeAndVal, bool)
type CommaExpr ¶
type CommaExpr struct { Exprs []Expr // contains filtered or unexported fields }
a,b,c
type ControlFlow ¶
type ControlFlow int8
type Decl ¶
type Decl interface { Node // contains filtered or unexported methods }
Declarations here.
type DeclStmt ¶
type DeclStmt struct { D Decl // VarSpec, TypeDecl, or FuncDecl // contains filtered or unexported fields }
Type i;
type DeleteStmt ¶
type DeleteStmt struct { X Expr // contains filtered or unexported fields }
statement nodes here. Statement syntax write here.
type EnumSpec ¶
type EnumSpec struct { Ident Expr // can be nil. Step Expr // can be nil. StepOp TokenKind Names []Expr Values []Expr // contains filtered or unexported fields }
enum Name { ... } enum { ... } enum ( op= i ) { ... }
type FieldExpr ¶
type FieldExpr struct {
X, Sel Expr
// contains filtered or unexported fields
}
id.name
type FloatTypeAndVal ¶
type FloatTypeAndVal struct { Value float32 // contains filtered or unexported fields }
func ConvertToFloat ¶
func ConvertToFloat(a TypeAndVal) (FloatTypeAndVal, bool)
type FlowStmt ¶
type FlowStmt struct { Kind TokenKind // contains filtered or unexported fields }
break, continue
type ForStmt ¶
type ForStmt struct { Init Node Cond, Post Expr Body Stmt // contains filtered or unexported fields }
for [init] ; [cond] ; [post] body
type FuncDecl ¶
type FuncDecl struct { RetType Spec // *TypeSpec Ident Expr Params []Decl // []*VarDecl, *BadDecl if error. Body Node // Expr if alias, Stmt if body, nil if ';'. ClassFlags StorageClassFlags // contains filtered or unexported fields }
class type name() {} class type name(); class type name1() = name2;
type FuncLit ¶
type FuncLit struct { Sig Spec // *SignatureSpec Body Stmt // *BlockStmt // contains filtered or unexported fields }
function type (args) {}
type FuncTypeAndVal ¶
type FuncTypeAndVal struct { Params map[string]TypeAndVal // empty/nill if no params. Ret TypeAndVal // nil == 'void' Variadic bool // contains filtered or unexported fields }
type HandleTypeAndVal ¶
type HandleTypeAndVal struct {
// contains filtered or unexported fields
}
type IndexExpr ¶
type IndexExpr struct {
X, Index Expr
// contains filtered or unexported fields
}
a[i]
type IntTypeAndVal ¶
type IntTypeAndVal struct { Value int32 // contains filtered or unexported fields }
also used as the `any` type.
func ConvertToInt ¶
func ConvertToInt(a TypeAndVal) (IntTypeAndVal, bool)
type Interp ¶
type Interp struct { MsgSpan Syms, Types map[string]TypeAndVal }
func MakeInterpreter ¶
func (Interp) EvalExpr ¶
func (interp Interp) EvalExpr(e Expr) TypeAndVal
func (Interp) EvalStmt ¶
func (interp Interp) EvalStmt(s Stmt, flow *ControlFlow) TypeAndVal
type Macro ¶
func MakeFuncMacro ¶
func MakeFuncMacro(tr *TokenReader) (Macro, bool)
func MakeObjMacro ¶
func MakeObjMacro(tr *TokenReader) Macro
type MethodMapMethodSpec ¶
public Type name(params) {} public native Type name(params);
type MethodMapPropSpec ¶
type MethodMapPropSpec struct {
Type, Ident Expr
SetterParams []Decl
GetterBlock, SetterBlock Stmt
GetterClass, SetterClass StorageClassFlags
// contains filtered or unexported fields
}
property Type name { * public get() {} * public set(Type param) {} * * public native get(); * public native set(Type param); * }
type MethodMapSpec ¶
type MethodMapSpec struct { Ident Expr Parent Expr // TypeExpr Props []Spec // []*MethodMapPropSpec Methods []Spec // []*MethodMapMethodSpec Nullable bool // contains filtered or unexported fields }
methodmap Name [< type] { ... };
type MsgSpan ¶
type MsgSpan struct {
// contains filtered or unexported fields
}
func MakeMsgSpan ¶
func (*MsgSpan) PurgeNotes ¶
func (m *MsgSpan) PurgeNotes()
type NameSpaceExpr ¶
type NameSpaceExpr struct {
N, Id Expr
// contains filtered or unexported fields
}
name::id
type Node ¶
type Node interface { // line & col. Tok() Token Span() Span // contains filtered or unexported methods }
func ParseTokens ¶
func ParseTokens(tr *TokenReader, old bool) Node
type Parser ¶
type Parser struct { *TokenReader Errs []string }
func MakeParser ¶
func MakeParser(tr *TokenReader) Parser
func (*Parser) AbstractDecl ¶
AbstractDecl = Type [ *'[]' | '&' ] .
func (*Parser) AssignExpr ¶
AssignExpr = SubMainExpr *( '['+' | '-' | '*' | '/' | '%' | '&' | '&~' | '|' | '^' | '<<' | '>>' | '>>>' ] =' SubMainExpr ) .
func (*Parser) BitAndExpr ¶
BitAndExpr = ShiftExpr *( ('&' | '&~') ShiftExpr ) .
func (*Parser) BitXorExpr ¶
BitXorExpr = BitAndExpr *( '^' BitAndExpr ) .
func (*Parser) DoEnumSpec ¶
EnumSpec = 'enum' [ ident [ ':' ] '(' operator PrimaryExpr ')' ] '{' +EnumEntry '}' [ ';' ] . EnumEntry = Ident [ '=' Expr ] .
func (*Parser) DoFor ¶
ForStmt = 'for' '(' [ Decl | Expr ] ';' [ Expr ] ';' [ Expr ] ')' Statement .
func (*Parser) DoFuncDeclarator ¶
FuncSpec = Ident ParamList ( Initializer | Block | ';' ) .
func (*Parser) DoFuncSignature ¶
SignatureSpec = 'function' AbstractDecl ParamsList .
func (*Parser) DoMethodMap ¶
MethodMapSpec = 'methodmap' Ident [ '__nullable__' ] [ '<' TypeExpr ] '{' [ MethodCtor ] *MethodMapEntry '}' [ ';' ] . MethodCtor = 'public' Ident ParamList ( Block | ';' ) . MethodMapEntry = MethodMapProp | FuncDecl . MethodMapProp = 'property' TypeExpr Ident '{' PropGetter [ PropSetter ] | PropSetter '}' . PropGetter = 'public' [ 'native' ] 'get' '(' ')' ( Block | ';' ) . PropSetter = 'public' [ 'native' ] 'set' ParamList ( Block | ';' ) .
func (*Parser) DoMethodMapProperty ¶
func (parser *Parser) DoMethodMapProperty(prop *MethodMapPropSpec) *BadSpec
func (*Parser) DoOldBlock ¶
OldBlockStmt = '{' *OldStatement '}' .
func (*Parser) DoOldFor ¶
OldForStmt = 'for' '(' [ OldDecl | OldExpr ] ';' [ OldExpr ] ';' [ OldExpr ] ')' OldStatement .
func (*Parser) DoOldTernary ¶
OldTernaryExpr = '?' OldSubMainExpr ':' Expr .
func (*Parser) DoParamList ¶
ParamList = '(' *VarDecl ')' .
func (*Parser) DoStruct ¶
StructSpec = 'struct' Ident '{' *Field '}' [ ';' ] . Field = VarDecl ';' | FuncDecl .
func (*Parser) DoUsingSpec ¶
UsingSpec = 'using' Expr ';' .
func (*Parser) DoVarDeclarator ¶
VarDeclarator = Ident [ IndexExpr ] [ Initializer ] *( ',' VarDeclarator ) . Initializer = '=' SubMainExpr | '{' Expr [ ',' ( '...' | *Expr ) ] '}' .
func (*Parser) DoVarOrFuncDecl ¶
VarDecl = VarOrFuncSpec VarDeclarator . FuncDecl = VarOrFuncSpec FuncDeclarator .
func (*Parser) ExprList ¶
NamedArgExpr = '.' AssignExpr . ExprList = START ListedExpr *( SEP ListedExpr ) END . ListedExpr = NamedArgExpr | AssignExpr .
func (*Parser) HasTokenKindSeq ¶
func (*Parser) LogicalAndExpr ¶
LogicalAndExpr = EqualExpr *( '&&' EqualExpr ) .
func (*Parser) LogicalOrExpr ¶
LogicalOrExpr = LogicalAndExpr *( '||' LogicalAndExpr ) .
func (*Parser) OldAddExpr ¶
OldAddExpr = OldMulExpr *( ( '+' | '-' ) OldMulExpr ) .
func (*Parser) OldAssignExpr ¶
OldAssignExpr = OldSubMainExpr *( '['+' | '-' | '*' | '/' | '%' | '&' | '|' | '^' | '<<' | '>>' | '>>>' ] =' OldSubMainExpr ) .
func (*Parser) OldBitAndExpr ¶
OldBitAndExpr = OldShiftExpr *( '&' OldShiftExpr ) .
func (*Parser) OldBitOrExpr ¶
OldBitOrExpr = OldBitXorExpr *( '|' OldBitXorExpr ) .
func (*Parser) OldBitXorExpr ¶
OldBitXorExpr = OldBitAndExpr *( '^' OldBitAndExpr ) .
func (*Parser) OldEqualExpr ¶
OldEqualExpr = OldRelExpr *( ( '==' | '!=' ) OldRelExpr ) .
func (*Parser) OldExprList ¶
OldNamedArgExpr = '.' OldAssignExpr . OldExprList = START OldListedExpr *( SEP OldListedExpr ) END . OldListedExpr = NamedArgExpr | OldAssignExpr .
func (*Parser) OldLogicalAndExpr ¶
OldLogicalAndExpr = OldEqualExpr *( '&&' OldEqualExpr ) .
func (*Parser) OldLogicalOrExpr ¶
OldLogicalOrExpr = OldLogicalAndExpr *( '||' OldLogicalAndExpr ) .
func (*Parser) OldMainExpr ¶
*********************************************************************************
Start Expressions
********************************************************************************* OldExpr = OldAssignExpr *( ',' OldAssignExpr ) .
func (*Parser) OldMulExpr ¶
OldMulExpr = OldPrefixExpr *( ( '*' | '/' | '%' ) OldPrefixExpr ) .
func (*Parser) OldPostfixExpr ¶
OldPostfixExpr = OldPrimaryExpr *( ':' OldPrefixExpr | '[' Expr ']' | '(' [ OldExprList ] ')' | '++' | '--' ) .
func (*Parser) OldPrefixExpr ¶
OldPrefixExpr = *( '!' | '~' | '-' | '++' | '--' | 'sizeof' | 'defined' ) OldPostfixExpr .
func (*Parser) OldPrimaryExpr ¶
BoolLit = 'true' | 'false' . BasicLit = int_lit | rune_lit | string_lit . OldPrimary = BasicLit | identifier | 'operator' op | BoolLit | '...' | '(' Expr ')' | '{' OldExprList '}' .
func (*Parser) OldRelExpr ¶
OldRelExpr = OldBitOrExpr *( ( '<[=]' | '>[=]' ) OldBitOrExpr ) .
func (*Parser) OldShiftExpr ¶
OldShiftExpr = OldAddExpr *( ( '<<' | '>>' | '>>>' ) OldAddExpr ) .
func (*Parser) OldStatement ¶
* OldStatement = OldIfStmt | OldWhileStmt | OldForStmt | OldSwitchStmt | OldBlockStmt | * OldRetStmt | OldAssertStmt | OldDeclStmt | OldExprStmt .
func (*Parser) OldSubMainExpr ¶
OldSubMainExpr = OldLogicalOrExpr [ TernaryExpr ] .
func (*Parser) OldSwitch ¶
OldSwitchStmt = 'switch' '(' OldExpr ')' '{' *OldCaseClause '}' . OldCaseClause = 'case' OldExprList ':' OldStatement | 'default' ':' OldStatement .
func (*Parser) OldTypeExpr ¶
OldTypeExpr = ident | 'Float' | 'String' | 'bool' .
func (*Parser) OldWhile ¶
DoStmt = 'do' OldStatement 'while' '(' Expr ')' ';' . WhileStmt = 'while' '(' Expr ')' OldStatement .
func (*Parser) PostfixExpr ¶
PostfixExpr = Primary *( '.' identifier | '[' Expr ']' | '(' [ ExprList ] ')' | '::' identifier | '++' | '--' ) .
func (*Parser) PrefixExpr ¶
PrefixExpr = *( '!' | '~' | '-' | '++' | '--' | 'sizeof' | 'new' ) PostfixExpr .
func (*Parser) PrimaryExpr ¶
BoolLit = 'true' | 'false' . BasicLit = int_lit | rune_lit | string_lit . BracketExpr = '{' ExprList '}' . Primary = BasicLit | identifier | 'operator' op | BoolLit | 'this' | 'null' | '...' | '(' Expr ')' | BracketExpr .
func (*Parser) ReportErrs ¶
func (*Parser) Statement ¶
* Statement = IfStmt | WhileStmt | ForStmt | SwitchStmt | BlockStmt | * RetStmt | AssertStmt | StaticAssertStmt | DeclStmt | DeleteStmt | ExprStmt .
func (*Parser) StorageClass ¶
func (parser *Parser) StorageClass() StorageClassFlags
StorageClass = 'native' | 'forward' | 'const' | 'static' | 'stock' | 'public' | 'private' | 'protected' | 'readonly' | 'sealed' | 'virtual' .
func (*Parser) SubMainExpr ¶
SubMainExpr = LogicalOrExpr [ TernaryExpr ] .
func (*Parser) Switch ¶
SwitchStmt = 'switch' '(' Expr ')' '{' *CaseClause '}' . CaseClause = 'case' ExprList ':' Statement | 'default' ':' Statement .
func (*Parser) TopDecl ¶
Plugin = +TopDecl . TopDecl = FuncDecl | TypeDecl | VarDecl | StaticAssertion .
func (*Parser) TypeExpr ¶
TypeExpr = '<' ( ident | '[u]int[8|16|32|64|n]' | 'float' | 'char' | 'bool' ) '>' .
func (*Parser) VarOrFuncSpec ¶
func (parser *Parser) VarOrFuncSpec() (StorageClassFlags, Spec)
VarOrFuncSpec = *StorageClass AbstractDecl .
func (*Parser) ViewAsExpr ¶
ViewAsExpr = TypeExpr '(' MainExpr ')' .
type Plugin ¶
type Plugin struct { Decls []Decl // contains filtered or unexported fields }
top-level plugin.
type RefTypeAndVal ¶
type RefTypeAndVal struct { Ref TypeAndVal // contains filtered or unexported fields }
type RetStmt ¶
type RetStmt struct { X Expr // contains filtered or unexported fields }
return i; return;
type Scanner ¶
type Scanner struct { MsgSpan // contains filtered or unexported fields }
func (Scanner) HasRuneSeq ¶
func (*Scanner) LexDecimal ¶
returns the lexeme, result, and if it's a float.
type SignatureSpec ¶
type SignatureSpec struct { Type Spec Params []Decl // array of []*VarDecl, *BadDecl if error. // contains filtered or unexported fields }
function type params;
type Span ¶
type Span struct {
LineStart, ColStart, LineEnd, ColEnd uint16
}
func (Span) AdjustLines ¶
type Spec ¶
type Spec interface { Node // contains filtered or unexported methods }
Specifications here. Spec represents a constant or type definition.
type StaticAssert ¶
type StaticAssert struct {
A, B Expr
// contains filtered or unexported fields
}
Declarations here.
type StaticAssertStmt ¶
type StaticAssertStmt struct { A Decl // contains filtered or unexported fields }
static_assert(a, b);
type Stmt ¶
type Stmt interface { Node // contains filtered or unexported methods }
statement nodes here. Statement syntax write here.
type StorageClassFlags ¶
type StorageClassFlags uint16
func (StorageClassFlags) String ¶
func (sc StorageClassFlags) String() string
type StructSpec ¶
type StructSpec struct { Ident Expr IsEnum bool Fields []Decl // []*VarDecl Methods []Decl // []*FuncDecl // contains filtered or unexported fields }
struct Name { ... } enum struct Name { ... }
type SwitchStmt ¶
type SwitchStmt struct { Cases []Stmt Default Stmt Cond Expr // contains filtered or unexported fields }
switch cond body
type TernaryExpr ¶
type TernaryExpr struct {
A, B, C Expr
// contains filtered or unexported fields
}
a? b : c
type Token ¶
func (Token) IsDelimiter ¶
func (Token) IsOperator ¶
func (Token) IsPreprocDirective ¶
func (Token) IsStorageClass ¶
func (Token) KindToString ¶
type TokenReader ¶
func ConcatStringLiterals ¶
func ConcatStringLiterals(tr *TokenReader) *TokenReader
func LexCodeString ¶
func MakeTokenReader ¶
func MakeTokenReader(tokens []Token, lines *[]string) TokenReader
func Preprocess ¶
func Preprocess(tr *TokenReader, flags int, macros map[string]Macro) (*TokenReader, bool)
func RemoveComments ¶
func RemoveComments(tr *TokenReader) *TokenReader
func StripSpaceTokens ¶
func StripSpaceTokens(tr *TokenReader, allow_newlines bool) *TokenReader
func Tokenize ¶
func Tokenize(src, filename string) *TokenReader
func (*TokenReader) Advance ¶
func (tr *TokenReader) Advance(i int)
func (*TokenReader) Get ¶
func (tr *TokenReader) Get(offset, ignore_flag int) Token
func (*TokenReader) HasTokenKindSeq ¶
func (tr *TokenReader) HasTokenKindSeq(ignore_flag int, kinds ...TokenKind) bool
func (*TokenReader) Len ¶
func (tr *TokenReader) Len() int
func (*TokenReader) Reset ¶
func (tr *TokenReader) Reset()
func (*TokenReader) SkipTokenKinds ¶
func (tr *TokenReader) SkipTokenKinds(kinds ...TokenKind)
does NOT skip whitespace or comments.
type TypeAndVal ¶
type TypeAndVal interface {
// contains filtered or unexported methods
}
func EvalExpression ¶
type TypeChecker ¶
func MakeTypeChecker ¶
func MakeTypeChecker(p Parser) TypeChecker
func (*TypeChecker) CheckExpr ¶
func (c *TypeChecker) CheckExpr(e Expr)
func (*TypeChecker) CheckStmt ¶
func (c *TypeChecker) CheckStmt(s Stmt)
type TypeDecl ¶
type TypeDecl struct { Type Spec // anything not Func or Var Decl. // contains filtered or unexported fields }
Declarations here.
type TypeDefSpec ¶
type TypeDefSpec struct { Ident Expr Sig Spec // *SignatureSpec // contains filtered or unexported fields }
typedef name = function type params;
type TypeSetSpec ¶
type TypeSetSpec struct { Ident Expr Signatures []Spec // []*SignatureSpec // contains filtered or unexported fields }
typeset name {};
type TypedExpr ¶
type TypedExpr struct { TypeName Token // contains filtered or unexported fields }
<T>
type UsingSpec ¶
type UsingSpec struct { Namespace Expr // contains filtered or unexported fields }
using name;
type VarDecl ¶
type VarDecl struct { Type Spec // *TypeSpec Names, Inits []Expr Dims [][]Expr // a var can have multiple dims, account for em all. // valid dim index but empty means [] auto counting. // nil index if there was no initializer. ClassFlags StorageClassFlags // contains filtered or unexported fields }
name1, name2[n], name3=expr;
type ViewAsExpr ¶
view_as<T>(expr)
type VoidTypeAndVal ¶
type VoidTypeAndVal struct {
// contains filtered or unexported fields
}