From 867f83377f999f7f4f92a3989a92df738320aad5 Mon Sep 17 00:00:00 2001 From: Brian Picciano Date: Sat, 20 Aug 2016 12:48:14 -0600 Subject: [PATCH] ensure anonymous ops work --- expr/build.go | 9 +++++++-- main.go | 24 +++++++++++------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/expr/build.go b/expr/build.go index a8b49c5..209a121 100644 --- a/expr/build.go +++ b/expr/build.go @@ -35,9 +35,14 @@ func (bctx BuildCtx) BuildStmt(ctx Ctx, s Statement) Expr { case Macro: return ctx.Macro(o)(bctx, ctx, s.Arg) 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) - 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) default: panic(fmt.Sprintf("non op type %v (%T)", s.Op, s.Op)) diff --git a/main.go b/main.go index f3a939f..ab69516 100644 --- a/main.go +++ b/main.go @@ -32,22 +32,20 @@ func main() { log.Printf("making program") add := expr.Macro("add") - bind := expr.Macro("bind") + //bind := expr.Macro("bind") op := expr.Macro("op") in := expr.Macro("in") - incr := expr.Identifier("incr") - stmts := []expr.Statement{ - expr.NewStatement(bind, incr, - expr.NewStatement(op, - expr.NewList( - expr.NewStatement(add, expr.NewTuple( - expr.Int(1), - expr.NewStatement(in, expr.NewTuple()), - )), - ), - ), - ), + incr := expr.NewStatement(op, + expr.NewList( + expr.NewStatement(add, expr.NewTuple( + expr.Int(1), + expr.NewStatement(in, expr.NewTuple()), + )), + ), + ) + + stmts := []expr.Statement{ expr.NewStatement( incr, expr.Int(5),