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 ConnectionSideSelectors
- type Const
- type ConstValue
- type Directive
- type EntitiesResult
- type Entity
- type EntityKind
- type EnumMessage
- 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) 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) GetInterface(ref core.EntityRef) (Interface, 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
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"` // TODO rename to Defer ChainedConnection *Connection `json:"chainedConnection,omitempty"` // TODO rename to Chain 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"` Meta core.Meta `json:"meta,omitempty"` }
func (ConnectionSender) String ¶ added in v0.26.0
func (s ConnectionSender) String() string
type ConnectionSideSelectors ¶
type ConnectionSideSelectors []string
func (ConnectionSideSelectors) String ¶
func (c ConnectionSideSelectors) 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:"value,omitempty"` // literal }
func (ConstValue) String ¶ added in v0.26.0
func (c ConstValue) String() string
type EntitiesResult ¶ added in v0.26.0
type Entity ¶
type EntityKind ¶
type EntityKind string // It's handy to transmit strings enum instead of digital
const ( ComponentEntity EntityKind = "component_entity" ConstEntity EntityKind = "const_entity" TypeEntity EntityKind = "type_entity" InterfaceEntity EntityKind = "interface_entity" )
type EnumMessage ¶
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"` // TODO separate map and struct Enum *EnumMessage `json:"enum,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. 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
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) GetInterface ¶ added in v0.29.0
type Switch ¶ added in v0.26.0
type Switch struct { Cases []NormalConnection `json:"case,omitempty"` Default []ConnectionReceiver `json:"default,omitempty"` 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"` }
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 = "-" )
Directories ¶
Path | Synopsis |
---|---|
Package typesystem implements type-system with generics and structural subtyping.
|
Package typesystem implements type-system with generics and structural subtyping. |