Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rework user ops #4663

Merged
merged 3 commits into from Jun 22, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
33 changes: 4 additions & 29 deletions compiler/ast/ast.go
Expand Up @@ -28,10 +28,6 @@ type Expr interface {
ExprAST()
}

type Param interface {
ParamAST()
}

type ID struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
Expand Down Expand Up @@ -216,10 +212,10 @@ type FuncDecl struct {
}

type OpDecl struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
Params []Param `json:"params"`
Body Seq `json:"body"`
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
Params []string `json:"params"`
Body Seq `json:"body"`
}

func (*ConstDecl) DeclAST() {}
Expand Down Expand Up @@ -540,24 +536,3 @@ type Agg struct {
Expr Expr `json:"expr"`
Where Expr `json:"where"`
}

// ----------------------------------------------------------------------------
// Params

type (
ConstParam struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
}
NamedParam struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
}
SpreadParam struct {
Kind string `json:"kind" unpack:""`
}
)

func (*ConstParam) ParamAST() {}
func (*NamedParam) ParamAST() {}
func (*SpreadParam) ParamAST() {}
23 changes: 0 additions & 23 deletions compiler/ast/dag/expr.go
Expand Up @@ -10,9 +10,6 @@ type (
VectorElem interface {
vectorElem()
}
Param interface {
paramDAG()
}
)

// Exprs
Expand Down Expand Up @@ -191,23 +188,3 @@ func TopLevelField(e Expr) (string, bool) {
}
return "", false
}

// Params

type (
ConstParam struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
}
NamedParam struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
}
SpreadParam struct {
Kind string `json:"kind" unpack:""`
}
)

func (*ConstParam) paramDAG() {}
func (*NamedParam) paramDAG() {}
func (*SpreadParam) paramDAG() {}
17 changes: 8 additions & 9 deletions compiler/ast/dag/op.go
Expand Up @@ -145,17 +145,16 @@ type (
Cflag bool `json:"cflag"`
}
UserOp struct {
Kind string `json:"kind" unpack:""`
Name string `json:"id"`
Params []Param `json:"params"`
Body Seq `json:"body"`
Kind string `json:"kind" unpack:""`
Name string `json:"id"`
Params []string `json:"params"`
Body Seq `json:"body"`
}
UserOpCall struct {
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
Exprs []Expr `json:"exprs"`
Consts []*Literal `json:"consts"`
UserOp *UserOp `json:"user_op"`
Kind string `json:"kind" unpack:""`
Name string `json:"name"`
Exprs []Expr `json:"exprs"`
Body Seq `json:"body"`
}
Yield struct {
Kind string `json:"kind" unpack:""`
Expand Down
3 changes: 0 additions & 3 deletions compiler/ast/dag/unpack.go
Expand Up @@ -14,7 +14,6 @@ var unpacker = unpack.New(
Call{},
Combine{},
Conditional{},
ConstParam{},
Cut{},
Deleter{},
Dot{},
Expand All @@ -34,7 +33,6 @@ var unpacker = unpack.New(
Load{},
MapExpr{},
Merge{},
NamedParam{},
Over{},
OverExpr{},
Pass{},
Expand All @@ -53,7 +51,6 @@ var unpacker = unpack.New(
Slicer{},
Sort{},
Spread{},
SpreadParam{},
Summarize{},
Switch{},
Tail{},
Expand Down
3 changes: 0 additions & 3 deletions compiler/ast/unpack.go
Expand Up @@ -20,7 +20,6 @@ var unpacker = unpack.New(
astzed.CastValue{},
Conditional{},
ConstDecl{},
ConstParam{},
Cut{},
astzed.DefValue{},
Drop{},
Expand All @@ -41,7 +40,6 @@ var unpacker = unpack.New(
Join{},
Load{},
Merge{},
NamedParam{},
Over{},
Trunk{},
astzed.Map{},
Expand Down Expand Up @@ -91,7 +89,6 @@ var unpacker = unpack.New(
Where{},
Yield{},
Sample{},
SpreadParam{},
)

// UnmarshalOp transforms a JSON representation of an operator into an Op.
Expand Down
42 changes: 3 additions & 39 deletions compiler/kernel/op.go
Expand Up @@ -385,52 +385,16 @@ func (b *Builder) compileOver(parent zbuf.Puller, over *dag.Over) (zbuf.Puller,
}

func (b *Builder) compileUserOpCall(parent zbuf.Puller, u *dag.UserOpCall) (zbuf.Puller, error) {
// Construct the "this" record value.
var elems []expr.RecordElem
for i, p := range u.UserOp.Params {
if _, ok := p.(*dag.ConstParam); ok {
continue
}
val, err := compileExpr(u.Exprs[i])
if err != nil {
return nil, err
}
switch p := p.(type) {
case *dag.NamedParam:
elems = append(elems, expr.RecordElem{Name: p.Name, Field: val})
case *dag.SpreadParam:
elems = append(elems, expr.RecordElem{Spread: val})
default:
return nil, fmt.Errorf("internal error: unknown DAG param type: %#v", p)
}
}
this, err := expr.NewRecordExpr(b.octx.Zctx, elems)
if err != nil {
return nil, err
}
consts := make([]zed.Value, len(u.Consts))
for i, c := range u.Consts {
val, err := EvalAtCompileTime(b.octx.Zctx, c)
if err != nil {
return nil, err
}
consts[i] = *val
}
apply := op.NewApplier(b.octx, parent, this)
enter := op.NewEnterScope(apply, consts)
exits, err := b.compileSeq(u.UserOp.Body, []zbuf.Puller{enter})
exits, err := b.compileSeq(u.Body, []zbuf.Puller{parent})
if err != nil {
return nil, err
}
var exit zbuf.Puller
if len(exits) > 1 {
// This can happen when output of the body
// is a fork or switch.
exit = combine.New(b.octx, exits)
} else {
exit = exits[0]
return combine.New(b.octx, exits), nil
}
return op.NewExitScope(exit, len(consts)), nil
return exits[0], nil
}

func (b *Builder) compileAssignments(assignments []dag.Assignment) ([]expr.Assignment, error) {
Expand Down
2 changes: 1 addition & 1 deletion compiler/optimizer/optimizer.go
Expand Up @@ -87,7 +87,7 @@ func walk(seq dag.Seq, over bool, post func(dag.Seq) dag.Seq) dag.Seq {
case *dag.Scope:
op.Body = walk(op.Body, over, post)
case *dag.UserOpCall:
op.UserOp.Body = walk(op.UserOp.Body, over, post)
op.Body = walk(op.Body, over, post)
}
}
return post(seq)
Expand Down