1.1 --- a/encoders.py Mon Feb 06 22:30:47 2017 +0100
1.2 +++ b/encoders.py Tue Feb 07 23:37:40 2017 +0100
1.3 @@ -78,7 +78,7 @@
1.4
1.5 def encode_modifiers(modifiers):
1.6
1.7 - "Encode assignment details from 'modifiers'."
1.8 + "Encode assignment and invocation details from 'modifiers'."
1.9
1.10 all_modifiers = []
1.11 for t in modifiers:
1.12 @@ -87,16 +87,38 @@
1.13
1.14 def encode_modifier_term(t):
1.15
1.16 - "Encode modifier 't' representing assignment status."
1.17 + "Encode modifier 't' representing an assignment or an invocation."
1.18
1.19 assignment, invocation = t
1.20 - return assignment and "=" or invocation and "!" or "_"
1.21 + if assignment:
1.22 + return "="
1.23 + elif invocation is not None:
1.24 + return "(%d)" % invocation
1.25 + else:
1.26 + return "_"
1.27
1.28 -def decode_modifier_term(s):
1.29 +def decode_modifiers(s):
1.30 +
1.31 + "Decode 's' containing modifiers."
1.32 +
1.33 + i = 0
1.34 + end = len(s)
1.35
1.36 - "Decode modifier term 's' representing assignment status."
1.37 + modifiers = []
1.38
1.39 - return (s == "=", s == "!")
1.40 + while i < end:
1.41 + if s[i] == "=":
1.42 + modifiers.append((True, None))
1.43 + i += 1
1.44 + elif s[i] == "(":
1.45 + j = s.index(")", i)
1.46 + modifiers.append((False, int(s[i+1:j])))
1.47 + i = j + 1
1.48 + else:
1.49 + modifiers.append((False, None))
1.50 + i += 1
1.51 +
1.52 + return modifiers
1.53
1.54
1.55