type AST … // Expr returns the root ast.Expr value in the AST. func (a *AST) Expr() Expr { … } // SourceInfo returns the source metadata associated with the parse / type-check passes. func (a *AST) SourceInfo() *SourceInfo { … } // GetType returns the type for the expression at the given id, if one exists, else types.DynType. func (a *AST) GetType(id int64) *types.Type { … } // SetType sets the type of the expression node at the given id. func (a *AST) SetType(id int64, t *types.Type) { … } // TypeMap returns the map of expression ids to type-checked types. // // If the AST is not type-checked, the map will be empty. func (a *AST) TypeMap() map[int64]*types.Type { … } // GetOverloadIDs returns the set of overload function names for a given expression id. // // If the expression id is not a function call, or the AST is not type-checked, the result will be empty. func (a *AST) GetOverloadIDs(id int64) []string { … } // ReferenceMap returns the map of expression id to identifier, constant, and function references. func (a *AST) ReferenceMap() map[int64]*ReferenceInfo { … } // SetReference adds a reference to the checked AST type map. func (a *AST) SetReference(id int64, r *ReferenceInfo) { … } // IsChecked returns whether the AST is type-checked. func (a *AST) IsChecked() bool { … } // NewAST creates a base AST instance with an ast.Expr and ast.SourceInfo value. func NewAST(e Expr, sourceInfo *SourceInfo) *AST { … } // NewCheckedAST wraps an parsed AST and augments it with type and reference metadata. func NewCheckedAST(parsed *AST, typeMap map[int64]*types.Type, refMap map[int64]*ReferenceInfo) *AST { … } // Copy creates a deep copy of the Expr and SourceInfo values in the input AST. // // Copies of the Expr value are generated using an internal default ExprFactory. func Copy(a *AST) *AST { … } // MaxID returns the upper-bound, non-inclusive, of ids present within the AST's Expr value. func MaxID(a *AST) int64 { … } // NewSourceInfo creates a simple SourceInfo object from an input common.Source value. func NewSourceInfo(src common.Source) *SourceInfo { … } // CopySourceInfo creates a deep copy of the MacroCalls within the input SourceInfo. // // Copies of macro Expr values are generated using an internal default ExprFactory. func CopySourceInfo(info *SourceInfo) *SourceInfo { … } type SourceInfo … // SyntaxVersion returns the syntax version associated with the text expression. func (s *SourceInfo) SyntaxVersion() string { … } // Description provides information about where the expression came from. func (s *SourceInfo) Description() string { … } // LineOffsets returns a list of the 0-based character offsets in the input text where newlines appear. func (s *SourceInfo) LineOffsets() []int32 { … } // MacroCalls returns a map of expression id to ast.Expr value where the id represents the expression // node where the macro was inserted into the AST, and the ast.Expr value represents the original call // signature which was replaced. func (s *SourceInfo) MacroCalls() map[int64]Expr { … } // GetMacroCall returns the original ast.Expr value for the given expression if it was generated via // a macro replacement. // // Note, parsing options must be enabled to track macro calls before this method will return a value. func (s *SourceInfo) GetMacroCall(id int64) (Expr, bool) { … } // SetMacroCall records a macro call at a specific location. func (s *SourceInfo) SetMacroCall(id int64, e Expr) { … } // ClearMacroCall removes the macro call at the given expression id. func (s *SourceInfo) ClearMacroCall(id int64) { … } // OffsetRanges returns a map of expression id to OffsetRange values where the range indicates either: // the start and end position in the input stream where the expression occurs, or the start position // only. If the range only captures start position, the stop position of the range will be equal to // the start. func (s *SourceInfo) OffsetRanges() map[int64]OffsetRange { … } // GetOffsetRange retrieves an OffsetRange for the given expression id if one exists. func (s *SourceInfo) GetOffsetRange(id int64) (OffsetRange, bool) { … } // SetOffsetRange sets the OffsetRange for the given expression id. func (s *SourceInfo) SetOffsetRange(id int64, o OffsetRange) { … } // ClearOffsetRange removes the OffsetRange for the given expression id. func (s *SourceInfo) ClearOffsetRange(id int64) { … } // GetStartLocation calculates the human-readable 1-based line and 0-based column of the first character // of the expression node at the id. func (s *SourceInfo) GetStartLocation(id int64) common.Location { … } // GetStopLocation calculates the human-readable 1-based line and 0-based column of the last character for // the expression node at the given id. // // If the SourceInfo was generated from a serialized protobuf representation, the stop location will // be identical to the start location for the expression. func (s *SourceInfo) GetStopLocation(id int64) common.Location { … } // GetLocationByOffset returns the line and column information for a given character offset. func (s *SourceInfo) GetLocationByOffset(offset int32) common.Location { … } // ComputeOffset calculates the 0-based character offset from a 1-based line and 0-based column. func (s *SourceInfo) ComputeOffset(line, col int32) int32 { … } type OffsetRange … type ReferenceInfo … // NewIdentReference creates a ReferenceInfo instance for an identifier with an optional constant value. func NewIdentReference(name string, value ref.Val) *ReferenceInfo { … } // NewFunctionReference creates a ReferenceInfo instance for a set of function overloads. func NewFunctionReference(overloads ...string) *ReferenceInfo { … } // AddOverload appends a function overload ID to the ReferenceInfo. func (r *ReferenceInfo) AddOverload(overloadID string) { … } // Equals returns whether two references are identical to each other. func (r *ReferenceInfo) Equals(other *ReferenceInfo) bool { … } type maxIDVisitor … // VisitExpr updates the max identifier if the incoming expression id is greater than previously observed. func (v *maxIDVisitor) VisitExpr(e Expr) { … } // VisitEntryExpr updates the max identifier if the incoming entry id is greater than previously observed. func (v *maxIDVisitor) VisitEntryExpr(e EntryExpr) { … }