Use ImmutableString for AST.
This commit is contained in:
parent
28743594d0
commit
9813f657bb
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,11 +3,8 @@ Cargo.lock
|
|||||||
.vscode/
|
.vscode/
|
||||||
.cargo/
|
.cargo/
|
||||||
benches/results
|
benches/results
|
||||||
.rhai-repl-history.txt
|
|
||||||
clippy.toml
|
clippy.toml
|
||||||
Rhai.toml
|
Rhai.toml
|
||||||
before*
|
|
||||||
after*
|
|
||||||
**/*.bat
|
**/*.bat
|
||||||
doc/rhai-sync.json
|
doc/rhai-sync.json
|
||||||
doc/rhai.json
|
doc/rhai.json
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#![cfg(not(feature = "no_function"))]
|
#![cfg(not(feature = "no_function"))]
|
||||||
|
|
||||||
use super::{FnAccess, StmtBlock};
|
use super::{FnAccess, StmtBlock};
|
||||||
use crate::{Identifier, ImmutableString, StaticVec};
|
use crate::{ImmutableString, StaticVec};
|
||||||
#[cfg(feature = "no_std")]
|
#[cfg(feature = "no_std")]
|
||||||
use std::prelude::v1::*;
|
use std::prelude::v1::*;
|
||||||
use std::{fmt, hash::Hash};
|
use std::{fmt, hash::Hash};
|
||||||
@ -22,7 +22,7 @@ pub struct EncapsulatedEnviron {
|
|||||||
/// Functions defined within the same [`AST`][crate::AST].
|
/// Functions defined within the same [`AST`][crate::AST].
|
||||||
pub lib: crate::Shared<crate::Module>,
|
pub lib: crate::Shared<crate::Module>,
|
||||||
/// Imported [modules][crate::Module].
|
/// Imported [modules][crate::Module].
|
||||||
pub imports: Box<[(Identifier, crate::Shared<crate::Module>)]>,
|
pub imports: Box<[(ImmutableString, crate::Shared<crate::Module>)]>,
|
||||||
/// Globally-defined constants.
|
/// Globally-defined constants.
|
||||||
pub constants: Option<crate::eval::GlobalConstants>,
|
pub constants: Option<crate::eval::GlobalConstants>,
|
||||||
}
|
}
|
||||||
|
@ -25,7 +25,7 @@ pub type GlobalConstants =
|
|||||||
pub struct GlobalRuntimeState<'a> {
|
pub struct GlobalRuntimeState<'a> {
|
||||||
/// Stack of module names.
|
/// Stack of module names.
|
||||||
#[cfg(not(feature = "no_module"))]
|
#[cfg(not(feature = "no_module"))]
|
||||||
keys: crate::StaticVec<Identifier>,
|
keys: crate::StaticVec<ImmutableString>,
|
||||||
/// Stack of imported [modules][crate::Module].
|
/// Stack of imported [modules][crate::Module].
|
||||||
#[cfg(not(feature = "no_module"))]
|
#[cfg(not(feature = "no_module"))]
|
||||||
modules: crate::StaticVec<crate::Shared<crate::Module>>,
|
modules: crate::StaticVec<crate::Shared<crate::Module>>,
|
||||||
@ -159,7 +159,7 @@ impl GlobalRuntimeState<'_> {
|
|||||||
self.keys
|
self.keys
|
||||||
.iter()
|
.iter()
|
||||||
.rev()
|
.rev()
|
||||||
.position(|key| key == name)
|
.position(|key| key.as_str() == name)
|
||||||
.map(|i| len - 1 - i)
|
.map(|i| len - 1 - i)
|
||||||
}
|
}
|
||||||
/// Push an imported [module][crate::Module] onto the stack.
|
/// Push an imported [module][crate::Module] onto the stack.
|
||||||
@ -169,7 +169,7 @@ impl GlobalRuntimeState<'_> {
|
|||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn push_import(
|
pub fn push_import(
|
||||||
&mut self,
|
&mut self,
|
||||||
name: impl Into<Identifier>,
|
name: impl Into<ImmutableString>,
|
||||||
module: impl Into<crate::Shared<crate::Module>>,
|
module: impl Into<crate::Shared<crate::Module>>,
|
||||||
) {
|
) {
|
||||||
self.keys.push(name.into());
|
self.keys.push(name.into());
|
||||||
@ -205,7 +205,7 @@ impl GlobalRuntimeState<'_> {
|
|||||||
#[inline]
|
#[inline]
|
||||||
pub(crate) fn iter_imports_raw(
|
pub(crate) fn iter_imports_raw(
|
||||||
&self,
|
&self,
|
||||||
) -> impl Iterator<Item = (&Identifier, &crate::Shared<crate::Module>)> {
|
) -> impl Iterator<Item = (&ImmutableString, &crate::Shared<crate::Module>)> {
|
||||||
self.keys.iter().rev().zip(self.modules.iter().rev())
|
self.keys.iter().rev().zip(self.modules.iter().rev())
|
||||||
}
|
}
|
||||||
/// Get an iterator to the stack of globally-imported [modules][crate::Module] in forward order.
|
/// Get an iterator to the stack of globally-imported [modules][crate::Module] in forward order.
|
||||||
@ -216,7 +216,7 @@ impl GlobalRuntimeState<'_> {
|
|||||||
#[inline]
|
#[inline]
|
||||||
pub fn scan_imports_raw(
|
pub fn scan_imports_raw(
|
||||||
&self,
|
&self,
|
||||||
) -> impl Iterator<Item = (&Identifier, &crate::Shared<crate::Module>)> {
|
) -> impl Iterator<Item = (&ImmutableString, &crate::Shared<crate::Module>)> {
|
||||||
self.keys.iter().zip(self.modules.iter())
|
self.keys.iter().zip(self.modules.iter())
|
||||||
}
|
}
|
||||||
/// Does the specified function hash key exist in the stack of globally-imported
|
/// Does the specified function hash key exist in the stack of globally-imported
|
||||||
@ -310,9 +310,9 @@ impl GlobalRuntimeState<'_> {
|
|||||||
|
|
||||||
#[cfg(not(feature = "no_module"))]
|
#[cfg(not(feature = "no_module"))]
|
||||||
impl IntoIterator for GlobalRuntimeState<'_> {
|
impl IntoIterator for GlobalRuntimeState<'_> {
|
||||||
type Item = (Identifier, crate::Shared<crate::Module>);
|
type Item = (ImmutableString, crate::Shared<crate::Module>);
|
||||||
type IntoIter = std::iter::Zip<
|
type IntoIter = std::iter::Zip<
|
||||||
std::iter::Rev<smallvec::IntoIter<[Identifier; 3]>>,
|
std::iter::Rev<smallvec::IntoIter<[ImmutableString; 3]>>,
|
||||||
std::iter::Rev<smallvec::IntoIter<[crate::Shared<crate::Module>; 3]>>,
|
std::iter::Rev<smallvec::IntoIter<[crate::Shared<crate::Module>; 3]>>,
|
||||||
>;
|
>;
|
||||||
|
|
||||||
@ -327,9 +327,9 @@ impl IntoIterator for GlobalRuntimeState<'_> {
|
|||||||
|
|
||||||
#[cfg(not(feature = "no_module"))]
|
#[cfg(not(feature = "no_module"))]
|
||||||
impl<'a> IntoIterator for &'a GlobalRuntimeState<'_> {
|
impl<'a> IntoIterator for &'a GlobalRuntimeState<'_> {
|
||||||
type Item = (&'a Identifier, &'a crate::Shared<crate::Module>);
|
type Item = (&'a ImmutableString, &'a crate::Shared<crate::Module>);
|
||||||
type IntoIter = std::iter::Zip<
|
type IntoIter = std::iter::Zip<
|
||||||
std::iter::Rev<std::slice::Iter<'a, Identifier>>,
|
std::iter::Rev<std::slice::Iter<'a, ImmutableString>>,
|
||||||
std::iter::Rev<std::slice::Iter<'a, crate::Shared<crate::Module>>>,
|
std::iter::Rev<std::slice::Iter<'a, crate::Shared<crate::Module>>>,
|
||||||
>;
|
>;
|
||||||
|
|
||||||
@ -341,7 +341,7 @@ impl<'a> IntoIterator for &'a GlobalRuntimeState<'_> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(feature = "no_module"))]
|
#[cfg(not(feature = "no_module"))]
|
||||||
impl<K: Into<Identifier>, M: Into<crate::Shared<crate::Module>>> Extend<(K, M)>
|
impl<K: Into<ImmutableString>, M: Into<crate::Shared<crate::Module>>> Extend<(K, M)>
|
||||||
for GlobalRuntimeState<'_>
|
for GlobalRuntimeState<'_>
|
||||||
{
|
{
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -235,7 +235,7 @@ impl<'a> NativeCallContext<'a> {
|
|||||||
#[inline]
|
#[inline]
|
||||||
pub(crate) fn iter_imports_raw(
|
pub(crate) fn iter_imports_raw(
|
||||||
&self,
|
&self,
|
||||||
) -> impl Iterator<Item = (&crate::Identifier, &Shared<Module>)> {
|
) -> impl Iterator<Item = (&crate::ImmutableString, &Shared<Module>)> {
|
||||||
self.global.iter().flat_map(|&m| m.iter_imports_raw())
|
self.global.iter().flat_map(|&m| m.iter_imports_raw())
|
||||||
}
|
}
|
||||||
/// _(internals)_ The current [`GlobalRuntimeState`], if any.
|
/// _(internals)_ The current [`GlobalRuntimeState`], if any.
|
||||||
|
Loading…
Reference in New Issue
Block a user