|
271 | 271 | @ShortCircuitOperation(name = "PrimitiveBoolOr", booleanConverter = PBytecodeDSLRootNode.BooleanIdentity.class, operator = Operator.OR_RETURN_CONVERTED)
|
272 | 272 | @SuppressWarnings("unused")
|
273 | 273 | public abstract class PBytecodeDSLRootNode extends PRootNode implements BytecodeRootNode {
|
274 |
| - private static final int EXPLODE_LOOP_THRESHOLD = 32; |
| 274 | + public static final int EXPLODE_LOOP_THRESHOLD = 32; |
275 | 275 | private static final BytecodeConfig TRACE_AND_PROFILE_CONFIG = PBytecodeDSLRootNodeGen.newConfigBuilder() //
|
276 | 276 | .addInstrumentation(TraceOrProfileCall.class) //
|
277 | 277 | .addInstrumentation(TraceLine.class) //
|
@@ -379,7 +379,7 @@ public static void doExit(VirtualFrame frame, AbstractTruffleException ate,
|
379 | 379 | @Bind("$root") PBytecodeDSLRootNode root,
|
380 | 380 | @Bind("this") Node location) {
|
381 | 381 | if (ate instanceof PException pe) {
|
382 |
| - pe.notifyAddedTracebackFrame(!root.isPythonInternal()); |
| 382 | + pe.notifyAddedTracebackFrame(!root.isInternal()); |
383 | 383 | }
|
384 | 384 |
|
385 | 385 | if (root.needsTraceAndProfileInstrumentation()) {
|
@@ -1904,37 +1904,34 @@ public static PList perform(Object[] elements,
|
1904 | 1904 | }
|
1905 | 1905 |
|
1906 | 1906 | @Operation
|
| 1907 | + @ImportStatic({PBytecodeDSLRootNode.class}) |
1907 | 1908 | public static final class MakeSet {
|
1908 |
| - @Specialization |
1909 |
| - public static PSet perform(VirtualFrame frame, Object[] elements, |
| 1909 | + @Specialization(guards = {"elements.length == length", "length <= EXPLODE_LOOP_THRESHOLD"}, limit = "1") |
| 1910 | + @ExplodeLoop |
| 1911 | + public static PSet performExploded(VirtualFrame frame, Object[] elements, |
1910 | 1912 | @Bind("$root") PBytecodeDSLRootNode rootNode,
|
1911 | 1913 | @Bind("this") Node node,
|
1912 |
| - @Cached(value = "elements.length", neverDefault = false) int length, |
1913 |
| - @Cached SetNodes.AddNode addNode, |
1914 |
| - @Cached HashingCollectionNodes.SetItemNode setItemNode) { |
1915 |
| - assert elements.length == length; |
1916 |
| - |
| 1914 | + @Cached(value = "elements.length") int length, |
| 1915 | + @Shared @Cached SetNodes.AddNode addNode, |
| 1916 | + @Shared @Cached HashingCollectionNodes.SetItemNode setItemNode) { |
1917 | 1917 | PSet set = rootNode.factory.createSet();
|
1918 |
| - if (length <= EXPLODE_LOOP_THRESHOLD) { |
1919 |
| - doExploded(frame, set, elements, length, addNode, setItemNode); |
1920 |
| - } else { |
1921 |
| - doRegular(frame, set, elements, length, addNode, setItemNode); |
1922 |
| - } |
1923 |
| - return set; |
1924 |
| - } |
1925 |
| - |
1926 |
| - @ExplodeLoop |
1927 |
| - private static void doExploded(VirtualFrame frame, PSet set, Object[] elements, int length, SetNodes.AddNode addNode, HashingCollectionNodes.SetItemNode setItemNode) { |
1928 |
| - CompilerAsserts.partialEvaluationConstant(length); |
1929 | 1918 | for (int i = 0; i < length; i++) {
|
1930 | 1919 | SetNodes.AddNode.add(frame, set, elements[i], addNode, setItemNode);
|
1931 | 1920 | }
|
| 1921 | + return set; |
1932 | 1922 | }
|
1933 | 1923 |
|
1934 |
| - private static void doRegular(VirtualFrame frame, PSet set, Object[] elements, int length, SetNodes.AddNode addNode, HashingCollectionNodes.SetItemNode setItemNode) { |
1935 |
| - for (int i = 0; i < length; i++) { |
| 1924 | + @Specialization |
| 1925 | + public static PSet performRegular(VirtualFrame frame, Object[] elements, |
| 1926 | + @Bind("$root") PBytecodeDSLRootNode rootNode, |
| 1927 | + @Bind("this") Node node, |
| 1928 | + @Shared @Cached SetNodes.AddNode addNode, |
| 1929 | + @Shared @Cached HashingCollectionNodes.SetItemNode setItemNode) { |
| 1930 | + PSet set = rootNode.factory.createSet(); |
| 1931 | + for (int i = 0; i < elements.length; i++) { |
1936 | 1932 | SetNodes.AddNode.add(frame, set, elements[i], addNode, setItemNode);
|
1937 | 1933 | }
|
| 1934 | + return set; |
1938 | 1935 | }
|
1939 | 1936 | }
|
1940 | 1937 |
|
@@ -1999,54 +1996,9 @@ public static PList perform(@Bind("$root") PBytecodeDSLRootNode rootNode) {
|
1999 | 1996 | @Operation
|
2000 | 1997 | public static final class MakeTuple {
|
2001 | 1998 | @Specialization
|
2002 |
| - public static Object perform(@Variadic Object[] elements, |
2003 |
| - @Cached(value = "elements.length", neverDefault = false) int length, |
| 1999 | + public static Object perform(Object[] elements, |
2004 | 2000 | @Bind("$root") PBytecodeDSLRootNode rootNode) {
|
2005 |
| - assert elements.length == length; |
2006 |
| - |
2007 |
| - Object[] elts; |
2008 |
| - if (length <= EXPLODE_LOOP_THRESHOLD) { |
2009 |
| - elts = doExploded(elements, length); |
2010 |
| - } else { |
2011 |
| - elts = doRegular(elements, length); |
2012 |
| - } |
2013 |
| - return rootNode.factory.createTuple(elts); |
2014 |
| - } |
2015 |
| - |
2016 |
| - @ExplodeLoop |
2017 |
| - private static Object[] doExploded(Object[] elements, int length) { |
2018 |
| - CompilerAsserts.partialEvaluationConstant(length); |
2019 |
| - int totalLength = 0; |
2020 |
| - for (int i = 0; i < length; i++) { |
2021 |
| - totalLength += ((Object[]) elements[i]).length; |
2022 |
| - } |
2023 |
| - |
2024 |
| - Object[] elts = new Object[totalLength]; |
2025 |
| - int idx = 0; |
2026 |
| - for (int i = 0; i < length; i++) { |
2027 |
| - Object[] arr = (Object[]) elements[i]; |
2028 |
| - int len = arr.length; |
2029 |
| - System.arraycopy(arr, 0, elts, idx, len); |
2030 |
| - idx += len; |
2031 |
| - } |
2032 |
| - return elts; |
2033 |
| - } |
2034 |
| - |
2035 |
| - private static Object[] doRegular(Object[] elements, int length) { |
2036 |
| - int totalLength = 0; |
2037 |
| - for (int i = 0; i < length; i++) { |
2038 |
| - totalLength += ((Object[]) elements[i]).length; |
2039 |
| - } |
2040 |
| - |
2041 |
| - Object[] elts = new Object[totalLength]; |
2042 |
| - int idx = 0; |
2043 |
| - for (int i = 0; i < length; i++) { |
2044 |
| - Object[] arr = (Object[]) elements[i]; |
2045 |
| - int len = arr.length; |
2046 |
| - System.arraycopy(arr, 0, elts, idx, len); |
2047 |
| - idx += len; |
2048 |
| - } |
2049 |
| - return elts; |
| 2001 | + return rootNode.factory.createTuple(elements); |
2050 | 2002 | }
|
2051 | 2003 | }
|
2052 | 2004 |
|
@@ -3621,7 +3573,7 @@ public static void doExceptional(VirtualFrame frame,
|
3621 | 3573 | Object result = callExit.execute(frame, exit, contextManager, excType, pythonException, excTraceback);
|
3622 | 3574 | if (!isTrue.execute(frame, inliningTarget, result)) {
|
3623 | 3575 | if (exception instanceof PException pException) {
|
3624 |
| - throw pException.getExceptionForReraise(rootNode.isPythonInternal()); |
| 3576 | + throw pException.getExceptionForReraise(!rootNode.isInternal()); |
3625 | 3577 | } else if (exception instanceof AbstractTruffleException ate) {
|
3626 | 3578 | throw ate;
|
3627 | 3579 | } else {
|
@@ -3723,7 +3675,7 @@ public static void doExceptional(VirtualFrame frame,
|
3723 | 3675 | @Cached PRaiseNode.Lazy raiseNode) {
|
3724 | 3676 | if (!isTrue.execute(frame, inliningTarget, result)) {
|
3725 | 3677 | if (exception instanceof PException) {
|
3726 |
| - throw ((PException) exception).getExceptionForReraise(rootNode.isPythonInternal()); |
| 3678 | + throw ((PException) exception).getExceptionForReraise(!rootNode.isInternal()); |
3727 | 3679 | } else if (exception instanceof AbstractTruffleException) {
|
3728 | 3680 | throw (AbstractTruffleException) exception;
|
3729 | 3681 | } else {
|
|
0 commit comments