[master] 658d378 Prepatory work for optional arguments
Poul-Henning Kamp
phk at FreeBSD.org
Tue Nov 25 11:18:36 CET 2014
commit 658d37859386af32d045bc32338b0da47dc3a2a5
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Tue Nov 25 09:03:27 2014 +0000
Prepatory work for optional arguments
diff --git a/lib/libvcc/vmodtool.py b/lib/libvcc/vmodtool.py
index bff415a..3da3fd4 100755
--- a/lib/libvcc/vmodtool.py
+++ b/lib/libvcc/vmodtool.py
@@ -556,6 +556,7 @@ class Arg(object):
self.nam = nam
self.typ = typ
self.det = det
+ self.val = None
def __repr__(self):
return "<ARG %s %s %s>" % (self.nam, self.typ, str(self.det))
@@ -593,6 +594,44 @@ def parse_enum2(tl):
s += "\\0"
return Arg("ENUM", det=s)
+def parse_arg(tl, al):
+ t = tl.get_token()
+ assert t != None
+
+ if t.str == ")":
+ return t
+
+ if t.str == "ENUM":
+ al.append(parse_enum2(tl))
+ elif t.str in ctypes:
+ al.append(Arg(t.str))
+ else:
+ raise Exception("ARG? %s", t.str)
+
+ t = tl.get_token()
+ if t.str == "," or t.str == ")":
+ return t
+
+ if not is_c_name(t.str):
+ raise ParseError(
+ 'Expected ")", "," or argument name, not "%s"' % t.str)
+
+ al[-1].nam = t.str
+ t = tl.get_token()
+
+ if t.str == "," or t.str == ")":
+ return t
+
+ if t.str != "=":
+ raise ParseError(
+ 'Expected ")", "," or "=", not "%s"' % t.str)
+
+ t = tl.get_token()
+ al[-1].val = t.str
+
+ t = tl.get_token()
+ return t
+
#######################################################################
#
#
@@ -630,33 +669,13 @@ def parse_func(tl, rt_type=None, pobj=None):
if t.str != "(":
raise ParseError("Expected \"(\" got \"%s\"", t.str)
- t = None
while True:
- if t == None:
- t = tl.get_token()
- assert t != None
-
- if t.str == "ENUM":
- al.append(parse_enum2(tl))
- elif t.str in ctypes:
- al.append(Arg(t.str))
- elif t.str == ")":
- break
- else:
- raise Exception("ARG? %s", t.str)
- t = tl.get_token()
- if is_c_name(t.str):
- al[-1].nam = t.str
- t = tl.get_token()
- if t.str == ",":
- t = None
- elif t.str == ")":
+ t = parse_arg(tl, al)
+ if t.str == ")":
break
- else:
- raise ParseError(
- "Expected \")\" or \",\" not \"%s\"" % t.str)
- if t.str != ")":
- raise ParseError("End Of Input looking for ')'")
+ if t.str != ",":
+ raise ParseError("End Of Input looking for ')' or ','")
+
f = Func(fname, rt_type, al)
return f
More information about the varnish-commit
mailing list