packages feed

dhscanner-kbgen 1.2.0 → 1.3.0

raw patch · 2 files changed

+55/−2 lines, 2 filesdep ~dhscanner-bitcodePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: dhscanner-bitcode

API changes (from Hackage documentation)

+ Kbgen: Comparison :: Cond -> Lhs -> Rhs -> ComparisonOp -> Comparison
+ Kbgen: ComparisonCtor :: Comparison -> Fact
+ Kbgen: ComparisonOp :: String -> ComparisonOp
+ Kbgen: Lhs :: Location -> Lhs
+ Kbgen: Rhs :: Location -> Rhs
+ Kbgen: data Comparison
+ Kbgen: data ComparisonOp
+ Kbgen: data Lhs
+ Kbgen: data Rhs
+ Kbgen: instance Data.Aeson.Types.FromJSON.FromJSON Kbgen.Comparison
+ Kbgen: instance Data.Aeson.Types.FromJSON.FromJSON Kbgen.ComparisonOp
+ Kbgen: instance Data.Aeson.Types.FromJSON.FromJSON Kbgen.Lhs
+ Kbgen: instance Data.Aeson.Types.FromJSON.FromJSON Kbgen.Rhs
+ Kbgen: instance Data.Aeson.Types.ToJSON.ToJSON Kbgen.Comparison
+ Kbgen: instance Data.Aeson.Types.ToJSON.ToJSON Kbgen.ComparisonOp
+ Kbgen: instance Data.Aeson.Types.ToJSON.ToJSON Kbgen.Lhs
+ Kbgen: instance Data.Aeson.Types.ToJSON.ToJSON Kbgen.Rhs
+ Kbgen: instance GHC.Classes.Eq Kbgen.Comparison
+ Kbgen: instance GHC.Classes.Eq Kbgen.ComparisonOp
+ Kbgen: instance GHC.Classes.Eq Kbgen.Lhs
+ Kbgen: instance GHC.Classes.Eq Kbgen.Rhs
+ Kbgen: instance GHC.Classes.Ord Kbgen.Comparison
+ Kbgen: instance GHC.Classes.Ord Kbgen.ComparisonOp
+ Kbgen: instance GHC.Classes.Ord Kbgen.Lhs
+ Kbgen: instance GHC.Classes.Ord Kbgen.Rhs
+ Kbgen: instance GHC.Generics.Generic Kbgen.Comparison
+ Kbgen: instance GHC.Generics.Generic Kbgen.ComparisonOp
+ Kbgen: instance GHC.Generics.Generic Kbgen.Lhs
+ Kbgen: instance GHC.Generics.Generic Kbgen.Rhs
+ Kbgen: instance GHC.Show.Show Kbgen.Comparison
+ Kbgen: instance GHC.Show.Show Kbgen.ComparisonOp
+ Kbgen: instance GHC.Show.Show Kbgen.Lhs
+ Kbgen: instance GHC.Show.Show Kbgen.Rhs

Files

dhscanner-kbgen.cabal view
@@ -33,7 +33,7 @@         * explain in plain English your query's purpose
         * et voilà !
 
-version:            1.2.0
+version:            1.3.0
 license:            GPL-3.0-only
 license-file:       LICENSE
 author:             OrenGitHub
@@ -63,7 +63,7 @@         containers < 0.7,
         text,
         dhscanner-ast >= 1.1.5,
-        dhscanner-bitcode >= 1.0.17
+        dhscanner-bitcode >= 1.1.0
 
     hs-source-dirs:
         src
src/Kbgen.hs view
@@ -72,9 +72,13 @@     ConstBoolTrue(..),
     ConstNull(..),
     GatedReturn(..),
+    Comparison(..),
     CallableReturnsValue(..),
     CallableReturnsWithoutValue(..),
     Cond(..),
+    Lhs(..),
+    Rhs(..),
+    ComparisonOp(..),
     ReturnedValue(..),
     ClassAnnotation,
     CallableAnnotation,
@@ -996,6 +1000,44 @@ -- This is how the fact will look inside the Prolog file
 --
 -- @
+-- kb_comparison( Cond, Lhs, Rhs, Op ).
+-- @
+--
+-- __When should I use this fact__
+--
+-- Binary comparison instructions ( currently @==@ \/ @===@ mapped to
+-- the Prolog atom @eq@, and @!=@ \/ @!==@ mapped to @neq@ ) fire this
+-- fact. The @Cond@ slot is the location of the comparison\'s output
+-- variable, which makes composing with 'GatedReturn' straightforward:
+-- when the boolean condition of an @if@ that early-returns is itself a
+-- comparison, both facts share the same location in the @Cond@ slot.
+--
+-- __Writing a predicate with this fact and others__
+--
+-- @
+-- gated_return_on_comparison( Lhs, Rhs, Op, ReturnedValue ) :-
+--     kb_gated_return( Cond, ReturnedValue ),
+--     kb_comparison( Cond, Lhs, Rhs, Op ).
+-- @
+--
+-- Other facts combined in this example predicate:
+--
+--     * 'GatedReturn'
+--
+data Comparison = Comparison
+    Cond -- ^
+    Lhs -- ^
+    Rhs -- ^
+    ComparisonOp -- ^
+    deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
+
+-- |
+--
+-- __Name__
+--
+-- This is how the fact will look inside the Prolog file
+--
+-- @
 -- kb_callable_returns_value( Callable, ReturnedValue ).
 -- @
 --
@@ -1065,6 +1107,9 @@ data AssignedValue = AssignedValue Location deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 data ConstBoolTrue = ConstBoolTrue Location deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 data Cond = Cond Location deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
+data Lhs = Lhs Location deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
+data Rhs = Rhs Location deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
+data ComparisonOp = ComparisonOp String deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 data ReturnedValue = ReturnedValue Location deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
 
 data Keyword = Keyword String deriving ( Show, Eq, Ord, Generic, ToJSON, FromJSON )
@@ -1106,6 +1151,7 @@    | ConstBoolTrueCtor ConstBoolTrue
    | ConstNullCtor ConstNull
    | GatedReturnCtor GatedReturn
+   | ComparisonCtor Comparison
    | CallableReturnsValueCtor CallableReturnsValue
    | CallableReturnsWithoutValueCtor CallableReturnsWithoutValue
    | MethodOfClassCtor MethodOfClass
@@ -1145,6 +1191,7 @@ prologify (ConstBoolTrueCtor content) = prologify_ConstBoolTrue content
 prologify (ConstNullCtor content) = prologify_ConstNull content
 prologify (GatedReturnCtor content) = prologify_GatedReturn content
+prologify (ComparisonCtor content) = prologify_Comparison content
 prologify (CallableReturnsValueCtor content) = prologify_CallableReturnsValue content
 prologify (CallableReturnsWithoutValueCtor content) = prologify_CallableReturnsWithoutValue content
 prologify (MethodOfClassCtor content) = prologify_MethodOfClass content
@@ -1239,6 +1286,12 @@ 
 prologify_GatedReturn :: GatedReturn -> String
 prologify_GatedReturn (GatedReturn (Cond c) (ReturnedValue v)) = prologify_GatedReturn' c v
+
+prologify_Comparison' :: Location -> Location -> Location -> String -> String
+prologify_Comparison' c l r op = printf "kb_comparison( %s, %s, %s, %s )." (locationify c) (locationify l) (locationify r) op
+
+prologify_Comparison :: Comparison -> String
+prologify_Comparison (Comparison (Cond c) (Lhs l) (Rhs r) (ComparisonOp op)) = prologify_Comparison' c l r op
 
 prologify_CallableReturnsValue' :: Location -> Location -> String
 prologify_CallableReturnsValue' c v = printf "kb_callable_returns_value( %s, %s )." (locationify c) (locationify v)