From e88ec6736c12dd8b6afe07e8a80230988d24fe77 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 13 Mar 2022 12:53:31 -0600 Subject: [PATCH] add (:) meta-predicate argument indicator (#1302) --- src/forms.rs | 1 + src/loader.pl | 5 +++++ src/machine/loader.rs | 1 + src/machine/preprocessor.rs | 1 + 4 files changed, 8 insertions(+) diff --git a/src/forms.rs b/src/forms.rs index aef5ad95..a3c2b354 100644 --- a/src/forms.rs +++ b/src/forms.rs @@ -267,6 +267,7 @@ pub enum MetaSpec { Minus, Plus, Either, + Colon, RequiresExpansionWithArgument(usize), } diff --git a/src/loader.pl b/src/loader.pl index cb872035..b0bc5a6d 100644 --- a/src/loader.pl +++ b/src/loader.pl @@ -213,6 +213,9 @@ inner_meta_specs(0, HeadArg, InnerHeadArgs, InnerMetaSpecs) :- InnerMetaSpecs0 =.. [_ | InnerMetaSpecs], HeadArg =.. [_ | InnerHeadArgs]. +inner_meta_specs((:), _, [], []) :- + !. + inner_meta_specs(N, HeadArg, InnerHeadArgs, InnerMetaSpecs) :- integer(N), N >= 0, @@ -636,6 +639,7 @@ expand_module_name(ESG0, MS, M, ESG) :- ; ESG0 = _:_ -> ESG = ESG0 ; functor(ESG0, F, A0), + integer(MS), A is A0 + MS, functor(EESG0, F, A), predicate_property(EESG0, built_in) -> @@ -647,6 +651,7 @@ expand_module_name(ESG0, MS, M, ESG) :- expand_meta_predicate_subgoals([SG | SGs], [MS | MSs], M, [ESG | ESGs], HeadVars) :- ( ( integer(MS), MS >= 0 + ; MS == (:) ) -> ( var(SG), pairs:same_key(SG, HeadVars, [_|_], _) -> diff --git a/src/machine/loader.rs b/src/machine/loader.rs index ce251e84..2ab85de4 100644 --- a/src/machine/loader.rs +++ b/src/machine/loader.rs @@ -2200,6 +2200,7 @@ impl Machine { MetaSpec::Minus => atom_as_cell!(atom!("+")), MetaSpec::Plus => atom_as_cell!(atom!("-")), MetaSpec::Either => atom_as_cell!(atom!("?")), + MetaSpec::Colon => atom_as_cell!(atom!(":")), MetaSpec::RequiresExpansionWithArgument(ref arg_num) => { fixnum_as_cell!(Fixnum::build_with(*arg_num as i64)) } diff --git a/src/machine/preprocessor.rs b/src/machine/preprocessor.rs index 50a46947..bd3c9211 100644 --- a/src/machine/preprocessor.rs +++ b/src/machine/preprocessor.rs @@ -296,6 +296,7 @@ fn setup_meta_predicate<'a, LS: LoadState<'a>>( atom!("+") => MetaSpec::Plus, atom!("-") => MetaSpec::Minus, atom!("?") => MetaSpec::Either, + atom!(":") => MetaSpec::Colon, _ => return Err(CompilationError::InvalidMetaPredicateDecl), }; -- 2.54.0