Skip to content

Commit 502e53e

Browse files
committed
force immediate materialization of strings in HPyUnicode_FromString
1 parent 8169801 commit 502e53e

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/hpy/GraalHPyContextFunctions.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@
129129
import com.oracle.graal.python.builtins.objects.method.PBuiltinMethod;
130130
import com.oracle.graal.python.builtins.objects.module.PythonModule;
131131
import com.oracle.graal.python.builtins.objects.object.PythonObject;
132+
import com.oracle.graal.python.builtins.objects.str.PString;
133+
import com.oracle.graal.python.builtins.objects.str.StringNodes.StringMaterializeNode;
132134
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
133135
import com.oracle.graal.python.builtins.objects.type.PythonClass;
134136
import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
@@ -1303,13 +1305,17 @@ public static final class GraalHPyUnicodeFromString extends GraalHPyContextFunct
13031305
Object execute(Object[] arguments,
13041306
@Cached HPyAsContextNode asContextNode,
13051307
@Cached FromCharPointerNode fromCharPointerNode,
1308+
@Cached StringMaterializeNode stringMaterializeNode,
13061309
@Cached HPyTransformExceptionToNativeNode transformExceptionToNativeNode,
13071310
@Cached HPyAsHandleNode asHandleNode) throws ArityException {
13081311
checkArity(arguments, 2);
13091312
GraalHPyContext context = asContextNode.execute(arguments[0]);
13101313
try {
13111314
// TODO(fa) provide encoding (utf8)
13121315
Object str = fromCharPointerNode.execute(arguments[1]);
1316+
if (str instanceof PString) {
1317+
str = stringMaterializeNode.execute((PString) str);
1318+
}
13131319
return asHandleNode.execute(context, str);
13141320
} catch (PException e) {
13151321
transformExceptionToNativeNode.execute(context, e);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/LazyString.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public static CharSequence createChecked(CharSequence left, CharSequence right,
7373

7474
private static boolean assertChecked(PythonContext context, CharSequence left, CharSequence right, int length) {
7575
assert context.getOption(PythonOptions.LazyStrings);
76-
assert (PGuards.isString(left) || left instanceof LazyString || left instanceof NativeCharSequence) && (PGuards.isString(right) || right instanceof LazyString || right instanceof NativeCharSequence);
76+
assert (PGuards.isString(left) || left instanceof LazyString) && (PGuards.isString(right) || right instanceof LazyString);
7777
assert length == left.length() + right.length();
7878
assert left.length() > 0 && right.length() > 0;
7979
assert length >= context.getOption(PythonOptions.MinLazyStringLength);
@@ -191,9 +191,6 @@ private static void flatten(CharSequence src, int srcBegin, int srcEnd, char[] d
191191
} else if (str instanceof String) {
192192
((String) str).getChars(from, to, dst, dstFrom);
193193
return;
194-
} else if (str instanceof NativeCharSequence) {
195-
((NativeCharSequence) str).materialize().getChars(from, to, dst, dstFrom);
196-
return;
197194
}
198195
}
199196
}

0 commit comments

Comments
 (0)