ensure anonymous ops work

This commit is contained in:
Brian Picciano 2016-08-20 12:48:14 -06:00
parent f9aec75bf1
commit 867f83377f
2 changed files with 18 additions and 15 deletions

View File

@ -35,9 +35,14 @@ func (bctx BuildCtx) BuildStmt(ctx Ctx, s Statement) Expr {
case Macro: case Macro:
return ctx.Macro(o)(bctx, ctx, s.Arg) return ctx.Macro(o)(bctx, ctx, s.Arg)
case Identifier: case Identifier:
fn := ctx.Identifier(o).(llvmVal) s.Op = ctx.Identifier(o).(llvmVal)
return bctx.BuildStmt(ctx, s)
case Statement:
s.Op = bctx.BuildStmt(ctx, o)
return bctx.BuildStmt(ctx, s)
case llvmVal:
arg := bctx.buildExpr(ctx, s.Arg).(llvmVal) arg := bctx.buildExpr(ctx, s.Arg).(llvmVal)
out := bctx.B.CreateCall(llvm.Value(fn), []llvm.Value{llvm.Value(arg)}, "") out := bctx.B.CreateCall(llvm.Value(o), []llvm.Value{llvm.Value(arg)}, "")
return llvmVal(out) return llvmVal(out)
default: default:
panic(fmt.Sprintf("non op type %v (%T)", s.Op, s.Op)) panic(fmt.Sprintf("non op type %v (%T)", s.Op, s.Op))

12
main.go
View File

@ -32,22 +32,20 @@ func main() {
log.Printf("making program") log.Printf("making program")
add := expr.Macro("add") add := expr.Macro("add")
bind := expr.Macro("bind") //bind := expr.Macro("bind")
op := expr.Macro("op") op := expr.Macro("op")
in := expr.Macro("in") in := expr.Macro("in")
incr := expr.Identifier("incr")
stmts := []expr.Statement{ incr := expr.NewStatement(op,
expr.NewStatement(bind, incr,
expr.NewStatement(op,
expr.NewList( expr.NewList(
expr.NewStatement(add, expr.NewTuple( expr.NewStatement(add, expr.NewTuple(
expr.Int(1), expr.Int(1),
expr.NewStatement(in, expr.NewTuple()), expr.NewStatement(in, expr.NewTuple()),
)), )),
), ),
), )
),
stmts := []expr.Statement{
expr.NewStatement( expr.NewStatement(
incr, incr,
expr.Int(5), expr.Int(5),