Skip to content

Commit 10b403c

Browse files
committed
Refactor environment to Rc::Weak and centralize ownership to runtime
1 parent 9a87865 commit 10b403c

38 files changed

+608
-324
lines changed

src/bytecode/src/builtin/conv/atoi.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const ATOI_SYM: &str = "atoi";
88

9-
pub fn atoi(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn atoi() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: ATOI_SYM.into(),
1313
prms: vec!["s".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/conv/float_to_int.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const FLOAT_TO_INT_SYM: &str = "float_to_int";
88

9-
pub fn float_to_int(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn float_to_int() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: FLOAT_TO_INT_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/conv/int_to_float.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
6-
5+
use crate::{FnType, Value, W};
76
pub const INT_TO_FLOAT_SYM: &str = "int_to_float";
87

9-
pub fn int_to_float(global_env: Rc<RefCell<Environment>>) -> Value {
8+
pub fn int_to_float() -> Value {
109
Value::Closure {
1110
fn_type: FnType::Builtin,
1211
sym: INT_TO_FLOAT_SYM.into(),
1312
prms: vec!["x".into()],
1413
addr: 0,
15-
env: global_env,
14+
env: W(Weak::new()),
1615
}
1716
}
1817

src/bytecode/src/builtin/conv/itoa.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const ITOA_SYM: &str = "itoa";
88

9-
pub fn itoa(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn itoa() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: ITOA_SYM.into(),
1313
prms: vec!["i".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/abs.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{type_of, ByteCodeError, Environment, FnType, Value};
5+
use crate::{type_of, ByteCodeError, FnType, Value, W};
66

77
pub const ABS_SYM: &str = "abs";
88

9-
pub fn abs(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn abs() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: ABS_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/cos.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const COS_SYM: &str = "cos";
88

9-
pub fn cos(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn cos() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: COS_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/log.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const LOG_SYM: &str = "log";
88

9-
pub fn log(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn log() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: LOG_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/max.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const MAX_SYM: &str = "max";
88

9-
pub fn max(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn max() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: MAX_SYM.into(),
1313
prms: vec!["v1".into(), "v2".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/min.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{type_of, ByteCodeError, Environment, FnType, Value};
5+
use crate::{type_of, ByteCodeError, FnType, Value, W};
66

77
pub const MIN_SYM: &str = "min";
88

9-
pub fn min(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn min() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: MIN_SYM.into(),
1313
prms: vec!["v1".into(), "v2".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/pow.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const POW_SYM: &str = "pow";
88

9-
pub fn pow(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn pow() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: POW_SYM.into(),
1313
prms: vec!["base".into(), "exp".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/sin.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const SIN_SYM: &str = "sin";
88

9-
pub fn sin(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn sin() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: SIN_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/sqrt.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const SQRT_SYM: &str = "sqrt";
88

9-
pub fn sqrt(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn sqrt() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: SQRT_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/math/tan.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const TAN_SYM: &str = "tan";
88

9-
pub fn tan(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn tan() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: TAN_SYM.into(),
1313
prms: vec!["x".into()],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/semaphore/sem_create.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

3-
use crate::{Environment, FnType, Semaphore, Value};
3+
use crate::{FnType, Semaphore, Value, W};
44

55
pub const SEM_CREATE_SYM: &str = "sem_create";
66

7-
pub fn sem_create(global_env: Rc<RefCell<Environment>>) -> Value {
7+
pub fn sem_create() -> Value {
88
Value::Closure {
99
fn_type: FnType::Builtin,
1010
sym: SEM_CREATE_SYM.into(),
1111
prms: vec![],
1212
addr: 0,
13-
env: global_env,
13+
env: W(Weak::new()),
1414
}
1515
}
1616

src/bytecode/src/builtin/semaphore/sem_set.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Semaphore, Value};
5+
use crate::{FnType, Semaphore, Value, W};
66

77
pub const SEM_SET_SYM: &str = "sem_set";
88

9-
pub fn sem_set(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn sem_set() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: SEM_SET_SYM.into(),
1313
prms: vec![],
1414
addr: 2,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/stdin/read_line.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

33
use anyhow::Result;
44

5-
use crate::{Environment, FnType, Value};
5+
use crate::{FnType, Value, W};
66

77
pub const READ_LINE_SYM: &str = "read_line";
88

9-
pub fn read_line(global_env: Rc<RefCell<Environment>>) -> Value {
9+
pub fn read_line() -> Value {
1010
Value::Closure {
1111
fn_type: FnType::Builtin,
1212
sym: READ_LINE_SYM.into(),
1313
prms: vec![],
1414
addr: 0,
15-
env: global_env,
15+
env: W(Weak::new()),
1616
}
1717
}
1818

src/bytecode/src/builtin/stdout/print.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
use std::{cell::RefCell, rc::Rc};
1+
use std::rc::Weak;
22

3-
use crate::{Environment, FnType, Value};
3+
use crate::{FnType, Value, W};
44

55
pub const PRINT_SYM: &str = "print";
66

7-
pub fn print(global_env: Rc<RefCell<Environment>>) -> Value {
7+
pub fn print() -> Value {
88
Value::Closure {
99
fn_type: FnType::Builtin,
1010
sym: PRINT_SYM.into(),
1111
prms: vec!["s".into()],
1212
addr: 0,
13-
env: global_env,
13+
env: W(Weak::new()),
1414
}
1515
}
1616

0 commit comments

Comments
 (0)