Skip to content

Commit fb82496

Browse files
committed
fix _imp.get_magic
1 parent b21670f commit fb82496

File tree

2 files changed

+18
-14
lines changed

2 files changed

+18
-14
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes.SetItemNode;
6969
import com.oracle.graal.python.builtins.objects.dict.PDict;
7070
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
71+
import com.oracle.graal.python.builtins.objects.ints.IntBuiltins;
7172
import com.oracle.graal.python.builtins.objects.ints.PInt;
7273
import com.oracle.graal.python.builtins.objects.module.PythonModule;
7374
import com.oracle.graal.python.builtins.objects.object.PythonObject;
@@ -85,7 +86,6 @@
8586
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
8687
import com.oracle.graal.python.nodes.statement.ExceptionHandlingStatementNode;
8788
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
88-
import com.oracle.graal.python.parser.sst.SerializationUtils;
8989
import com.oracle.graal.python.runtime.ExecutionContext.ForeignCallContext;
9090
import com.oracle.graal.python.runtime.PythonContext;
9191
import com.oracle.graal.python.runtime.PythonCore;
@@ -174,19 +174,23 @@ public boolean run() {
174174
@Builtin(name = "get_magic")
175175
@GenerateNodeFactory
176176
public abstract static class GetMagic extends PythonBuiltinNode {
177-
// it's b'\x0c\xaf\xaf\xe1', original magic number of GraalPython
178-
private static int BASE_MAGIC_NUMBER = 212840417;
179-
180177
@Specialization
181-
public PBytes run() {
182-
// The magic number in CPython is usually increased by 10.
183-
int number = BASE_MAGIC_NUMBER + 10 * SerializationUtils.VERSION;
184-
byte[] magicNumber = new byte[4];
185-
magicNumber[0] = (byte) (number >>> 24);
186-
magicNumber[1] = (byte) (number >>> 16);
187-
magicNumber[2] = (byte) (number >>> 8);
188-
magicNumber[3] = (byte) (number);
189-
return factory().createBytes(magicNumber);
178+
public PBytes run(@SuppressWarnings("unused") VirtualFrame frame,
179+
@SuppressWarnings("unused") @Cached IntBuiltins.ToBytesNode toBytesNode,
180+
@SuppressWarnings("unused") @CachedLibrary(limit = "1") PythonObjectLibrary pol,
181+
@Cached("getMagicNumberBytes(frame, toBytesNode, pol)") PBytes magicBytes) {
182+
return magicBytes;
183+
}
184+
185+
protected PBytes getMagicNumberBytes(VirtualFrame frame, IntBuiltins.ToBytesNode toBytesNode, PythonObjectLibrary pol) {
186+
try {
187+
PBytes magic = toBytesNode.execute(frame, 3413, 2, "little", false);
188+
byte[] magicBytes = pol.getBufferBytes(magic);
189+
return factory().createBytes(new byte[]{magicBytes[0], magicBytes[1], '\r', '\n'});
190+
} catch (UnsupportedMessageException e) {
191+
CompilerDirectives.transferToInterpreterAndInvalidate();
192+
throw new IllegalStateException("magicBytes does not support getBufferBytes()");
193+
}
190194
}
191195
}
192196

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2290,7 +2290,7 @@ PBytes general(VirtualFrame frame, Object self, Object byteCount, Object byteord
22902290
return recursiveNode.execute(frame, self, count, byteorder, signed);
22912291
}
22922292

2293-
protected static ToBytesNode create() {
2293+
public static ToBytesNode create() {
22942294
return IntBuiltinsFactory.ToBytesNodeFactory.create(null);
22952295
}
22962296
}

0 commit comments

Comments
 (0)