Skip to content

Commit 0813c82

Browse files
committed
module init
1 parent c617eae commit 0813c82

File tree

5 files changed

+19
-24
lines changed

5 files changed

+19
-24
lines changed

vm/src/builtins/module.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use super::pystr::IntoPyStrRef;
22
use super::{PyDictRef, PyStr, PyStrRef, PyTypeRef};
33
use crate::{
4+
builtins::PyStrInterned,
45
class::PyClassImpl,
56
convert::ToPyObject,
67
function::FuncArgs,
@@ -92,12 +93,12 @@ impl Py<PyModule> {
9293
// TODO: should be on PyModule, not Py<PyModule>
9394
pub(crate) fn init_module_dict(
9495
&self,
95-
name: PyObjectRef,
96+
name: &'static PyStrInterned,
9697
doc: PyObjectRef,
9798
vm: &VirtualMachine,
9899
) {
99100
let dict = self.dict();
100-
dict.set_item("__name__", name, vm)
101+
dict.set_item("__name__", name.to_object(), vm)
101102
.expect("Failed to set __name__ on module");
102103
dict.set_item("__doc__", doc, vm)
103104
.expect("Failed to set __doc__ on module");
@@ -131,7 +132,11 @@ impl Initializer for PyModule {
131132
.slots
132133
.flags
133134
.has_feature(crate::types::PyTypeFlags::HAS_DICT));
134-
zelf.init_module_dict(args.name.into(), args.doc.to_pyobject(vm), vm);
135+
zelf.init_module_dict(
136+
vm.ctx.intern_string(args.name.as_str()),
137+
args.doc.to_pyobject(vm),
138+
vm,
139+
);
135140
Ok(())
136141
}
137142
}

vm/src/builtins/object.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,11 @@ impl PyBaseObject {
309309

310310
#[pymethod(magic)]
311311
fn reduce_ex(obj: PyObjectRef, proto: usize, vm: &VirtualMachine) -> PyResult {
312-
if let Some(reduce) = vm.get_attribute_opt(obj.clone(), interned!(vm, __reduce__))? {
313-
let object_reduce = vm
314-
.ctx
315-
.types
316-
.object_type
317-
.get_attr(interned!(vm, __reduce__))
318-
.unwrap();
312+
let __reduce__ = interned!(vm, __reduce__);
313+
if let Some(reduce) = vm.get_attribute_opt(obj.clone(), __reduce__)? {
314+
let object_reduce = vm.ctx.types.object_type.get_attr(__reduce__).unwrap();
319315
let typ_obj: PyObjectRef = obj.class().clone().into();
320-
let class_reduce = typ_obj.get_attr(interned!(vm, __reduce__), vm)?;
316+
let class_reduce = typ_obj.get_attr(__reduce__, vm)?;
321317
if !class_reduce.is(&object_reduce) {
322318
return vm.invoke(&reduce, ());
323319
}

vm/src/protocol/object.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,11 +138,8 @@ impl PyObject {
138138
vm: &VirtualMachine,
139139
) -> PyResult<()> {
140140
vm_trace!("object.__setattr__({:?}, {}, {:?})", obj, attr_name, value);
141-
if let Some(attr) = vm
142-
.ctx
143-
.interned_string(attr_name.as_str())
144-
.and_then(|attr_name| self.get_class_attr(attr_name))
145-
{
141+
let cls_attr_name = vm.ctx.intern_string(attr_name.as_str());
142+
if let Some(attr) = self.get_class_attr(cls_attr_name) {
146143
let descr_set = attr.class().mro_find_map(|cls| cls.slots.descr_set.load());
147144
if let Some(descriptor) = descr_set {
148145
return descriptor(attr, self.to_owned(), value, vm);

vm/src/vm/mod.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use crate::{
2323
},
2424
bytecode,
2525
codecs::CodecsRegistry,
26-
common::{ascii, hash::HashSecret, lock::PyMutex, rc::PyRc},
26+
common::{hash::HashSecret, lock::PyMutex, rc::PyRc},
2727
convert::{ToPyObject, TryFromObject},
2828
frame::{ExecutionResult, Frame, FrameRef},
2929
frozen,
@@ -160,13 +160,10 @@ impl VirtualMachine {
160160
let frozen = frozen::map_frozen(&vm, frozen::get_module_inits()).collect();
161161
PyRc::get_mut(&mut vm.state).unwrap().frozen = frozen;
162162

163-
vm.builtins.init_module_dict(
164-
vm.ctx.new_str(ascii!("builtins")).into(),
165-
vm.ctx.none(),
166-
&vm,
167-
);
163+
vm.builtins
164+
.init_module_dict(vm.ctx.intern_string("builtins"), vm.ctx.none(), &vm);
168165
vm.sys_module
169-
.init_module_dict(vm.ctx.new_str(ascii!("sys")).into(), vm.ctx.none(), &vm);
166+
.init_module_dict(vm.ctx.intern_string("sys"), vm.ctx.none(), &vm);
170167

171168
vm
172169
}

vm/src/vm/vm_new.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ impl VirtualMachine {
3939
pub fn new_module(&self, name: &str, dict: PyDictRef, doc: Option<&str>) -> PyObjectRef {
4040
let module = PyRef::new_ref(PyModule {}, self.ctx.types.module_type.clone(), Some(dict));
4141
module.init_module_dict(
42-
self.new_pyobj(name.to_owned()),
42+
self.ctx.intern_string(name),
4343
doc.map(|doc| self.new_pyobj(doc.to_owned()))
4444
.unwrap_or_else(|| self.ctx.none()),
4545
self,

0 commit comments

Comments
 (0)