Changeset 15579 for src/Pugs/Parser
- Timestamp:
- 03/11/07 03:13:07 (21 months ago)
- Location:
- src/Pugs/Parser
- Files:
-
- 2 modified
-
Export.hs (modified) (1 diff)
-
Operator.hs (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Parser/Export.hs
r15297 r15579 25 25 VCode sub | isMulti sub -> ('&':) 26 26 _ -> id 27 mkExp = Syn ":=" [_Var name, Val val] 28 mkSym = _Sym scope (mkMulti name) mkExp 27 mkSym = _Sym scope (mkMulti name) (Val val) Noop 29 28 doExport scope mkSym 30 29 case scope of -
src/Pugs/Parser/Operator.hs
r15503 r15579 136 136 | otherwise = Ann Parens (Syn "," [inner]) 137 137 forceParens (Ann x inner) = Ann x (forceParens inner) 138 forceParens (Sym x y in ner) = Sym x y(forceParens inner)138 forceParens (Sym x y init inner)= Sym x y init (forceParens inner) 139 139 forceParens (Pad x y inner) = Pad x y (forceParens inner) 140 140 forceParens exp = exp … … 170 170 let funs = catMaybes $! inlinePerformSTM $! do 171 171 glob <- readTVar $ envGlobal env 172 let syms = padToList (filterPad cur glob)172 let vars = padToList (filterPad cur glob) 173 173 ++ padToList (filterPad cur (envLexical env)) 174 174 pkg = envPackage env 175 175 cur var@MkVar{ v_sigil = SCode } = inScope pkg var 176 cur var@MkVar{ v_sigil = SCodeMulti } = inScope pkg var 176 177 cur _ = False 177 vars = concat [ map (\(_, tvar) -> (var, tvar)) tvars178 | (var, tvars) <- syms179 ]180 178 mapM (uncurry filterFun) vars 181 179 return (length funs `seq` funs) 182 180 183 181 {-# NOINLINE _RefToFunction #-} 184 _RefToFunction :: H.HashTable (TVar VRef) (Maybe CurrentFunction) 185 _RefToFunction = unsafePerformIO (H.new (==) hashTVar) 186 187 hashTVar :: TVar VRef -> Int32 188 hashTVar x = I32# (unsafeCoerce# x) 189 190 filterFun :: Var -> TVar VRef -> STM (Maybe CurrentFunction) 191 filterFun var tvar = var `seq` do 192 res <- unsafeIOToSTM (H.lookup _RefToFunction tvar) 182 _RefToFunction :: H.HashTable PadEntry (Maybe CurrentFunction) 183 _RefToFunction = unsafePerformIO (H.new (==) hashPadEntry) 184 185 hashPadEntry :: PadEntry -> Int32 186 hashPadEntry EntryConstant{ pe_value = v } = I32# (unsafeCoerce# v) 187 hashPadEntry x = I32# (unsafeCoerce# (pe_store x)) 188 189 -- hashTVar :: TVar VRef -> Int32 190 -- hashTVar x = I32# (unsafeCoerce# x) 191 192 filterFun :: Var -> PadEntry -> STM (Maybe CurrentFunction) 193 filterFun var entry = var `seq` do 194 res <- unsafeIOToSTM (H.lookup _RefToFunction entry) 193 195 case res of 194 196 Just rv -> return rv 195 197 Nothing -> do 196 ref <- read TVar tvar198 ref <- readPadEntry entry 197 199 case ref of 198 200 MkRef (ICode cv) … … 200 202 let rv = MkCurrentFunction var (code_assoc cv) (code_params cv) 201 203 res = seq rv (Just rv) 202 unsafeIOToSTM (H.insert _RefToFunction tvarres)204 unsafeIOToSTM (H.insert _RefToFunction entry res) 203 205 return res 204 206 MkRef (IScalar sv) … … 207 209 let rv = MkCurrentFunction var (code_assoc cv) (code_params cv) 208 210 res = seq rv (Just rv) 209 unsafeIOToSTM (H.insert _RefToFunction tvarres)211 unsafeIOToSTM (H.insert _RefToFunction entry res) 210 212 return res 211 213 _ -> do 212 unsafeIOToSTM (H.insert _RefToFunction tvarNothing)214 unsafeIOToSTM (H.insert _RefToFunction entry Nothing) 213 215 return Nothing 214 216 … … 394 396 _ -> con (sigil ++ name) [x,y] 395 397 398 _STATE_START_RUN :: Var 399 _STATE_START_RUN = cast "$?STATE_START_RUN" 400 396 401 declAssignHack :: Exp -> Exp 397 402 declAssignHack exp@(Syn "=" [lhs, _]) 398 403 | isDecl SState lhs = 399 404 let pad = unsafePerformSTM $! do 400 state_first_run <- newTVar =<< (fmap scalarRef $! newTVar (VInt 0))401 state_f resh <- newTVar False402 return $! mkPad [( cast "$?STATE_START_RUN", [(state_fresh, state_first_run)])] in405 proto <- fmap scalarRef $! newTVar (VInt 0) 406 state_first_run <- newTVar proto 407 return $! mkPad [(_STATE_START_RUN, EntryStatic{ pe_type = mkType "Scalar", pe_value = proto, pe_store = state_first_run})] in 403 408 Syn "block" 404 409 [ Pad SState pad $! 405 410 Syn "if" 406 [ App (_Var "&postfix:++") Nothing [ _Var "$?STATE_START_RUN"]411 [ App (_Var "&postfix:++") Nothing [Var _STATE_START_RUN] 407 412 , lhs 408 413 , exp
