Changeset 9

Show
Ignore:
Timestamp:
02/11/05 11:12:24 (4 years ago)
Author:
autrijus
svk:copy_cache_prev:
1041
Message:

* various patches form viirya.

Files:
7 modified

Legend:

Unmodified
Added
Removed
  • AUTHORS

    r7 r9  
    1111Kang-Min Liu            (GUGOD) 
    1212Larry Wall              (LWALL) 
     13Liang-Qi Xie 
    1314Luke Palmer             (LPALMER) 
    1415Nicholas Clark          (NWCLARK) 
  • MANIFEST

    r7 r9  
    1818SIGNATURE                       Public-key signature (added by MakeMaker) 
    1919src/AST.hs 
     20src/Bind.hs 
    2021src/Context.hs 
    2122src/Eval.hs 
  • Makefile.PL

    r7 r9  
    33use strict; 
    44use FindBin; 
     5use Config; 
    56use inc::Module::Install; 
    67 
     
    1213author          ('Autrijus Tang <autrijus@autrijus.org>'); 
    1314license         ('perl'); 
    14 install_script  ('pugs'); 
     15install_script  ("pugs$Config{_exe}"); 
    1516build_requires  ('Test::More'); 
    1617 
    17 can_run('ghc') or die << '.'; 
     18(`ghc --version` =~ /Glasgow/) or die << '.'; 
    1819*** Cannot find a runnable 'ghc' from path. 
    1920*** Please install GHC from http://haskell.org/ghc/. 
     
    6667 
    6768postamble(<< "."); 
    68 pugs: @{[glob("src/*.hs")]} 
     69pugs$Config{_exe}: @{[glob("src/*.hs")]} 
    6970        ghc --make -o pugs -O src/Main.hs -isrc 
    7071 
  • src/Eval.hs

    r8 r9  
    165165    = retVal $ VList $ concatMap (vCast . evaluate env{ cxt = "List" }) exps 
    166166    | name `isInfix` "[]" 
    167     , [listExp, rangeExp]   <- exps 
     167    , (listExp:rangeExp:errs)   <- exps 
    168168    , list      <- evaluate env{ cxt = "List" } listExp 
    169169    , range     <- evaluate env{ cxt = "List" } rangeExp 
    170     , slice     <- unfoldr (doSlice $ vCast list) (map vCast $ vCast range) 
     170    , slice     <- unfoldr (doSlice errs $ vCast list) (map vCast $ vCast range) 
    171171    = retVal $ VList slice 
    172172    where 
    173     doSlice :: [Val] -> [VInt] -> Maybe (Val, [VInt]) 
    174     doSlice vs [] = Nothing 
    175     doSlice vs (n:ns) 
    176         | genericLength vs > n  = Just ((vs `genericIndex` n), ns) 
    177         | otherwise             = Nothing 
     173    doSlice :: [Exp] -> [Val] -> [VInt] -> Maybe (Val, [VInt]) 
     174    doSlice errs vs (n:ns) 
     175        | (v:_)         <- n `genericDrop` vs 
     176        = Just (v, ns) 
     177        | ((Val err):_) <- errs 
     178        = Just (err, ns) 
     179        | otherwise 
     180        = Nothing 
     181    doSlice _ _ _ = Nothing 
    178182    buildStatements exps 
    179183        | ((Syn name' exps'):rest)  <- exps 
     
    186190    runStatement cxt (env, (Val val)) exp 
    187191        | VError _ _    <- val 
     192        = (env, Val val) 
     193        | NonTerm _     <- exp 
    188194        = (env, Val val) 
    189195        | (fenv, exp)   <- reduce env{ cxt = cxt } exp 
  • src/Lexer.hs

    r8 r9  
    9191            expo <- expo 
    9292            if expo < 1 
    93                 then return (Left  $ n * numerator expo) 
     93                then return (Right $ (n % 1) * expo) 
    9494                else return (Right $ (n % 1) * expo) 
    9595 
     
    112112        <?> "exponent" 
    113113        where 
    114         power e | e < 0      = 1 % (10^e) 
     114        power e | e < 0      = 1 % (10^abs(e)) 
    115115                | otherwise  = (10^e) % 1 
    116116 
  • src/Parser.hs

    r8 r9  
    4949operators = concat $ 
    5050    [ tightOperators 
    51     , [ listOps  " , " ]                                -- Comma 
     51    , [ listSyn  " , " ]                                -- Comma 
    5252    , looseOperators 
    5353    , [ listSyn  " ; " ]                                -- Terminator 
     
    9999    , parseApply 
    100100    , parseParens parseOp 
     101    , parseEof 
    101102    ] 
    102103    <?> "term" 
     104 
     105parseEof = do 
     106    eof 
     107    pos <- getPosition 
     108    return $ NonTerm pos 
    103109 
    104110parseLitTerm = choice 
     
    144150 
    145151parseParamList parse = do 
    146     formal <- maybeParens ((parse `sepBy` symbol ",") `sepBy` symbol ":") 
     152    formal <- maybeParens ((parse `sepEndBy` symbol ",") `sepEndBy` symbol ":") 
    147153    case formal of 
    148154        []                  -> return [[], []] 
     
    224230 
    225231arrayLiteral = do 
    226     items <- brackets $ parseOp `sepBy` symbol "," 
    227     return $ App "&prefix:\\" [] [(Parens $ foldl app (Val $ VList []) items)] 
    228     where 
    229     app :: Exp -> Exp -> Exp 
    230     app x y = App "&infix:," [] [x, y] 
     232    items <- brackets $ parseOp `sepEndBy` symbol "," 
     233    return $ App "&prefix:\\" [] [Syn "&infix:," items] 
    231234 
    232235pairLiteral = do 
  • src/Prim.hs

    r8 r9  
    6262op2 "~<<"= \x y -> VStr $ mapStr (`shiftL` vCast y) (vCast x) 
    6363op2 "~>>"= \x y -> VStr $ mapStr (`shiftR` vCast y) (vCast x) 
    64 op2 "**" = op2Rat ((^) :: VRat -> VInt -> VRat) 
     64op2 "**" = op2Rat ((^^) :: VRat -> VInt -> VRat) 
    6565op2 "+"  = op2Numeric (+) 
    6666op2 "-"  = op2Numeric (-)