summaryrefslogtreecommitdiff
path: root/Python/compile.c
Commit message (Collapse)AuthorAgeFilesLines
* Issue #27594: Prevent assertion error when running test_ast with coverageNed Deily2016-08-171-1/+1
| | | | | enabled: ensure code object has a valid first line number. Patch suggested by Ivan Levkivskyi.
* merge 3.5 (#27514)Benjamin Peterson2016-07-141-1/+1
|\
| * make too many nested blocks be a SyntaxError instead of a SystemError ↵Benjamin Peterson2016-07-141-1/+1
| | | | | | | | | | | | (closes #27514) Patch by Ammar Askar.
* | Issue #27301: Fixed incorrect return codes for errors in compile.c.Serhiy Storchaka2016-06-151-24/+38
|\ \ | |/
| * Issue #27301: Fixed incorrect return codes for errors in compile.c.Serhiy Storchaka2016-06-151-16/+20
| |
* | Issue #27095: Simplified MAKE_FUNCTION and removed MAKE_CLOSURE opcodes.Serhiy Storchaka2016-06-121-111/+136
| | | | | | | | Patch by Demur Rumed.
* | Issue #27286: Fixed compiling BUILD_MAP_UNPACK_WITH_CALL opcode. CallingSerhiy Storchaka2016-06-121-1/+1
|\ \ | |/ | | | | | | function with generalized unpacking (PEP 448) and conflicting keyword names could cause undefined behavior.
| * Issue #27286: Fixed compiling BUILD_MAP_UNPACK_WITH_CALL opcode. CallingSerhiy Storchaka2016-06-121-1/+1
| | | | | | | | | | function with generalized unpacking (PEP 448) and conflicting keyword names could cause undefined behavior.
* | Issue #27140: Added BUILD_CONST_KEY_MAP opcode.Serhiy Storchaka2016-06-121-29/+156
| |
* | Issue #26647: Python interpreter now uses 16-bit wordcode instead of bytecode.Serhiy Storchaka2016-05-241-54/+27
| | | | | | | | Patch by Demur Rumed.
* | Issue #22570: Renamed Py_SETREF to Py_XSETREF.Serhiy Storchaka2016-04-061-1/+1
|\ \ | |/
| * Issue #22570: Renamed Py_SETREF to Py_XSETREF.Serhiy Storchaka2016-04-061-1/+1
| |
| * code_richcompare() now uses the constants typesVictor Stinner2016-01-221-48/+10
| | | | | | | | | | | | | | | | | | Issue #25843: When compiling code, don't merge constants if they are equal but have a different types. For example, "f1, f2 = lambda: 1, lambda: 1.0" is now correctly compiled to two different functions: f1() returns 1 (int) and f2() returns 1.0 (int), even if 1 and 1.0 are equal. Add a new _PyCode_ConstantKey() private function.
* | compiler.c: fix compiler warnings on WindowsVictor Stinner2016-03-231-7/+9
| |
* | Update assertion in compiler_addop_i()Victor Stinner2016-03-011-4/+8
| | | | | | | | | | | | | | In practice, bytecode instruction arguments are unsigned. Update the assertion to make it more explicit that argument must be greater or equal than 0. Rewrite also the comment.
* | compile.c: inline compiler_use_new_block()Victor Stinner2016-02-271-26/+9
| | | | | | | | | | | | * Inline compiler_use_new_block() function into its only callee, compiler_enter_scope() * Remove unused NEW_BLOCK() macro
* | compiler: don't emit SyntaxWarning on const stmtVictor Stinner2016-02-081-22/+2
| | | | | | | | | | Issue #26204: the compiler doesn't emit SyntaxWarning warnings anymore when constant statements are ignored.
* | compiler now ignores constant statementsVictor Stinner2016-02-081-11/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The compile ignores constant statements and emit a SyntaxWarning warning. Don't emit the warning for string statement because triple quoted string is a common syntax for multiline comments. Don't emit the warning on ellipis neither: 'def f(): ...' is a legit syntax for abstract functions. Changes: * test_ast: ignore SyntaxWarning when compiling test statements. Modify test_load_const() to use assignment expressions rather than constant expression. * test_code: add more kinds of constant statements, ignore SyntaxWarning when testing that the compiler removes constant statements. * test_grammar: ignore SyntaxWarning on the statement "1"
* | Add ast.ConstantVictor Stinner2016-01-261-13/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Issue #26146: Add a new kind of AST node: ast.Constant. It can be used by external AST optimizers, but the compiler does not emit directly such node. An optimizer can replace the following AST nodes with ast.Constant: * ast.NameConstant: None, False, True * ast.Num: int, float, complex * ast.Str: str * ast.Bytes: bytes * ast.Tuple if items are constants too: tuple * frozenset Update code to accept ast.Constant instead of ast.Num and/or ast.Str: * compiler * docstrings * ast.literal_eval() * Tools/parser/unparse.py
* | code_richcompare() now uses the constants typesVictor Stinner2016-01-221-48/+10
| | | | | | | | | | | | | | | | | | Issue #25843: When compiling code, don't merge constants if they are equal but have a different types. For example, "f1, f2 = lambda: 1, lambda: 1.0" is now correctly compiled to two different functions: f1() returns 1 (int) and f2() returns 1.0 (int), even if 1 and 1.0 are equal. Add a new _PyCode_ConstantKey() private function.
* | co_lnotab supports negative line number deltaVictor Stinner2016-01-201-7/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Issue #26107: The format of the co_lnotab attribute of code objects changes to support negative line number delta. Changes: * assemble_lnotab(): if line number delta is less than -128 or greater than 127, emit multiple (offset_delta, lineno_delta) in co_lnotab * update functions decoding co_lnotab to use signed 8-bit integers - dis.findlinestarts() - PyCode_Addr2Line() - _PyCode_CheckLineNumber() - frame_setlineno() * update lnotab_notes.txt * increase importlib MAGIC_NUMBER to 3361 * document the change in What's New in Python 3.6 * cleanup also PyCode_Optimize() to use better variable names
* | Issue #20440: Massive replacing unsafe attribute setting code with specialSerhiy Storchaka2015-12-241-2/+1
|\ \ | |/ | | | | macro Py_SETREF.
| * Issue #20440: Massive replacing unsafe attribute setting code with specialSerhiy Storchaka2015-12-241-2/+1
| | | | | | | | macro Py_SETREF.
* | Issue 25483: Add an opcode to make f-string formatting more robust.Eric V. Smith2015-11-031-65/+33
| |
* | Issue #25523: Merge a-to-an corrections from 3.5Martin Panter2015-11-021-1/+1
|\ \ | |/
| * Issue #25523: Merge "a" to "an" fixes from 3.4 into 3.5Martin Panter2015-11-021-1/+1
| |\
| | * Issue #25523: Correct "a" article to "an" articleMartin Panter2015-11-021-1/+1
| | | | | | | | | | | | | | | | | | This changes the main documentation, doc strings, source code comments, and a couple error messages in the test suite. In some cases the word was removed or edited some other way to fix the grammar.
* | | Issue #24965: Implement PEP 498 "Literal String Interpolation". ↵Eric V. Smith2015-09-191-1/+116
| | | | | | | | | | | | Documentation is still needed, I'll open an issue for that.
* | | merge 3.5 (#25060)Benjamin Peterson2015-09-101-1/+1
|\ \ \ | |/ /
| * | compute stack effect of BUILD_MAP correctly (closes #25060)Benjamin Peterson2015-09-101-1/+1
| | |
* | | Fix refleak.Stefan Krah2015-07-271-1/+3
|\ \ \ | |/ /
| * | Fix refleak.Stefan Krah2015-07-271-1/+3
| | |
* | | Merge 3.5 (Issue #24687)Yury Selivanov2015-07-231-14/+13
|\ \ \ | |/ /
| * | Issue #24687: Plug refleak on SyntaxError in function parameters annotations.Yury Selivanov2015-07-231-14/+13
| | |
* | | Merge 3.5 (Issue #24619)Yury Selivanov2015-07-221-3/+2
|\ \ \ | |/ /
| * | Issue #24619: More tests; fix nits in compiler.cYury Selivanov2015-07-221-3/+2
| | |
* | | Merge 3.5 (Issue #24528)Yury Selivanov2015-06-301-1/+4
|\ \ \ | |/ /
| * | Issue #24528: Improve error message for awaits in comprehensionsYury Selivanov2015-06-301-1/+4
| | |
* | | Issue #24400: Merge 3.5Yury Selivanov2015-06-221-6/+4
|\ \ \ | |/ /
| * | Issue #24400: Introduce a distinct type for 'async def' coroutines.Yury Selivanov2015-06-221-6/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary of changes: 1. Coroutines now have a distinct, separate from generators type at the C level: PyGen_Type, and a new typedef PyCoroObject. PyCoroObject shares the initial segment of struct layout with PyGenObject, making it possible to reuse existing generators machinery. The new type is exposed as 'types.CoroutineType'. As a consequence of having a new type, CO_GENERATOR flag is no longer applied to coroutines. 2. Having a separate type for coroutines made it possible to add an __await__ method to the type. Although it is not used by the interpreter (see details on that below), it makes coroutines naturally (without using __instancecheck__) conform to collections.abc.Coroutine and collections.abc.Awaitable ABCs. [The __instancecheck__ is still used for generator-based coroutines, as we don't want to add __await__ for generators.] 3. Add new opcode: GET_YIELD_FROM_ITER. The opcode is needed to allow passing native coroutines to the YIELD_FROM opcode. Before this change, 'yield from o' expression was compiled to: (o) GET_ITER LOAD_CONST YIELD_FROM Now, we use GET_YIELD_FROM_ITER instead of GET_ITER. The reason for adding a new opcode is that GET_ITER is used in some contexts (such as 'for .. in' loops) where passing a coroutine object is invalid. 4. Add two new introspection functions to the inspec module: getcoroutinestate(c) and getcoroutinelocals(c). 5. inspect.iscoroutine(o) is updated to test if 'o' is a native coroutine object. Before this commit it used abc.Coroutine, and it was requested to update inspect.isgenerator(o) to use abc.Generator; it was decided, however, that inspect functions should really be tailored for checking for native types. 6. sys.set_coroutine_wrapper(w) API is updated to work with only native coroutines. Since types.coroutine decorator supports any type of callables now, it would be confusing that it does not work for all types of coroutines. 7. Exceptions logic in generators C implementation was updated to raise clearer messages for coroutines: Before: TypeError("generator raised StopIteration") After: TypeError("coroutine raised StopIteration")
* | | Fixed indentation of Python examples in C comments.Serhiy Storchaka2015-06-111-4/+4
|\ \ \ | |/ /
| * | Fixed indentation of Python examples in C comments.Serhiy Storchaka2015-06-111-2/+2
| |\ \ |/ / / | | _
| * Fixed indentation of Python examples in C comments.Serhiy Storchaka2015-06-111-2/+2
| |
* | remove STORE_MAP, since it's unusedBenjamin Peterson2015-05-281-2/+0
| |
* | in dict displays, evaluate the key before the value (closes #11205)Benjamin Peterson2015-05-281-2/+2
| | | | | | | | Patch partially by Steve Dougherty.
* | PEP 0492 -- Coroutines with async and await syntax. Issue #24017.Yury Selivanov2015-05-111-15/+273
| |
* | Merge 3.4Benjamin Peterson2015-05-071-5/+4
|\ \ | |/
| * shorten capsule name macro; it doesn't need to be so longBenjamin Peterson2015-05-071-4/+4
| |
* | PEP 448: additional unpacking generalizations (closes #2292)Benjamin Peterson2015-05-051-89/+230
| | | | | | | | Patch by Neil Girdhar.
* | remove the concept of an unoptimized function scope from the compiler, since ↵Benjamin Peterson2015-04-271-5/+2
| | | | | | | | it can't happen anymore