pub struct RuleLibrary { /* private fields */ }Expand description
Validated rule collection with indexes for matcher candidate lookup.
Implementations§
Source§impl RuleLibrary
impl RuleLibrary
Sourcepub fn builtin_rules() -> Result<&'static RuleLibrary, RuleLibraryError>
pub fn builtin_rules() -> Result<&'static RuleLibrary, RuleLibraryError>
Returns the lazily loaded builtin compiler rule library.
Builtin sources are embedded at compile time and validated while the library is initialized.
Sourcepub fn from_rules(
rules: Vec<Rule>,
kind: RuleKind,
) -> Result<Self, RuleLibraryError>
pub fn from_rules( rules: Vec<Rule>, kind: RuleKind, ) -> Result<Self, RuleLibraryError>
Builds a library from already constructed rules.
Rules are structurally validated before insertion.
Sourcepub fn from_dsl_str(
source: &str,
kind: RuleKind,
) -> Result<Self, RuleLibraryError>
pub fn from_dsl_str( source: &str, kind: RuleKind, ) -> Result<Self, RuleLibraryError>
Parses and validates rules from a DSL source string.
Sourcepub fn from_dsl_file(
path: impl AsRef<Path>,
kind: RuleKind,
) -> Result<Self, RuleLibraryError>
pub fn from_dsl_file( path: impl AsRef<Path>, kind: RuleKind, ) -> Result<Self, RuleLibraryError>
Loads, parses, and validates rules from a DSL file.
Sourcepub fn add_rule(
&mut self,
rule: Rule,
kind: RuleKind,
validate: bool,
) -> Result<RuleId, RuleLibraryError>
pub fn add_rule( &mut self, rule: Rule, kind: RuleKind, validate: bool, ) -> Result<RuleId, RuleLibraryError>
Adds one rule to the library and returns its assigned id.
When validate is true, structural validation runs before indexing.
Builtin rule loading may pass false after DSL lowering has already
produced trusted validated rules.
Sourcepub fn extend_rules(
&mut self,
rules: Vec<Rule>,
kind: RuleKind,
) -> Result<SmallVec<[RuleId; 8]>, RuleLibraryError>
pub fn extend_rules( &mut self, rules: Vec<Rule>, kind: RuleKind, ) -> Result<SmallVec<[RuleId; 8]>, RuleLibraryError>
Extends the library with structurally validated rules of one kind.
The update is atomic with respect to this library: if any rule fails, the original library is left unchanged.
Sourcepub fn metadata(&self, id: RuleId) -> Option<&RuleMetadata>
pub fn metadata(&self, id: RuleId) -> Option<&RuleMetadata>
Returns precomputed metadata for a rule id.
Sourcepub fn id_by_name(&self, name: &str) -> Option<RuleId>
pub fn id_by_name(&self, name: &str) -> Option<RuleId>
Looks up a rule id by rule name.
Sourcepub fn get_by_name(&self, name: &str) -> Option<&Rule>
pub fn get_by_name(&self, name: &str) -> Option<&Rule>
Looks up a rule by rule name.
Sourcepub fn candidates_for_first_instruction(
&self,
instruction: &Instruction,
) -> Result<&[RuleId], RuleLibraryError>
pub fn candidates_for_first_instruction( &self, instruction: &Instruction, ) -> Result<&[RuleId], RuleLibraryError>
Returns rules whose first match instruction has the same matcher key.
Sourcepub fn rules_by_kind(&self, kind: RuleKind) -> &[RuleId]
pub fn rules_by_kind(&self, kind: RuleKind) -> &[RuleId]
Returns rules registered under a coarse compiler kind.
Sourcepub fn filter_rule_ids_by_instruction_keys(
&self,
op_instructions: &[Instruction],
target_instructions: &[Instruction],
) -> Result<SmallVec<[RuleId; 16]>, RuleLibraryError>
pub fn filter_rule_ids_by_instruction_keys( &self, op_instructions: &[Instruction], target_instructions: &[Instruction], ) -> Result<SmallVec<[RuleId; 16]>, RuleLibraryError>
Filters rules by required match-side and rewrite-side instruction keys.
A rule is returned only when every instruction key in its match pattern
is present in op_instructions and every rewrite target key is present
in target_instructions.
Trait Implementations§
Source§impl Clone for RuleLibrary
impl Clone for RuleLibrary
Source§impl Debug for RuleLibrary
impl Debug for RuleLibrary
Auto Trait Implementations§
impl Freeze for RuleLibrary
impl RefUnwindSafe for RuleLibrary
impl Send for RuleLibrary
impl Sync for RuleLibrary
impl Unpin for RuleLibrary
impl UnsafeUnpin for RuleLibrary
impl UnwindSafe for RuleLibrary
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.impl<T, U> Imply<T> for U
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.