]> granicus.if.org Git - python/commitdiff
* Remove PRINT_ITEM(_TO), PRINT_NEWLINE(_TO) opcodes.
authorGeorg Brandl <georg@python.org>
Fri, 9 Feb 2007 21:28:07 +0000 (21:28 +0000)
committerGeorg Brandl <georg@python.org>
Fri, 9 Feb 2007 21:28:07 +0000 (21:28 +0000)
* Fix some docstrings and one Print -> print.
* Fix test_{class,code,descrtut,dis,extcall,parser,popen,pkg,subprocess,syntax,traceback}.
  These were the ones that generated code with a print statement.
  In most remaining failing tests there's an issue with the soft space.

31 files changed:
Doc/lib/libdis.tex
Doc/ref/ref6.tex
Include/Python-ast.h
Include/opcode.h
Lib/compiler/ast.py
Lib/compiler/pyassem.py
Lib/compiler/pycodegen.py
Lib/compiler/transformer.py
Lib/opcode.py
Lib/symbol.py
Lib/test/test_ast.py
Lib/test/test_class.py
Lib/test/test_code.py
Lib/test/test_descrtut.py
Lib/test/test_dis.py
Lib/test/test_extcall.py
Lib/test/test_parser.py
Lib/test/test_pkg.py
Lib/test/test_popen.py
Lib/test/test_subprocess.py
Lib/test/test_syntax.py
Lib/test/test_tokenize.py
Lib/test/test_traceback.py
Parser/Python.asdl
Python/Python-ast.c
Python/bltinmodule.c
Python/ceval.c
Python/compile.c
Python/symtable.c
Python/sysmodule.c
Tools/compiler/ast.txt

index e61ca36548e9af3960eaddb2078239d8933f53c9..3f00fa82ce0c9b9604612f1253e590fbff3642eb 100644 (file)
@@ -353,27 +353,6 @@ removed from the stack and printed.  In non-interactive mode, an
 expression statement is terminated with \code{POP_STACK}.
 \end{opcodedesc}
 
-\begin{opcodedesc}{PRINT_ITEM}{}
-Prints TOS to the file-like object bound to \code{sys.stdout}.  There
-is one such instruction for each item in the \keyword{print} statement.
-\end{opcodedesc}
-
-\begin{opcodedesc}{PRINT_ITEM_TO}{}
-Like \code{PRINT_ITEM}, but prints the item second from TOS to the
-file-like object at TOS.  This is used by the extended print statement.
-\end{opcodedesc}
-
-\begin{opcodedesc}{PRINT_NEWLINE}{}
-Prints a new line on \code{sys.stdout}.  This is generated as the
-last operation of a \keyword{print} statement, unless the statement
-ends with a comma.
-\end{opcodedesc}
-
-\begin{opcodedesc}{PRINT_NEWLINE_TO}{}
-Like \code{PRINT_NEWLINE}, but prints the new line on the file-like
-object on the TOS.  This is used by the extended print statement.
-\end{opcodedesc}
-
 \begin{opcodedesc}{BREAK_LOOP}{}
 Terminates a loop due to a \keyword{break} statement.
 \end{opcodedesc}
index c1bbd9b4389db439cf1b64b1d78ede07b3a700c5..4c7487b6dfa0d9d95c9f21db67b0614d074870b1 100644 (file)
@@ -12,7 +12,6 @@ by semicolons.  The syntax for simple statements is:
   \productioncont{| \token{augmented_assignment_stmt}}
   \productioncont{| \token{pass_stmt}}
   \productioncont{| \token{del_stmt}}
-  \productioncont{| \token{print_stmt}}
   \productioncont{| \token{return_stmt}}
   \productioncont{| \token{yield_stmt}}
   \productioncont{| \token{raise_stmt}}
@@ -370,60 +369,6 @@ right type (but even this is determined by the sliced object).
 \indexii{attribute}{deletion}
 
 
-\section{The \keyword{print} statement \label{print}}
-\stindex{print}
-
-\begin{productionlist}
-  \production{print_stmt}
-             {"print" ( \optional{\token{expression} ("," \token{expression})* \optional{","}}}
-  \productioncont{| ">>" \token{expression}
-                  \optional{("," \token{expression})+ \optional{","}} )}
-\end{productionlist}
-
-\keyword{print} evaluates each expression in turn and writes the
-resulting object to standard output (see below).  If an object is not
-a string, it is first converted to a string using the rules for string
-conversions.  The (resulting or original) string is then written.  A
-space is written before each object is (converted and) written, unless
-the output system believes it is positioned at the beginning of a
-line.  This is the case (1) when no characters have yet been written
-to standard output, (2) when the last character written to standard
-output is \character{\e n}, or (3) when the last write operation on
-standard output was not a \keyword{print} statement.  (In some cases
-it may be functional to write an empty string to standard output for
-this reason.)  \note{Objects which act like file objects but which are
-not the built-in file objects often do not properly emulate this
-aspect of the file object's behavior, so it is best not to rely on
-this.}
-\index{output}
-\indexii{writing}{values}
-
-A \character{\e n} character is written at the end, unless the
-\keyword{print} statement ends with a comma.  This is the only action
-if the statement contains just the keyword \keyword{print}.
-\indexii{trailing}{comma}
-\indexii{newline}{suppression}
-
-Standard output is defined as the file object named \code{stdout}
-in the built-in module \module{sys}.  If no such object exists, or if
-it does not have a \method{write()} method, a \exception{RuntimeError}
-exception is raised.
-\indexii{standard}{output}
-\refbimodindex{sys}
-\withsubitem{(in module sys)}{\ttindex{stdout}}
-\exindex{RuntimeError}
-
-\keyword{print} also has an extended\index{extended print statement}
-form, defined by the second portion of the syntax described above.
-This form is sometimes referred to as ``\keyword{print} chevron.''
-In this form, the first expression after the \code{>>} must
-evaluate to a ``file-like'' object, specifically an object that has a
-\method{write()} method as described above.  With this extended form,
-the subsequent expressions are printed to this file object.  If the
-first expression evaluates to \code{None}, then \code{sys.stdout} is
-used as the file for output.
-
-
 \section{The \keyword{return} statement \label{return}}
 \stindex{return}
 
index 5e8f81fc091ca92c2d0c3dafe86d655ea1600d09..c9fbc0742910959e7c762961d06547888bdc515f 100644 (file)
@@ -62,12 +62,11 @@ struct _mod {
 };
 
 enum _stmt_kind {FunctionDef_kind=1, ClassDef_kind=2, Return_kind=3,
-                  Delete_kind=4, Assign_kind=5, AugAssign_kind=6, Print_kind=7,
-                  For_kind=8, While_kind=9, If_kind=10, With_kind=11,
-                  Raise_kind=12, TryExcept_kind=13, TryFinally_kind=14,
-                  Assert_kind=15, Import_kind=16, ImportFrom_kind=17,
-                  Global_kind=18, Expr_kind=19, Pass_kind=20, Break_kind=21,
-                  Continue_kind=22};
+                  Delete_kind=4, Assign_kind=5, AugAssign_kind=6, For_kind=7,
+                  While_kind=8, If_kind=9, With_kind=10, Raise_kind=11,
+                  TryExcept_kind=12, TryFinally_kind=13, Assert_kind=14,
+                  Import_kind=15, ImportFrom_kind=16, Global_kind=17,
+                  Expr_kind=18, Pass_kind=19, Break_kind=20, Continue_kind=21};
 struct _stmt {
         enum _stmt_kind kind;
         union {
@@ -104,12 +103,6 @@ struct _stmt {
                         expr_ty value;
                 } AugAssign;
                 
-                struct {
-                        expr_ty dest;
-                        asdl_seq *values;
-                        bool nl;
-                } Print;
-                
                 struct {
                         expr_ty target;
                         expr_ty iter;
@@ -392,9 +385,6 @@ stmt_ty _Py_Assign(asdl_seq * targets, expr_ty value, int lineno, int
 #define AugAssign(a0, a1, a2, a3, a4, a5) _Py_AugAssign(a0, a1, a2, a3, a4, a5)
 stmt_ty _Py_AugAssign(expr_ty target, operator_ty op, expr_ty value, int
                       lineno, int col_offset, PyArena *arena);
-#define Print(a0, a1, a2, a3, a4, a5) _Py_Print(a0, a1, a2, a3, a4, a5)
-stmt_ty _Py_Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, int
-                  col_offset, PyArena *arena);
 #define For(a0, a1, a2, a3, a4, a5, a6) _Py_For(a0, a1, a2, a3, a4, a5, a6)
 stmt_ty _Py_For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq *
                 orelse, int lineno, int col_offset, PyArena *arena);
index 04675ddbc85e80304f3a9d284935a77f8158adff..007816d8b318fda4ac56904f198a55f304043900 100644 (file)
@@ -61,10 +61,7 @@ extern "C" {
 #define GET_ITER       68
 
 #define PRINT_EXPR     70
-#define PRINT_ITEM     71
-#define PRINT_NEWLINE  72
-#define PRINT_ITEM_TO   73
-#define PRINT_NEWLINE_TO 74
+
 #define INPLACE_LSHIFT 75
 #define INPLACE_RSHIFT 76
 #define INPLACE_AND    77
index ac48710c33216f383078a60580a1bbe2002b300a..259e1c45dd58d16dc801c8991f12d2bf8f5fc3c2 100644 (file)
@@ -998,50 +998,6 @@ class Power(Node):
     def __repr__(self):
         return "Power((%s, %s))" % (repr(self.left), repr(self.right))
 
-class Print(Node):
-    def __init__(self, nodes, dest, lineno=None):
-        self.nodes = nodes
-        self.dest = dest
-        self.lineno = lineno
-
-    def getChildren(self):
-        children = []
-        children.extend(flatten(self.nodes))
-        children.append(self.dest)
-        return tuple(children)
-
-    def getChildNodes(self):
-        nodelist = []
-        nodelist.extend(flatten_nodes(self.nodes))
-        if self.dest is not None:
-            nodelist.append(self.dest)
-        return tuple(nodelist)
-
-    def __repr__(self):
-        return "Print(%s, %s)" % (repr(self.nodes), repr(self.dest))
-
-class Printnl(Node):
-    def __init__(self, nodes, dest, lineno=None):
-        self.nodes = nodes
-        self.dest = dest
-        self.lineno = lineno
-
-    def getChildren(self):
-        children = []
-        children.extend(flatten(self.nodes))
-        children.append(self.dest)
-        return tuple(children)
-
-    def getChildNodes(self):
-        nodelist = []
-        nodelist.extend(flatten_nodes(self.nodes))
-        if self.dest is not None:
-            nodelist.append(self.dest)
-        return tuple(nodelist)
-
-    def __repr__(self):
-        return "Printnl(%s, %s)" % (repr(self.nodes), repr(self.dest))
-
 class Raise(Node):
     def __init__(self, expr1, expr2, expr3, lineno=None):
         self.expr1 = expr1
index 9f45d61d992585e1c39f35f32a38892acd8c21e3..551791ed586b5e467e8b2c91115dd945ad6c79ba 100644 (file)
@@ -783,8 +783,7 @@ class StackDepthTracker:
         'DELETE_SLICE+3': -3,
         'STORE_SUBSCR': -3,
         'DELETE_SUBSCR': -2,
-        # PRINT_EXPR?
-        'PRINT_ITEM': -1,
+        'PRINT_EXPR': -1,
         'RETURN_VALUE': -1,
         'YIELD_VALUE': -1,
         'BUILD_CLASS': -2,
index 0e497817a3137ac88f75651d8119197172ca6ae9..8db4e0de725c33f49db23584f6acedc6f18f2b76 100644 (file)
@@ -1130,29 +1130,6 @@ class CodeGenerator:
         opcode = callfunc_opcode_info[have_star, have_dstar]
         self.emit(opcode, kw << 8 | pos)
 
-    def visitPrint(self, node, newline=0):
-        self.set_lineno(node)
-        if node.dest:
-            self.visit(node.dest)
-        for child in node.nodes:
-            if node.dest:
-                self.emit('DUP_TOP')
-            self.visit(child)
-            if node.dest:
-                self.emit('ROT_TWO')
-                self.emit('PRINT_ITEM_TO')
-            else:
-                self.emit('PRINT_ITEM')
-        if node.dest and not newline:
-            self.emit('POP_TOP')
-
-    def visitPrintnl(self, node):
-        self.visitPrint(node, newline=1)
-        if node.dest:
-            self.emit('PRINT_NEWLINE_TO')
-        else:
-            self.emit('PRINT_NEWLINE')
-
     def visitReturn(self, node):
         self.set_lineno(node)
         self.visit(node.value)
index 3a2be135e4d66ba752d34e3e9d8f7ac13eb51093..5f2face4abd432ee2822bc46d651c375231a5d5a 100644 (file)
@@ -387,26 +387,6 @@ class Transformer:
             return AugAssign(lval, op[1], exprNode, lineno=op[2])
         raise WalkerError, "can't get here"
 
-    def print_stmt(self, nodelist):
-        # print ([ test (',' test)* [','] ] | '>>' test [ (',' test)+ [','] ])
-        items = []
-        if len(nodelist) == 1:
-            start = 1
-            dest = None
-        elif nodelist[1][0] == token.RIGHTSHIFT:
-            assert len(nodelist) == 3 \
-                   or nodelist[3][0] == token.COMMA
-            dest = self.com_node(nodelist[2])
-            start = 4
-        else:
-            dest = None
-            start = 1
-        for i in range(start, len(nodelist), 2):
-            items.append(self.com_node(nodelist[i]))
-        if nodelist[-1][0] == token.COMMA:
-            return Print(items, dest, lineno=nodelist[0][2])
-        return Printnl(items, dest, lineno=nodelist[0][2])
-
     def del_stmt(self, nodelist):
         return self.com_assign(nodelist[1], OP_DELETE)
 
@@ -1480,7 +1460,6 @@ _legal_node_types = [
     symbol.simple_stmt,
     symbol.compound_stmt,
     symbol.expr_stmt,
-    symbol.print_stmt,
     symbol.del_stmt,
     symbol.pass_stmt,
     symbol.break_stmt,
index 908dba4450b34ec1ecaf8d13613e04964fa7b870..1e15582bfd6caf12ef6a46807cf480d87effd52a 100644 (file)
@@ -100,10 +100,7 @@ def_op('INPLACE_POWER', 67)
 def_op('GET_ITER', 68)
 
 def_op('PRINT_EXPR', 70)
-def_op('PRINT_ITEM', 71)
-def_op('PRINT_NEWLINE', 72)
-def_op('PRINT_ITEM_TO', 73)
-def_op('PRINT_NEWLINE_TO', 74)
+
 def_op('INPLACE_LSHIFT', 75)
 def_op('INPLACE_RSHIFT', 76)
 def_op('INPLACE_AND', 77)
index 658974cbad3b593e94e5f00c48aad344a92bf2a3..d2cee12473f11440a643ec55296606757b0202ae 100755 (executable)
@@ -30,74 +30,73 @@ simple_stmt = 272
 small_stmt = 273
 expr_stmt = 274
 augassign = 275
-print_stmt = 276
-del_stmt = 277
-pass_stmt = 278
-flow_stmt = 279
-break_stmt = 280
-continue_stmt = 281
-return_stmt = 282
-yield_stmt = 283
-raise_stmt = 284
-import_stmt = 285
-import_name = 286
-import_from = 287
-import_as_name = 288
-dotted_as_name = 289
-import_as_names = 290
-dotted_as_names = 291
-dotted_name = 292
-global_stmt = 293
-assert_stmt = 294
-compound_stmt = 295
-if_stmt = 296
-while_stmt = 297
-for_stmt = 298
-try_stmt = 299
-with_stmt = 300
-with_var = 301
-except_clause = 302
-suite = 303
-testlist_safe = 304
-old_test = 305
-old_lambdef = 306
-test = 307
-or_test = 308
-and_test = 309
-not_test = 310
-comparison = 311
-comp_op = 312
-expr = 313
-xor_expr = 314
-and_expr = 315
-shift_expr = 316
-arith_expr = 317
-term = 318
-factor = 319
-power = 320
-atom = 321
-listmaker = 322
-testlist_gexp = 323
-lambdef = 324
-trailer = 325
-subscriptlist = 326
-subscript = 327
-sliceop = 328
-exprlist = 329
-testlist = 330
-dictsetmaker = 331
-classdef = 332
-arglist = 333
-argument = 334
-list_iter = 335
-list_for = 336
-list_if = 337
-gen_iter = 338
-gen_for = 339
-gen_if = 340
-testlist1 = 341
-encoding_decl = 342
-yield_expr = 343
+del_stmt = 276
+pass_stmt = 277
+flow_stmt = 278
+break_stmt = 279
+continue_stmt = 280
+return_stmt = 281
+yield_stmt = 282
+raise_stmt = 283
+import_stmt = 284
+import_name = 285
+import_from = 286
+import_as_name = 287
+dotted_as_name = 288
+import_as_names = 289
+dotted_as_names = 290
+dotted_name = 291
+global_stmt = 292
+assert_stmt = 293
+compound_stmt = 294
+if_stmt = 295
+while_stmt = 296
+for_stmt = 297
+try_stmt = 298
+with_stmt = 299
+with_var = 300
+except_clause = 301
+suite = 302
+testlist_safe = 303
+old_test = 304
+old_lambdef = 305
+test = 306
+or_test = 307
+and_test = 308
+not_test = 309
+comparison = 310
+comp_op = 311
+expr = 312
+xor_expr = 313
+and_expr = 314
+shift_expr = 315
+arith_expr = 316
+term = 317
+factor = 318
+power = 319
+atom = 320
+listmaker = 321
+testlist_gexp = 322
+lambdef = 323
+trailer = 324
+subscriptlist = 325
+subscript = 326
+sliceop = 327
+exprlist = 328
+testlist = 329
+dictsetmaker = 330
+classdef = 331
+arglist = 332
+argument = 333
+list_iter = 334
+list_for = 335
+list_if = 336
+gen_iter = 337
+gen_for = 338
+gen_if = 339
+testlist1 = 340
+encoding_decl = 341
+yield_expr = 342
 #--end constants--
 
 sym_name = {}
index 24394ed925f424629cd892260a86a39d1dda83cc..5d2205353ffd3cca234dab939092c5d479cbf5e4 100644 (file)
@@ -30,8 +30,6 @@ exec_tests = [
     "v = 1",
     # AugAssign
     "v += 1",
-    # Print
-    "print >>f, 1, ",
     # For
     "for v in v:pass",
     # While
@@ -157,7 +155,6 @@ exec_results = [
 ('Module', [('Delete', (1, 0), [('Name', (1, 4), 'v', ('Del',))])]),
 ('Module', [('Assign', (1, 0), [('Name', (1, 0), 'v', ('Store',))], ('Num', (1, 4), 1))]),
 ('Module', [('AugAssign', (1, 0), ('Name', (1, 0), 'v', ('Store',)), ('Add',), ('Num', (1, 5), 1))]),
-('Module', [('Print', (1, 0), ('Name', (1, 8), 'f', ('Load',)), [('Num', (1, 11), 1)], False)]),
 ('Module', [('For', (1, 0), ('Name', (1, 4), 'v', ('Store',)), ('Name', (1, 9), 'v', ('Load',)), [('Pass', (1, 11))], [])]),
 ('Module', [('While', (1, 0), ('Name', (1, 6), 'v', ('Load',)), [('Pass', (1, 8))], [])]),
 ('Module', [('If', (1, 0), ('Name', (1, 3), 'v', ('Load',)), [('Pass', (1, 5))], [])]),
index 221fd48dcfb63b5c6d3827b25a19e3ed600ea658..ded3f1a8994b44aa7caa94bb4c1ccb7c996aa122 100644 (file)
@@ -127,7 +127,7 @@ class AllTests:
 
 method_template = """\
 def __%(method)s__(self, *args):
-    print "__%(method)s__:", args
+    print("__%(method)s__:", args)
 """
 
 d = {}
index f7014a6a5df133a7e67d6d248e72535c350fe950..4f43f5d3226a50706a1d554f9804a207d49118f3 100644 (file)
@@ -58,7 +58,7 @@ consts: ('None',)
 name: attrs
 argcount: 1
 kwonlyargcount: 0
-names: ('attr1', 'attr2', 'attr3')
+names: ('print', 'attr1', 'attr2', 'attr3')
 varnames: ('obj',)
 cellvars: ()
 freevars: ()
index 3351b67ecb7f6895881604b9466a95cb341e4818..001aa4949aea06765f82bd9e9a5d885491d2a9cd 100644 (file)
@@ -36,28 +36,28 @@ test_1 = """
 
 Here's the new type at work:
 
-    >>> print(defaultdict)               # show our type
+    >>> print(defaultdict)              # show our type
     <class 'test.test_descrtut.defaultdict'>
-    >>> print(type(defaultdict))         # its metatype
+    >>> print(type(defaultdict))        # its metatype
     <type 'type'>
     >>> a = defaultdict(default=0.0)    # create an instance
-    >>> print(a)                         # show the instance
+    >>> print(a)                        # show the instance
     {}
-    >>> print(type(a))                   # show its type
+    >>> print(type(a))                  # show its type
     <class 'test.test_descrtut.defaultdict'>
-    >>> print(a.__class__)               # show its class
+    >>> print(a.__class__)              # show its class
     <class 'test.test_descrtut.defaultdict'>
-    >>> print(type(a) is a.__class__)    # its type is its class
+    >>> print(type(a) is a.__class__)   # its type is its class
     True
     >>> a[1] = 3.25                     # modify the instance
-    >>> print(a)                         # show the new value
+    >>> print(a)                        # show the new value
     {1: 3.25}
-    >>> print(a[1])                      # show the new item
+    >>> print(a[1])                     # show the new item
     3.25
-    >>> print(a[0])                      # a non-existant item
+    >>> print(a[0])                     # a non-existant item
     0.0
     >>> a.merge({1:100, 2:200})         # use a dict method
-    >>> print(sortdict(a))               # show the result
+    >>> print(sortdict(a))              # show the result
     {1: 3.25, 2: 200}
     >>>
 
@@ -67,10 +67,11 @@ statement or the built-in function eval():
 
     >>> print(sorted(a.keys()))
     [1, 2]
-    >>> exec("x = 3; print x", a)
+    >>> a['print'] = print              # need the print function here
+    >>> exec("x = 3; print(x)", a)
     3
     >>> print(sorted(a.keys(), key=lambda x: (str(type(x)), x)))
-    [1, 2, '__builtins__', 'x']
+    [1, 2, '__builtins__', 'print', 'x']
     >>> print(a['x'])
     3
     >>>
index 3916c32f9d91287947fd7a7dc585c11fa2f5e949..ab70778b321d95de2a5aa926981b1f93353da81e 100644 (file)
@@ -12,12 +12,13 @@ def _f(a):
     return 1
 
 dis_f = """\
- %-4d         0 LOAD_FAST                0 (a)
-              3 PRINT_ITEM
-              4 PRINT_NEWLINE
+ %-4d         0 LOAD_GLOBAL              0 (print)
+              3 LOAD_FAST                0 (a)
+              6 CALL_FUNCTION            1
+              9 POP_TOP
 
- %-4d         5 LOAD_CONST               1 (1)
-              8 RETURN_VALUE
+ %-4d        10 LOAD_CONST               1 (1)
+             13 RETURN_VALUE
 """%(_f.func_code.co_firstlineno + 1,
      _f.func_code.co_firstlineno + 2)
 
index e67b3f8f41b456d355e445e773e11b61dc59405d..3e0426f286658eeeee255255b8779e6054d98b20 100644 (file)
@@ -260,8 +260,8 @@ for args in ['', 'a', 'ab']:
                     lambda x: '%s="%s"' % (x, x), defargs)
                 if vararg: arglist.append('*' + vararg)
                 if kwarg: arglist.append('**' + kwarg)
-                decl = (('def %s(%s): print "ok %s", a, b, d, e, v, ' +
-                         'type(k) is type ("") and k or sortdict(k)')
+                decl = (('def %s(%s): print("ok %s", a, b, d, e, v, ' +
+                         'type(k) is type ("") and k or sortdict(k))')
                          % (name, ', '.join(arglist), name))
                 exec(decl)
                 func = eval(name)
index 36bc4e3be940f4e663711f3b14ae401f1495e557..ddb58b5e8d2e68ff5dcadae217701670ff72ef5b 100644 (file)
@@ -85,14 +85,6 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
         self.check_expr("(x for x in range(10))")
         self.check_expr("foo(x for x in range(10))")
 
-    def test_print(self):
-        self.check_suite("print")
-        self.check_suite("print 1")
-        self.check_suite("print 1,")
-        self.check_suite("print >>fp")
-        self.check_suite("print >>fp, 1")
-        self.check_suite("print >>fp, 1,")
-
     def test_simple_expression(self):
         # expr_stmt
         self.check_suite("a")
@@ -359,29 +351,6 @@ class IllegalSyntaxTestCase(unittest.TestCase):
            (0, ''))))
         self.check_bad_tree(tree, "def f():\n  return 1\n  yield 1")
 
-    def test_print_chevron_comma(self):
-        # Illegal input: print >>fp,
-        tree = \
-        (257,
-         (264,
-          (265,
-           (266,
-            (268,
-             (1, 'print'),
-             (35, '>>'),
-             (290,
-              (291,
-               (292,
-                (293,
-                 (295,
-                  (296,
-                   (297,
-                    (298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))),
-             (12, ','))),
-           (4, ''))),
-         (0, ''))
-        self.check_bad_tree(tree, "print >>fp,")
-
     def test_a_comma_comma_c(self):
         # Illegal input: a,,c
         tree = \
index 79c909882af3f4b2b3eb658b0b88d7a599338f74..ad9cc1a4383f73efa6596f986c4d79468ed9e1fc 100644 (file)
@@ -81,122 +81,122 @@ tests = [
 
     ("t2", [
     ("t2", None),
-    ("t2 __init__"+os.extsep+"py", "'doc for t2'; print __name__, 'loading'"),
+    ("t2 __init__"+os.extsep+"py", "'doc for t2'; print(__name__, 'loading')"),
     ("t2 sub", None),
     ("t2 sub __init__"+os.extsep+"py", ""),
     ("t2 sub subsub", None),
-    ("t2 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
+    ("t2 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
     ],
 """
 import t2
-print t2.__doc__
+print(t2.__doc__)
 import t2.sub
 import t2.sub.subsub
-print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
+print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
 import t2
 from t2 import *
-print dir()
+print(dir())
 from t2 import sub
 from t2.sub import subsub
 from t2.sub.subsub import spam
-print sub.__name__, subsub.__name__
-print sub.subsub.__name__
-print dir()
+print(sub.__name__, subsub.__name__)
+print(sub.subsub.__name__)
+print(dir())
 import t2.sub
 import t2.sub.subsub
-print t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__
+print(t2.__name__, t2.sub.__name__, t2.sub.subsub.__name__)
 from t2 import *
-print dir()
+print(dir())
 """),
 
     ("t3", [
     ("t3", None),
-    ("t3 __init__"+os.extsep+"py", "print __name__, 'loading'"),
+    ("t3 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
     ("t3 sub", None),
     ("t3 sub __init__"+os.extsep+"py", ""),
     ("t3 sub subsub", None),
-    ("t3 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
+    ("t3 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
     ],
 """
 import t3.sub.subsub
-print t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__
+print(t3.__name__, t3.sub.__name__, t3.sub.subsub.__name__)
 reload(t3)
 reload(t3.sub)
 reload(t3.sub.subsub)
 """),
 
     ("t4", [
-    ("t4"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)'"),
+    ("t4"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (t4"+os.extsep+"py)')"),
     ("t4", None),
-    ("t4 __init__"+os.extsep+"py", "print __name__, 'loading'"),
-    ("t4 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
+    ("t4 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
+    ("t4 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
     ("t4 sub", None),
     ("t4 sub __init__"+os.extsep+"py", ""),
-    ("t4 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
+    ("t4 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
     ("t4 sub subsub", None),
-    ("t4 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
+    ("t4 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
     ],
 """
 from t4.sub.subsub import *
-print "t4.sub.subsub.spam =", spam
+print("t4.sub.subsub.spam =", spam)
 """),
 
     ("t5", [
     ("t5", None),
     ("t5 __init__"+os.extsep+"py", "import t5.foo"),
-    ("t5 string"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
+    ("t5 string"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
     ("t5 foo"+os.extsep+"py",
-     "print __name__, 'loading'; from . import string; print string.spam"),
+     "print(__name__, 'loading'); from . import string; print(string.spam)"),
      ],
 """
 import t5
 from t5 import *
-print dir()
+print(dir())
 import t5
-print fixdir(dir(t5))
-print fixdir(dir(t5.foo))
-print fixdir(dir(t5.string))
+print(fixdir(dir(t5)))
+print(fixdir(dir(t5.foo)))
+print(fixdir(dir(t5.string)))
 """),
 
     ("t6", [
     ("t6", None),
     ("t6 __init__"+os.extsep+"py", "__all__ = ['spam', 'ham', 'eggs']"),
-    ("t6 spam"+os.extsep+"py", "print __name__, 'loading'"),
-    ("t6 ham"+os.extsep+"py", "print __name__, 'loading'"),
-    ("t6 eggs"+os.extsep+"py", "print __name__, 'loading'"),
+    ("t6 spam"+os.extsep+"py", "print(__name__, 'loading')"),
+    ("t6 ham"+os.extsep+"py", "print(__name__, 'loading')"),
+    ("t6 eggs"+os.extsep+"py", "print(__name__, 'loading')"),
     ],
 """
 import t6
-print fixdir(dir(t6))
+print(fixdir(dir(t6)))
 from t6 import *
-print fixdir(dir(t6))
-print dir()
+print(fixdir(dir(t6)))
+print(dir())
 """),
 
     ("t7", [
-    ("t7"+os.extsep+"py", "print 'Importing t7"+os.extsep+"py'"),
+    ("t7"+os.extsep+"py", "print('Importing t7"+os.extsep+"py')"),
     ("t7", None),
-    ("t7 __init__"+os.extsep+"py", "print __name__, 'loading'"),
-    ("t7 sub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)'"),
+    ("t7 __init__"+os.extsep+"py", "print(__name__, 'loading')"),
+    ("t7 sub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (sub"+os.extsep+"py)')"),
     ("t7 sub", None),
     ("t7 sub __init__"+os.extsep+"py", ""),
-    ("t7 sub subsub"+os.extsep+"py", "print 'THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)'"),
+    ("t7 sub subsub"+os.extsep+"py", "print('THIS SHOULD NOT BE PRINTED (subsub"+os.extsep+"py)')"),
     ("t7 sub subsub", None),
-    ("t7 sub subsub __init__"+os.extsep+"py", "print __name__, 'loading'; spam = 1"),
+    ("t7 sub subsub __init__"+os.extsep+"py", "print(__name__, 'loading'); spam = 1"),
     ],
 """
 t7, sub, subsub = None, None, None
 import t7 as tas
-print fixdir(dir(tas))
+print(fixdir(dir(tas)))
 verify(not t7)
 from t7 import sub as subpar
-print fixdir(dir(subpar))
+print(fixdir(dir(subpar)))
 verify(not t7 and not sub)
 from t7.sub import subsub as subsubsub
-print fixdir(dir(subsubsub))
+print(fixdir(dir(subsubsub)))
 verify(not t7 and not sub and not subsub)
 from t7.sub.subsub import spam as ham
-print "t7.sub.subsub.spam =", ham
+print("t7.sub.subsub.spam =", ham)
 verify(not t7 and not sub and not subsub)
 """),
 
index 069f370041d3179dbb1c0c27d58c6884b6d2e111..24573968993e4cc6e7a7c0c62905032e869477ea 100644 (file)
@@ -19,7 +19,7 @@ if ' ' in python:
 
 class PopenTest(unittest.TestCase):
     def _do_test_commandline(self, cmdline, expected):
-        cmd = '%s -c "import sys;print sys.argv" %s' % (python, cmdline)
+        cmd = '%s -c "import sys; print(sys.argv)" %s' % (python, cmdline)
         data = os.popen(cmd).read()
         got = eval(data)[1:] # strip off argv[0]
         self.assertEqual(got, expected)
index 1b34d61a29d003770721da644056d8adf7ea783b..ce7b6598abdb5055e8fcfcd3e769df073c61b370 100644 (file)
@@ -84,7 +84,7 @@ class ProcessTestCase(unittest.TestCase):
 
     def test_stdin_none(self):
         # .stdin is None when not redirected
-        p = subprocess.Popen([sys.executable, "-c", 'print "banana"'],
+        p = subprocess.Popen([sys.executable, "-c", 'print("banana")'],
                          stdout=subprocess.PIPE, stderr=subprocess.PIPE)
         p.wait()
         self.assertEqual(p.stdin, None)
@@ -92,16 +92,16 @@ class ProcessTestCase(unittest.TestCase):
     def test_stdout_none(self):
         # .stdout is None when not redirected
         p = subprocess.Popen([sys.executable, "-c",
-                             'print "    this bit of output is from a '
+                             'print("    this bit of output is from a '
                              'test of stdout in a different '
-                             'process ..."'],
+                             'process ...")'],
                              stdin=subprocess.PIPE, stderr=subprocess.PIPE)
         p.wait()
         self.assertEqual(p.stdout, None)
 
     def test_stderr_none(self):
         # .stderr is None when not redirected
-        p = subprocess.Popen([sys.executable, "-c", 'print "banana"'],
+        p = subprocess.Popen([sys.executable, "-c", 'print("banana")'],
                          stdin=subprocess.PIPE, stdout=subprocess.PIPE)
         p.wait()
         self.assertEqual(p.stderr, None)
index ba33761e3002be1c0bf7b903c2ee155fc2709f15..8999e3a24b2ae18e4f5058510dad5b49eb8a0f0f 100644 (file)
@@ -423,7 +423,7 @@ class SyntaxTestCase(unittest.TestCase):
         source = re.sub('(?m)^ *:', '', """\
             :def foo(x):
             :  def bar():
-            :    print x
+            :    print(x)
             :  del x
             :""")
         self._check_error(source, "nested scope")
index 7d6a81813b5705a3443aec9ddd3cf261c8887b71..138ed740ffa47d4614d334f1c500d1400b5999c8 100644 (file)
@@ -43,9 +43,9 @@ regenerate the original program text from the tokens.
 There are some standard formatting practices that are easy to get right.
 
 >>> roundtrip("if x == 1:\\n"
-...           "    print x\\n")
+...           "    print(x)\\n")
 if x == 1:
-    print x
+    print(x)
 
 Some people use different formatting conventions, which makes
 untokenize a little trickier.  Note that this test involves trailing
@@ -53,29 +53,29 @@ whitespace after the colon.  Note that we use hex escapes to make the
 two trailing blanks apparent in the expected output.
 
 >>> roundtrip("if   x  ==  1  :  \\n"
-...           "  print x\\n")
+...           "  print(x)\\n")
 if   x  ==  1  :\x20\x20
-  print x
+  print(x)
 
 Comments need to go in the right place.
 
 >>> roundtrip("if x == 1:\\n"
 ...           "    # A comment by itself.\\n"
-...           "    print x  # Comment here, too.\\n"
+...           "    print(x)  # Comment here, too.\\n"
 ...           "    # Another comment.\\n"
 ...           "after_if = True\\n")
 if x == 1:
     # A comment by itself.
-    print x  # Comment here, too.
+    print(x)  # Comment here, too.
     # Another comment.
 after_if = True
 
 >>> roundtrip("if (x  # The comments need to go in the right place\\n"
 ...           "    == 1):\\n"
-...           "    print 'x == 1'\\n")
+...           "    print('x == 1')\\n")
 if (x  # The comments need to go in the right place
     == 1):
-    print 'x == 1'
+    print('x == 1')
 
 """
 
@@ -130,9 +130,9 @@ def decistmt(s):
     """Substitute Decimals for floats in a string of statements.
 
     >>> from decimal import Decimal
-    >>> s = 'print +21.3e-5*-.1234/81.7'
+    >>> s = 'print(+21.3e-5*-.1234/81.7)'
     >>> decistmt(s)
-    "print +Decimal ('21.3e-5')*-Decimal ('.1234')/Decimal ('81.7')"
+    "print (+Decimal ('21.3e-5')*-Decimal ('.1234')/Decimal ('81.7'))"
 
     The format of the exponent is inherited from the platform C library.
     Known cases are "e-007" (Windows) and "e-07" (not Windows).  Since
index 1ccb2b29c61033c83205ad336fca8a78e045ac24..9c7af70ed87a14b414dbbdeb6767045f3ffaead6 100644 (file)
@@ -25,7 +25,7 @@ class TracebackCases(unittest.TestCase):
         import test.badsyntax_nocaret
 
     def syntax_error_bad_indentation(self):
-        compile("def spam():\n  print 1\n print 2", "?", "exec")
+        compile("def spam():\n  print(1)\n print(2)", "?", "exec")
 
     def test_caret(self):
         err = self.get_exception_format(self.syntax_error_with_caret,
@@ -48,9 +48,9 @@ class TracebackCases(unittest.TestCase):
         err = self.get_exception_format(self.syntax_error_bad_indentation,
                                         IndentationError)
         self.assert_(len(err) == 4)
-        self.assert_(err[1].strip() == "print 2")
+        self.assert_(err[1].strip() == "print(2)")
         self.assert_("^" in err[2])
-        self.assert_(err[1].find("2") == err[2].find("^"))
+        self.assert_(err[1].find(")") == err[2].find("^"))
 
     def test_bug737473(self):
         import sys, os, tempfile, time
index eb5a14e5b04ce58afb8983389200b08b7dda2080..9e7818c4bd71355b819dfbef0889e6b1b8dad1e1 100644 (file)
@@ -18,9 +18,6 @@ module Python version "$Revision$"
              | Assign(expr* targets, expr value)
              | AugAssign(expr target, operator op, expr value)
 
-             -- not sure if bool is allowed, can always use int
-             | Print(expr? dest, expr* values, bool nl)
-
              -- use 'orelse' because else is a keyword in target languages
              | For(expr target, expr iter, stmt* body, stmt* orelse)
              | While(expr test, stmt* body, stmt* orelse)
index 9908326e8aaddde337d404749526679790ddc5ac..d0b4b29dab0a75eaba9a326c65673a460d02c1c5 100644 (file)
@@ -61,12 +61,6 @@ static char *AugAssign_fields[]={
         "op",
         "value",
 };
-static PyTypeObject *Print_type;
-static char *Print_fields[]={
-        "dest",
-        "values",
-        "nl",
-};
 static PyTypeObject *For_type;
 static char *For_fields[]={
         "target",
@@ -480,8 +474,6 @@ static int init_types(void)
         if (!Assign_type) return 0;
         AugAssign_type = make_type("AugAssign", stmt_type, AugAssign_fields, 3);
         if (!AugAssign_type) return 0;
-        Print_type = make_type("Print", stmt_type, Print_fields, 3);
-        if (!Print_type) return 0;
         For_type = make_type("For", stmt_type, For_fields, 4);
         if (!For_type) return 0;
         While_type = make_type("While", stmt_type, While_fields, 3);
@@ -948,25 +940,6 @@ AugAssign(expr_ty target, operator_ty op, expr_ty value, int lineno, int
         return p;
 }
 
-stmt_ty
-Print(expr_ty dest, asdl_seq * values, bool nl, int lineno, int col_offset,
-      PyArena *arena)
-{
-        stmt_ty p;
-        p = (stmt_ty)PyArena_Malloc(arena, sizeof(*p));
-        if (!p) {
-                PyErr_NoMemory();
-                return NULL;
-        }
-        p->kind = Print_kind;
-        p->v.Print.dest = dest;
-        p->v.Print.values = values;
-        p->v.Print.nl = nl;
-        p->lineno = lineno;
-        p->col_offset = col_offset;
-        return p;
-}
-
 stmt_ty
 For(expr_ty target, expr_ty iter, asdl_seq * body, asdl_seq * orelse, int
     lineno, int col_offset, PyArena *arena)
@@ -2118,25 +2091,6 @@ ast2obj_stmt(void* _o)
                         goto failed;
                 Py_DECREF(value);
                 break;
-        case Print_kind:
-                result = PyType_GenericNew(Print_type, NULL, NULL);
-                if (!result) goto failed;
-                value = ast2obj_expr(o->v.Print.dest);
-                if (!value) goto failed;
-                if (PyObject_SetAttrString(result, "dest", value) == -1)
-                        goto failed;
-                Py_DECREF(value);
-                value = ast2obj_list(o->v.Print.values, ast2obj_expr);
-                if (!value) goto failed;
-                if (PyObject_SetAttrString(result, "values", value) == -1)
-                        goto failed;
-                Py_DECREF(value);
-                value = ast2obj_bool(o->v.Print.nl);
-                if (!value) goto failed;
-                if (PyObject_SetAttrString(result, "nl", value) == -1)
-                        goto failed;
-                Py_DECREF(value);
-                break;
         case For_kind:
                 result = PyType_GenericNew(For_type, NULL, NULL);
                 if (!result) goto failed;
@@ -3149,7 +3103,6 @@ init_ast(void)
             return;
         if (PyDict_SetItemString(d, "AugAssign", (PyObject*)AugAssign_type) <
             0) return;
-        if (PyDict_SetItemString(d, "Print", (PyObject*)Print_type) < 0) return;
         if (PyDict_SetItemString(d, "For", (PyObject*)For_type) < 0) return;
         if (PyDict_SetItemString(d, "While", (PyObject*)While_type) < 0) return;
         if (PyDict_SetItemString(d, "If", (PyObject*)If_type) < 0) return;
index 9aa34f24ad668c868bd8319c639cb51497b25fc2..c71aed1dd7dcfdcbb2152979082b0f7204755787 100644 (file)
@@ -1398,7 +1398,7 @@ builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
 
        if (dummy_args == NULL)
                return NULL;
-       if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:Print",
+       if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOO:print",
                                         kwlist, &sep, &end, &file))
                 return NULL;
        if (file == NULL || file == Py_None)
index 059ed4a92dd258f1eb4384556f5fbea873416f96..7511bb6a5d8644dea76e7fa998ff11d6804ef6bb 100644 (file)
@@ -524,7 +524,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
        register PyObject *w;
        register PyObject *u;
        register PyObject *t;
-       register PyObject *stream = NULL;    /* for PRINT opcodes */
        register PyObject **fastlocals, **freevars;
        PyObject *retval = NULL;        /* Return value */
        PyThreadState *tstate = PyThreadState_GET();
@@ -1508,81 +1507,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
                        Py_XDECREF(x);
                        break;
 
-               case PRINT_ITEM_TO:
-                       w = stream = POP();
-                       /* fall through to PRINT_ITEM */
-
-               case PRINT_ITEM:
-                       v = POP();
-                       if (stream == NULL || stream == Py_None) {
-                               w = PySys_GetObject("stdout");
-                               if (w == NULL) {
-                                       PyErr_SetString(PyExc_RuntimeError,
-                                                       "lost sys.stdout");
-                                       err = -1;
-                               }
-                       }
-                       /* PyFile_SoftSpace() can exececute arbitrary code
-                          if sys.stdout is an instance with a __getattr__.
-                          If __getattr__ raises an exception, w will
-                          be freed, so we need to prevent that temporarily. */
-                       Py_XINCREF(w);
-                       if (w != NULL && PyFile_SoftSpace(w, 0))
-                               err = PyFile_WriteString(" ", w);
-                       if (err == 0)
-                               err = PyFile_WriteObject(v, w, Py_PRINT_RAW);
-                       if (err == 0) {
-                           /* XXX move into writeobject() ? */
-                           if (PyString_Check(v)) {
-                               char *s = PyString_AS_STRING(v);
-                               Py_ssize_t len = PyString_GET_SIZE(v);
-                               if (len == 0 ||
-                                   !isspace(Py_CHARMASK(s[len-1])) ||
-                                   s[len-1] == ' ')
-                                       PyFile_SoftSpace(w, 1);
-                           }
-#ifdef Py_USING_UNICODE
-                           else if (PyUnicode_Check(v)) {
-                               Py_UNICODE *s = PyUnicode_AS_UNICODE(v);
-                               Py_ssize_t len = PyUnicode_GET_SIZE(v);
-                               if (len == 0 ||
-                                   !Py_UNICODE_ISSPACE(s[len-1]) ||
-                                   s[len-1] == ' ')
-                                   PyFile_SoftSpace(w, 1);
-                           }
-#endif
-                           else
-                               PyFile_SoftSpace(w, 1);
-                       }
-                       Py_XDECREF(w);
-                       Py_DECREF(v);
-                       Py_XDECREF(stream);
-                       stream = NULL;
-                       if (err == 0)
-                               continue;
-                       break;
-
-               case PRINT_NEWLINE_TO:
-                       w = stream = POP();
-                       /* fall through to PRINT_NEWLINE */
-
-               case PRINT_NEWLINE:
-                       if (stream == NULL || stream == Py_None) {
-                               w = PySys_GetObject("stdout");
-                               if (w == NULL)
-                                       PyErr_SetString(PyExc_RuntimeError,
-                                                       "lost sys.stdout");
-                       }
-                       if (w != NULL) {
-                               err = PyFile_WriteString("\n", w);
-                               if (err == 0)
-                                       PyFile_SoftSpace(w, 0);
-                       }
-                       Py_XDECREF(stream);
-                       stream = NULL;
-                       break;
-
-
 #ifdef CASE_TOO_BIG
                default: switch (opcode) {
 #endif
index e3bdaf5a1e99231aa8193c7bd5d4b31c56dfca11..927569a9287be098a5f87de751b7e1dc2162e96a 100644 (file)
@@ -734,14 +734,6 @@ opcode_stack_effect(int opcode, int oparg)
 
                case PRINT_EXPR:
                        return -1;
-               case PRINT_ITEM:
-                       return -1;
-               case PRINT_NEWLINE:
-                       return 0;
-               case PRINT_ITEM_TO:
-                       return -2;
-               case PRINT_NEWLINE_TO:
-                       return -1;
                case INPLACE_LSHIFT:
                case INPLACE_RSHIFT:
                case INPLACE_AND:
@@ -1625,43 +1617,6 @@ compiler_lambda(struct compiler *c, expr_ty e)
        return 1;
 }
 
-static int
-compiler_print(struct compiler *c, stmt_ty s)
-{
-       int i, n;
-       bool dest;
-
-       assert(s->kind == Print_kind);
-       n = asdl_seq_LEN(s->v.Print.values);
-       dest = false;
-       if (s->v.Print.dest) {
-               VISIT(c, expr, s->v.Print.dest);
-               dest = true;
-       }
-       for (i = 0; i < n; i++) {
-               expr_ty e = (expr_ty)asdl_seq_GET(s->v.Print.values, i);
-               if (dest) {
-                       ADDOP(c, DUP_TOP);
-                       VISIT(c, expr, e);
-                       ADDOP(c, ROT_TWO);
-                       ADDOP(c, PRINT_ITEM_TO);
-               }
-               else {
-                       VISIT(c, expr, e);
-                       ADDOP(c, PRINT_ITEM);
-               }
-       }
-       if (s->v.Print.nl) {
-               if (dest)
-                       ADDOP(c, PRINT_NEWLINE_TO)
-               else
-                       ADDOP(c, PRINT_NEWLINE)
-       }
-       else if (dest)
-               ADDOP(c, POP_TOP);
-       return 1;
-}
-
 static int
 compiler_if(struct compiler *c, stmt_ty s)
 {
@@ -2236,8 +2191,6 @@ compiler_visit_stmt(struct compiler *c, stmt_ty s)
                break;
        case AugAssign_kind:
                return compiler_augassign(c, s);
-       case Print_kind:
-               return compiler_print(c, s);
        case For_kind:
                return compiler_for(c, s);
        case While_kind:
index d275cb90343bc46ad7f024d4cd6626f60037d821..5f0290afa1aab5da8df318655d3dbfa502d42856 100644 (file)
@@ -990,11 +990,6 @@ symtable_visit_stmt(struct symtable *st, stmt_ty s)
                VISIT(st, expr, s->v.AugAssign.target);
                VISIT(st, expr, s->v.AugAssign.value);
                break;
-        case Print_kind:
-               if (s->v.Print.dest)
-                       VISIT(st, expr, s->v.Print.dest);
-               VISIT_SEQ(st, expr, s->v.Print.values);
-               break;
         case For_kind:
                VISIT(st, expr, s->v.For.target);
                VISIT(st, expr, s->v.For.iter);
index f17fd05e1e2e135ac42fd8db85dbe6f790cf3495..3f2d5b7f6e6ba9905af9cf50890edf1f92467fbb 100644 (file)
@@ -904,7 +904,7 @@ exitfunc -- if sys.exitfunc exists, this routine is called when Python exits\n\
   Assigning to sys.exitfunc is deprecated; use the atexit module instead.\n\
 \n\
 stdin -- standard input file object; used by raw_input() and input()\n\
-stdout -- standard output file object; used by the print statement\n\
+stdout -- standard output file object; used by print()\n\
 stderr -- standard error object; used for error messages\n\
   By assigning other file objects (or objects that behave like files)\n\
   to these, it is possible to redirect all of the interpreter's I/O.\n\
index 2ff1223cbdd93cb45167cd2b95664e15e38e4ac8..d458b75cd588c1b44e552f23d2e5f607fa350c2c 100644 (file)
@@ -34,8 +34,6 @@ TryExcept: body, handlers!, else_&
 Return: value
 Yield: value
 Const: value*
-Print: nodes!, dest&
-Printnl: nodes!, dest&
 Discard: expr
 AugAssign: node, op*, expr
 Assign: nodes!, expr