Changeset 15364 for src/Pugs/Parser
- Timestamp:
- 02/26/07 17:52:49 (21 months ago)
- Files:
-
- 1 modified
-
src/Pugs/Parser/Operator.hs (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Parser/Operator.hs
r15328 r15364 182 182 183 183 {-# NOINLINE _RefToFunction #-} 184 _RefToFunction :: H.HashTable (TVar VRef) CurrentFunction184 _RefToFunction :: H.HashTable (TVar VRef) (Maybe CurrentFunction) 185 185 _RefToFunction = unsafePerformIO (H.new (==) hashTVar) 186 186 … … 189 189 190 190 filterFun :: Var -> TVar VRef -> STM (Maybe CurrentFunction) 191 filterFun var tvar = do191 filterFun var tvar = var `seq` do 192 192 res <- unsafeIOToSTM (H.lookup _RefToFunction tvar) 193 193 case res of 194 Just rv -> return (rv `seq` res)194 Just rv -> return rv 195 195 Nothing -> do 196 196 ref <- readTVar tvar … … 199 199 | relevantToParsing (code_type cv) (code_assoc cv) -> do 200 200 let rv = MkCurrentFunction var (code_assoc cv) (code_params cv) 201 unsafeIOToSTM (H.insert _RefToFunction tvar rv) 202 return (rv `seq` Just rv) 201 res = seq rv (Just rv) 202 unsafeIOToSTM (H.insert _RefToFunction tvar res) 203 return res 203 204 MkRef (IScalar sv) 204 205 | Just (VCode cv) <- scalar_const sv 205 206 , relevantToParsing (code_type cv) (code_assoc cv) -> do 206 207 let rv = MkCurrentFunction var (code_assoc cv) (code_params cv) 207 unsafeIOToSTM (H.insert _RefToFunction tvar rv) 208 return (rv `seq` Just rv) 209 _ -> return Nothing 208 res = seq rv (Just rv) 209 unsafeIOToSTM (H.insert _RefToFunction tvar res) 210 return res 211 _ -> do 212 unsafeIOToSTM (H.insert _RefToFunction tvar Nothing) 213 return Nothing 210 214 211 215 inScope :: Pkg -> Var -> Bool
