summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-01-15 16:53:02 +0100
committerLaurenz <laurmaedje@gmail.com>2021-01-15 16:53:02 +0100
commitd763f0f5a6a700352ee8926c15c8e58624f705c9 (patch)
treed287edfdab9793a796404516c7313689e4e69964 /src/library
parent0f0416054f263b80ccec1a463ce4ab20913bdf71 (diff)
Split state and scopes, less ref-counting 🔀
Diffstat (limited to 'src/library')
-rw-r--r--src/library/insert.rs6
-rw-r--r--src/library/mod.rs7
-rw-r--r--src/library/style.rs5
3 files changed, 8 insertions, 10 deletions
diff --git a/src/library/insert.rs b/src/library/insert.rs
index 51cbbf52..58e8a11c 100644
--- a/src/library/insert.rs
+++ b/src/library/insert.rs
@@ -16,12 +16,9 @@ pub fn image(ctx: &mut EvalContext, args: &mut Args) -> Value {
let height = args.get(ctx, "height");
if let Some(path) = path {
- let mut env = ctx.env.borrow_mut();
- let loaded = env.resources.load(path.v, ImageResource::parse);
-
+ let loaded = ctx.env.resources.load(path.v, ImageResource::parse);
if let Some((res, img)) = loaded {
let dimensions = img.buf.dimensions();
- drop(env);
ctx.push(NodeImage {
res,
dimensions,
@@ -30,7 +27,6 @@ pub fn image(ctx: &mut EvalContext, args: &mut Args) -> Value {
align: ctx.state.align,
});
} else {
- drop(env);
ctx.diag(error!(path.span, "failed to load image"));
}
}
diff --git a/src/library/mod.rs b/src/library/mod.rs
index f9047fc6..5c4e774c 100644
--- a/src/library/mod.rs
+++ b/src/library/mod.rs
@@ -1,4 +1,7 @@
//! The standard library.
+//!
+//! Call [`new`] to obtain a [`Scope`] containing all standard library
+//! definitions.
mod extend;
mod insert;
@@ -15,8 +18,8 @@ use fontdock::{FontStretch, FontStyle, FontWeight};
use crate::eval::{Scope, ValueAny, ValueFunc};
use crate::geom::Dir;
-/// The scope containing the standard library.
-pub fn _std() -> Scope {
+/// Construct a scope containing all standard library definitions.
+pub fn new() -> Scope {
let mut std = Scope::new();
macro_rules! set {
(func: $name:expr, $func:expr) => {
diff --git a/src/library/style.rs b/src/library/style.rs
index 7b2772cc..2e348440 100644
--- a/src/library/style.rs
+++ b/src/library/style.rs
@@ -1,5 +1,4 @@
use std::fmt::{self, Display, Formatter};
-use std::rc::Rc;
use fontdock::{FontStretch, FontStyle, FontWeight};
@@ -69,7 +68,7 @@ pub fn font(ctx: &mut EvalContext, args: &mut Args) -> Value {
let list: Vec<_> = args.filter::<FontFamily>(ctx).map(|f| f.to_string()).collect();
if !list.is_empty() {
- let families = Rc::make_mut(&mut ctx.state.font.families);
+ let families = ctx.state.font.families_mut();
families.list = list;
families.flatten();
}
@@ -89,7 +88,7 @@ pub fn font(ctx: &mut EvalContext, args: &mut Args) -> Value {
for variant in FontFamily::VARIANTS {
if let Some(FontFamilies(list)) = args.get(ctx, variant.as_str()) {
let strings = list.into_iter().map(|f| f.to_string()).collect();
- let families = Rc::make_mut(&mut ctx.state.font.families);
+ let families = ctx.state.font.families_mut();
families.update_class_list(variant.to_string(), strings);
families.flatten();
}