1From d7217b79a4e125d4fcc1087743171b94d91d1121 Mon Sep 17 00:00:00 2001
2From: Inada Naoki <songofacandy@gmail.com>
3Date: Sat, 14 Jul 2018 00:46:11 +0900
4Subject: [PATCH] Use FLAG_REF always for interned strings
5
6Upstream-Status: Submitted [https://github.com/python/cpython/pull/8226]
7Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
8
9---
10 Python/marshal.c | 9 +++++++--
11 1 file changed, 7 insertions(+), 2 deletions(-)
12
13diff --git a/Python/marshal.c b/Python/marshal.c
14index 4125240..341c9aa 100644
15--- a/Python/marshal.c
16+++ b/Python/marshal.c
17@@ -298,9 +298,14 @@ w_ref(PyObject *v, char *flag, WFILE *p)
18     if (p->version < 3 || p->hashtable == NULL)
19         return 0; /* not writing object references */
20
21-    /* if it has only one reference, it definitely isn't shared */
22-    if (Py_REFCNT(v) == 1)
23+    /* If it has only one reference, it definitely isn't shared.
24+     * But we use TYPE_REF always for interned string, to PYC file stable
25+     * as possible.
26+     */
27+    if (Py_REFCNT(v) == 1 &&
28+            !(PyUnicode_CheckExact(v) && PyUnicode_CHECK_INTERNED(v))) {
29         return 0;
30+    }
31
32     entry = _Py_hashtable_get_entry(p->hashtable, v);
33     if (entry != NULL) {
34