Use PyRc in rustpython_wasm

This commit is contained in:
Noah authored and coolreader18 committed 2020-07-25 15:22:03 -04:00
1 parent 642a1ee7ee
commit 76df8773e7
5 files changed
+16 -8

No files matched your search

Generated
+6
View File
@@ -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",
+2
View File
@@ -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"
+2 -2
View File
@@ -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));
+2 -2
View File
@@ -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));
+4 -4
View File
@@ -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
})