diff options
| author | Andrew Gallant (Ocelot) <[email protected]> | 2012-04-30 02:40:55 -0400 |
|---|---|---|
| committer | Andrew Gallant (Ocelot) <[email protected]> | 2012-04-30 02:40:55 -0400 |
| commit | 91ec0c014823a869775575879de1f5585523fc39 (patch) | |
| tree | fc768a53ff2bbe0bc2aaee737dd14f3e30bd1d6f /xgbgen/representation.go | |
| parent | f8f11e1419e4cf86189ccb9964b8235cef90eb4f (diff) | |
complete and total overhaul like i promised. things are much easier to reason about. still not working yet though.
Diffstat (limited to 'xgbgen/representation.go')
| -rw-r--r-- | xgbgen/representation.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/xgbgen/representation.go b/xgbgen/representation.go new file mode 100644 index 0000000..928e219 --- /dev/null +++ b/xgbgen/representation.go @@ -0,0 +1,56 @@ +package main + +type Protocol struct { + Name string + ExtXName string + ExtName string + MajorVersion string + MinorVersion string + + Imports []*Protocol + Types []Type + Requests []*Request +} + +// Initialize traverses all structures, looks for 'Translation' type, +// and looks up the real type in the namespace. It also sets the source +// name for all relevant fields/structures. +// This is necessary because we don't traverse the XML in order initially. +func (p *Protocol) Initialize() { + for _, typ := range p.Types { + typ.Initialize(p) + } + for _, req := range p.Requests { + req.Initialize(p) + } +} + +type Request struct { + srcName string + xmlName string + Opcode int + Combine bool + Fields []Field + Reply *Reply +} + +func (r *Request) Initialize(p *Protocol) { + r.srcName = SrcName(r.xmlName) + if r.Reply != nil { + r.Reply.Initialize(p) + } + for _, field := range r.Fields { + field.Initialize(p) + } +} + +type Reply struct { + Fields []Field +} + +func (r *Reply) Initialize(p *Protocol) { + for _, field := range r.Fields { + field.Initialize(p) + } +} + |
