mirror of
https://github.com/python/cpython.git
synced 2025-07-15 23:35:23 +00:00
Remove the UNARY_CONVERT opcode (was used for backticks). Also bumped up the
import MAGIC number.
This commit is contained in:
parent
5f5cfd121d
commit
e2e23ef97d
12 changed files with 4 additions and 74 deletions
|
@ -165,10 +165,6 @@ Implements \code{TOS = -TOS}.
|
||||||
Implements \code{TOS = not TOS}.
|
Implements \code{TOS = not TOS}.
|
||||||
\end{opcodedesc}
|
\end{opcodedesc}
|
||||||
|
|
||||||
\begin{opcodedesc}{UNARY_CONVERT}{}
|
|
||||||
Implements \code{TOS = `TOS`}.
|
|
||||||
\end{opcodedesc}
|
|
||||||
|
|
||||||
\begin{opcodedesc}{UNARY_INVERT}{}
|
\begin{opcodedesc}{UNARY_INVERT}{}
|
||||||
Implements \code{TOS = \~{}TOS}.
|
Implements \code{TOS = \~{}TOS}.
|
||||||
\end{opcodedesc}
|
\end{opcodedesc}
|
||||||
|
|
|
@ -186,9 +186,8 @@ struct _stmt {
|
||||||
enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
|
enum _expr_kind {BoolOp_kind=1, BinOp_kind=2, UnaryOp_kind=3, Lambda_kind=4,
|
||||||
IfExp_kind=5, Dict_kind=6, ListComp_kind=7,
|
IfExp_kind=5, Dict_kind=6, ListComp_kind=7,
|
||||||
GeneratorExp_kind=8, Yield_kind=9, Compare_kind=10,
|
GeneratorExp_kind=8, Yield_kind=9, Compare_kind=10,
|
||||||
Call_kind=11, Repr_kind=12, Num_kind=13, Str_kind=14,
|
Call_kind=11, Num_kind=12, Str_kind=13, Attribute_kind=14,
|
||||||
Attribute_kind=15, Subscript_kind=16, Name_kind=17,
|
Subscript_kind=15, Name_kind=16, List_kind=17, Tuple_kind=18};
|
||||||
List_kind=18, Tuple_kind=19};
|
|
||||||
struct _expr {
|
struct _expr {
|
||||||
enum _expr_kind kind;
|
enum _expr_kind kind;
|
||||||
union {
|
union {
|
||||||
|
@ -252,10 +251,6 @@ struct _expr {
|
||||||
expr_ty kwargs;
|
expr_ty kwargs;
|
||||||
} Call;
|
} Call;
|
||||||
|
|
||||||
struct {
|
|
||||||
expr_ty value;
|
|
||||||
} Repr;
|
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
object n;
|
object n;
|
||||||
} Num;
|
} Num;
|
||||||
|
@ -414,7 +409,6 @@ expr_ty Compare(expr_ty left, asdl_int_seq * ops, asdl_seq * comparators, int
|
||||||
expr_ty Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty
|
expr_ty Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty
|
||||||
starargs, expr_ty kwargs, int lineno, int col_offset, PyArena
|
starargs, expr_ty kwargs, int lineno, int col_offset, PyArena
|
||||||
*arena);
|
*arena);
|
||||||
expr_ty Repr(expr_ty value, int lineno, int col_offset, PyArena *arena);
|
|
||||||
expr_ty Num(object n, int lineno, int col_offset, PyArena *arena);
|
expr_ty Num(object n, int lineno, int col_offset, PyArena *arena);
|
||||||
expr_ty Str(string s, int lineno, int col_offset, PyArena *arena);
|
expr_ty Str(string s, int lineno, int col_offset, PyArena *arena);
|
||||||
expr_ty Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
|
expr_ty Attribute(expr_ty value, identifier attr, expr_context_ty ctx, int
|
||||||
|
|
|
@ -18,7 +18,6 @@ extern "C" {
|
||||||
#define UNARY_POSITIVE 10
|
#define UNARY_POSITIVE 10
|
||||||
#define UNARY_NEGATIVE 11
|
#define UNARY_NEGATIVE 11
|
||||||
#define UNARY_NOT 12
|
#define UNARY_NOT 12
|
||||||
#define UNARY_CONVERT 13
|
|
||||||
|
|
||||||
#define UNARY_INVERT 15
|
#define UNARY_INVERT 15
|
||||||
|
|
||||||
|
|
|
@ -1207,9 +1207,6 @@ class CodeGenerator:
|
||||||
def visitNot(self, node):
|
def visitNot(self, node):
|
||||||
return self.unaryOp(node, 'UNARY_NOT')
|
return self.unaryOp(node, 'UNARY_NOT')
|
||||||
|
|
||||||
def visitBackquote(self, node):
|
|
||||||
return self.unaryOp(node, 'UNARY_CONVERT')
|
|
||||||
|
|
||||||
# bit ops
|
# bit ops
|
||||||
|
|
||||||
def bitOp(self, nodes, op):
|
def bitOp(self, nodes, op):
|
||||||
|
|
|
@ -54,7 +54,6 @@ def_op('NOP', 9)
|
||||||
def_op('UNARY_POSITIVE', 10)
|
def_op('UNARY_POSITIVE', 10)
|
||||||
def_op('UNARY_NEGATIVE', 11)
|
def_op('UNARY_NEGATIVE', 11)
|
||||||
def_op('UNARY_NOT', 12)
|
def_op('UNARY_NOT', 12)
|
||||||
def_op('UNARY_CONVERT', 13)
|
|
||||||
|
|
||||||
def_op('UNARY_INVERT', 15)
|
def_op('UNARY_INVERT', 15)
|
||||||
|
|
||||||
|
|
|
@ -65,7 +65,6 @@ module Python version "$Revision$"
|
||||||
| Compare(expr left, cmpop* ops, expr* comparators)
|
| Compare(expr left, cmpop* ops, expr* comparators)
|
||||||
| Call(expr func, expr* args, keyword* keywords,
|
| Call(expr func, expr* args, keyword* keywords,
|
||||||
expr? starargs, expr? kwargs)
|
expr? starargs, expr? kwargs)
|
||||||
| Repr(expr value)
|
|
||||||
| Num(object n) -- a number as a PyObject.
|
| Num(object n) -- a number as a PyObject.
|
||||||
| Str(string s) -- need to specify raw, unicode, etc?
|
| Str(string s) -- need to specify raw, unicode, etc?
|
||||||
-- other literals? bools?
|
-- other literals? bools?
|
||||||
|
|
|
@ -206,10 +206,6 @@ static char *Call_fields[]={
|
||||||
"starargs",
|
"starargs",
|
||||||
"kwargs",
|
"kwargs",
|
||||||
};
|
};
|
||||||
static PyTypeObject *Repr_type;
|
|
||||||
static char *Repr_fields[]={
|
|
||||||
"value",
|
|
||||||
};
|
|
||||||
static PyTypeObject *Num_type;
|
static PyTypeObject *Num_type;
|
||||||
static char *Num_fields[]={
|
static char *Num_fields[]={
|
||||||
"n",
|
"n",
|
||||||
|
@ -532,8 +528,6 @@ static int init_types(void)
|
||||||
if (!Compare_type) return 0;
|
if (!Compare_type) return 0;
|
||||||
Call_type = make_type("Call", expr_type, Call_fields, 5);
|
Call_type = make_type("Call", expr_type, Call_fields, 5);
|
||||||
if (!Call_type) return 0;
|
if (!Call_type) return 0;
|
||||||
Repr_type = make_type("Repr", expr_type, Repr_fields, 1);
|
|
||||||
if (!Repr_type) return 0;
|
|
||||||
Num_type = make_type("Num", expr_type, Num_fields, 1);
|
Num_type = make_type("Num", expr_type, Num_fields, 1);
|
||||||
if (!Num_type) return 0;
|
if (!Num_type) return 0;
|
||||||
Str_type = make_type("Str", expr_type, Str_fields, 1);
|
Str_type = make_type("Str", expr_type, Str_fields, 1);
|
||||||
|
@ -1552,27 +1546,6 @@ Call(expr_ty func, asdl_seq * args, asdl_seq * keywords, expr_ty starargs,
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
expr_ty
|
|
||||||
Repr(expr_ty value, int lineno, int col_offset, PyArena *arena)
|
|
||||||
{
|
|
||||||
expr_ty p;
|
|
||||||
if (!value) {
|
|
||||||
PyErr_SetString(PyExc_ValueError,
|
|
||||||
"field value is required for Repr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
p = (expr_ty)PyArena_Malloc(arena, sizeof(*p));
|
|
||||||
if (!p) {
|
|
||||||
PyErr_NoMemory();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
p->kind = Repr_kind;
|
|
||||||
p->v.Repr.value = value;
|
|
||||||
p->lineno = lineno;
|
|
||||||
p->col_offset = col_offset;
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
expr_ty
|
expr_ty
|
||||||
Num(object n, int lineno, int col_offset, PyArena *arena)
|
Num(object n, int lineno, int col_offset, PyArena *arena)
|
||||||
{
|
{
|
||||||
|
@ -2544,15 +2517,6 @@ ast2obj_expr(void* _o)
|
||||||
goto failed;
|
goto failed;
|
||||||
Py_DECREF(value);
|
Py_DECREF(value);
|
||||||
break;
|
break;
|
||||||
case Repr_kind:
|
|
||||||
result = PyType_GenericNew(Repr_type, NULL, NULL);
|
|
||||||
if (!result) goto failed;
|
|
||||||
value = ast2obj_expr(o->v.Repr.value);
|
|
||||||
if (!value) goto failed;
|
|
||||||
if (PyObject_SetAttrString(result, "value", value) == -1)
|
|
||||||
goto failed;
|
|
||||||
Py_DECREF(value);
|
|
||||||
break;
|
|
||||||
case Num_kind:
|
case Num_kind:
|
||||||
result = PyType_GenericNew(Num_type, NULL, NULL);
|
result = PyType_GenericNew(Num_type, NULL, NULL);
|
||||||
if (!result) goto failed;
|
if (!result) goto failed;
|
||||||
|
@ -3113,7 +3077,6 @@ init_ast(void)
|
||||||
if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0)
|
if (PyDict_SetItemString(d, "Compare", (PyObject*)Compare_type) < 0)
|
||||||
return;
|
return;
|
||||||
if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return;
|
if (PyDict_SetItemString(d, "Call", (PyObject*)Call_type) < 0) return;
|
||||||
if (PyDict_SetItemString(d, "Repr", (PyObject*)Repr_type) < 0) return;
|
|
||||||
if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return;
|
if (PyDict_SetItemString(d, "Num", (PyObject*)Num_type) < 0) return;
|
||||||
if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return;
|
if (PyDict_SetItemString(d, "Str", (PyObject*)Str_type) < 0) return;
|
||||||
if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) <
|
if (PyDict_SetItemString(d, "Attribute", (PyObject*)Attribute_type) <
|
||||||
|
|
|
@ -401,9 +401,6 @@ set_context(expr_ty e, expr_context_ty ctx, const node *n)
|
||||||
case Compare_kind:
|
case Compare_kind:
|
||||||
expr_name = "comparison";
|
expr_name = "comparison";
|
||||||
break;
|
break;
|
||||||
case Repr_kind:
|
|
||||||
expr_name = "repr";
|
|
||||||
break;
|
|
||||||
case IfExp_kind:
|
case IfExp_kind:
|
||||||
expr_name = "conditional expression";
|
expr_name = "conditional expression";
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1040,14 +1040,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
STACKADJ(-1);
|
STACKADJ(-1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UNARY_CONVERT:
|
|
||||||
v = TOP();
|
|
||||||
x = PyObject_Repr(v);
|
|
||||||
Py_DECREF(v);
|
|
||||||
SET_TOP(x);
|
|
||||||
if (x != NULL) continue;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case UNARY_INVERT:
|
case UNARY_INVERT:
|
||||||
v = TOP();
|
v = TOP();
|
||||||
x = PyNumber_Invert(v);
|
x = PyNumber_Invert(v);
|
||||||
|
|
|
@ -65,9 +65,10 @@ extern time_t PyOS_GetLastModificationTime(char *, FILE *);
|
||||||
Python 2.5c1: 62121 (fix wrong lnotab with for loops and
|
Python 2.5c1: 62121 (fix wrong lnotab with for loops and
|
||||||
storing constants that should have been removed)
|
storing constants that should have been removed)
|
||||||
Python 3000: 3000
|
Python 3000: 3000
|
||||||
|
3010 (removed UNARY_CONVERT)
|
||||||
.
|
.
|
||||||
*/
|
*/
|
||||||
#define MAGIC (3000 | ((long)'\r'<<16) | ((long)'\n'<<24))
|
#define MAGIC (3010 | ((long)'\r'<<16) | ((long)'\n'<<24))
|
||||||
|
|
||||||
/* Magic word as global; note that _PyImport_Init() can change the
|
/* Magic word as global; note that _PyImport_Init() can change the
|
||||||
value of this global to accommodate for alterations of how the
|
value of this global to accommodate for alterations of how the
|
||||||
|
|
|
@ -189,9 +189,6 @@ fold_unaryops_on_constants(unsigned char *codestr, PyObject *consts)
|
||||||
if (PyObject_IsTrue(v) == 1)
|
if (PyObject_IsTrue(v) == 1)
|
||||||
newconst = PyNumber_Negative(v);
|
newconst = PyNumber_Negative(v);
|
||||||
break;
|
break;
|
||||||
case UNARY_CONVERT:
|
|
||||||
newconst = PyObject_Repr(v);
|
|
||||||
break;
|
|
||||||
case UNARY_INVERT:
|
case UNARY_INVERT:
|
||||||
newconst = PyNumber_Invert(v);
|
newconst = PyNumber_Invert(v);
|
||||||
break;
|
break;
|
||||||
|
@ -470,7 +467,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
|
||||||
/* Fold unary ops on constants.
|
/* Fold unary ops on constants.
|
||||||
LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */
|
LOAD_CONST c1 UNARY_OP --> LOAD_CONST unary_op(c) */
|
||||||
case UNARY_NEGATIVE:
|
case UNARY_NEGATIVE:
|
||||||
case UNARY_CONVERT:
|
|
||||||
case UNARY_INVERT:
|
case UNARY_INVERT:
|
||||||
if (lastlc >= 1 &&
|
if (lastlc >= 1 &&
|
||||||
ISBASICBLOCK(blocks, i-3, 4) &&
|
ISBASICBLOCK(blocks, i-3, 4) &&
|
||||||
|
|
|
@ -1182,9 +1182,6 @@ symtable_visit_expr(struct symtable *st, expr_ty e)
|
||||||
if (e->v.Call.kwargs)
|
if (e->v.Call.kwargs)
|
||||||
VISIT(st, expr, e->v.Call.kwargs);
|
VISIT(st, expr, e->v.Call.kwargs);
|
||||||
break;
|
break;
|
||||||
case Repr_kind:
|
|
||||||
VISIT(st, expr, e->v.Repr.value);
|
|
||||||
break;
|
|
||||||
case Num_kind:
|
case Num_kind:
|
||||||
case Str_kind:
|
case Str_kind:
|
||||||
/* Nothing to do here. */
|
/* Nothing to do here. */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue