mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Use PyRc in rustpython_wasm
This commit is contained in:
1 parent
642a1ee7ee
commit
76df8773e7
5 files changed
+16
-8
No files matched your search
Generated
+6
@@ -682,6 +682,11 @@ name = "instant"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b141fdc7836c525d4d594027d318c84161ca17aaf8113ab1f81ab93ae897485"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-macro"
|
||||
@@ -1681,6 +1686,7 @@ dependencies = [
|
||||
"futures",
|
||||
"generational-arena",
|
||||
"js-sys",
|
||||
"parking_lot",
|
||||
"rustpython-compiler",
|
||||
"rustpython-parser",
|
||||
"rustpython-vm",
|
||||
|
||||
@@ -27,6 +27,8 @@ serde = "1.0"
|
||||
js-sys = "0.3"
|
||||
futures = "0.1"
|
||||
generational-arena = "0.2"
|
||||
# make parking_lot use wasm-bingden for instant
|
||||
parking_lot = { version = "0.11", features = ["wasm-bindgen"] }
|
||||
|
||||
[dependencies.web-sys]
|
||||
version = "0.3"
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
use futures::Future;
|
||||
use js_sys::Promise;
|
||||
use std::sync::Arc;
|
||||
use wasm_bindgen::prelude::*;
|
||||
use wasm_bindgen::JsCast;
|
||||
use wasm_bindgen_futures::{future_to_promise, JsFuture};
|
||||
|
||||
use rustpython_vm::common::rc::PyRc;
|
||||
use rustpython_vm::function::{OptionalArg, PyFuncArgs};
|
||||
use rustpython_vm::import::import_file;
|
||||
use rustpython_vm::obj::{objdict::PyDictRef, objstr::PyStringRef, objtype::PyClassRef};
|
||||
@@ -377,7 +377,7 @@ pub fn make_module(vm: &VirtualMachine) -> PyObjectRef {
|
||||
}
|
||||
|
||||
pub fn setup_browser_module(vm: &mut VirtualMachine) {
|
||||
let state = Arc::get_mut(&mut vm.state).unwrap();
|
||||
let state = PyRc::get_mut(&mut vm.state).unwrap();
|
||||
state
|
||||
.stdlib_inits
|
||||
.insert("_browser".to_owned(), Box::new(make_module));
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use js_sys::{Array, Object, Reflect};
|
||||
use rustpython_vm::common::rc::PyRc;
|
||||
use rustpython_vm::exceptions::PyBaseExceptionRef;
|
||||
use rustpython_vm::function::Args;
|
||||
use rustpython_vm::obj::{objfloat::PyFloatRef, objstr::PyStringRef, objtype::PyClassRef};
|
||||
use rustpython_vm::pyobject::{PyClassImpl, PyObjectRef, PyRef, PyResult, PyValue, TryFromObject};
|
||||
use rustpython_vm::types::create_type;
|
||||
use rustpython_vm::VirtualMachine;
|
||||
use std::sync::Arc;
|
||||
use wasm_bindgen::{prelude::*, JsCast};
|
||||
|
||||
#[wasm_bindgen(inline_js = "
|
||||
@@ -259,7 +259,7 @@ pub fn make_module(vm: &VirtualMachine) -> PyObjectRef {
|
||||
}
|
||||
|
||||
pub fn setup_js_module(vm: &mut VirtualMachine) {
|
||||
let state = Arc::get_mut(&mut vm.state).unwrap();
|
||||
let state = PyRc::get_mut(&mut vm.state).unwrap();
|
||||
state
|
||||
.stdlib_inits
|
||||
.insert("_js".to_owned(), Box::new(make_module));
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
use std::cell::RefCell;
|
||||
use std::collections::HashMap;
|
||||
use std::rc::{Rc, Weak};
|
||||
use std::sync::Arc;
|
||||
|
||||
use js_sys::{Object, TypeError};
|
||||
use wasm_bindgen::prelude::*;
|
||||
|
||||
use rustpython_compiler::compile;
|
||||
use rustpython_vm::common::rc::{PyRc, PyWeak};
|
||||
use rustpython_vm::pyobject::{ItemProtocol, PyObject, PyObjectPayload, PyObjectRef, PyValue};
|
||||
use rustpython_vm::scope::{NameProtocol, Scope};
|
||||
use rustpython_vm::{InitParameter, PySettings, VirtualMachine};
|
||||
@@ -39,7 +39,7 @@ impl StoredVirtualMachine {
|
||||
|
||||
js_module::setup_js_module(&mut vm);
|
||||
if inject_browser_module {
|
||||
Arc::get_mut(&mut vm.state).unwrap().stdlib_inits.insert(
|
||||
PyRc::get_mut(&mut vm.state).unwrap().stdlib_inits.insert(
|
||||
"_window".to_owned(),
|
||||
Box::new(|vm| {
|
||||
py_module!(vm, "_window", {
|
||||
@@ -177,9 +177,9 @@ impl WASMVirtualMachine {
|
||||
pub(crate) fn push_held_rc(
|
||||
&self,
|
||||
obj: PyObjectRef,
|
||||
) -> Result<std::sync::Weak<PyObject<dyn PyObjectPayload>>, JsValue> {
|
||||
) -> Result<PyWeak<PyObject<dyn PyObjectPayload>>, JsValue> {
|
||||
self.with(|stored_vm| {
|
||||
let weak = std::sync::Arc::downgrade(&obj);
|
||||
let weak = PyRc::downgrade(&obj);
|
||||
stored_vm.held_objects.borrow_mut().push(obj);
|
||||
weak
|
||||
})
|
||||
|
||||
Reference in new issue
Block a user