Documentation
¶
Overview ¶
This package defines source code entities - abstractions that end-user (a programmer) operates on. For convenience these structures have json tags. This is not clean architecture but it's very handy for LSP.
Index ¶
- type ArrayBypassConnection
- type Binary
- type BinaryOperator
- type Build
- type Component
- type Connection
- type ConnectionReceiver
- type ConnectionSender
- type Const
- type ConstValue
- type Directive
- type EntitiesResult
- type Entity
- type EntityKind
- type File
- type IO
- type Import
- type Interface
- type Module
- type ModuleManifest
- type MsgLiteral
- type Node
- type NormalConnection
- type Package
- type Port
- type PortAddr
- type Range
- type Scope
- func (s Scope) Entity(entityRef core.EntityRef) (Entity, core.Location, error)
- func (s Scope) GetComponent(entityRef core.EntityRef) ([]Component, error)
- func (s Scope) GetConst(entityRef core.EntityRef) (Const, core.Location, error)
- func (s Scope) GetEntityKind(entityRef core.EntityRef) (EntityKind, error)
- func (s Scope) GetFirstInportName(nodes map[string]Node, portAddr PortAddr) (string, error)
- func (s Scope) GetFirstOutportName(nodes map[string]Node, portAddr PortAddr) (string, error)
- func (s Scope) GetNodeIOByPortAddr(nodes map[string]Node, portAddr PortAddr) (IO, error)
- func (s Scope) GetType(ref core.EntityRef) (ts.Def, ts.Scope, error)
- func (s Scope) IsTopType(expr ts.Expr) bool
- func (s Scope) Location() *core.Location
- func (s Scope) Relocate(location core.Location) Scope
- type Switch
- type Ternary
- type TypeArgs
- type TypeParams
- type Unary
- type UnaryOperator
- type UnionLiteral
- type UnionSender
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ArrayBypassConnection ¶
type Binary ¶ added in v0.26.0
type Binary struct {
Left ConnectionSender `json:"left,omitempty"`
Right ConnectionSender `json:"right,omitempty"`
Operator BinaryOperator `json:"operator,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
// This field is result of semantic analysis and is unknown at parsing time.
// It's used by desugarer to correctly handle overloaded components.
AnalyzedType ts.Expr `json:"type,omitempty"`
}
type BinaryOperator ¶ added in v0.26.0
type BinaryOperator string
const ( // Arithmetic AddOp BinaryOperator = "+" SubOp BinaryOperator = "-" MulOp BinaryOperator = "*" DivOp BinaryOperator = "/" ModOp BinaryOperator = "%" PowOp BinaryOperator = "**" // Comparison EqOp BinaryOperator = "==" NeOp BinaryOperator = "!=" GtOp BinaryOperator = ">" LtOp BinaryOperator = "<" GeOp BinaryOperator = ">=" LeOp BinaryOperator = "<=" // Logical AndOp BinaryOperator = "&&" OrOp BinaryOperator = "||" // Bitwise BitAndOp BinaryOperator = "&" BitOrOp BinaryOperator = "|" BitXorOp BinaryOperator = "^" BitLshOp BinaryOperator = "<<" BitRshOp BinaryOperator = ">>" )
type Build ¶
type Build struct {
EntryModRef core.ModuleRef `json:"entryModRef,omitempty"`
Modules map[core.ModuleRef]Module `json:"modules,omitempty"`
}
Build represents all the information in source code, that must be compiled. User usually don't interacts with this abstraction, but it's important for compiler.
type Component ¶
type Component struct {
Interface `json:"interface,omitempty"`
Directives map[Directive]string `json:"directives,omitempty"`
Nodes map[string]Node `json:"nodes,omitempty"`
Net []Connection `json:"net,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
Component is unit of computation.
type Connection ¶
type Connection struct {
Normal *NormalConnection `json:"normal,omitempty"`
ArrayBypass *ArrayBypassConnection `json:"arrayBypass,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
type ConnectionReceiver ¶
type ConnectionReceiver struct {
PortAddr *PortAddr `json:"portAddr,omitempty"`
DeferredConnection *Connection `json:"deferredConnection,omitempty"`
ChainedConnection *Connection `json:"chainedConnection,omitempty"`
Switch *Switch `json:"switch,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
type ConnectionSender ¶ added in v0.26.0
type ConnectionSender struct {
PortAddr *PortAddr `json:"portAddr,omitempty"`
Const *Const `json:"const,omitempty"`
Range *Range `json:"range,omitempty"`
Unary *Unary `json:"unary,omitempty"`
Binary *Binary `json:"binary,omitempty"`
Ternary *Ternary `json:"ternary,omitempty"`
StructSelector []string `json:"selector,omitempty"`
Union *UnionSender `json:"union,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
func (ConnectionSender) String ¶ added in v0.26.0
func (s ConnectionSender) String() string
type Const ¶
type Const struct {
TypeExpr ts.Expr `json:"typeExpr,omitempty"`
Value ConstValue `json:"value,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
Const represents abstraction that allow to define reusable message value.
type ConstValue ¶ added in v0.26.0
type ConstValue struct {
Ref *core.EntityRef `json:"ref,omitempty"`
Message *MsgLiteral `json:"message,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
func (ConstValue) String ¶ added in v0.26.0
func (c ConstValue) String() string
type EntitiesResult ¶ added in v0.26.0
type Entity ¶
type Entity struct {
IsPublic bool `json:"exported,omitempty"`
Kind EntityKind `json:"kind,omitempty"`
Const Const `json:"const,omitempty"`
Type ts.Def `json:"type,omitempty"`
Interface Interface `json:"interface,omitempty"`
Component []Component `json:"component,omitempty"` // Non-overloaded components are represented as slice of one element.
}
type EntityKind ¶
type EntityKind string
const ( ComponentEntity EntityKind = "component_entity" ConstEntity EntityKind = "const_entity" TypeEntity EntityKind = "type_entity" InterfaceEntity EntityKind = "interface_entity" )
type Interface ¶
type Interface struct {
TypeParams TypeParams `json:"typeParams,omitempty"`
IO IO `json:"io,omitempty,"`
Meta core.Meta `json:"meta,omitempty"`
}
Interface describes abstract component.
type Module ¶
type Module struct {
Manifest ModuleManifest `json:"manifest,omitempty"`
Packages map[string]Package `json:"packages,omitempty"`
}
Module is unit of distribution.
type ModuleManifest ¶
type MsgLiteral ¶ added in v0.26.0
type MsgLiteral struct {
Bool *bool `json:"bool,omitempty"`
Int *int `json:"int,omitempty"`
Float *float64 `json:"float,omitempty"`
Str *string `json:"str,omitempty"`
List []ConstValue `json:"vec,omitempty"`
DictOrStruct map[string]ConstValue `json:"dict,omitempty"`
Union *UnionLiteral `json:"union,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
func (MsgLiteral) String ¶ added in v0.26.0
func (m MsgLiteral) String() string
type Node ¶
type Node struct {
Directives map[Directive]string `json:"directives,omitempty"`
EntityRef core.EntityRef `json:"entityRef,omitempty"`
TypeArgs TypeArgs `json:"typeArgs,omitempty"`
ErrGuard bool `json:"errGuard,omitempty"` // ErrGuard explains if node is used with `?` operator.
DIArgs map[string]Node `json:"diArgs,omitempty"` // Dependency Injection.
OverloadIndex *int `json:"overloadIndex,omitempty"` // Only for overloaded components.
Meta core.Meta `json:"meta,omitempty"`
}
type NormalConnection ¶
type NormalConnection struct {
Senders []ConnectionSender `json:"sender,omitempty"`
Receivers []ConnectionReceiver `json:"receiver,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
type Package ¶
func (Package) Entities ¶
func (pkg Package) Entities() func(func(EntitiesResult) bool)
Entities iterates over all entities in the package using the range-func protocol.
type PortAddr ¶
type Range ¶ added in v0.26.0
type Scope ¶
type Scope struct {
// contains filtered or unexported fields
}
Scope is entity reference resolver
func (Scope) GetComponent ¶ added in v0.29.0
TODO rename to GetComponents
func (Scope) GetEntityKind ¶ added in v0.29.0
func (s Scope) GetEntityKind(entityRef core.EntityRef) (EntityKind, error)
func (Scope) GetFirstInportName ¶ added in v0.29.0
func (Scope) GetFirstOutportName ¶ added in v0.29.0
func (Scope) GetNodeIOByPortAddr ¶ added in v0.31.1
type Switch ¶ added in v0.26.0
type Switch struct {
Cases []NormalConnection `json:"cases,omitempty"` // TODO rename to CaseBranches
Default []ConnectionReceiver `json:"default,omitempty"` // TODO rename to DefaultBranch
Meta core.Meta `json:"meta,omitempty"`
}
type Ternary ¶ added in v0.26.0
type Ternary struct {
Condition ConnectionSender `json:"condition,omitempty"`
Left ConnectionSender `json:"left,omitempty"`
Right ConnectionSender `json:"right,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
type TypeParams ¶
type TypeParams struct {
Params []ts.Param `json:"params,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
TODO should we use it to typesystem package?
func (TypeParams) String ¶
func (t TypeParams) String() string
type Unary ¶ added in v0.26.0
type Unary struct {
Operand ConnectionSender `json:"expr,omitempty"`
Operator UnaryOperator `json:"operator,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
type UnaryOperator ¶ added in v0.26.0
type UnaryOperator string
const ( NotOp UnaryOperator = "!" IncOp UnaryOperator = "++" DecOp UnaryOperator = "--" NegOp UnaryOperator = "-" )
type UnionLiteral ¶ added in v0.32.0
type UnionSender ¶ added in v0.32.0
type UnionSender struct {
EntityRef core.EntityRef `json:"entityRef,omitempty"`
Tag string `json:"tag,omitempty"`
Data *ConnectionSender `json:"data,omitempty"`
Meta core.Meta `json:"meta,omitempty"`
}
UnionSender represents union in connection sender. It's not same thing as UnionLiteral. UnionLiteral is used to represent union in const value. The difference is that UnionSender uses ConnectionSender instead of ConstValue.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package typesystem implements type-system with generics and structural subtyping.
|
Package typesystem implements type-system with generics and structural subtyping. |