def build_ir_for_single_file( input_lines: List[str], compiler_options: Optional[CompilerOptions] = None) -> List[FuncIR]: program_text = '\n'.join(input_lines) compiler_options = compiler_options or CompilerOptions() options = Options() options.show_traceback = True options.use_builtins_fixtures = True options.strict_optional = True options.python_version = (3, 6) options.export_types = True options.per_module_options['__main__'] = {'mypyc': True} if os.getenv('NEWSEMANAL'): options.new_semantic_analyzer = True source = build.BuildSource('main', '__main__', program_text) # Construct input as a single single. # Parse and type check the input program. result = build.build(sources=[source], options=options, alt_lib_path=test_temp_dir) if result.errors: raise CompileError(result.errors) _, modules, errors = genops.build_ir([result.files['__main__']], result.graph, result.types, compiler_options) assert errors == 0 module = modules[0][1] return module.functions
def parse_options(program_text: str, testcase: DataDrivenTestCase, incremental_step: int) -> Options: """Parse comments like '# flags: --foo' in a test case.""" options = Options() flags = re.search('# flags: (.*)$', program_text, flags=re.MULTILINE) if incremental_step > 1: flags2 = re.search('# flags{}: (.*)$'.format(incremental_step), program_text, flags=re.MULTILINE) if flags2: flags = flags2 flag_list = None if flags: flag_list = flags.group(1).split() flag_list.append('--no-site-packages' ) # the tests shouldn't need an installed Python targets, options = process_options(flag_list, require_targets=False) if targets: # TODO: support specifying targets via the flags pragma raise RuntimeError( 'Specifying targets via the flags pragma is not supported.') else: options = Options() # TODO: Enable strict optional in test cases by default (requires *many* test case changes) options.strict_optional = False # Allow custom python version to override testcase_pyversion if (not flag_list or all(flag not in flag_list for flag in ['--python-version', '-2', '--py2'])): options.python_version = testcase_pyversion(testcase.file, testcase.name) if testcase.config.getoption('--mypy-verbose'): options.verbosity = testcase.config.getoption('--mypy-verbose') if os.getenv('NEWSEMANAL'): if not flag_list or '--no-new-semantic-analyzer' not in flag_list: options.new_semantic_analyzer = True return options
def parse_options(program_text: str, testcase: DataDrivenTestCase, incremental_step: int) -> Options: """Parse comments like '# flags: --foo' in a test case.""" options = Options() flags = re.search('# flags: (.*)$', program_text, flags=re.MULTILINE) if incremental_step > 1: flags2 = re.search('# flags{}: (.*)$'.format(incremental_step), program_text, flags=re.MULTILINE) if flags2: flags = flags2 flag_list = None if flags: flag_list = flags.group(1).split() flag_list.append('--no-site-packages') # the tests shouldn't need an installed Python targets, options = process_options(flag_list, require_targets=False) if targets: # TODO: support specifying targets via the flags pragma raise RuntimeError('Specifying targets via the flags pragma is not supported.') else: options = Options() # TODO: Enable strict optional in test cases by default (requires *many* test case changes) options.strict_optional = False # Allow custom python version to override testcase_pyversion if (not flag_list or all(flag not in flag_list for flag in ['--python-version', '-2', '--py2'])): options.python_version = testcase_pyversion(testcase.file, testcase.name) if testcase.config.getoption('--mypy-verbose'): options.verbosity = testcase.config.getoption('--mypy-verbose') if os.getenv('NEWSEMANAL'): if not flag_list or '--no-new-semantic-analyzer' not in flag_list: options.new_semantic_analyzer = True return options