1.1 --- a/micropython/ast.py Wed Mar 19 20:57:38 2008 +0100
1.2 +++ b/micropython/ast.py Thu Mar 20 01:13:48 2008 +0100
1.3 @@ -262,11 +262,14 @@
1.4 # Evaluate the arguments.
1.5
1.6 positional = 1
1.7 + start_keywords = None
1.8 + employed_keywords = set()
1.9
1.10 for i, arg in enumerate(args):
1.11 if isinstance(arg, compiler.ast.Keyword):
1.12 if positional:
1.13 self.new_op(ReserveFrame(len(args) - i))
1.14 + start_keywords = i
1.15 positional = 0
1.16
1.17 self.dispatch(arg.expr)
1.18 @@ -294,6 +297,17 @@
1.19 raise
1.20
1.21 pos = table_entry[arg.name]
1.22 +
1.23 + # Test for illegal conditions.
1.24 +
1.25 + if pos < start_keywords:
1.26 + raise TranslateError(self.module.full_name(), node,
1.27 + "Keyword argument %r overwrites parameter %r." % (arg.name, pos))
1.28 + elif pos in employed_keywords:
1.29 + raise TranslateError(self.module.full_name(), node,
1.30 + "Keyword argument %r is repeated, overwriting parameter %r." % (arg.name, pos))
1.31 +
1.32 + employed_keywords.add(pos)
1.33 self.new_op(StoreFrame(pos))
1.34
1.35 # Otherwise, generate the code needed to obtain the details of