1
1
mirror of https://github.com/github/semantic.git synced 2024-12-25 07:55:12 +03:00

remove value parameter from ValueRef

This commit is contained in:
Charlie Somerville 2018-06-12 08:55:08 +10:00
parent 9e936a4a1a
commit a9a49ec56c
6 changed files with 19 additions and 19 deletions

View File

@ -36,8 +36,8 @@ lookupCache configuration = cacheLookup configuration <$> get
cachingConfiguration :: (Cacheable term address (Cell address) value, Member (State (Cache term address (Cell address) value)) effects, Member (State (Heap address (Cell address) value)) effects)
=> Configuration term address (Cell address) value
-> Set (Cached address (Cell address) value)
-> TermEvaluator term address value effects (ValueRef address value)
-> TermEvaluator term address value effects (ValueRef address value)
-> TermEvaluator term address value effects (ValueRef address)
-> TermEvaluator term address value effects (ValueRef address)
cachingConfiguration configuration values action = do
modify' (cacheSet configuration values)
result <- Cached <$> action <*> TermEvaluator getHeap
@ -65,8 +65,8 @@ cachingTerms :: ( Cacheable term address (Cell address) value
, Member (Env address) effects
, Member (State (Heap address (Cell address) value)) effects
)
=> SubtermAlgebra (Base term) term (TermEvaluator term address value effects (ValueRef address value))
-> SubtermAlgebra (Base term) term (TermEvaluator term address value effects (ValueRef address value))
=> SubtermAlgebra (Base term) term (TermEvaluator term address value effects (ValueRef address))
-> SubtermAlgebra (Base term) term (TermEvaluator term address value effects (ValueRef address))
cachingTerms recur term = do
c <- getConfiguration (embedSubterm term)
cached <- lookupCache c
@ -122,7 +122,7 @@ converge seed f = loop seed
loop x'
-- | Nondeterministically write each of a collection of stores & return their associated results.
scatter :: (Foldable t, Member NonDet effects, Member (State (Heap address (Cell address) value)) effects) => t (Cached address (Cell address) value) -> TermEvaluator term address value effects (ValueRef address value)
scatter :: (Foldable t, Member NonDet effects, Member (State (Heap address (Cell address) value)) effects) => t (Cached address (Cell address) value) -> TermEvaluator term address value effects (ValueRef address)
scatter = foldMapA (\ (Cached value heap') -> TermEvaluator (putHeap heap') $> value)

View File

@ -219,7 +219,7 @@ value :: ( AbstractValue address value effects
, Member (Env address) effects
, Member (Resumable (EnvironmentError address)) effects
)
=> ValueRef address value
=> ValueRef address
-> Evaluator address value effects value
value = deref <=< address
@ -229,7 +229,7 @@ subtermValue :: ( AbstractValue address value effects
, Member (Env address) effects
, Member (Resumable (EnvironmentError address)) effects
)
=> Subterm term (Evaluator address value effects (ValueRef address value))
=> Subterm term (Evaluator address value effects (ValueRef address))
-> Evaluator address value effects value
subtermValue = value <=< subtermRef
@ -239,7 +239,7 @@ address :: ( AbstractValue address value effects
, Member (Env address) effects
, Member (Resumable (EnvironmentError address)) effects
)
=> ValueRef address value
=> ValueRef address
-> Evaluator address value effects address
address (LvalLocal var) = variable var
address (LvalMember obj prop) = evaluateInScopedEnv (deref obj) (variable prop)
@ -251,12 +251,12 @@ subtermAddress :: ( AbstractValue address value effects
, Member (Env address) effects
, Member (Resumable (EnvironmentError address)) effects
)
=> Subterm term (Evaluator address value effects (ValueRef address value))
=> Subterm term (Evaluator address value effects (ValueRef address))
-> Evaluator address value effects address
subtermAddress = address <=< subtermRef
-- | Convenience function for boxing a raw value and wrapping it in an Rval
rvalBox :: Member (Allocator address value) effects
=> value
-> Evaluator address value effects (ValueRef address value)
-> Evaluator address value effects (ValueRef address)
rvalBox val = Rval <$> box val

View File

@ -13,7 +13,7 @@ newtype Cache term address cell value = Cache { unCache :: Monoidal.Map (Configu
deriving (Eq, Lower, Monoid, Ord, Reducer (Configuration term address cell value, Cached address cell value), Semigroup)
data Cached address cell value = Cached
{ cachedValue :: ValueRef address value
{ cachedValue :: ValueRef address
, cachedHeap :: Heap address cell value
}
deriving (Eq, Ord, Show)

View File

@ -58,7 +58,7 @@ class Show1 constr => Evaluatable constr where
, Member (Return address value) effects
, Member Trace effects
)
=> SubtermAlgebra constr term (Evaluator address value effects (ValueRef address value))
=> SubtermAlgebra constr term (Evaluator address value effects (ValueRef address))
eval expr = rvalBox =<< throwResumable (Unspecialized ("Eval unspecialized for " ++ liftShowsPrec (const (const id)) (const id) 0 expr ""))
@ -89,7 +89,7 @@ evaluatePackageWith :: forall address term value inner inner' inner'' outer
, inner'' ~ (Modules address value ': Reader Span ': Reader PackageInfo ': outer)
)
=> (SubtermAlgebra Module term (TermEvaluator term address value inner address) -> SubtermAlgebra Module term (TermEvaluator term address value inner address))
-> (SubtermAlgebra (Base term) term (TermEvaluator term address value inner (ValueRef address value)) -> SubtermAlgebra (Base term) term (TermEvaluator term address value inner (ValueRef address value)))
-> (SubtermAlgebra (Base term) term (TermEvaluator term address value inner (ValueRef address)) -> SubtermAlgebra (Base term) term (TermEvaluator term address value inner (ValueRef address)))
-> Package term
-> TermEvaluator term address value outer [(address, Environment address)]
evaluatePackageWith analyzeModule analyzeTerm package

View File

@ -4,13 +4,13 @@ module Data.Abstract.Ref where
import Data.Abstract.Name
-- | 'ValueRef' is the type subterms evaluate to and can represent either values directly ('Rval'), or references to values (lvals - such as local variables or object members)
data ValueRef address value where
data ValueRef address where
-- | A value.
Rval :: address -> ValueRef address value
Rval :: address -> ValueRef address
-- | A local variable. No environment is attached—its assumed that 'LvalLocal' will be evaluated in the same scope it was constructed in.
LvalLocal :: Name -> ValueRef address value
LvalLocal :: Name -> ValueRef address
-- | An object member.
LvalMember :: address -> Name -> ValueRef address value
LvalMember :: address -> Name -> ValueRef address
deriving (Eq, Ord, Show)

View File

@ -54,9 +54,9 @@ include :: ( AbstractValue address value effects
, Member (Resumable (EnvironmentError address)) effects
, Member Trace effects
)
=> Subterm term (Evaluator address value effects (ValueRef address value))
=> Subterm term (Evaluator address value effects (ValueRef address))
-> (ModulePath -> Evaluator address value effects (Maybe (address, Environment address)))
-> Evaluator address value effects (ValueRef address value)
-> Evaluator address value effects (ValueRef address)
include pathTerm f = do
name <- subtermValue pathTerm >>= asString
path <- resolvePHPName name