summaryrefslogtreecommitdiffstats
path: root/Lib/compiler
Commit message (Collapse)AuthorAgeFilesLines
* SF bug 430991: wrong co_lnotabTim Peters2001-06-091-17/+14
| | | | | | | | | Armin Rigo pointed out that the way the line-# table got built didn't work for lines generating more than 255 bytes of bytecode. Fixed as he suggested, plus corresponding changes to pyassem.py, plus added some long overdue docs about this subtle table to compile.c. Bugfix candidate (line numbers may be off in tracebacks under -O).
* Pop loop off the loop stack before handling the loop's else clause.Jeremy Hylton2001-04-121-4/+4
| | | | | | Otherwise, continue/break will attempt to affect the wrong loop. A few more fiddles to get the SET_LINENOs consistent across compilers.
* Use new _implicitNameOp() to generate name op code for list comprehensions.Jeremy Hylton2001-04-121-4/+17
| | | | | | | | | Always emit a SET_LINENO 0 at the beginning of the module. The builtin compiler does this, and it's much easier to compare bytecode generated by the two compilers if they both do. Move the SET_LINENO inside the FOR_LOOP block for list comprehensions. Also for compat. with builtin compiler.
* Add support for visitAssAttr to findOp().Jeremy Hylton2001-04-121-1/+1
|
* pyassem.py:Jeremy Hylton2001-04-122-14/+111
| | | | | | | | | | | | | | | | Fix annoying bugs in flow graph layout code. In some cases the implicit control transfers weren't honored. In other cases, JUMP_FORWARD instructions jumped backwards. Remove unused arg from nextBlock(). pycodegen.py Add optional force kwarg to set_lineno() that will emit a SET_LINENO even if it is the same as the previous lineno. Use explicit LOAD_FAST and STORE_FAST to access list comp implicit variables. (The symbol table doesn't know about them.)
* Revise handling of tuple arguments so that the variables names matchJeremy Hylton2001-04-122-8/+8
| | | | those used by compile.c. (test_grammar now depends on the names)
* Only treat an AugAssign as def if its the target is a Name.Jeremy Hylton2001-04-121-2/+4
| | | | Fixes last bug found with test_scope.py.
* Fix unpackSequence() to use _nameOp() rather than LOAD_FASTJeremy Hylton2001-04-121-1/+2
|
* Inside a class scope always use LOAD_NAME, STORE_NAME, DEL_NAMEJeremy Hylton2001-04-121-0/+3
|
* Preliminary support for nested scopesJeremy Hylton2001-04-123-89/+396
| | | | | XXX Still doesn't work right for classes XXX Still doesn't do sufficient error checking
* Define constants for types of scopesJeremy Hylton2001-04-121-0/+5
|
* typoJeremy Hylton2001-04-111-4/+8
|
* [finishing fix from earlier checkins]Jeremy Hylton2001-04-111-0/+1
| | | | | | | Call set_lineno() in visitDiscard(), which will generate linenos for discard statements, e.g. the statement "1/0" Fixes SF bug #409587
* Add support for extra (*) arguments to preorder.Jeremy Hylton2001-04-111-3/+3
| | | | Change default dispatch to use extended call syntax in place of apply.
* Generate docstrings.Jeremy Hylton2001-04-111-3/+26
| | | | | | | Fixes SF buf #217004 Add method fixDocstring() to CodeGenerator. It converts the Discard node containing the docstring into an assignment to __doc__.
* Add lineno attributes to Discard nodesJeremy Hylton2001-04-111-1/+3
|
* Make sure the docstring is always entered as the first element in theJeremy Hylton2001-04-111-11/+1
| | | | | | consts, even if it is None. Simplify _lookupName() by removing lots of redundant tests.
* Add globals to list of names returned by get_names().Jeremy Hylton2001-04-091-7/+13
| | | | | Fix func arg processing to handle args in tuples. In test code, skip names beginning with '.'.
* Add two arguments to Scope constructor, module scope and class nameJeremy Hylton2001-04-091-24/+92
| | | | | | | Add mangling support Add get_children() and add_child() methods to Scope Skip nodes when If test is a false constant Add test code that checks results against symtable module
* Add preliminary module symbol table constructorJeremy Hylton2001-04-091-0/+193
|
* Add support for future statementsJeremy Hylton2001-04-092-6/+98
|
* Fix "import as" (has always skipping the as name)Jeremy Hylton2001-04-091-9/+15
| | | | | | Fix com_NEWLINE() so that is accepts arguments, which occurs for lines like: stmt; # note trailing semicolon Add XXX about checking for assignment to list comps
* typoJeremy Hylton2001-04-091-1/+1
|
* a few small optimizations that seem to give a 5-10% speedup; theJeremy Hylton2000-11-061-76/+80
| | | | further optimization of com_node makes the most difference.
* move pruneNext method to correct object (doh!)Jeremy Hylton2000-11-061-24/+24
|
* Change the graph structure to contain the code generator object forJeremy Hylton2000-11-063-21/+133
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | embedded code objects (e.g. functions) rather than the generated code object. This change means that the compiler generates code for everything at the end, rather then generating code for each function as it finds it. Implementation note: _convert_LOAD_CONST in pyassem.py must be change to call getCode(). Other changes follow. Several changes creates extra edges between basic blocks to reflect control flow for loops and exceptions. These missing edges had gone unnoticed because they do not affect the current compilation process. pyassem.py: Add _enable_debug() and _disable_debug() methods that print instructions and blocks to stdout as they are generated. Add edges between blocks for instructions like SETUP_LOOP, FOR_LOOP, etc. Add pruneNext to get rid of bogus edges remaining after unconditional transfer ops (e.g. JUMP_FORWARD) Change repr of Block to omit block length. pycodegen.py: Make sure a new block is started after FOR_LOOP, etc. Change assert implementation to use RAISE_VARARGS 1 when there is no user-specified failure output. misc.py: Implement __contains__ and copy for Set.
* If a function contains a doc string, remove the doc string node fromJeremy Hylton2000-11-061-1/+5
| | | | | | | the function's body. If assert is used without an error message, make the AST node None rather than Name('None').
* Many changes.Jeremy Hylton2000-10-251-220/+145
| | | | | | | | | | | | | | | | | | | | | Reformatting -- long lines, "[ ]" -> "[]", a few indentation nits. Replace calls to Node function (which constructed ast nodes) with calls to actual constructors imported from ast module. Optimize com_node (most frequently used method) for the common case -- the appropriate method is found in _dispatch. Fix com_augassign to use class object's rather than node names (rendered invalid by recent changes to ast) Remove expensive tests for sequence-ness in com_stmt and com_append_stmt. These tests should never fail; if they do, something is really broken and exception will be raised elsewhere. Fix com_stmt and com_append_stmt to use isinstance rather than testing's type slot of ast node (this slot disappeared with recent changes to ast).
* Generated from rev 1.1 of ast.txtJeremy Hylton2000-10-251-677/+606
|
* Small optimizations in dispatch method: 1) lookup node's __class__ onceJeremy Hylton2000-10-251-12/+14
| | | | | and store in local; 2) define _preorder to be dispatch (rather than method that called dispatch).
* Now supports entire Python 2.0 language and still supports PythonJeremy Hylton2000-10-134-93/+463
| | | | | | | | | | | | | | | | | | | | | | | | | | | | 1.5.2. The compiler generates code for the version of the interpreter it is run under. ast.py: Print and Printnl add dest attr for extended print new node AugAssign for augmented assignments new nodes ListComp, ListCompFor, and ListCompIf for list comprehensions pyassem.py: add work around for string-Unicode comparison raising UnicodeError on comparison of two objects in code object's const table pycodegen.py: define VERSION, the Python major version number get magic number using imp.get_magic() instead of hard coding implement list comprehensions, extended print, and augmented assignment; augmented assignment uses Delegator classes (see doc string) fix import and tuple unpacking for 1.5.2 transformer.py: various changes to support new 2.0 grammar and old 1.5 grammar add debug_tree helper than converts and symbol and token numbers to their names
* Fix SF bug #116263: support for from .. import *Jeremy Hylton2000-10-123-4/+13
| | | | | | transformer.py: return '*', None from com_import_as_name pycodegen.py: special case for name == '*' pyassem.py: fix stack counting for IMPORT_ opcodes
* change 2-space indent to 4-space indentJeremy Hylton2000-09-201-1081/+1079
|
* patch by Neil Schemenauer to improve (fix?) line number generationJeremy Hylton2000-09-012-17/+32
|
* Update magic number.Jeremy Hylton2000-09-012-15/+47
| | | | | | Fix import support to work with import as variant of Python 2.0. The grammar for import changed, requiring changes in transformer and code generator, even to handle compilation of imports with as.
* Bring Tools/compiler almost up to date. Specifically:Thomas Wouters2000-08-123-348/+349
| | | | | | | | | | - fix tab space issues (SF patch #101167 by Neil Schemenauer) - fix co_flags for classes to include CO_NEWLOCALS (SF patch #101145 by Neil) - fix for merger of UNPACK_LIST and UNPACK_TUPLE into UNPACK_SEQUENCE, (SF patch #101168 by, well, Neil :) - Adjust bytecode MAGIC to current bytecode. TODO: teach compile.py about list comprehensions.
* replace most calls to emit 'SET_LINENO' will call to method set_linenoJeremy Hylton2000-08-041-31/+42
| | | | based on bug report by Neil Schemenauer
* update my email addressJeremy Hylton2000-08-041-1/+4
| | | | fix com_call_function to cope with trailing comma in "f(a, b,)"
* add a bit more legal junkGreg Stein2000-08-031-8/+16
| | | | (too lazy to paste in the whole BSD license tho; included by ref)
* patches from Mark HammondJeremy Hylton2000-05-024-14/+58
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Attached is a set of diffs for the .py compiler that adds support for the new extended call syntax. compiler/ast.py: CallFunc node gets 2 new children to support extended call syntax - "star_args" (for "*args") and "dstar_args" (for "**args") compiler/pyassem.py It appear that self.lnotab is supposed to be responsible for tracking line numbers, but self.firstlineno was still hanging around. Removed self.firstlineno completely. NOTE - I didnt actually test that the generated code has the correct line numbers!! Stack depth tracking appeared a little broken - the checks never made it beyond the "self.patterns" check - thus, the custom methods were never called! Fixed this. (XXX Jeremy notes: I think this code is still broken because it doesn't track stack effects across block bounaries.) Added support for the new extended call syntax opcodes for depth calculations. compiler/pycodegen.py Added support for the new extended call syntax opcodes. compiler/transformer.py Added support for the new extended call syntax.
* complete rewriteJeremy Hylton2000-03-162-800/+831
| | | | | | | | | code generator uses flowgraph as intermediate representation. the old rep uses a list with explicit "StackRefs" to indicate the target of jumps. pyassem converts flowgraph to bytecode, breaks up individual steps of generating bytecode
* simplify visitor walker classJeremy Hylton2000-03-161-32/+22
| | | | | | - remove postorder - remove protocol for automatically walking children based on visitor method return value; now only walks if there is no method
* fix list.append problemsJeremy Hylton2000-03-161-3/+3
|
* change name of Set method: items -> elements (avoids confusion withJeremy Hylton2000-03-161-1/+1
| | | | dict)
* import compile function form pycodegenJeremy Hylton2000-03-061-0/+4
|
* rename compile.py to pycodegen.pyJeremy Hylton2000-03-061-176/+25
| | | | | | | | | | fix imports remove parse functions and visitor code track name change: Classdef to Class add some comments and tweak order of visitXXX methods get rid of if __name__ == "__main__ section
* add a doc stringJeremy Hylton2000-03-061-0/+20
| | | | import some useful functions from contained modules
* fix import to refer to compiler packageJeremy Hylton2000-03-061-1/+1
|
* revise arguments for addCode method on lnotab. take several numbersJeremy Hylton2000-03-061-10/+13
| | | | that are internally converted to chars, rather than taking a string.
* change node Classdef to ClassJeremy Hylton2000-03-062-24/+25
| | | | | | | add doc string to transformer module add two helper functions: parse(buf) -> AST parseFile(path) -> AST