summaryrefslogtreecommitdiff
path: root/xgbgen/expression.go
diff options
context:
space:
mode:
authorAndrew Gallant (Ocelot) <[email protected]>2012-04-30 16:18:17 -0400
committerAndrew Gallant (Ocelot) <[email protected]>2012-04-30 16:18:17 -0400
commit5d79dc324de0a23fd0543951f0fd1f0352018654 (patch)
treef924ee2fba3def91bec831e4a6577204470d412d /xgbgen/expression.go
parentf7be3db65e559e77355537a11a88c8657ec4c059 (diff)
splitting up go specific code. too much for one file IMO. more progress. almost done with structs.
Diffstat (limited to 'xgbgen/expression.go')
-rw-r--r--xgbgen/expression.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/xgbgen/expression.go b/xgbgen/expression.go
index 7099c25..a975320 100644
--- a/xgbgen/expression.go
+++ b/xgbgen/expression.go
@@ -13,6 +13,34 @@ type Expression interface {
Initialize(p *Protocol)
}
+// Function is a custom expression not found in the XML. It's simply used
+// to apply a function named in 'Name' to the Expr expression.
+type Function struct {
+ Name string
+ Expr Expression
+}
+
+func (e *Function) Concrete() bool {
+ return false
+}
+
+func (e *Function) Eval() uint {
+ log.Fatalf("Cannot evaluate a 'Function'. It is not concrete.")
+ panic("unreachable")
+}
+
+func (e *Function) Reduce(prefix, fun string) string {
+ return fmt.Sprintf("%s(%s)", e.Name, e.Expr.Reduce(prefix, fun))
+}
+
+func (e *Function) String() string {
+ return e.Reduce("", "")
+}
+
+func (e *Function) Initialize(p *Protocol) {
+ e.Expr.Initialize(p)
+}
+
type BinaryOp struct {
Op string
Expr1 Expression