Changeset 19810 for src/Pugs/AST.hs

Show
Ignore:
Timestamp:
02/05/08 07:08:09 (10 months ago)
Author:
lwall
Message:

[pugs] simplified assignment parsing

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • src/Pugs/AST.hs

    r16488 r19810  
    229229isScalarLValue x = case x of 
    230230    Ann Parens _    -> False 
    231     Ann _ exp       -> isScalarLValue exp 
    232     Sym _ _ _ _ exp -> isScalarLValue exp 
    233231    Var var | SScalar <- v_sigil var -> True 
    234232    Syn "${}" _     -> True -- XXX - Change tp App("&prefix:<$>") later 
    235233    Syn "$::()" _   -> True 
    236     Syn "[]" [_, y] -> isSIMPLE y 
    237     Syn "{}" [_, y] -> isSIMPLE y 
    238     Val VList{}     -> False 
    239     Val{}           -> True 
    240234    _               -> False 
    241     where 
    242     isSIMPLE x = case unwrap x of 
    243         App (Var var) Nothing [y] 
    244             | C_prefix <- v_categ var 
    245             -> var `Set.member` coercePrefixOps 
    246                 || (var `Set.member` simplePrefixOps && isSIMPLE y) 
    247             | C_postfix <- v_categ var 
    248             -> var `Set.member` simplePostfixOps && isSIMPLE y 
    249         App (Var var) (Just y) [] 
    250             | C_prefix <- v_categ var 
    251             -> var `Set.member` coercePrefixOps 
    252                 || (var `Set.member` simplePrefixOps && isSIMPLE y) 
    253             | C_postfix <- v_categ var 
    254             -> var `Set.member` simplePostfixOps && isSIMPLE y 
    255         App (Var var) Nothing [x, y] 
    256             | C_infix <- v_categ var 
    257             -> var `Set.member` simpleInfixOps && isSIMPLE x && isSIMPLE y 
    258         App (Var var) (Just x) [y] 
    259             | C_infix <- v_categ var 
    260             -> var `Set.member` simpleInfixOps && isSIMPLE x && isSIMPLE y 
    261         _               -> isScalarLValue x 
    262235 
    263236opSet :: VarCateg -> [String] -> Set Var