Skip to content

Commit 503c703

Browse files
committed
_imp builtin module: add missing _fix_co_filename builtin
1 parent cb7b3fd commit 503c703

File tree

3 files changed

+39
-5
lines changed

3 files changed

+39
-5
lines changed

graalpython/com.oracle.graal.python.test/src/tests/test_imports.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,25 @@
3737
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
3838
# SOFTWARE.
3939

40-
from posix import *
4140
import sys
41+
from posix import *
42+
4243
sys.path.append(sys._getframe().f_code.co_filename.rpartition("/")[0])
4344

4445
def test_relative_import():
45-
import package
46+
pass
4647

4748

4849
def test_dotted_import():
49-
import package.moduleY
50+
pass
5051

5152

5253
def test_recursive_import():
53-
import package.moduleRecursive
54+
pass
5455

5556

5657
def test_recursive_import2():
57-
import package.moduleRecursive2
58+
pass
5859

5960

6061
def test_import_star_has_to_be_module():
@@ -91,3 +92,15 @@ def test_import_error():
9192
def test_import_some_star():
9293
import posix
9394
assert stat == posix.stat
95+
96+
97+
def test_imp_fix_co_filename():
98+
import _imp
99+
100+
def func(x):
101+
return x+x
102+
103+
code = func.__code__
104+
old_name = code.co_filename
105+
_imp._fix_co_filename(code, old_name + '_more_path')
106+
assert code.co_filename == old_name + '_more_path'

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@
5757
import com.oracle.graal.python.builtins.modules.TruffleCextBuiltins.CheckFunctionResultNode;
5858
import com.oracle.graal.python.builtins.objects.PNone;
5959
import com.oracle.graal.python.builtins.objects.cext.CExtNodes.AsPythonObjectNode;
60+
import com.oracle.graal.python.builtins.objects.code.PCode;
6061
import com.oracle.graal.python.builtins.objects.common.HashingCollectionNodes.SetItemNode;
6162
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
6263
import com.oracle.graal.python.builtins.objects.dict.PDict;
@@ -69,6 +70,7 @@
6970
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
7071
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
7172
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
73+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
7274
import com.oracle.graal.python.runtime.PythonContext;
7375
import com.oracle.graal.python.runtime.PythonCore;
7476
import com.oracle.graal.python.runtime.PythonOptions;
@@ -385,4 +387,19 @@ public Object run(String path, PythonModule mod) {
385387
}
386388
}
387389

390+
@Builtin(name = "_fix_co_filename", fixedNumOfPositionalArgs = 2)
391+
@GenerateNodeFactory
392+
public abstract static class FixCoFilename extends PythonBinaryBuiltinNode {
393+
@Specialization
394+
public Object run(PCode code, PString path) {
395+
code.setFilename(path.getValue());
396+
return PNone.NONE;
397+
}
398+
399+
@Specialization
400+
public Object run(PCode code, String path) {
401+
code.setFilename(path);
402+
return PNone.NONE;
403+
}
404+
}
388405
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/code/PCode.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,10 @@ public Object[] getCellVars() {
313313
return cellvars;
314314
}
315315

316+
public void setFilename(String filename) {
317+
this.filename = filename;
318+
}
319+
316320
public String getFilename() {
317321
if (filename == null && rootNode != null) {
318322
filename = extractFileName(rootNode);

0 commit comments

Comments
 (0)