Changeset 3644
- Timestamp:
- 05/22/05 15:48:36 (4 years ago)
- svk:copy_cache_prev:
- 5201
- Location:
- src/Pugs
- Files:
-
- 5 modified
-
AST/Internals.hs (modified) (2 diffs)
-
Parser.hs (modified) (2 diffs)
-
Pretty.hs (modified) (2 diffs)
-
Prim.hs (modified) (4 diffs)
-
Prim/List.hs (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/Pugs/AST/Internals.hs
r3601 r3644 513 513 | VBlock !VBlock 514 514 | VJunc !VJunc -- ^ Junction value 515 | VError !VStr ! Exp515 | VError !VStr ![Pos] -- ^ Error 516 516 | VHandle !VHandle -- ^ File handle 517 517 | VSocket !VSocket -- ^ Socket handle … … 1071 1071 fail str = do 1072 1072 pos <- asks envPos 1073 shiftT . const . return $ VError str (NonTerm pos)1073 shiftT . const . return $ VError str [pos] 1074 1074 1075 1075 instance MonadTrans EvalT where -
src/Pugs/Parser.hs
r3637 r3644 1771 1771 sym <- choice . map symbol $ words " ... ??? !!! " 1772 1772 pos2 <- getPosition 1773 return . Val $ VError sym (NonTerm (mkPos pos1 pos2))1773 return . Val $ VError sym [mkPos pos1 pos2] 1774 1774 1775 1775 methOps :: a -> [b] … … 1785 1785 runRule :: Env -> (Env -> a) -> RuleParser Env -> FilePath -> String -> a 1786 1786 runRule env f p name str = f $ case ( runParser p env name str ) of 1787 Left err -> env { envBody = Val $ VError msg (NonTerm (mkPos pos pos))}1787 Left err -> env { envBody = Val $ VError msg [mkPos pos pos] } 1788 1788 where 1789 1789 pos = errorPos err -
src/Pugs/Pretty.hs
r3506 r3644 29 29 30 30 instance Pretty Exp where 31 format (Val (VError msg (NonTerm pos))) = text "Syntax error at" <+> (format pos) <+> format msg 32 format (NonTerm pos) = format pos 31 format (NonTerm pos) = text "Syntax error at" <+> format pos 33 32 format (Val v) = format v 34 33 format (Syn x vs) = text "Syn" <+> format x <+> (braces $ vcat (punctuate (text ";") (map format vs))) … … 116 115 format (VCode _) = text "sub {...}" 117 116 format (VBlock _) = text "{...}" 118 format (VError x y@(NonTerm _))117 format (VError x posList) 119 118 -- Is this correct? Does this work on win32, too? 120 119 | last x == '\n' = text . init $ x 121 | otherwise = text "*** Error:" <+> (text x <+> (text "at" <+> format y))122 format (VError x _) = text "*** Error:" <+> text x120 | otherwise = text "***" <+> 121 (text x <+> (text "at" <+> vcat (map format posList))) 123 122 -- format (VArray x) = format (VList $ Array.elems x) 124 123 -- format (VHash h) = braces $ (joinList $ text ", ") $ -
src/Pugs/Prim.hs
r3590 r3644 236 236 op1 "eval_yaml" = evalYaml 237 237 op1 "defined" = op1Cast (VBool . defined) 238 op1 "last" = \v -> return (VError "cannot last() outside a loop" (Val v))239 op1 "next" = \v -> return (VError "cannot next() outside a loop" (Val v))240 op1 "redo" = \v -> return (VError "cannot redo() outside a loop" (Val v))238 op1 "last" = const $ fail "cannot last() outside a loop" 239 op1 "next" = const $ fail "cannot next() outside a loop" 240 op1 "redo" = const $ fail "cannot redo() outside a loop" 241 241 op1 "return" = op1Return . op1ShiftOut 242 242 op1 "yield" = op1Yield . op1ShiftOut … … 267 267 errh <- readVar "$*ERR" 268 268 pos <- asks envPos 269 op2 "say" errh $ VList [ VStr $ pretty (VError (errmsg strs) (NonTerm pos)) ]269 op2 "say" errh $ VList [ VStr $ pretty (VError (errmsg strs) [pos]) ] 270 270 where 271 271 errmsg "" = "Warning: something's wrong" … … 275 275 throw <- fromVal =<< readVar "$?FAIL_SHOULD_DIE" 276 276 pos <- asks envPos 277 let msg = pretty (VError (errmsg strs) (NonTerm pos)) ++ "\n"277 let msg = pretty (VError (errmsg strs) [pos]) ++ "\n" 278 278 if throw 279 279 -- "use fatal" is in effect, so die. … … 863 863 = fmap VList $ mapM (op2 op x) y' 864 864 | otherwise 865 = return $ VError "Hyper OP only works on lists" (Val VUndef)865 = fail "Hyper OP only works on lists" 866 866 where 867 867 hyperLists [] [] = return [] -
src/Pugs/Prim/List.hs
r3538 r3644 43 43 then return $ head $ Set.elems set 44 44 else return undef 45 op1Pick v = ret urn $ VError "pick not defined" (Val v)45 op1Pick v = retError "pick not defined" v 46 46 47 47 op1Sum :: Val -> Eval Val
