diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-01-15 16:53:02 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-01-15 16:53:02 +0100 |
| commit | d763f0f5a6a700352ee8926c15c8e58624f705c9 (patch) | |
| tree | d287edfdab9793a796404516c7313689e4e69964 /src/library | |
| parent | 0f0416054f263b80ccec1a463ce4ab20913bdf71 (diff) | |
Split state and scopes, less ref-counting 🔀
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/insert.rs | 6 | ||||
| -rw-r--r-- | src/library/mod.rs | 7 | ||||
| -rw-r--r-- | src/library/style.rs | 5 |
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(); } |
