docs: def _build_for_statement(self):
          """NOTE: this is not a complete implementation of for loop parsing.
              Turns out for loops allow a number of wacky things going on,
              such as declaring a variable in place of a condition.
              These more peculiar cases are not covered. See
              http://en.cppreference.com/w/cpp/language/for
          """
          cppobj = CppLoop(self.scope, self.parent, "for")
          cppobj.file = self.file
          cppobj.line = self.line
          cppobj.column = self.column
          builders = []
          children = list(self.cursor.get_children())
          assert len(children) >= 1
          # body always comes last
          builders.append(CppStatementBuilder(children[-1], self.scope, cppobj,
                                              insert = cppobj._set_body))
          if len(children) == 1:
      # ----- just body -------------------------------------
              cppobj.condition = True
          elif len(children) == 2:
      # ----- condition + body ------------------------------
              builders.append(CppExpressionBuilder(children[0], self.scope,
                              cppobj, insert = cppobj._set_condition))
          elif len(children) >= 4:
      # ----- var + condition + increment + body ------------
              builders.append(CppStatementBuilder(children[0], cppobj,
                              cppobj, insert = cppobj._set_declarations))
              builders.append(CppExpressionBuilder(children[1], self.scope,
                              cppobj, insert = cppobj._set_condition))
              builders.append(CppStatementBuilder(children[2], cppobj,
                              cppobj, insert = cppobj._set_increment))
          elif children[0].kind == clang.CursorKind.DECL_STMT:
      # ----- var + condition + body ------------------------
              builders.append(CppStatementBuilder(children[0], cppobj,
                              cppobj, insert = cppobj._set_declarations))
              builders.append(CppExpressionBuilder(children[1], self.scope,
                              cppobj, insert = cppobj._set_condition))
          else:
      # ----- condition + increment + body ------------------
              builders.append(CppExpressionBuilder(children[0], self.scope,
                              cppobj, insert = cppobj._set_condition))
              builders.append(CppStatementBuilder(children[1], cppobj,
                              cppobj, insert = cppobj._set_increment))
          return (cppobj, builders)