parser

package
v0.0.0-...-7d08e18 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 29, 2019 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	KEYWORD_AS        string = "as"
	KEYWORD_BREAK     string = "break"
	KEYWORD_C         string = "C"
	KEYWORD_DEFER     string = "defer"
	KEYWORD_DISCARD   string = "_"
	KEYWORD_DO        string = "do"
	KEYWORD_ELSE      string = "else"
	KEYWORD_ENUM      string = "enum"
	KEYWORD_FALSE     string = "false"
	KEYWORD_FOR       string = "for"
	KEYWORD_FUNC      string = "func"
	KEYWORD_LEN       string = "len"
	KEYWORD_IF        string = "if"
	KEYWORD_MATCH     string = "match"
	KEYWORD_MUT       string = "mut"
	KEYWORD_NEXT      string = "next"
	KEYWORD_PUB       string = "pub"
	KEYWORD_RETURN    string = "return"
	KEYWORD_SIZEOF    string = "sizeof"
	KEYWORD_STRUCT    string = "struct"
	KEYWORD_INTERFACE string = "interface"
	KEYWORD_TRUE      string = "true"
	KEYWORD_USE       string = "use"
	KEYWORD_VOID      string = "void"
)
View Source
const (
	SIMPLE_ESCAPE_VALUES string = "\a\b\f\n\r\t\v\\'\"" + string(0)
	SIMPLE_ESCAPE_NAMES  string = "abfnrtv\\'\"0"
)

Variables

This section is empty.

Functions

func IsReservedKeyword

func IsReservedKeyword(s string) bool

func Parse

func Parse(input *lexer.Sourcefile) (*ParseTree, []*NameNode)

func UnescapeString

func UnescapeString(s string) (string, error)

Types

type AddrofExprNode

type AddrofExprNode struct {
	Value       ParseNode
	Mutable     bool
	IsReference bool
	// contains filtered or unexported fields
}

func (*AddrofExprNode) Attrs

func (v *AddrofExprNode) Attrs() AttrGroup

func (*AddrofExprNode) DocComments

func (v *AddrofExprNode) DocComments() []*DocComment

func (*AddrofExprNode) SetAttrs

func (v *AddrofExprNode) SetAttrs(attrs AttrGroup)

func (*AddrofExprNode) SetDocComments

func (v *AddrofExprNode) SetDocComments(dcs []*DocComment)

func (*AddrofExprNode) SetWhere

func (v *AddrofExprNode) SetWhere(where lexer.Span)

func (*AddrofExprNode) Where

func (v *AddrofExprNode) Where() lexer.Span

type ArrayAccessNode

type ArrayAccessNode struct {
	Array ParseNode
	Index ParseNode
	// contains filtered or unexported fields
}

func (*ArrayAccessNode) Attrs

func (v *ArrayAccessNode) Attrs() AttrGroup

func (*ArrayAccessNode) DocComments

func (v *ArrayAccessNode) DocComments() []*DocComment

func (*ArrayAccessNode) SetAttrs

func (v *ArrayAccessNode) SetAttrs(attrs AttrGroup)

func (*ArrayAccessNode) SetDocComments

func (v *ArrayAccessNode) SetDocComments(dcs []*DocComment)

func (*ArrayAccessNode) SetWhere

func (v *ArrayAccessNode) SetWhere(where lexer.Span)

func (*ArrayAccessNode) Where

func (v *ArrayAccessNode) Where() lexer.Span

type ArrayLenExprNode

type ArrayLenExprNode struct {
	ArrayExpr ParseNode
	// contains filtered or unexported fields
}

func (*ArrayLenExprNode) Attrs

func (v *ArrayLenExprNode) Attrs() AttrGroup

func (*ArrayLenExprNode) DocComments

func (v *ArrayLenExprNode) DocComments() []*DocComment

func (*ArrayLenExprNode) SetAttrs

func (v *ArrayLenExprNode) SetAttrs(attrs AttrGroup)

func (*ArrayLenExprNode) SetDocComments

func (v *ArrayLenExprNode) SetDocComments(dcs []*DocComment)

func (*ArrayLenExprNode) SetWhere

func (v *ArrayLenExprNode) SetWhere(where lexer.Span)

func (*ArrayLenExprNode) Where

func (v *ArrayLenExprNode) Where() lexer.Span

type ArrayTypeNode

type ArrayTypeNode struct {
	MemberType    *TypeReferenceNode
	IsFixedLength bool
	Length        int
	// contains filtered or unexported fields
}

func (*ArrayTypeNode) Attrs

func (v *ArrayTypeNode) Attrs() AttrGroup

func (*ArrayTypeNode) DocComments

func (v *ArrayTypeNode) DocComments() []*DocComment

func (*ArrayTypeNode) SetAttrs

func (v *ArrayTypeNode) SetAttrs(attrs AttrGroup)

func (*ArrayTypeNode) SetDocComments

func (v *ArrayTypeNode) SetDocComments(dcs []*DocComment)

func (*ArrayTypeNode) SetWhere

func (v *ArrayTypeNode) SetWhere(where lexer.Span)

func (*ArrayTypeNode) Where

func (v *ArrayTypeNode) Where() lexer.Span

type AssignStatNode

type AssignStatNode struct {
	Target ParseNode
	Value  ParseNode
	// contains filtered or unexported fields
}

func (*AssignStatNode) Attrs

func (v *AssignStatNode) Attrs() AttrGroup

func (*AssignStatNode) DocComments

func (v *AssignStatNode) DocComments() []*DocComment

func (*AssignStatNode) SetAttrs

func (v *AssignStatNode) SetAttrs(attrs AttrGroup)

func (*AssignStatNode) SetDocComments

func (v *AssignStatNode) SetDocComments(dcs []*DocComment)

func (*AssignStatNode) SetWhere

func (v *AssignStatNode) SetWhere(where lexer.Span)

func (*AssignStatNode) Where

func (v *AssignStatNode) Where() lexer.Span

type Attr

type Attr struct {
	Key       string
	Value     string
	FromBlock bool
	// contains filtered or unexported fields
}

func (*Attr) Pos

func (v *Attr) Pos() lexer.Position

func (*Attr) SetPos

func (v *Attr) SetPos(pos lexer.Position)

func (*Attr) String

func (v *Attr) String() string

type AttrGroup

type AttrGroup map[string]*Attr

func (AttrGroup) Contains

func (v AttrGroup) Contains(key string) bool

func (AttrGroup) Equals

func (v AttrGroup) Equals(other AttrGroup) bool

func (AttrGroup) Extend

func (v AttrGroup) Extend(other AttrGroup)

func (AttrGroup) Get

func (v AttrGroup) Get(key string) *Attr

func (AttrGroup) Set

func (v AttrGroup) Set(key string, value *Attr) bool

func (AttrGroup) String

func (v AttrGroup) String() string

type BinOpType

type BinOpType int
const (
	BINOP_ERR BinOpType = iota

	BINOP_ADD
	BINOP_SUB
	BINOP_MUL
	BINOP_DIV
	BINOP_MOD

	BINOP_GREATER
	BINOP_LESS
	BINOP_GREATER_EQ
	BINOP_LESS_EQ
	BINOP_EQ
	BINOP_NOT_EQ

	BINOP_BIT_AND
	BINOP_BIT_OR
	BINOP_BIT_XOR
	BINOP_BIT_LEFT
	BINOP_BIT_RIGHT

	BINOP_LOG_AND
	BINOP_LOG_OR
)

func (BinOpType) Category

func (v BinOpType) Category() OpCategory

func (BinOpType) OpString

func (v BinOpType) OpString() string

func (BinOpType) String

func (i BinOpType) String() string

type BinaryExprNode

type BinaryExprNode struct {
	Lhand    ParseNode
	Rhand    ParseNode
	Operator BinOpType
	// contains filtered or unexported fields
}

expressions

func (*BinaryExprNode) Attrs

func (v *BinaryExprNode) Attrs() AttrGroup

func (*BinaryExprNode) DocComments

func (v *BinaryExprNode) DocComments() []*DocComment

func (*BinaryExprNode) SetAttrs

func (v *BinaryExprNode) SetAttrs(attrs AttrGroup)

func (*BinaryExprNode) SetDocComments

func (v *BinaryExprNode) SetDocComments(dcs []*DocComment)

func (*BinaryExprNode) SetWhere

func (v *BinaryExprNode) SetWhere(where lexer.Span)

func (*BinaryExprNode) Where

func (v *BinaryExprNode) Where() lexer.Span

type BinopAssignStatNode

type BinopAssignStatNode struct {
	Target   ParseNode
	Operator BinOpType
	Value    ParseNode
	// contains filtered or unexported fields
}

func (*BinopAssignStatNode) Attrs

func (v *BinopAssignStatNode) Attrs() AttrGroup

func (*BinopAssignStatNode) DocComments

func (v *BinopAssignStatNode) DocComments() []*DocComment

func (*BinopAssignStatNode) SetAttrs

func (v *BinopAssignStatNode) SetAttrs(attrs AttrGroup)

func (*BinopAssignStatNode) SetDocComments

func (v *BinopAssignStatNode) SetDocComments(dcs []*DocComment)

func (*BinopAssignStatNode) SetWhere

func (v *BinopAssignStatNode) SetWhere(where lexer.Span)

func (*BinopAssignStatNode) Where

func (v *BinopAssignStatNode) Where() lexer.Span

type BlockNode

type BlockNode struct {
	NonScoping bool
	Nodes      []ParseNode
	// contains filtered or unexported fields
}

func (*BlockNode) Attrs

func (v *BlockNode) Attrs() AttrGroup

func (*BlockNode) DocComments

func (v *BlockNode) DocComments() []*DocComment

func (*BlockNode) SetAttrs

func (v *BlockNode) SetAttrs(attrs AttrGroup)

func (*BlockNode) SetDocComments

func (v *BlockNode) SetDocComments(dcs []*DocComment)

func (*BlockNode) SetWhere

func (v *BlockNode) SetWhere(where lexer.Span)

func (*BlockNode) Where

func (v *BlockNode) Where() lexer.Span

type BlockStatNode

type BlockStatNode struct {
	Body *BlockNode
	// contains filtered or unexported fields
}

func (*BlockStatNode) Attrs

func (v *BlockStatNode) Attrs() AttrGroup

func (*BlockStatNode) DocComments

func (v *BlockStatNode) DocComments() []*DocComment

func (*BlockStatNode) SetAttrs

func (v *BlockStatNode) SetAttrs(attrs AttrGroup)

func (*BlockStatNode) SetDocComments

func (v *BlockStatNode) SetDocComments(dcs []*DocComment)

func (*BlockStatNode) SetWhere

func (v *BlockStatNode) SetWhere(where lexer.Span)

func (*BlockStatNode) Where

func (v *BlockStatNode) Where() lexer.Span

type BoolLitNode

type BoolLitNode struct {
	Value bool
	// contains filtered or unexported fields
}

func (*BoolLitNode) Attrs

func (v *BoolLitNode) Attrs() AttrGroup

func (*BoolLitNode) DocComments

func (v *BoolLitNode) DocComments() []*DocComment

func (*BoolLitNode) SetAttrs

func (v *BoolLitNode) SetAttrs(attrs AttrGroup)

func (*BoolLitNode) SetDocComments

func (v *BoolLitNode) SetDocComments(dcs []*DocComment)

func (*BoolLitNode) SetWhere

func (v *BoolLitNode) SetWhere(where lexer.Span)

func (*BoolLitNode) Where

func (v *BoolLitNode) Where() lexer.Span

type BreakStatNode

type BreakStatNode struct {
	// contains filtered or unexported fields
}

func (*BreakStatNode) Attrs

func (v *BreakStatNode) Attrs() AttrGroup

func (*BreakStatNode) DocComments

func (v *BreakStatNode) DocComments() []*DocComment

func (*BreakStatNode) SetAttrs

func (v *BreakStatNode) SetAttrs(attrs AttrGroup)

func (*BreakStatNode) SetDocComments

func (v *BreakStatNode) SetDocComments(dcs []*DocComment)

func (*BreakStatNode) SetWhere

func (v *BreakStatNode) SetWhere(where lexer.Span)

func (*BreakStatNode) Where

func (v *BreakStatNode) Where() lexer.Span

type CallExprNode

type CallExprNode struct {
	Function  ParseNode
	Arguments []ParseNode
	// contains filtered or unexported fields
}

func (*CallExprNode) Attrs

func (v *CallExprNode) Attrs() AttrGroup

func (*CallExprNode) DocComments

func (v *CallExprNode) DocComments() []*DocComment

func (*CallExprNode) SetAttrs

func (v *CallExprNode) SetAttrs(attrs AttrGroup)

func (*CallExprNode) SetDocComments

func (v *CallExprNode) SetDocComments(dcs []*DocComment)

func (*CallExprNode) SetWhere

func (v *CallExprNode) SetWhere(where lexer.Span)

func (*CallExprNode) Where

func (v *CallExprNode) Where() lexer.Span

type CallStatNode

type CallStatNode struct {
	Call *CallExprNode
	// contains filtered or unexported fields
}

func (*CallStatNode) Attrs

func (v *CallStatNode) Attrs() AttrGroup

func (*CallStatNode) DocComments

func (v *CallStatNode) DocComments() []*DocComment

func (*CallStatNode) SetAttrs

func (v *CallStatNode) SetAttrs(attrs AttrGroup)

func (*CallStatNode) SetDocComments

func (v *CallStatNode) SetDocComments(dcs []*DocComment)

func (*CallStatNode) SetWhere

func (v *CallStatNode) SetWhere(where lexer.Span)

func (*CallStatNode) Where

func (v *CallStatNode) Where() lexer.Span

type CastExprNode

type CastExprNode struct {
	Type  *TypeReferenceNode
	Value ParseNode
	// contains filtered or unexported fields
}

func (*CastExprNode) Attrs

func (v *CastExprNode) Attrs() AttrGroup

func (*CastExprNode) DocComments

func (v *CastExprNode) DocComments() []*DocComment

func (*CastExprNode) SetAttrs

func (v *CastExprNode) SetAttrs(attrs AttrGroup)

func (*CastExprNode) SetDocComments

func (v *CastExprNode) SetDocComments(dcs []*DocComment)

func (*CastExprNode) SetWhere

func (v *CastExprNode) SetWhere(where lexer.Span)

func (*CastExprNode) Where

func (v *CastExprNode) Where() lexer.Span

type CompositeLiteralNode

type CompositeLiteralNode struct {
	Type   *TypeReferenceNode
	Fields []LocatedString // has same length as Values. missing fields have zero value.
	Values []ParseNode
	// contains filtered or unexported fields
}

func (*CompositeLiteralNode) Attrs

func (v *CompositeLiteralNode) Attrs() AttrGroup

func (*CompositeLiteralNode) DocComments

func (v *CompositeLiteralNode) DocComments() []*DocComment

func (*CompositeLiteralNode) SetAttrs

func (v *CompositeLiteralNode) SetAttrs(attrs AttrGroup)

func (*CompositeLiteralNode) SetDocComments

func (v *CompositeLiteralNode) SetDocComments(dcs []*DocComment)

func (*CompositeLiteralNode) SetWhere

func (v *CompositeLiteralNode) SetWhere(where lexer.Span)

func (*CompositeLiteralNode) Where

func (v *CompositeLiteralNode) Where() lexer.Span

type ConditionBodyNode

type ConditionBodyNode struct {
	Condition ParseNode
	Body      *BlockNode
	// contains filtered or unexported fields
}

func (*ConditionBodyNode) Attrs

func (v *ConditionBodyNode) Attrs() AttrGroup

func (*ConditionBodyNode) DocComments

func (v *ConditionBodyNode) DocComments() []*DocComment

func (*ConditionBodyNode) SetAttrs

func (v *ConditionBodyNode) SetAttrs(attrs AttrGroup)

func (*ConditionBodyNode) SetDocComments

func (v *ConditionBodyNode) SetDocComments(dcs []*DocComment)

func (*ConditionBodyNode) SetWhere

func (v *ConditionBodyNode) SetWhere(where lexer.Span)

func (*ConditionBodyNode) Where

func (v *ConditionBodyNode) Where() lexer.Span

type DeclNode

type DeclNode interface {
	ParseNode
	IsPublic() bool // only used for top-level nodes
	SetPublic(bool)
}

type DeferStatNode

type DeferStatNode struct {
	Call *CallExprNode
	// contains filtered or unexported fields
}

statements

func (*DeferStatNode) Attrs

func (v *DeferStatNode) Attrs() AttrGroup

func (*DeferStatNode) DocComments

func (v *DeferStatNode) DocComments() []*DocComment

func (*DeferStatNode) SetAttrs

func (v *DeferStatNode) SetAttrs(attrs AttrGroup)

func (*DeferStatNode) SetDocComments

func (v *DeferStatNode) SetDocComments(dcs []*DocComment)

func (*DeferStatNode) SetWhere

func (v *DeferStatNode) SetWhere(where lexer.Span)

func (*DeferStatNode) Where

func (v *DeferStatNode) Where() lexer.Span

type DestructVarDeclNode

type DestructVarDeclNode struct {
	Names   []LocatedString
	Mutable []bool
	Value   ParseNode
	// contains filtered or unexported fields
}

func (DestructVarDeclNode) IsPublic

func (v DestructVarDeclNode) IsPublic() bool

func (*DestructVarDeclNode) SetPublic

func (v *DestructVarDeclNode) SetPublic(p bool)

type DiscardAccessNode

type DiscardAccessNode struct {
	// contains filtered or unexported fields
}

func (*DiscardAccessNode) Attrs

func (v *DiscardAccessNode) Attrs() AttrGroup

func (*DiscardAccessNode) DocComments

func (v *DiscardAccessNode) DocComments() []*DocComment

func (*DiscardAccessNode) SetAttrs

func (v *DiscardAccessNode) SetAttrs(attrs AttrGroup)

func (*DiscardAccessNode) SetDocComments

func (v *DiscardAccessNode) SetDocComments(dcs []*DocComment)

func (*DiscardAccessNode) SetWhere

func (v *DiscardAccessNode) SetWhere(where lexer.Span)

func (*DiscardAccessNode) Where

func (v *DiscardAccessNode) Where() lexer.Span

type DocComment

type DocComment struct {
	Contents string
	Where    lexer.Span
}

type Documentable

type Documentable interface {
	DocComments() []*DocComment
}

type EnumEntryNode

type EnumEntryNode struct {
	Name       LocatedString
	Value      *NumberLitNode
	TupleBody  *TupleTypeNode
	StructBody *StructTypeNode
	// contains filtered or unexported fields
}

func (*EnumEntryNode) Attrs

func (v *EnumEntryNode) Attrs() AttrGroup

func (*EnumEntryNode) DocComments

func (v *EnumEntryNode) DocComments() []*DocComment

func (*EnumEntryNode) SetAttrs

func (v *EnumEntryNode) SetAttrs(attrs AttrGroup)

func (*EnumEntryNode) SetDocComments

func (v *EnumEntryNode) SetDocComments(dcs []*DocComment)

func (*EnumEntryNode) SetWhere

func (v *EnumEntryNode) SetWhere(where lexer.Span)

func (*EnumEntryNode) Where

func (v *EnumEntryNode) Where() lexer.Span

type EnumPatternNode

type EnumPatternNode struct {
	MemberName *NameNode
	Names      []LocatedString
	// contains filtered or unexported fields
}

func (*EnumPatternNode) Attrs

func (v *EnumPatternNode) Attrs() AttrGroup

func (*EnumPatternNode) DocComments

func (v *EnumPatternNode) DocComments() []*DocComment

func (*EnumPatternNode) SetAttrs

func (v *EnumPatternNode) SetAttrs(attrs AttrGroup)

func (*EnumPatternNode) SetDocComments

func (v *EnumPatternNode) SetDocComments(dcs []*DocComment)

func (*EnumPatternNode) SetWhere

func (v *EnumPatternNode) SetWhere(where lexer.Span)

func (*EnumPatternNode) Where

func (v *EnumPatternNode) Where() lexer.Span

type EnumTypeNode

type EnumTypeNode struct {
	Members      []*EnumEntryNode
	GenericSigil *GenericSigilNode
	// contains filtered or unexported fields
}

func (*EnumTypeNode) Attrs

func (v *EnumTypeNode) Attrs() AttrGroup

func (*EnumTypeNode) DocComments

func (v *EnumTypeNode) DocComments() []*DocComment

func (*EnumTypeNode) SetAttrs

func (v *EnumTypeNode) SetAttrs(attrs AttrGroup)

func (*EnumTypeNode) SetDocComments

func (v *EnumTypeNode) SetDocComments(dcs []*DocComment)

func (*EnumTypeNode) SetWhere

func (v *EnumTypeNode) SetWhere(where lexer.Span)

func (*EnumTypeNode) Where

func (v *EnumTypeNode) Where() lexer.Span

type FunctionDeclNode

type FunctionDeclNode struct {
	Function *FunctionNode
	// contains filtered or unexported fields
}

func (FunctionDeclNode) IsPublic

func (v FunctionDeclNode) IsPublic() bool

func (*FunctionDeclNode) SetPublic

func (v *FunctionDeclNode) SetPublic(p bool)

type FunctionHeaderNode

type FunctionHeaderNode struct {
	Anonymous    bool
	Name         LocatedString
	GenericSigil *GenericSigilNode
	Arguments    []*VarDeclNode
	ReturnType   *TypeReferenceNode
	Variadic     bool

	StaticReceiverType *NamedTypeNode // use this if static
	Receiver           *VarDeclNode   // use this if not static. this would be so much nicer with tagged unions...
	// contains filtered or unexported fields
}

func (*FunctionHeaderNode) Attrs

func (v *FunctionHeaderNode) Attrs() AttrGroup

func (*FunctionHeaderNode) DocComments

func (v *FunctionHeaderNode) DocComments() []*DocComment

func (*FunctionHeaderNode) SetAttrs

func (v *FunctionHeaderNode) SetAttrs(attrs AttrGroup)

func (*FunctionHeaderNode) SetDocComments

func (v *FunctionHeaderNode) SetDocComments(dcs []*DocComment)

func (*FunctionHeaderNode) SetWhere

func (v *FunctionHeaderNode) SetWhere(where lexer.Span)

func (*FunctionHeaderNode) Where

func (v *FunctionHeaderNode) Where() lexer.Span

type FunctionNode

type FunctionNode struct {
	Header *FunctionHeaderNode
	Body   *BlockNode
	Stat   ParseNode
	Expr   ParseNode
	// contains filtered or unexported fields
}

func (*FunctionNode) Attrs

func (v *FunctionNode) Attrs() AttrGroup

func (*FunctionNode) DocComments

func (v *FunctionNode) DocComments() []*DocComment

func (*FunctionNode) SetAttrs

func (v *FunctionNode) SetAttrs(attrs AttrGroup)

func (*FunctionNode) SetDocComments

func (v *FunctionNode) SetDocComments(dcs []*DocComment)

func (*FunctionNode) SetWhere

func (v *FunctionNode) SetWhere(where lexer.Span)

func (*FunctionNode) Where

func (v *FunctionNode) Where() lexer.Span

type FunctionTypeNode

type FunctionTypeNode struct {
	ParameterTypes []*TypeReferenceNode
	ReturnType     *TypeReferenceNode
	IsVariadic     bool
	// contains filtered or unexported fields
}

func (*FunctionTypeNode) Attrs

func (v *FunctionTypeNode) Attrs() AttrGroup

func (*FunctionTypeNode) DocComments

func (v *FunctionTypeNode) DocComments() []*DocComment

func (*FunctionTypeNode) SetAttrs

func (v *FunctionTypeNode) SetAttrs(attrs AttrGroup)

func (*FunctionTypeNode) SetDocComments

func (v *FunctionTypeNode) SetDocComments(dcs []*DocComment)

func (*FunctionTypeNode) SetWhere

func (v *FunctionTypeNode) SetWhere(where lexer.Span)

func (*FunctionTypeNode) Where

func (v *FunctionTypeNode) Where() lexer.Span

type GenericNameNode

type GenericNameNode struct {
	Name              *NameNode
	GenericParameters []*TypeReferenceNode
	// contains filtered or unexported fields
}

func (*GenericNameNode) Attrs

func (v *GenericNameNode) Attrs() AttrGroup

func (*GenericNameNode) DocComments

func (v *GenericNameNode) DocComments() []*DocComment

func (*GenericNameNode) SetAttrs

func (v *GenericNameNode) SetAttrs(attrs AttrGroup)

func (*GenericNameNode) SetDocComments

func (v *GenericNameNode) SetDocComments(dcs []*DocComment)

func (*GenericNameNode) SetWhere

func (v *GenericNameNode) SetWhere(where lexer.Span)

func (*GenericNameNode) Where

func (v *GenericNameNode) Where() lexer.Span

type GenericSigilNode

type GenericSigilNode struct {
	GenericParameters []*TypeParameterNode
	// contains filtered or unexported fields
}

func (*GenericSigilNode) Attrs

func (v *GenericSigilNode) Attrs() AttrGroup

func (*GenericSigilNode) DocComments

func (v *GenericSigilNode) DocComments() []*DocComment

func (*GenericSigilNode) SetAttrs

func (v *GenericSigilNode) SetAttrs(attrs AttrGroup)

func (*GenericSigilNode) SetDocComments

func (v *GenericSigilNode) SetDocComments(dcs []*DocComment)

func (*GenericSigilNode) SetWhere

func (v *GenericSigilNode) SetWhere(where lexer.Span)

func (*GenericSigilNode) Where

func (v *GenericSigilNode) Where() lexer.Span

type IfStatNode

type IfStatNode struct {
	Parts    []*ConditionBodyNode
	ElseBody *BlockNode
	// contains filtered or unexported fields
}

func (*IfStatNode) Attrs

func (v *IfStatNode) Attrs() AttrGroup

func (*IfStatNode) DocComments

func (v *IfStatNode) DocComments() []*DocComment

func (*IfStatNode) SetAttrs

func (v *IfStatNode) SetAttrs(attrs AttrGroup)

func (*IfStatNode) SetDocComments

func (v *IfStatNode) SetDocComments(dcs []*DocComment)

func (*IfStatNode) SetWhere

func (v *IfStatNode) SetWhere(where lexer.Span)

func (*IfStatNode) Where

func (v *IfStatNode) Where() lexer.Span

type InterfaceTypeNode

type InterfaceTypeNode struct {
	Functions    []*FunctionHeaderNode
	GenericSigil *GenericSigilNode
	// contains filtered or unexported fields
}

func (*InterfaceTypeNode) Attrs

func (v *InterfaceTypeNode) Attrs() AttrGroup

func (*InterfaceTypeNode) DocComments

func (v *InterfaceTypeNode) DocComments() []*DocComment

func (*InterfaceTypeNode) SetAttrs

func (v *InterfaceTypeNode) SetAttrs(attrs AttrGroup)

func (*InterfaceTypeNode) SetDocComments

func (v *InterfaceTypeNode) SetDocComments(dcs []*DocComment)

func (*InterfaceTypeNode) SetWhere

func (v *InterfaceTypeNode) SetWhere(where lexer.Span)

func (*InterfaceTypeNode) Where

func (v *InterfaceTypeNode) Where() lexer.Span

type LambdaExprNode

type LambdaExprNode struct {
	Function *FunctionNode
	// contains filtered or unexported fields
}

func (*LambdaExprNode) Attrs

func (v *LambdaExprNode) Attrs() AttrGroup

func (*LambdaExprNode) DocComments

func (v *LambdaExprNode) DocComments() []*DocComment

func (*LambdaExprNode) SetAttrs

func (v *LambdaExprNode) SetAttrs(attrs AttrGroup)

func (*LambdaExprNode) SetDocComments

func (v *LambdaExprNode) SetDocComments(dcs []*DocComment)

func (*LambdaExprNode) SetWhere

func (v *LambdaExprNode) SetWhere(where lexer.Span)

func (*LambdaExprNode) Where

func (v *LambdaExprNode) Where() lexer.Span

type LinkDirectiveNode

type LinkDirectiveNode struct {
	Library LocatedString
	// contains filtered or unexported fields
}

directives

func (*LinkDirectiveNode) Attrs

func (v *LinkDirectiveNode) Attrs() AttrGroup

func (*LinkDirectiveNode) DocComments

func (v *LinkDirectiveNode) DocComments() []*DocComment

func (*LinkDirectiveNode) SetAttrs

func (v *LinkDirectiveNode) SetAttrs(attrs AttrGroup)

func (*LinkDirectiveNode) SetDocComments

func (v *LinkDirectiveNode) SetDocComments(dcs []*DocComment)

func (*LinkDirectiveNode) SetWhere

func (v *LinkDirectiveNode) SetWhere(where lexer.Span)

func (*LinkDirectiveNode) Where

func (v *LinkDirectiveNode) Where() lexer.Span

type LocatedString

type LocatedString struct {
	Where lexer.Span
	Value string
}

func NewLocatedString

func NewLocatedString(token *lexer.Token) LocatedString

func (LocatedString) IsEmpty

func (v LocatedString) IsEmpty() bool

type LoopStatNode

type LoopStatNode struct {
	Condition ParseNode
	Body      *BlockNode
	// contains filtered or unexported fields
}

func (*LoopStatNode) Attrs

func (v *LoopStatNode) Attrs() AttrGroup

func (*LoopStatNode) DocComments

func (v *LoopStatNode) DocComments() []*DocComment

func (*LoopStatNode) SetAttrs

func (v *LoopStatNode) SetAttrs(attrs AttrGroup)

func (*LoopStatNode) SetDocComments

func (v *LoopStatNode) SetDocComments(dcs []*DocComment)

func (*LoopStatNode) SetWhere

func (v *LoopStatNode) SetWhere(where lexer.Span)

func (*LoopStatNode) Where

func (v *LoopStatNode) Where() lexer.Span

type MatchCaseNode

type MatchCaseNode struct {
	Pattern ParseNode
	Body    ParseNode
	// contains filtered or unexported fields
}

func (*MatchCaseNode) Attrs

func (v *MatchCaseNode) Attrs() AttrGroup

func (*MatchCaseNode) DocComments

func (v *MatchCaseNode) DocComments() []*DocComment

func (*MatchCaseNode) SetAttrs

func (v *MatchCaseNode) SetAttrs(attrs AttrGroup)

func (*MatchCaseNode) SetDocComments

func (v *MatchCaseNode) SetDocComments(dcs []*DocComment)

func (*MatchCaseNode) SetWhere

func (v *MatchCaseNode) SetWhere(where lexer.Span)

func (*MatchCaseNode) Where

func (v *MatchCaseNode) Where() lexer.Span

type MatchStatNode

type MatchStatNode struct {
	Value ParseNode
	Cases []*MatchCaseNode
	// contains filtered or unexported fields
}

func (*MatchStatNode) Attrs

func (v *MatchStatNode) Attrs() AttrGroup

func (*MatchStatNode) DocComments

func (v *MatchStatNode) DocComments() []*DocComment

func (*MatchStatNode) SetAttrs

func (v *MatchStatNode) SetAttrs(attrs AttrGroup)

func (*MatchStatNode) SetDocComments

func (v *MatchStatNode) SetDocComments(dcs []*DocComment)

func (*MatchStatNode) SetWhere

func (v *MatchStatNode) SetWhere(where lexer.Span)

func (*MatchStatNode) Where

func (v *MatchStatNode) Where() lexer.Span

type NameNode

type NameNode struct {
	Modules []LocatedString
	Name    LocatedString
	// contains filtered or unexported fields
}

for handling modules

func (*NameNode) Attrs

func (v *NameNode) Attrs() AttrGroup

func (*NameNode) DocComments

func (v *NameNode) DocComments() []*DocComment

func (*NameNode) SetAttrs

func (v *NameNode) SetAttrs(attrs AttrGroup)

func (*NameNode) SetDocComments

func (v *NameNode) SetDocComments(dcs []*DocComment)

func (*NameNode) SetWhere

func (v *NameNode) SetWhere(where lexer.Span)

func (*NameNode) Where

func (v *NameNode) Where() lexer.Span

type NamedTypeNode

type NamedTypeNode struct {
	Name *NameNode
	// contains filtered or unexported fields
}

func (*NamedTypeNode) Attrs

func (v *NamedTypeNode) Attrs() AttrGroup

func (*NamedTypeNode) DocComments

func (v *NamedTypeNode) DocComments() []*DocComment

func (*NamedTypeNode) SetAttrs

func (v *NamedTypeNode) SetAttrs(attrs AttrGroup)

func (*NamedTypeNode) SetDocComments

func (v *NamedTypeNode) SetDocComments(dcs []*DocComment)

func (*NamedTypeNode) SetWhere

func (v *NamedTypeNode) SetWhere(where lexer.Span)

func (*NamedTypeNode) Where

func (v *NamedTypeNode) Where() lexer.Span

type NextStatNode

type NextStatNode struct {
	// contains filtered or unexported fields
}

func (*NextStatNode) Attrs

func (v *NextStatNode) Attrs() AttrGroup

func (*NextStatNode) DocComments

func (v *NextStatNode) DocComments() []*DocComment

func (*NextStatNode) SetAttrs

func (v *NextStatNode) SetAttrs(attrs AttrGroup)

func (*NextStatNode) SetDocComments

func (v *NextStatNode) SetDocComments(dcs []*DocComment)

func (*NextStatNode) SetWhere

func (v *NextStatNode) SetWhere(where lexer.Span)

func (*NextStatNode) Where

func (v *NextStatNode) Where() lexer.Span

type NumberLitNode

type NumberLitNode struct {
	IsFloat    bool
	IntValue   *big.Int
	FloatValue float64
	FloatSize  rune
	// contains filtered or unexported fields
}

func (*NumberLitNode) Attrs

func (v *NumberLitNode) Attrs() AttrGroup

func (*NumberLitNode) DocComments

func (v *NumberLitNode) DocComments() []*DocComment

func (*NumberLitNode) SetAttrs

func (v *NumberLitNode) SetAttrs(attrs AttrGroup)

func (*NumberLitNode) SetDocComments

func (v *NumberLitNode) SetDocComments(dcs []*DocComment)

func (*NumberLitNode) SetWhere

func (v *NumberLitNode) SetWhere(where lexer.Span)

func (*NumberLitNode) Where

func (v *NumberLitNode) Where() lexer.Span

type OpCategory

type OpCategory int
const (
	OP_ARITHMETIC OpCategory = iota
	OP_COMPARISON
	OP_BITWISE
	OP_LOGICAL
)

func (OpCategory) PrettyString

func (v OpCategory) PrettyString() string

type ParseNode

type ParseNode interface {
	Where() lexer.Span
	SetWhere(lexer.Span)

	Attrs() AttrGroup
	SetAttrs(AttrGroup)

	Documentable
	SetDocComments([]*DocComment)
}

type ParseTree

type ParseTree struct {
	Source *lexer.Sourcefile
	Nodes  []ParseNode
	// contains filtered or unexported fields
}

main tree

func (*ParseTree) AddNode

func (v *ParseTree) AddNode(node ParseNode)

func (*ParseTree) Attrs

func (v *ParseTree) Attrs() AttrGroup

func (*ParseTree) DocComments

func (v *ParseTree) DocComments() []*DocComment

func (*ParseTree) SetAttrs

func (v *ParseTree) SetAttrs(attrs AttrGroup)

func (*ParseTree) SetDocComments

func (v *ParseTree) SetDocComments(dcs []*DocComment)

func (*ParseTree) SetWhere

func (v *ParseTree) SetWhere(where lexer.Span)

func (*ParseTree) Where

func (v *ParseTree) Where() lexer.Span

type PointerTypeNode

type PointerTypeNode struct {
	TargetType *TypeReferenceNode
	Mutable    bool
	// contains filtered or unexported fields
}

func (*PointerTypeNode) Attrs

func (v *PointerTypeNode) Attrs() AttrGroup

func (*PointerTypeNode) DocComments

func (v *PointerTypeNode) DocComments() []*DocComment

func (*PointerTypeNode) SetAttrs

func (v *PointerTypeNode) SetAttrs(attrs AttrGroup)

func (*PointerTypeNode) SetDocComments

func (v *PointerTypeNode) SetDocComments(dcs []*DocComment)

func (*PointerTypeNode) SetWhere

func (v *PointerTypeNode) SetWhere(where lexer.Span)

func (*PointerTypeNode) Where

func (v *PointerTypeNode) Where() lexer.Span

type ReferenceTypeNode

type ReferenceTypeNode struct {
	TargetType *TypeReferenceNode
	Mutable    bool
	// contains filtered or unexported fields
}

types

func (*ReferenceTypeNode) Attrs

func (v *ReferenceTypeNode) Attrs() AttrGroup

func (*ReferenceTypeNode) DocComments

func (v *ReferenceTypeNode) DocComments() []*DocComment

func (*ReferenceTypeNode) SetAttrs

func (v *ReferenceTypeNode) SetAttrs(attrs AttrGroup)

func (*ReferenceTypeNode) SetDocComments

func (v *ReferenceTypeNode) SetDocComments(dcs []*DocComment)

func (*ReferenceTypeNode) SetWhere

func (v *ReferenceTypeNode) SetWhere(where lexer.Span)

func (*ReferenceTypeNode) Where

func (v *ReferenceTypeNode) Where() lexer.Span

type ReturnStatNode

type ReturnStatNode struct {
	Value ParseNode
	// contains filtered or unexported fields
}

func (*ReturnStatNode) Attrs

func (v *ReturnStatNode) Attrs() AttrGroup

func (*ReturnStatNode) DocComments

func (v *ReturnStatNode) DocComments() []*DocComment

func (*ReturnStatNode) SetAttrs

func (v *ReturnStatNode) SetAttrs(attrs AttrGroup)

func (*ReturnStatNode) SetDocComments

func (v *ReturnStatNode) SetDocComments(dcs []*DocComment)

func (*ReturnStatNode) SetWhere

func (v *ReturnStatNode) SetWhere(where lexer.Span)

func (*ReturnStatNode) Where

func (v *ReturnStatNode) Where() lexer.Span

type RuneLitNode

type RuneLitNode struct {
	Value rune
	// contains filtered or unexported fields
}

func (*RuneLitNode) Attrs

func (v *RuneLitNode) Attrs() AttrGroup

func (*RuneLitNode) DocComments

func (v *RuneLitNode) DocComments() []*DocComment

func (*RuneLitNode) SetAttrs

func (v *RuneLitNode) SetAttrs(attrs AttrGroup)

func (*RuneLitNode) SetDocComments

func (v *RuneLitNode) SetDocComments(dcs []*DocComment)

func (*RuneLitNode) SetWhere

func (v *RuneLitNode) SetWhere(where lexer.Span)

func (*RuneLitNode) Where

func (v *RuneLitNode) Where() lexer.Span

type SizeofExprNode

type SizeofExprNode struct {
	Value ParseNode
	Type  *TypeReferenceNode
	// contains filtered or unexported fields
}

func (*SizeofExprNode) Attrs

func (v *SizeofExprNode) Attrs() AttrGroup

func (*SizeofExprNode) DocComments

func (v *SizeofExprNode) DocComments() []*DocComment

func (*SizeofExprNode) SetAttrs

func (v *SizeofExprNode) SetAttrs(attrs AttrGroup)

func (*SizeofExprNode) SetDocComments

func (v *SizeofExprNode) SetDocComments(dcs []*DocComment)

func (*SizeofExprNode) SetWhere

func (v *SizeofExprNode) SetWhere(where lexer.Span)

func (*SizeofExprNode) Where

func (v *SizeofExprNode) Where() lexer.Span

type StringLitNode

type StringLitNode struct {
	Value     string
	IsCString bool
	// contains filtered or unexported fields
}

func (*StringLitNode) Attrs

func (v *StringLitNode) Attrs() AttrGroup

func (*StringLitNode) DocComments

func (v *StringLitNode) DocComments() []*DocComment

func (*StringLitNode) SetAttrs

func (v *StringLitNode) SetAttrs(attrs AttrGroup)

func (*StringLitNode) SetDocComments

func (v *StringLitNode) SetDocComments(dcs []*DocComment)

func (*StringLitNode) SetWhere

func (v *StringLitNode) SetWhere(where lexer.Span)

func (*StringLitNode) Where

func (v *StringLitNode) Where() lexer.Span

type StructAccessNode

type StructAccessNode struct {
	Struct ParseNode
	Member LocatedString
	// contains filtered or unexported fields
}

func (*StructAccessNode) Attrs

func (v *StructAccessNode) Attrs() AttrGroup

func (*StructAccessNode) DocComments

func (v *StructAccessNode) DocComments() []*DocComment

func (*StructAccessNode) SetAttrs

func (v *StructAccessNode) SetAttrs(attrs AttrGroup)

func (*StructAccessNode) SetDocComments

func (v *StructAccessNode) SetDocComments(dcs []*DocComment)

func (*StructAccessNode) SetWhere

func (v *StructAccessNode) SetWhere(where lexer.Span)

func (*StructAccessNode) Where

func (v *StructAccessNode) Where() lexer.Span

type StructMemberNode

type StructMemberNode struct {
	Public bool
	Name   LocatedString
	Type   *TypeReferenceNode
	// contains filtered or unexported fields
}

func (*StructMemberNode) Attrs

func (v *StructMemberNode) Attrs() AttrGroup

func (*StructMemberNode) DocComments

func (v *StructMemberNode) DocComments() []*DocComment

func (*StructMemberNode) SetAttrs

func (v *StructMemberNode) SetAttrs(attrs AttrGroup)

func (*StructMemberNode) SetDocComments

func (v *StructMemberNode) SetDocComments(dcs []*DocComment)

func (*StructMemberNode) SetWhere

func (v *StructMemberNode) SetWhere(where lexer.Span)

func (*StructMemberNode) Where

func (v *StructMemberNode) Where() lexer.Span

type StructTypeNode

type StructTypeNode struct {
	Members      []*StructMemberNode
	GenericSigil *GenericSigilNode
	// contains filtered or unexported fields
}

func (*StructTypeNode) Attrs

func (v *StructTypeNode) Attrs() AttrGroup

func (*StructTypeNode) DocComments

func (v *StructTypeNode) DocComments() []*DocComment

func (*StructTypeNode) SetAttrs

func (v *StructTypeNode) SetAttrs(attrs AttrGroup)

func (*StructTypeNode) SetDocComments

func (v *StructTypeNode) SetDocComments(dcs []*DocComment)

func (*StructTypeNode) SetWhere

func (v *StructTypeNode) SetWhere(where lexer.Span)

func (*StructTypeNode) Where

func (v *StructTypeNode) Where() lexer.Span

type TupleLiteralNode

type TupleLiteralNode struct {
	Values []ParseNode
	// contains filtered or unexported fields
}

func (*TupleLiteralNode) Attrs

func (v *TupleLiteralNode) Attrs() AttrGroup

func (*TupleLiteralNode) DocComments

func (v *TupleLiteralNode) DocComments() []*DocComment

func (*TupleLiteralNode) SetAttrs

func (v *TupleLiteralNode) SetAttrs(attrs AttrGroup)

func (*TupleLiteralNode) SetDocComments

func (v *TupleLiteralNode) SetDocComments(dcs []*DocComment)

func (*TupleLiteralNode) SetWhere

func (v *TupleLiteralNode) SetWhere(where lexer.Span)

func (*TupleLiteralNode) Where

func (v *TupleLiteralNode) Where() lexer.Span

type TupleTypeNode

type TupleTypeNode struct {
	MemberTypes []*TypeReferenceNode
	// contains filtered or unexported fields
}

func (*TupleTypeNode) Attrs

func (v *TupleTypeNode) Attrs() AttrGroup

func (*TupleTypeNode) DocComments

func (v *TupleTypeNode) DocComments() []*DocComment

func (*TupleTypeNode) SetAttrs

func (v *TupleTypeNode) SetAttrs(attrs AttrGroup)

func (*TupleTypeNode) SetDocComments

func (v *TupleTypeNode) SetDocComments(dcs []*DocComment)

func (*TupleTypeNode) SetWhere

func (v *TupleTypeNode) SetWhere(where lexer.Span)

func (*TupleTypeNode) Where

func (v *TupleTypeNode) Where() lexer.Span

type TypeDeclNode

type TypeDeclNode struct {
	Name         LocatedString
	GenericSigil *GenericSigilNode
	Type         ParseNode
	// contains filtered or unexported fields
}

func (TypeDeclNode) IsPublic

func (v TypeDeclNode) IsPublic() bool

func (*TypeDeclNode) SetPublic

func (v *TypeDeclNode) SetPublic(p bool)

type TypeParameterNode

type TypeParameterNode struct {
	Name        LocatedString
	Constraints []*TypeReferenceNode // should be all interface type references
	// contains filtered or unexported fields
}

func (*TypeParameterNode) Attrs

func (v *TypeParameterNode) Attrs() AttrGroup

func (*TypeParameterNode) DocComments

func (v *TypeParameterNode) DocComments() []*DocComment

func (*TypeParameterNode) SetAttrs

func (v *TypeParameterNode) SetAttrs(attrs AttrGroup)

func (*TypeParameterNode) SetDocComments

func (v *TypeParameterNode) SetDocComments(dcs []*DocComment)

func (*TypeParameterNode) SetWhere

func (v *TypeParameterNode) SetWhere(where lexer.Span)

func (*TypeParameterNode) Where

func (v *TypeParameterNode) Where() lexer.Span

type TypeReferenceNode

type TypeReferenceNode struct {
	Type             ParseNode
	GenericArguments []*TypeReferenceNode
	// contains filtered or unexported fields
}

func (*TypeReferenceNode) Attrs

func (v *TypeReferenceNode) Attrs() AttrGroup

func (*TypeReferenceNode) DocComments

func (v *TypeReferenceNode) DocComments() []*DocComment

func (*TypeReferenceNode) SetAttrs

func (v *TypeReferenceNode) SetAttrs(attrs AttrGroup)

func (*TypeReferenceNode) SetDocComments

func (v *TypeReferenceNode) SetDocComments(dcs []*DocComment)

func (*TypeReferenceNode) SetWhere

func (v *TypeReferenceNode) SetWhere(where lexer.Span)

func (*TypeReferenceNode) Where

func (v *TypeReferenceNode) Where() lexer.Span

type UnOpType

type UnOpType int
const (
	UNOP_ERR UnOpType = iota

	UNOP_LOG_NOT

	UNOP_BIT_NOT

	UNOP_NEGATIVE

	UNOP_DEREF
)

func (UnOpType) OpString

func (v UnOpType) OpString() string

func (UnOpType) String

func (i UnOpType) String() string

type UnaryExprNode

type UnaryExprNode struct {
	Value    ParseNode
	Operator UnOpType
	// contains filtered or unexported fields
}

func (*UnaryExprNode) Attrs

func (v *UnaryExprNode) Attrs() AttrGroup

func (*UnaryExprNode) DocComments

func (v *UnaryExprNode) DocComments() []*DocComment

func (*UnaryExprNode) SetAttrs

func (v *UnaryExprNode) SetAttrs(attrs AttrGroup)

func (*UnaryExprNode) SetDocComments

func (v *UnaryExprNode) SetDocComments(dcs []*DocComment)

func (*UnaryExprNode) SetWhere

func (v *UnaryExprNode) SetWhere(where lexer.Span)

func (*UnaryExprNode) Where

func (v *UnaryExprNode) Where() lexer.Span

type UseDirectiveNode

type UseDirectiveNode struct {
	Module *NameNode
	// contains filtered or unexported fields
}

func (*UseDirectiveNode) Attrs

func (v *UseDirectiveNode) Attrs() AttrGroup

func (*UseDirectiveNode) DocComments

func (v *UseDirectiveNode) DocComments() []*DocComment

func (*UseDirectiveNode) SetAttrs

func (v *UseDirectiveNode) SetAttrs(attrs AttrGroup)

func (*UseDirectiveNode) SetDocComments

func (v *UseDirectiveNode) SetDocComments(dcs []*DocComment)

func (*UseDirectiveNode) SetWhere

func (v *UseDirectiveNode) SetWhere(where lexer.Span)

func (*UseDirectiveNode) Where

func (v *UseDirectiveNode) Where() lexer.Span

type VarDeclNode

type VarDeclNode struct {
	Name    LocatedString
	Type    *TypeReferenceNode
	Value   ParseNode
	Mutable LocatedString

	IsImplicit           bool
	ReceiverGenericSigil *GenericSigilNode
	// contains filtered or unexported fields
}

func (VarDeclNode) IsPublic

func (v VarDeclNode) IsPublic() bool

func (*VarDeclNode) SetPublic

func (v *VarDeclNode) SetPublic(p bool)

type VariableAccessNode

type VariableAccessNode struct {
	Name              *NameNode
	GenericParameters []*TypeReferenceNode // TODO rename to GArguments
	// contains filtered or unexported fields
}

access expressions

func (*VariableAccessNode) Attrs

func (v *VariableAccessNode) Attrs() AttrGroup

func (*VariableAccessNode) DocComments

func (v *VariableAccessNode) DocComments() []*DocComment

func (*VariableAccessNode) SetAttrs

func (v *VariableAccessNode) SetAttrs(attrs AttrGroup)

func (*VariableAccessNode) SetDocComments

func (v *VariableAccessNode) SetDocComments(dcs []*DocComment)

func (*VariableAccessNode) SetWhere

func (v *VariableAccessNode) SetWhere(where lexer.Span)

func (*VariableAccessNode) Where

func (v *VariableAccessNode) Where() lexer.Span

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL