summaryrefslogtreecommitdiffstats
path: root/Python/compile.c
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2001-08-17 18:39:25 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2001-08-17 18:39:25 (GMT)
commit339d0f720e86dc34837547c90d3003a4a68d7d46 (patch)
tree2059e5d02f490540e759800b127d50f3fcd8c2b5 /Python/compile.c
parentf75976617bb36c892ee8a0f6a6fd3caddbd38cea (diff)
downloadcpython-339d0f720e86dc34837547c90d3003a4a68d7d46.zip
cpython-339d0f720e86dc34837547c90d3003a4a68d7d46.tar.gz
cpython-339d0f720e86dc34837547c90d3003a4a68d7d46.tar.bz2
Patch #445762: Support --disable-unicode
- Do not compile unicodeobject, unicodectype, and unicodedata if Unicode is disabled - check for Py_USING_UNICODE in all places that use Unicode functions - disables unicode literals, and the builtin functions - add the types.StringTypes list - remove Unicode literals from most tests.
Diffstat (limited to 'Python/compile.c')
-rw-r--r--Python/compile.c38
1 files changed, 25 insertions, 13 deletions
diff --git a/Python/compile.c b/Python/compile.c
index 21349ba..c6c3394 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -520,8 +520,8 @@ static void com_assign_name(struct compiling *, node *, int);
static PyCodeObject *icompile(node *, struct compiling *);
static PyCodeObject *jcompile(node *, char *, struct compiling *,
PyCompilerFlags *);
-static PyObject *parsestrplus(node *);
-static PyObject *parsestr(char *);
+static PyObject *parsestrplus(struct compiling*, node *);
+static PyObject *parsestr(struct compiling *, char *);
static node *get_rawdocstring(node *);
static int get_ref_type(struct compiling *, char *);
@@ -1111,7 +1111,7 @@ parsenumber(struct compiling *co, char *s)
}
static PyObject *
-parsestr(char *s)
+parsestr(struct compiling *com, char *s)
{
PyObject *v;
size_t len;
@@ -1122,11 +1122,19 @@ parsestr(char *s)
int first = *s;
int quote = first;
int rawmode = 0;
+#ifdef Py_USING_UNICODE
int unicode = 0;
+#endif
if (isalpha(quote) || quote == '_') {
if (quote == 'u' || quote == 'U') {
+#ifdef Py_USING_UNICODE
quote = *++s;
unicode = 1;
+#else
+ com_error(com, PyExc_SyntaxError,
+ "Unicode literals not supported in this Python");
+ return NULL;
+#endif
}
if (quote == 'r' || quote == 'R') {
quote = *++s;
@@ -1155,6 +1163,7 @@ parsestr(char *s)
return NULL;
}
}
+#ifdef Py_USING_UNICODE
if (unicode || Py_UnicodeFlag) {
if (rawmode)
return PyUnicode_DecodeRawUnicodeEscape(
@@ -1163,6 +1172,7 @@ parsestr(char *s)
return PyUnicode_DecodeUnicodeEscape(
s, len, NULL);
}
+#endif
if (rawmode || strchr(s, '\\') == NULL)
return PyString_FromStringAndSize(s, len);
v = PyString_FromStringAndSize((char *)NULL, len);
@@ -1238,16 +1248,16 @@ parsestr(char *s)
}
static PyObject *
-parsestrplus(node *n)
+parsestrplus(struct compiling* c, node *n)
{
PyObject *v;
int i;
REQ(CHILD(n, 0), STRING);
- if ((v = parsestr(STR(CHILD(n, 0)))) != NULL) {
+ if ((v = parsestr(c, STR(CHILD(n, 0)))) != NULL) {
/* String literal concatenation */
for (i = 1; i < NCH(n); i++) {
PyObject *s;
- s = parsestr(STR(CHILD(n, i)));
+ s = parsestr(c, STR(CHILD(n, i)));
if (s == NULL)
goto onError;
if (PyString_Check(v) && PyString_Check(s)) {
@@ -1255,6 +1265,7 @@ parsestrplus(node *n)
if (v == NULL)
goto onError;
}
+#ifdef Py_USING_UNICODE
else {
PyObject *temp;
temp = PyUnicode_Concat(v, s);
@@ -1264,6 +1275,7 @@ parsestrplus(node *n)
Py_DECREF(v);
v = temp;
}
+#endif
}
}
return v;
@@ -1445,7 +1457,7 @@ com_atom(struct compiling *c, node *n)
com_push(c, 1);
break;
case STRING:
- v = parsestrplus(n);
+ v = parsestrplus(c, n);
if (v == NULL) {
c->c_errors++;
i = 255;
@@ -2936,7 +2948,7 @@ is_constant_false(struct compiling *c, node *n)
return i == 0;
case STRING:
- v = parsestr(STR(n));
+ v = parsestr(c, STR(n));
if (v == NULL) {
PyErr_Clear();
break;
@@ -3330,7 +3342,7 @@ get_rawdocstring(node *n)
}
static PyObject *
-get_docstring(node *n)
+get_docstring(struct compiling *c, node *n)
{
/* Don't generate doc-strings if run with -OO */
if (Py_OptimizeFlag > 1)
@@ -3338,7 +3350,7 @@ get_docstring(node *n)
n = get_rawdocstring(n);
if (n == NULL)
return NULL;
- return parsestrplus(n);
+ return parsestrplus(c, n);
}
static void
@@ -3794,7 +3806,7 @@ com_file_input(struct compiling *c, node *n)
int i;
PyObject *doc;
REQ(n, file_input); /* (NEWLINE | stmt)* ENDMARKER */
- doc = get_docstring(n);
+ doc = get_docstring(c, n);
if (doc != NULL) {
int i = com_addconst(c, doc);
Py_DECREF(doc);
@@ -3819,7 +3831,7 @@ compile_funcdef(struct compiling *c, node *n)
node *ch;
REQ(n, funcdef); /* funcdef: 'def' NAME parameters ':' suite */
c->c_name = STR(CHILD(n, 1));
- doc = get_docstring(CHILD(n, 4));
+ doc = get_docstring(c, CHILD(n, 4));
if (doc != NULL) {
(void) com_addconst(c, doc);
Py_DECREF(doc);
@@ -3869,7 +3881,7 @@ compile_classdef(struct compiling *c, node *n)
c->c_name = STR(CHILD(n, 1));
c->c_private = c->c_name;
ch = CHILD(n, NCH(n)-1); /* The suite */
- doc = get_docstring(ch);
+ doc = get_docstring(c, ch);
if (doc != NULL) {
int i = com_addconst(c, doc);
Py_DECREF(doc);