code: def parse_to_ast(source_code: str) -> List[ast.stmt]:
      
      class_types, reformatted_code = pre_parse(source_code)
  
      if '\x00' in reformatted_code:
          raise ParserException('No null bytes (\\x00) allowed in the source code.')
  
      parsed_ast = ast.parse(reformatted_code)
      annotate_and_optimize_ast(parsed_ast, reformatted_code, class_types)
  
      return parsed_ast.body
docs: Parses the given vyper source code and returns a list of python AST objects
      for all statements in the source.  Performs pre-processing of source code
      before parsing as well as post-processing of the resulting AST.
  
      :param source_code: The vyper source code to be parsed.
      :return: The post-processed list of python AST objects for each statement in
          ``source_code``.