Documentation
¶
Overview ¶
Package ir defines an intermediate representation (IR) for Rego.
The IR specifies an imperative execution model for Rego policies similar to a query plan in traditional databases.
Index ¶
- func Pretty(w io.Writer, x interface{}) error
- func Walk(vis Visitor, x interface{}) error
- type ArrayAppendStmt
- type AssignIntStmt
- type AssignVarOnceStmt
- type AssignVarStmt
- type Block
- type BlockStmt
- type Bool
- type BooleanConst
- type BreakStmt
- type BuiltinFunc
- type CallDynamicStmt
- type CallStmt
- type Const
- type DotStmt
- type EqualStmt
- type FloatConst
- type Func
- type Funcs
- type IntConst
- type IsArrayStmt
- type IsDefinedStmt
- type IsObjectStmt
- type IsUndefinedStmt
- type LenStmt
- type Local
- type LocalOrConst
- type Location
- type MakeArrayStmt
- type MakeNullStmt
- type MakeNumberFloatStmt
- type MakeNumberIntStmt
- type MakeNumberRefStmt
- type MakeObjectStmt
- type MakeSetStmt
- type NopStmt
- type NotEqualStmt
- type NotStmt
- type NullConst
- type ObjectInsertOnceStmt
- type ObjectInsertStmt
- type ObjectMergeStmt
- type Plan
- type Plans
- type Policy
- type ResetLocalStmt
- type ResultSetAdd
- type ReturnLocalStmt
- type ScanStmt
- type SetAddStmt
- type Static
- type Stmt
- type StringConst
- type StringIndex
- type Visitor
- type WithStmt
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ArrayAppendStmt ¶ added in v0.10.3
type ArrayAppendStmt struct { Value LocalOrConst Array Local Location }
ArrayAppendStmt represents a dynamic append operation of a value onto an array.
type AssignIntStmt ¶ added in v0.10.3
AssignIntStmt represents an assignment of an integer value to a local variable.
type AssignVarOnceStmt ¶ added in v0.11.0
type AssignVarOnceStmt struct { Target Local Source LocalOrConst Location }
AssignVarOnceStmt represents an assignment of one local variable to another. If the target is defined, execution aborts with a conflict error.
TODO(tsandall): is there a better name for this?
type AssignVarStmt ¶ added in v0.10.3
type AssignVarStmt struct { Source LocalOrConst Target Local Location }
AssignVarStmt represents an assignment of one local variable to another.
type Block ¶
type Block struct {
Stmts []Stmt
}
Block represents an ordered sequence of statements to execute. Blocks are executed until a return statement is encountered, a statement is undefined, or there are no more statements. If all statements are defined but no return statement is encountered, the block is undefined.
type BlockStmt ¶ added in v0.11.0
BlockStmt represents a nested block. Nested blocks and break statements can be used to short-circuit execution.
type BooleanConst ¶
type BooleanConst struct {
Value bool
}
BooleanConst represents a boolean value.
type BreakStmt ¶ added in v0.11.0
BreakStmt represents a jump out of the current block. The index specifies how many blocks to jump starting from zero (the current block). Execution will continue from the end of the block that is jumped to.
type BuiltinFunc ¶ added in v0.15.1
type BuiltinFunc struct {
Name string
}
BuiltinFunc represents a built-in function that may be required by the policy.
type CallDynamicStmt ¶ added in v0.27.0
type CallDynamicStmt struct { Args []Local Result Local Path []LocalOrConst Location }
CallDynamicStmt represents an indirect (data) function call. The result should be stored in the result local.
type CallStmt ¶ added in v0.11.0
type CallStmt struct { Func string Args []LocalOrConst Result Local Location }
CallStmt represents a named function call. The result should be stored in the result local.
type Const ¶ added in v0.10.2
type Const interface {
// contains filtered or unexported methods
}
Const represents a constant value from the policy.
type DotStmt ¶
type DotStmt struct { Source LocalOrConst Key LocalOrConst Target Local Location }
DotStmt represents a lookup operation on a value (e.g., array, object, etc.) The source of a DotStmt may be a scalar value in which case the statement will be undefined.
type EqualStmt ¶
type EqualStmt struct { A LocalOrConst B LocalOrConst Location }
EqualStmt represents an value-equality check of two local variables.
type FloatConst ¶
type FloatConst struct {
Value float64
}
FloatConst represents a floating-point constant.
type Func ¶ added in v0.11.0
type Func struct { Name string Params []Local Return Local Blocks []*Block // TODO(tsandall): should this be a plan? Path []string // optional: if non-nil, include in data function tree }
Func represents a named plan (function) that can be invoked. Functions accept one or more parameters and return a value. By convention, the input document and data documents are always passed as the first and second arguments (respectively).
type Funcs ¶ added in v0.11.0
type Funcs struct {
Funcs []*Func
}
Funcs represents a collection of planned functions to include in the policy.
type IsArrayStmt ¶ added in v0.10.3
type IsArrayStmt struct { Source LocalOrConst Location }
IsArrayStmt represents a dynamic type check on a local variable.
type IsDefinedStmt ¶ added in v0.11.0
IsDefinedStmt represents a check of whether a local variable is defined.
type IsObjectStmt ¶ added in v0.10.3
type IsObjectStmt struct { Source LocalOrConst Location }
IsObjectStmt represents a dynamic type check on a local variable.
type IsUndefinedStmt ¶ added in v0.11.0
IsUndefinedStmt represents a check of whether local variable is undefined.
type LenStmt ¶ added in v0.10.3
type LenStmt struct { Source LocalOrConst Target Local Location }
LenStmt represents a length() operation on a local variable. The result is stored in the target local variable.
type Local ¶
type Local int
Local represents a plan-scoped variable.
TODO(tsandall): should this be int32 for safety?
type LocalOrConst ¶ added in v0.27.0
LocalOrConst is a tagged union of the two types, Local and StringIndex.
type Location ¶ added in v0.26.0
type Location struct { Index int // filename string constant index Col, Row int // contains filtered or unexported fields }
Location records the filen index, and the row and column inside that file that a statement can be connected to.
func (*Location) GetLocation ¶ added in v0.26.0
GetLocation returns a Stmt's Location.
func (*Location) SetLocation ¶ added in v0.26.0
SetLocation sets the Location for a given Stmt.
type MakeArrayStmt ¶ added in v0.10.3
MakeArrayStmt constructs a local variable that refers to an array value.
type MakeNullStmt ¶ added in v0.10.3
MakeNullStmt constructs a local variable that refers to a null value.
type MakeNumberFloatStmt ¶ added in v0.15.0
MakeNumberFloatStmt constructs a local variable that refers to a floating-point number value.
type MakeNumberIntStmt ¶
MakeNumberIntStmt constructs a local variable that refers to an integer value.
type MakeNumberRefStmt ¶ added in v0.15.1
MakeNumberRefStmt constructs a local variable that refers to a number stored as a string.
type MakeObjectStmt ¶ added in v0.10.3
MakeObjectStmt constructs a local variable that refers to an object value.
type MakeSetStmt ¶ added in v0.11.0
MakeSetStmt constructs a local variable that refers to a set value.
type NopStmt ¶ added in v0.26.0
type NopStmt struct {
Location
}
NopStmt adds a nop instruction. Useful during development and debugging only.
type NotEqualStmt ¶
type NotEqualStmt struct { A LocalOrConst B LocalOrConst Location }
NotEqualStmt represents a != check of two local variables.
type ObjectInsertOnceStmt ¶ added in v0.11.0
type ObjectInsertOnceStmt struct { Key LocalOrConst Value LocalOrConst Object Local Location }
ObjectInsertOnceStmt represents a dynamic insert operation of a key/value pair into an object. If the key already exists and the value differs, execution aborts with a conflict error.
type ObjectInsertStmt ¶ added in v0.10.3
type ObjectInsertStmt struct { Key LocalOrConst Value LocalOrConst Object Local Location }
ObjectInsertStmt represents a dynamic insert operation of a key/value pair into an object.
type ObjectMergeStmt ¶ added in v0.15.0
ObjectMergeStmt performs a recursive merge of two object values. If either of the locals refer to non-object values this operation will abort with a conflict error. Overlapping object keys are merged recursively.
type Plan ¶
Plan represents an ordered series of blocks to execute. Plan execution stops when a return statement is reached. Blocks are executed in-order.
type Plans ¶ added in v0.25.0
type Plans struct {
Plans []*Plan
}
Plans represents a collection of named query plans to expose in the policy.
type ResetLocalStmt ¶ added in v0.26.0
ResetLocalStmt resets a local variable to 0.
type ResultSetAdd ¶ added in v0.15.1
ResultSetAdd adds a value into the result set returned by the query plan.
type ReturnLocalStmt ¶ added in v0.11.0
ReturnLocalStmt represents a return statement that yields a local value.
type ScanStmt ¶ added in v0.10.3
ScanStmt represents a linear scan over a composite value. The source may be a scalar in which case the block will never execute.
type SetAddStmt ¶ added in v0.11.0
type SetAddStmt struct { Value LocalOrConst Set Local Location }
SetAddStmt represents a dynamic add operation of an element into a set.
type Static ¶
type Static struct { Strings []*StringConst BuiltinFuncs []*BuiltinFunc Files []*StringConst }
Static represents a static data segment that is indexed into by the policy.
type Stmt ¶
type Stmt interface {
// contains filtered or unexported methods
}
Stmt represents an operation (e.g., comparison, loop, dot, etc.) to execute.
type StringIndex ¶ added in v0.27.0
type StringIndex int
StringIndex represents the index into the plan's list of constant strings of a constant string.
func (StringIndex) String ¶ added in v0.28.0
func (s StringIndex) String() string
type Visitor ¶
type Visitor interface { Before(x interface{}) Visit(x interface{}) (Visitor, error) After(x interface{}) }
Visitor defines the interface for visiting IR nodes.
type WithStmt ¶ added in v0.15.1
type WithStmt struct { Local Local Path []int Value LocalOrConst Block *Block Location }
WithStmt replaces the Local or a portion of the document referred to by the Local with the Value and executes the contained block. If the Path is non-empty, the Value is upserted into the Local. If the intermediate nodes in the Local referred to by the Path do not exist, they will be created. When the WithStmt finishes the Local is reset to it's original value.