Lichen

Changeset

909:5c6b1b19c6f6
2019-06-11 Paul Boddie raw files shortlog changelog graph Added an inline commentary of the "for" loop construct.
common.py (file)
     1.1 --- a/common.py	Sat Jun 08 17:55:32 2019 +0200
     1.2 +++ b/common.py	Tue Jun 11 23:14:45 2019 +0200
     1.3 @@ -598,24 +598,47 @@
     1.4                  [compiler.ast.AssName(t2, "OP_ASSIGN")],
     1.5                  compiler.ast.Getattr(compiler.ast.Name(t1), "next")),
     1.6  
     1.7 +            # try:
     1.8 +
     1.9              compiler.ast.TryExcept(
    1.10 +
    1.11 +                # while True:
    1.12 +
    1.13                  compiler.ast.While(
    1.14                      compiler.ast.Name("True"),
    1.15                      compiler.ast.Stmt([
    1.16 +
    1.17 +                        # try:
    1.18 +
    1.19                          compiler.ast.TryExcept(
    1.20 +
    1.21 +                            # <t3> = <t2>()
    1.22 +
    1.23                              compiler.ast.Assign(
    1.24                                  [compiler.ast.AssName(t3, "OP_ASSIGN")],
    1.25                                  compiler.ast.CallFunc(
    1.26                                      compiler.ast.Name(t2),
    1.27                                      [])),
    1.28 +
    1.29 +                        # except StopIteration:
    1.30 +                        #     raise LoopExit
    1.31 +
    1.32                              [(compiler.ast.Name("StopIteration"), None,
    1.33                                compiler.ast.Raise(compiler.ast.Name("LoopExit")))],
    1.34                              None),
    1.35 +
    1.36 +                        # <var>... = <t3>
    1.37 +
    1.38                          compiler.ast.Assign(
    1.39                              [n.assign],
    1.40                              compiler.ast.Name(t3)),
    1.41                          n.body]),
    1.42                      None),
    1.43 +
    1.44 +            # except LoopExit:
    1.45 +            #     {n.else_}
    1.46 +            #     pass
    1.47 +
    1.48                  [(compiler.ast.Name("LoopExit"), None, n.else_ or compiler.ast.Pass())],
    1.49                  None)
    1.50              ])