Skip to content

Commit 92bd260

Browse files
committed
GR-13917: String builtins, len node - profile the virtual call in PString away
1 parent 19f473b commit 92bd260

File tree

2 files changed

+21
-5
lines changed

2 files changed

+21
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2018, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2019, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import static com.oracle.graal.python.runtime.exception.PythonErrorType.UnicodeEncodeError;
5050
import static com.oracle.graal.python.runtime.exception.PythonErrorType.ValueError;
5151

52+
import java.math.BigInteger;
5253
import java.nio.ByteBuffer;
5354
import java.nio.CharBuffer;
5455
import java.nio.charset.CharacterCodingException;
@@ -77,6 +78,7 @@
7778
import com.oracle.graal.python.builtins.objects.slice.PSlice;
7879
import com.oracle.graal.python.builtins.objects.slice.PSlice.SliceInfo;
7980
import com.oracle.graal.python.builtins.objects.str.StringBuiltinsFactory.SpliceNodeGen;
81+
import com.oracle.graal.python.builtins.objects.str.StringBuiltinsFactory.StringLenNodeFactory;
8082
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
8183
import com.oracle.graal.python.nodes.PNodeWithContext;
8284
import com.oracle.graal.python.nodes.SpecialMethodNames;
@@ -107,7 +109,7 @@
107109
import com.oracle.truffle.api.dsl.TypeSystemReference;
108110
import com.oracle.truffle.api.profiles.BranchProfile;
109111
import com.oracle.truffle.api.profiles.ConditionProfile;
110-
import java.math.BigInteger;
112+
import com.oracle.truffle.api.profiles.ValueProfile;
111113

112114
@CoreFunctions(extendClasses = PythonBuiltinClassType.PString)
113115
public final class StringBuiltins extends PythonBuiltins {
@@ -1406,15 +1408,29 @@ String rstrip(String self, PNone chars) {
14061408

14071409
@Builtin(name = SpecialMethodNames.__LEN__, minNumOfPositionalArgs = 1)
14081410
@GenerateNodeFactory
1409-
public abstract static class LenNode extends PythonUnaryBuiltinNode {
1411+
public abstract static class StringLenNode extends PythonUnaryBuiltinNode {
14101412
@Specialization
14111413
public int len(String self) {
14121414
return self.length();
14131415
}
14141416

14151417
@Specialization
1416-
public int len(PString self) {
1417-
return self.len();
1418+
public int len(PString self,
1419+
@Cached("createClassProfile()") ValueProfile classProfile,
1420+
@Cached("create()") BranchProfile uncommonStringTypeProfile) {
1421+
Object profiled = classProfile.profile(self.getCharSequence());
1422+
if (profiled instanceof String) {
1423+
return ((String) profiled).length();
1424+
} else if (profiled instanceof LazyString) {
1425+
return ((LazyString) profiled).length();
1426+
} else {
1427+
uncommonStringTypeProfile.enter();
1428+
return ((CharSequence) profiled).length();
1429+
}
1430+
}
1431+
1432+
public static StringLenNode create() {
1433+
return StringLenNodeFactory.create();
14181434
}
14191435
}
14201436

0 commit comments

Comments
 (0)