From 73154769b3eba60fe48a7c08882e8e64b1545e3f Mon Sep 17 00:00:00 2001 From: "Andrew Gallant (Ocelot)" Date: Mon, 30 Apr 2012 16:18:17 -0400 Subject: splitting up go specific code. too much for one file IMO. more progress. almost done with structs. --- nexgb/xgbgen/expression.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'nexgb/xgbgen/expression.go') diff --git a/nexgb/xgbgen/expression.go b/nexgb/xgbgen/expression.go index 7099c25..a975320 100644 --- a/nexgb/xgbgen/expression.go +++ b/nexgb/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 -- cgit v1.2.3-70-g09d2