Changeset 17044
- Timestamp:
- 07/14/07 04:25:29 (17 months ago)
- Location:
- src/Pugs
- Files:
-
- 8 modified
-
Monads.hs (modified) (2 diffs)
-
Parser.hs (modified) (4 diffs)
-
Parser/Literal.hs (modified) (4 diffs)
-
Parser/Operator.hs (modified) (2 diffs)
-
Parser/Types.hs (modified) (3 diffs)
-
Parser/Util.hs (modified) (1 diff)
-
Prim/Match.hs (modified) (2 diffs)
-
Types.hs (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/Monads.hs
r16602 r17044 20 20 enterGiven, enterWhen, enterLoop, enterGather, genSymPrim, genSymCC, 21 21 enterBlock, enterSub, 22 evalVal, tempVar,22 evalVal, 23 23 24 24 enterFrame, assertFrame, emptyFrames, … … 429 429 else return val 430 430 evalVal val = return val 431 432 tempVar :: Var -> Val -> Eval a -> Eval a433 tempVar var val action = do434 old <- readVar var435 writeVar var val436 rv <- action437 writeVar var old438 return rv439 -
src/Pugs/Parser.hs
r16448 r17044 1490 1490 } 1491 1491 deriving (Show) 1492 1493 -- XXX - Unused?1494 _dummyParam :: SigParam1495 _dummyParam = MkParam1496 { p_variable = varNullScalar1497 , p_types = []1498 , p_constraints = []1499 , p_unpacking = Nothing1500 , p_default = MkParamDefault Nothing1501 , p_label = nullID1502 , p_slots = Map.empty1503 , p_hasAccess = AccessRO1504 , p_isRef = False1505 , p_isContext = False1506 , p_isLazy = False1507 }1508 1492 1509 1493 ruleSignature :: RuleParser Exp … … 2079 2063 "INC" | "@" <- sigil -> return (makeVar name) 2080 2064 _ -> do 2081 -- Plain and simple variable -- do a lexical check 2082 -- First check if it's "known". 2083 -- If it is, then simply makeVar. 2084 -- If it is not, then it's "free"; add it to the list of freeVars 2085 -- for the final check. 2086 2065 -- Plain and simple variable -- do a lexical check. 2087 2066 state <- get 2088 2067 … … 2091 2070 lexPads = envLexPads env 2092 2071 compPad = envCompPad env 2093 freeVars = s_freeVars state2094 2072 outerVars = s_outerVars state 2095 2073 knownVars = s_knownVars state … … 2113 2091 fail $ "Variable " ++ show var ++ " requires predeclaration or explicit package name" 2114 2092 return (Var $ toGlobalVar var) 2115 -- put state{ s_freeVars = Set.insert (var, lexPads) freeVars }2116 2093 2117 2094 ruleVar :: RuleParser Exp -
src/Pugs/Parser/Literal.hs
r16328 r17044 202 202 return (Val $ VStr [c]) 203 203 204 qInterpolateDelimiterMinimal :: Char -> RuleParser Exp205 qInterpolateDelimiterMinimal protectedChar = do206 char '\\'207 c <- oneOf (protectedChar:"\\")208 return (Val $ VStr ['\\',c])209 210 204 qInterpolateDelimiterBalanced :: Char -> RuleParser Exp 211 205 qInterpolateDelimiterBalanced protectedChar = do … … 256 250 QB_Single -> try qInterpolateQuoteConstruct 257 251 <|> (try $ qInterpolateDelimiter $ qfProtectedChar flags) 258 QB_Minimal -> try $ qInterpolateDelimiterMinimal $ qfProtectedChar flags259 252 QB_Balanced -> try $ qInterpolateDelimiterBalanced $ qfProtectedChar flags 260 253 QB_No -> mzero … … 438 431 -- qfProtectedChar is the character to be 439 432 -- protected by backslashes, if 440 -- qfInterpolateBackslash is Minimal orSingle or All433 -- qfInterpolateBackslash is Single or All 441 434 data QS_Flag = QS_No | QS_Yes | QS_Protect deriving (Show, Eq, Ord, Typeable) 442 data QB_Flag = QB_No | QB_ Minimal | QB_Balanced | QB_Single | QB_All deriving (Show, Eq, Ord, Typeable)435 data QB_Flag = QB_No | QB_Balanced | QB_Single | QB_All deriving (Show, Eq, Ord, Typeable) 443 436 444 437 data QFlags = MkQFlags … … 449 442 , qfInterpolateFunction :: !Bool 450 443 , qfInterpolateClosure :: !Bool 451 , qfInterpolateBackslash :: !QB_Flag -- No, Minimal,Single, All444 , qfInterpolateBackslash :: !QB_Flag -- No, Single, All 452 445 , qfProtectedChar :: !Char 453 446 , qfP5RegularExpression :: !Bool -
src/Pugs/Parser/Operator.hs
r16379 r17044 310 310 matchSlurpy _ = False 311 311 312 circumOps, rightSyn, chainOps, matchOps, nonSyn, listSyn, preSyn, optPreSyn, preOps, preSymOps, optSymOps, postOps, optOps, leftOps, rightOps, nonOps, listOps :: Set OpName -> [RuleOperator Exp]312 circumOps, rightSyn, chainOps, matchOps, nonSyn, listSyn, preSyn, preOps, preSymOps, postOps, optOps, leftOps, rightOps, nonOps, listOps :: Set OpName -> [RuleOperator Exp] 313 313 preSyn = ops $ makeOp1 Prefix "" Syn 314 optPreSyn = ops $ makeOp1 OptionalPrefix "" Syn315 314 preOps = (ops $ makeOp1 Prefix "&prefix:" doApp) . addHyperPrefix 316 315 preSymOps = (ops $ makeOp1 Prefix "&prefix:" doAppSym) . addHyperPrefix 317 optSymOps = (ops $ makeOp1 OptionalPrefix "&prefix:" doAppSym) . addHyperPrefix318 316 postOps = (ops $ makeOp1 Postfix "&postfix:" doApp) . addHyperPostfix 319 317 optOps = (ops $ makeOp1 OptionalPrefix "&prefix:" doApp) . addHyperPrefix … … 396 394 App (_Var "&prefix:?") Nothing [App app (Just x) args] 397 395 _ -> con (sigil ++ name) [x,y] 398 399 _STATE_START_RUN :: Var400 _STATE_START_RUN = cast "$?STATE_START_RUN"401 396 402 397 -- Just for the ".=" rewriting -
src/Pugs/Parser/Types.hs
r16417 r17044 8 8 RuleOperator, RuleOperatorTable, 9 9 getRuleEnv, modifyRuleEnv, putRuleEnv, insertIntoPosition, 10 clearDynParsers, enterBracketLevel, getCurrCharClass,charClassOf,10 clearDynParsers, enterBracketLevel, charClassOf, 11 11 addBlockPad, popClosureTrait, addClosureTrait, 12 12 -- Alternate Char implementations that keeps track of s_charClass … … 73 73 | otherwise = SymClass 74 74 75 {- 76 75 77 getCurrCharClass :: RuleParser CharClass 76 78 getCurrCharClass = fmap charClassOf (lookAhead anyToken) <|> return SpaceClass 77 79 78 {-79 80 getPrevCharClass :: RuleParser CharClass 80 81 getPrevCharClass = do … … 152 153 , s_knownVars :: !(Map Var MPad) -- ^ Map from variables to its associated scope 153 154 , s_outerVars :: !(Map MPad (Set Var)) -- ^ Map from scopes to vars that must not be declared in it 154 , s_freeVars :: !(Set (Var, LexPads)) -- ^ Set of free vars and the mpadlist to check with155 -- , s_freeVars :: !(Set (Var, LexPads)) -- ^ Set of free vars and the mpadlist to check with 155 156 , s_protoPad :: !Pad -- ^ Pad that's part of all scopes; used in param init 156 157 , s_closureTraits :: [TraitBlocks -> TraitBlocks] -
src/Pugs/Parser/Util.hs
r16435 r17044 104 104 , do rv <- p; return (rv, False) 105 105 ] 106 107 108 isOperatorName :: String -> Bool109 isOperatorName ('&':name) = any hasOperatorPrefix [name, tail name]110 where111 hasOperatorPrefix :: String -> Bool112 hasOperatorPrefix name = any (`isPrefixOf` name) grammaticalCategories113 isOperatorName _ = False114 106 115 107 -
src/Pugs/Prim/Match.hs
r15616 r17044 2 2 3 3 module Pugs.Prim.Match ( 4 op2Match, rxSplit, rxSplit_n, matchFromMR,pkgParents, pkgParentClasses4 op2Match, rxSplit, rxSplit_n, pkgParents, pkgParentClasses 5 5 ) where 6 6 import Pugs.Internals … … 91 91 csBytes = encodeUTF8 csChars 92 92 93 matchFromMR :: MatchResult Char -> Val94 matchFromMR mr = VMatch $ mkMatchOk 0 0 (decodeUTF8 all) subsMatch Map.empty95 where96 (all:subs) = elems $ mrSubs mr97 subsMatch = [ VMatch $ mkMatchOk 0 0 (decodeUTF8 sub) [] Map.empty | sub <- subs ]98 99 93 -- Used in op2Match 100 94 not_VRule :: Val -> Bool -
src/Pugs/Types.hs
r16341 r17044 14 14 ( 15 15 Type(..), mkType, anyType, showType, isaType, isaType', deltaType, 16 ClassTree, initTree, addNode,16 ClassTree, initTree, 17 17 18 18 Cxt(..), … … 855 855 856 856 {-| 857 Add a new \'top-level\' type to the class tree, under @Object@.858 -}859 addNode :: ClassTree -> Type -> ClassTree860 addNode (MkClassTree (Node obj [Node any (Node item ns:rest), junc])) typ =861 MkClassTree (Node obj [Node any (Node item ((Node typ []):ns):rest), junc])862 addNode _ _ = error "malformed tree"863 864 {-|865 857 Default class tree, containing all built-in types. 866 858 -}
