Skip to content

Commit aa26867

Browse files
committed
added specialization for non PDict in _PyNamespace_New
1 parent 7c48ea7 commit aa26867

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextNamespaceBuiltins.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,14 @@
4747
import com.oracle.graal.python.builtins.PythonBuiltins;
4848
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.GetNativeNullNode;
4949
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.TransformExceptionToNativeNode;
50+
import com.oracle.graal.python.builtins.objects.common.HashingStorage;
5051
import com.oracle.graal.python.builtins.objects.common.HashingStorage.DictEntry;
52+
import com.oracle.graal.python.builtins.objects.common.HashingStorage.InitNode;
5153
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary;
5254
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary.HashingStorageIterable;
5355
import com.oracle.graal.python.builtins.objects.common.HashingStorageLibrary.HashingStorageIterator;
5456
import com.oracle.graal.python.builtins.objects.dict.PDict;
57+
import com.oracle.graal.python.builtins.objects.function.PKeyword;
5558
import com.oracle.graal.python.builtins.objects.namespace.PSimpleNamespace;
5659
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5760
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
@@ -101,6 +104,29 @@ public Object imp(VirtualFrame frame, PDict dict,
101104
return getNativeNull.execute();
102105
}
103106
}
107+
108+
@Specialization(guards = "!isDict(dict)")
109+
public Object imp(VirtualFrame frame, Object dict,
110+
@Cached InitNode initNode,
111+
@CachedLibrary(limit = "1") HashingStorageLibrary lib,
112+
@CachedLibrary(limit = "1") DynamicObjectLibrary dyLib,
113+
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode,
114+
@Cached GetNativeNullNode getNativeNull) {
115+
try {
116+
PSimpleNamespace ns = factory().createSimpleNamespace();
117+
HashingStorage hs = initNode.execute(frame, dict, PKeyword.EMPTY_KEYWORDS);
118+
HashingStorageIterable<DictEntry> entries = lib.entries(hs);
119+
HashingStorageIterator<DictEntry> it = entries.iterator();
120+
while (it.hasNext()) {
121+
DictEntry e = it.next();
122+
dyLib.put(ns, e.key, e.value);
123+
}
124+
return ns;
125+
} catch (PException e) {
126+
transformExceptionToNativeNode.execute(e);
127+
return getNativeNull.execute();
128+
}
129+
}
104130
}
105131

106132
}

0 commit comments

Comments
 (0)