Skip to content

extract small_map as separate utility crate #4214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 18 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
8 changes: 8 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ boa_string = { version = "~0.20.0", path = "core/string" }

# Utility Repo Crates
tag_ptr = { path = "utils/tag_ptr" }
small_map = { path = "utils/small_map" }

# Shared deps
arbitrary = "1"
Expand Down
2 changes: 2 additions & 0 deletions cli/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
2 changes: 2 additions & 0 deletions core/ast/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
2 changes: 2 additions & 0 deletions core/engine/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
1 change: 1 addition & 0 deletions core/engine/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,7 @@ ryu-js.workspace = true
fast-float2.workspace = true
once_cell = { workspace = true, features = ["std"] }
tap.workspace = true
small_map.workspace = true

thiserror.workspace = true
dashmap.workspace = true
Expand Down
7 changes: 3 additions & 4 deletions core/engine/src/builtins/atomics/futex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,9 @@ mod sync {

use intrusive_collections::{intrusive_adapter, LinkedList, LinkedListLink, UnsafeRef};

use crate::{
small_map::{Entry, SmallMap},
JsNativeError, JsResult,
};
use small_map::{Entry, SmallMap};

use crate::{JsNativeError, JsResult};

/// A waiter of a memory address.
#[derive(Debug, Default)]
Expand Down
1 change: 0 additions & 1 deletion core/engine/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ pub mod value;
pub mod vm;

mod host_defined;
mod small_map;
mod sys;

mod spanned_source_text;
Expand Down
2 changes: 1 addition & 1 deletion core/engine/src/module/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ pub fn resolve_module_specifier(

// On Windows, also replace `/` with `\`. JavaScript imports use `/` as path separator.
#[cfg(target_family = "windows")]
let specifier = specifier.replace("/", "\\");
let specifier = specifier.replace('/', "\\");

let short_path = Path::new(&specifier);

Expand Down
1 change: 1 addition & 0 deletions core/gc/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand Down
1 change: 1 addition & 0 deletions core/icu_provider/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand Down
1 change: 1 addition & 0 deletions core/interner/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand Down
2 changes: 2 additions & 0 deletions core/macros/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
2 changes: 2 additions & 0 deletions core/parser/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
2 changes: 2 additions & 0 deletions core/profiler/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that add SmallMap data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
2 changes: 2 additions & 0 deletions core/runtime/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
2 changes: 2 additions & 0 deletions core/string/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
42 changes: 42 additions & 0 deletions utils/small_map/ABOUT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
# About Boa

Boa is an open-source, experimental ECMAScript Engine written in Rust for
lexing, parsing and executing ECMAScript/JavaScript. Currently, Boa supports some
of the [language][boa-conformance]. More information can be viewed at [Boa's
website][boa-web].

Try out the most recent release with Boa's live demo
[playground][boa-playground].

## Boa Crates

- [**`boa_cli`**][cli] - Boa's CLI && REPL implementation
- [**`boa_ast`**][ast] - Boa's ECMAScript Abstract Syntax Tree.
- [**`boa_engine`**][engine] - Boa's implementation of ECMAScript builtin objects and execution.
- [**`boa_gc`**][gc] - Boa's garbage collector.
- [**`boa_icu_provider`**][icu] - Boa's ICU4X data provider.
- [**`boa_interner`**][interner] - Boa's string interner.
- [**`boa_macros`**][macros] - Boa's macros.
- [**`boa_parser`**][parser] - Boa's lexer and parser.
- [**`boa_profiler`**][profiler] - Boa's code profiler.
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
[boa-playground]: https://boajs.dev/playground
[ast]: https://docs.rs/boa_ast/latest/boa_ast/index.html
[engine]: https://docs.rs/boa_engine/latest/boa_engine/index.html
[gc]: https://docs.rs/boa_gc/latest/boa_gc/index.html
[interner]: https://docs.rs/boa_interner/latest/boa_interner/index.html
[parser]: https://docs.rs/boa_parser/latest/boa_parser/index.html
[profiler]: https://docs.rs/boa_profiler/latest/boa_profiler/index.html
[icu]: https://docs.rs/boa_icu_provider/latest/boa_icu_provider/index.html
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
22 changes: 22 additions & 0 deletions utils/small_map/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
[package]
name = "small_map"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both small_map and smallmap are taken names. Maybe we should think of a different name? any ideas @boa-dev/maintainers ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

small_btree?

keywords = ["small", "map"]
categories = ["data-structures"]
readme = "../../README.md"
description = "Utility library that add SmallMap data structure"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe describe the data-structure instead, something like SmallMap is an inline vec that grows into a heap map past ARRAY_SIZE

version = "0.1.0"
edition.workspace = true
authors.workspace = true
license.workspace = true
repository.workspace = true
rust-version.workspace = true


[lints]
workspace = true

[package.metadata.docs.rs]
all-features = true

[dependencies]
arrayvec.workspace = true
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> Entry<'a, K, V, ARRAY_SIZE> {

/// Provides in-place mutable access to an occupied entry before any
/// potential inserts into the map.
#[must_use]
pub fn and_modify<F>(self, f: F) -> Self
where
F: FnOnce(&mut V),
Expand Down Expand Up @@ -169,6 +170,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> VacantEntry<'a, K, V, ARRAY_SIZE> {

impl<'a, K: Ord, V, const ARRAY_SIZE: usize> OccupiedEntry<'a, K, V, ARRAY_SIZE> {
/// Gets a reference to the key in the entry.
#[must_use]
pub fn key(&self) -> &K {
match &self.inner {
InnerOccupied::Inline(o) => o.key(),
Expand All @@ -177,6 +179,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> OccupiedEntry<'a, K, V, ARRAY_SIZE>
}

/// Takes ownership of the key and value from the map.
#[must_use]
pub fn remove_entry(self) -> (K, V) {
match self.inner {
InnerOccupied::Inline(o) => o.remove_entry(),
Expand All @@ -185,6 +188,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> OccupiedEntry<'a, K, V, ARRAY_SIZE>
}

/// Gets a reference to the value in the entry.
#[must_use]
pub fn get(&self) -> &V {
match &self.inner {
InnerOccupied::Inline(o) => o.get(),
Expand All @@ -210,6 +214,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> OccupiedEntry<'a, K, V, ARRAY_SIZE>
/// If you need multiple references to the `OccupiedEntry`, see [`get_mut`].
///
/// [`get_mut`]: OccupiedEntry::get_mut
#[must_use]
pub fn into_mut(self) -> &'a mut V {
match self.inner {
InnerOccupied::Inline(o) => o.into_mut(),
Expand All @@ -219,6 +224,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> OccupiedEntry<'a, K, V, ARRAY_SIZE>

/// Sets the value of the entry with the `OccupiedEntry`'s key,
/// and returns the entry's old value.
#[must_use]
Copy link
Member

@nekevss nekevss Mar 27, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Huh, actually after seeing the broken lints, I'm wondering if both insert and remove should have a must_use attribute. It might be a bit too strict

While the failure's aren't exactly incorrect, it feels like a negative of the API to force users to use let _ = map.insert(value) vs. map.insert(value)

pub fn insert(&mut self, value: V) -> V {
match &mut self.inner {
InnerOccupied::Inline(o) => o.insert(value),
Expand All @@ -227,6 +233,7 @@ impl<'a, K: Ord, V, const ARRAY_SIZE: usize> OccupiedEntry<'a, K, V, ARRAY_SIZE>
}

/// Takes the value of the entry out of the map, and returns it.
#[must_use]
pub fn remove(self) -> V {
match self.inner {
InnerOccupied::Inline(o) => o.remove(),
Expand Down
12 changes: 8 additions & 4 deletions core/engine/src/small_map/mod.rs → utils/small_map/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// TODO: Maybe extract to a separate crate? It could be useful for some applications.
#![allow(unreachable_pub)]
#![allow(unused)]
//! A crate that provides a `SmallMap` collection, which is initially backed by an inline vec
//! but changes its backing to a heap map if its number of elements exceeds `ARRAY_SIZE`.
//!
//! This provides performance benefits for maps that are expected to be small most of the time,
//! by avoiding heap allocations for the common case while still supporting larger collections when needed.


use std::{
borrow::Borrow,
Expand All @@ -22,7 +25,7 @@ use Entry::{Occupied, Vacant};
/// A map that is initially backed by an inline vec, but changes its backing to a heap map if its
/// number of elements exceeds `ARRAY_SIZE`.
#[derive(Clone)]
pub(crate) struct SmallMap<K, V, const ARRAY_SIZE: usize> {
pub struct SmallMap<K, V, const ARRAY_SIZE: usize> {
inner: Inner<K, V, ARRAY_SIZE>,
}

Expand Down Expand Up @@ -137,6 +140,7 @@ impl<K, V, const ARRAY_SIZE: usize> Default for IntoIter<K, V, ARRAY_SIZE> {

impl<K, V, const ARRAY_SIZE: usize> SmallMap<K, V, ARRAY_SIZE> {
/// Makes a new, empty `SmallMap`.
#[must_use]
pub const fn new() -> Self {
Self {
inner: Inner::Inline(ArrayVec::new_const()),
Expand Down
2 changes: 2 additions & 0 deletions utils/tag_ptr/ABOUT.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Try out the most recent release with Boa's live demo
- [**`boa_runtime`**][runtime] - Boa's WebAPI features.
- [**`boa_string`**][string] - Boa's ECMAScript string implementation.
- [**`tag_ptr`**][tag_ptr] - Utility library that enables a pointer to be associated with a tag of type `usize`.
- [**`small_map`**][small_map] - Utility library that adds the `SmallMap` data structure.

[boa-conformance]: https://boajs.dev/conformance
[boa-web]: https://boajs.dev/
Expand All @@ -36,5 +37,6 @@ Try out the most recent release with Boa's live demo
[runtime]: https://docs.rs/boa_runtime/latest/boa_runtime/index.html
[string]: https://docs.rs/boa_string/latest/boa_string/index.html
[tag_ptr]: https://docs.rs/tag_ptr/latest/tag_ptr/index.html
[small_map]: https://docs.rs/small_map/latest/small_map/index.html
[macros]: https://docs.rs/boa_macros/latest/boa_macros/index.html
[cli]: https://crates.io/crates/boa_cli
Loading