summaryrefslogtreecommitdiff
path: root/src/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/model')
-rw-r--r--src/model/args.rs4
-rw-r--r--src/model/content.rs13
-rw-r--r--src/model/eval.rs2
-rw-r--r--src/model/func.rs2
-rw-r--r--src/model/symbol.rs9
5 files changed, 15 insertions, 15 deletions
diff --git a/src/model/args.rs b/src/model/args.rs
index 9ab07ed8..159e9a77 100644
--- a/src/model/args.rs
+++ b/src/model/args.rs
@@ -1,5 +1,7 @@
use std::fmt::{self, Debug, Formatter, Write};
+use ecow::EcoVec;
+
use super::{Array, Cast, Dict, Str, Value};
use crate::diag::{bail, At, SourceResult};
use crate::syntax::{Span, Spanned};
@@ -10,7 +12,7 @@ pub struct Args {
/// The span of the whole argument list.
pub span: Span,
/// The positional and named arguments.
- pub items: Vec<Arg>,
+ pub items: EcoVec<Arg>,
}
/// An argument to a function call: `12` or `draw: false`.
diff --git a/src/model/content.rs b/src/model/content.rs
index fde0a5cd..b8047ffa 100644
--- a/src/model/content.rs
+++ b/src/model/content.rs
@@ -6,9 +6,8 @@ use std::ops::{Add, AddAssign};
use std::sync::Arc;
use comemo::Tracked;
-use ecow::EcoString;
+use ecow::{EcoString, EcoVec};
use siphasher::sip128::{Hasher128, SipHasher};
-use thin_vec::ThinVec;
use typst_macros::node;
use super::{
@@ -25,7 +24,7 @@ use crate::World;
pub struct Content {
obj: Arc<dyn Bounds>,
span: Option<Span>,
- modifiers: ThinVec<Modifier>,
+ modifiers: EcoVec<Modifier>,
}
/// Modifiers that can be attached to content.
@@ -68,9 +67,9 @@ impl Content {
/// Attach a label to the content.
pub fn labelled(mut self, label: Label) -> Self {
- for modifier in &mut self.modifiers {
- if let Modifier::Label(prev) = modifier {
- *prev = label;
+ for (i, modifier) in self.modifiers.iter().enumerate() {
+ if matches!(modifier, Modifier::Label(_)) {
+ self.modifiers.make_mut()[i] = Modifier::Label(label);
return self;
}
}
@@ -408,7 +407,7 @@ pub trait Node: 'static + Capable {
Content {
obj: Arc::new(self),
span: None,
- modifiers: ThinVec::new(),
+ modifiers: EcoVec::new(),
}
}
diff --git a/src/model/eval.rs b/src/model/eval.rs
index 7d48b598..225c5e7a 100644
--- a/src/model/eval.rs
+++ b/src/model/eval.rs
@@ -1033,7 +1033,7 @@ impl Eval for ast::Args {
type Output = Args;
fn eval(&self, vm: &mut Vm) -> SourceResult<Self::Output> {
- let mut items = Vec::new();
+ let mut items = EcoVec::new();
for arg in self.items() {
let span = arg.span();
diff --git a/src/model/func.rs b/src/model/func.rs
index 216ee806..654b7e65 100644
--- a/src/model/func.rs
+++ b/src/model/func.rs
@@ -115,7 +115,7 @@ impl Func {
Repr::Native(native) => (native.func)(vm, &mut args)?,
Repr::Closure(closure) => closure.call(vm, self, &mut args)?,
Repr::With(wrapped, applied) => {
- args.items.splice(..0, applied.items.iter().cloned());
+ args.items = applied.items.iter().cloned().chain(args.items).collect();
return wrapped.call(vm, args);
}
};
diff --git a/src/model/symbol.rs b/src/model/symbol.rs
index fafebd99..73c41067 100644
--- a/src/model/symbol.rs
+++ b/src/model/symbol.rs
@@ -1,9 +1,8 @@
use std::cmp::Reverse;
use std::collections::BTreeSet;
use std::fmt::{self, Debug, Display, Formatter, Write};
-use std::sync::Arc;
-use ecow::EcoString;
+use ecow::{EcoString, EcoVec};
use crate::diag::StrResult;
@@ -22,7 +21,7 @@ pub struct Symbol {
enum Repr {
Single(char),
Static(&'static [(&'static str, char)]),
- Runtime(Arc<Vec<(EcoString, char)>>),
+ Runtime(EcoVec<(EcoString, char)>),
}
impl Symbol {
@@ -43,10 +42,10 @@ impl Symbol {
/// Create a symbol with a runtime variant list.
#[track_caller]
- pub fn runtime(list: Vec<(EcoString, char)>) -> Self {
+ pub fn runtime(list: EcoVec<(EcoString, char)>) -> Self {
debug_assert!(!list.is_empty());
Self {
- repr: Repr::Runtime(Arc::new(list)),
+ repr: Repr::Runtime(list),
modifiers: EcoString::new(),
}
}