diff --git a/src/Analysis/Abstract/Caching.hs b/src/Analysis/Abstract/Caching.hs index f337c764f..d18af045f 100644 --- a/src/Analysis/Abstract/Caching.hs +++ b/src/Analysis/Abstract/Caching.hs @@ -84,6 +84,7 @@ convergingModules :: ( AbstractValue address value effects , Member (Reader (Cache term address (Cell address) value)) effects , Member (Reader (Environment address)) effects , Member (Reader (Live address)) effects + , Member (Resumable (EnvironmentError address)) effects , Member (State (Cache term address (Cell address) value)) effects , Member (State (Environment address)) effects , Member (State (Heap address (Cell address) value)) effects diff --git a/src/Control/Abstract/Value.hs b/src/Control/Abstract/Value.hs index 9e5825d38..470ab69f5 100644 --- a/src/Control/Abstract/Value.hs +++ b/src/Control/Abstract/Value.hs @@ -223,6 +223,7 @@ evaluateInScopedEnv scopedEnvTerm term = do value :: ( AbstractValue address value effects , Member (Allocator address value) effects , Member (Reader (Environment address)) effects + , Member (Resumable (EnvironmentError address)) effects , Member (State (Environment address)) effects ) => ValueRef address value @@ -233,6 +234,7 @@ value = deref <=< address subtermValue :: ( AbstractValue address value effects , Member (Allocator address value) effects , Member (Reader (Environment address)) effects + , Member (Resumable (EnvironmentError address)) effects , Member (State (Environment address)) effects ) => Subterm term (Evaluator address value effects (ValueRef address value)) @@ -242,17 +244,19 @@ subtermValue = value <=< subtermRef address :: ( AbstractValue address value effects , Member (Allocator address value) effects , Member (Reader (Environment address)) effects + , Member (Resumable (EnvironmentError address)) effects , Member (State (Environment address)) effects ) => ValueRef address value -> Evaluator address value effects address -address (LvalLocal var) = fromJust <$> lookupEnv var +address (LvalLocal var) = variable var address (LvalMember obj prop) = evaluateInScopedEnv (deref obj) (fromJust <$> lookupEnv prop) address (Rval addr) = pure addr subtermAddress :: ( AbstractValue address value effects , Member (Allocator address value) effects , Member (Reader (Environment address)) effects + , Member (Resumable (EnvironmentError address)) effects , Member (State (Environment address)) effects ) => Subterm term (Evaluator address value effects (ValueRef address value)) diff --git a/src/Language/PHP/Syntax.hs b/src/Language/PHP/Syntax.hs index fa39d91d7..2a50ed45c 100644 --- a/src/Language/PHP/Syntax.hs +++ b/src/Language/PHP/Syntax.hs @@ -57,6 +57,7 @@ include :: ( AbstractValue address value effects , Member (Allocator address value) effects , Member (Modules address value) effects , Member (Reader (Environment address)) effects + , Member (Resumable (EnvironmentError address)) effects , Member (Resumable ResolutionError) effects , Member (State (Environment address)) effects , Member (State (Exports address)) effects