From 29942bf078c92fea681e42ca5029592526f00718 Mon Sep 17 00:00:00 2001 From: "Andrew Gallant (Ocelot)" Date: Fri, 11 May 2012 23:58:52 -0400 Subject: panic when an extension request is issued before an extension has been initialized. but give a nice error message for the happy people. --- nexgb/xgbgen/go_request_reply.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'nexgb/xgbgen/go_request_reply.go') diff --git a/nexgb/xgbgen/go_request_reply.go b/nexgb/xgbgen/go_request_reply.go index eca0c10..62d9936 100644 --- a/nexgb/xgbgen/go_request_reply.go +++ b/nexgb/xgbgen/go_request_reply.go @@ -18,6 +18,7 @@ func (r *Request) Define(c *Context) { "by calling %s.Reply()", r.CookieName()) c.Putln("func %s(c *xgb.Conn, %s) %s {", r.SrcName(), r.ParamNameTypes(), r.CookieName()) + r.CheckExt(c) c.Putln("cookie := c.NewCookie(true, true)") c.Putln("c.NewRequest(%s(c, %s), cookie)", r.ReqName(), r.ParamNames()) c.Putln("return %s{cookie}", r.CookieName()) @@ -29,6 +30,7 @@ func (r *Request) Define(c *Context) { "xgb.WaitForEvent or xgb.PollForEvent.") c.Putln("func %sUnchecked(c *xgb.Conn, %s) %s {", r.SrcName(), r.ParamNameTypes(), r.CookieName()) + r.CheckExt(c) c.Putln("cookie := c.NewCookie(false, true)") c.Putln("c.NewRequest(%s(c, %s), cookie)", r.ReqName(), r.ParamNames()) c.Putln("return %s{cookie}", r.CookieName()) @@ -42,6 +44,7 @@ func (r *Request) Define(c *Context) { "xgb.WaitForEvent or xgb.PollForEvent.") c.Putln("func %s(c *xgb.Conn, %s) %s {", r.SrcName(), r.ParamNameTypes(), r.CookieName()) + r.CheckExt(c) c.Putln("cookie := c.NewCookie(false, false)") c.Putln("c.NewRequest(%s(c, %s), cookie)", r.ReqName(), r.ParamNames()) c.Putln("return %s{cookie}", r.CookieName()) @@ -53,6 +56,7 @@ func (r *Request) Define(c *Context) { "%s.Check()", r.CookieName()) c.Putln("func %sChecked(c *xgb.Conn, %s) %s {", r.SrcName(), r.ParamNameTypes(), r.CookieName()) + r.CheckExt(c) c.Putln("cookie := c.NewCookie(true, false)") c.Putln("c.NewRequest(%s(c, %s), cookie)", r.ReqName(), r.ParamNames()) c.Putln("return %s{cookie}", r.CookieName()) @@ -71,6 +75,18 @@ func (r *Request) Define(c *Context) { r.WriteRequest(c) } +func (r *Request) CheckExt(c *Context) { + if !c.protocol.isExt() { + return + } + c.Putln("if _, ok := c.Extensions[\"%s\"]; !ok {", + strings.ToUpper(c.protocol.ExtXName)) + c.Putln("panic(\"Cannot issue request '%s' using the uninitialized " + + "extension '%s'. %s.Init(connObj) must be called first.\")", + r.SrcName(), c.protocol.ExtXName, c.protocol.PkgName()) + c.Putln("}") +} + func (r *Request) ReadReply(c *Context) { c.Putln("// %s represents the data returned from a %s request.", r.ReplyTypeName(), r.SrcName()) -- cgit v1.2.3-54-g00ecf