Skip to content

Commit 2a1c02b

Browse files
committed
module init
1 parent fb52694 commit 2a1c02b

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

vm/src/builtins/module.rs

Lines changed: 11 additions & 6 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,
@@ -48,7 +49,7 @@ impl PyModule {
4849
{
4950
return Ok(attr);
5051
}
51-
if let Ok(getattr) = zelf.dict().get_item("__getattr__", vm) {
52+
if let Ok(getattr) = zelf.dict().get_item(identifier!(vm, __getattr__), vm) {
5253
return vm.invoke(&getattr, (name,));
5354
}
5455
let module_name = if let Some(name) = Self::name(zelf.to_owned(), vm) {
@@ -61,7 +62,7 @@ impl PyModule {
6162

6263
fn name(zelf: PyRef<Self>, vm: &VirtualMachine) -> Option<PyStrRef> {
6364
zelf.as_object()
64-
.generic_getattr_opt(PyStr::from("__name__").into_ref(vm), None, vm)
65+
.generic_getattr_opt(identifier!(vm, __name__).to_owned(), None, vm)
6566
.unwrap_or(None)
6667
.and_then(|obj| obj.downcast::<PyStr>().ok())
6768
}
@@ -92,14 +93,14 @@ 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(identifier!(vm, __name__), name.to_object(), vm)
101102
.expect("Failed to set __name__ on module");
102-
dict.set_item("__doc__", doc, vm)
103+
dict.set_item(identifier!(vm, __doc__), doc, vm)
103104
.expect("Failed to set __doc__ on module");
104105
dict.set_item("__package__", vm.ctx.none(), vm)
105106
.expect("Failed to set __package__ 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_str(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(), identifier!(vm, __reduce__))? {
313-
let object_reduce = vm
314-
.ctx
315-
.types
316-
.object_type
317-
.get_attr(identifier!(vm, __reduce__))
318-
.unwrap();
312+
let __reduce__ = identifier!(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(identifier!(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/import.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub(crate) fn init_importlib_base(vm: &mut VirtualMachine) -> PyResult<PyObjectR
4040
vm.invoke(&install, (vm.sys_module.clone(), impmod))?;
4141
Ok(importlib)
4242
})?;
43-
vm.import_func = importlib.get_attr("__import__", vm)?;
43+
vm.import_func = importlib.get_attr(identifier!(vm, __import__).to_owned(), vm)?;
4444
Ok(importlib)
4545
}
4646

@@ -134,9 +134,17 @@ pub fn import_codeobj(
134134
set_file_attr: bool,
135135
) -> PyResult {
136136
let attrs = vm.ctx.new_dict();
137-
attrs.set_item("__name__", vm.ctx.new_str(module_name).into(), vm)?;
137+
attrs.set_item(
138+
identifier!(vm, __name__),
139+
vm.ctx.new_str(module_name).into(),
140+
vm,
141+
)?;
138142
if set_file_attr {
139-
attrs.set_item("__file__", code_obj.source_path.clone().into(), vm)?;
143+
attrs.set_item(
144+
identifier!(vm, __file__),
145+
code_obj.source_path.clone().into(),
146+
vm,
147+
)?;
140148
}
141149
let module = vm.new_module(module_name, attrs.clone(), None);
142150

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::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_str("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_str("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
@@ -34,7 +34,7 @@ impl VirtualMachine {
3434
pub fn new_module(&self, name: &str, dict: PyDictRef, doc: Option<&str>) -> PyObjectRef {
3535
let module = PyRef::new_ref(PyModule {}, self.ctx.types.module_type.clone(), Some(dict));
3636
module.init_module_dict(
37-
self.new_pyobj(name.to_owned()),
37+
self.ctx.intern_str(name),
3838
doc.map(|doc| self.new_pyobj(doc.to_owned()))
3939
.unwrap_or_else(|| self.ctx.none()),
4040
self,

0 commit comments

Comments
 (0)