[added support for characters and strings mail@stefanwehr.de**20050528081442] { hunk ./Builtins.hs 119 +nilDataConstructor = ("Nil", 0::Int) +consDataConstructor = ("Cons", 2::Int) hunk ./Builtins.hs 131 +charTypeConstructor = "Char" hunk ./Builtins.hs 135 - unitTypeConstructor] + unitTypeConstructor, charTypeConstructor] hunk ./Lexer.x 131 --- <0> \' ($graphic # [\'\\] | " " | @escape) \' --- { \p s -> T p (CharT (head s)) } +<0> \' ($graphic # [\'\\] | " " | @escape) \' + { \p s -> T p (CharT (head s)) } hunk ./Lexer.x 134 --- <0> \" @string* \" { \p s -> T p (StringT s) } +<0> \" @string* \" { \p s -> T p (StringT s) } hunk ./Lexer.x 152 --- | CharT Char --- | StringT String + | CharT Char + | StringT String hunk ./Lexer.x 169 - phasefail "Lexer" $ showPos p ++ " `" ++ [head s] ++ "'" + phasefail "Lexer Error" $ showPos p ++ " `" ++ [head s] ++ "'" hunk ./ParseSyntax.hs 372 +data Constant = Number Integer + | Character Char + deriving (Read,Show,Eq, Gen.Data, Gen.Typeable) hunk ./ParseSyntax.hs 377 - | Num Integer -- numbers + | Const Constant hunk ./ParseSyntax.hs 538 + +instance Pretty Constant where + ppr (Number i) = text (show i) + ppr (Character c) = text (show c) + hunk ./ParseSyntax.hs 547 - pprPrec _ (Num i) = text $ show i + pprPrec prec (Const c) = pprPrec prec c hunk ./Parser.y 87 --- CHAR { T _ (CharT $$) } --- STRING { T _ (StringT $$) } + CHAR { T _ (CharT $$) } + STRING { T _ (StringT $$) } hunk ./Parser.y 234 - | num { Num $1 } + | num { Const (Number $1) } + | char { Const (Character $1) } + | string { mkStringList $1 } hunk ./Parser.y 324 + +char :: { Char } + : CHAR { $1 } + +string :: { String } + : STRING { $1 } hunk ./ParserHelper.hs 27 +import Builtins hunk ./ParserHelper.hs 98 + +mkStringList :: String -> Exp +mkStringList [] = Con (fst nilDataConstructor) [] +mkStringList (x:xs) = + let l = mkStringList xs + in Con (fst consDataConstructor) [Const (Character x), l] hunk ./PhracPrelude.hs 42 + TypeDef "Char" [] [] builtinInfo, hunk ./SyntaxTransformation.hs 268 -rwExp (Num i) = return (AS.Num i) +rwExp (Const (Number i)) = return (AS.Const (AS.Number i)) +rwExp (Const (Character i)) = return (AS.Const (AS.Character i)) hunk ./TypeInference.hs 119 -tiExpr as (Num _) = return $ ([], TyConstruct intTypeId) +tiExpr as (Const (Number _)) = return $ ([], TyConstruct intTypeId) +tiExpr as (Const (Character _)) = return $ ([], TyConstruct charTypeId) hunk ./TypeInference.hs 503 +charTypeId = builtinTypeId Builtins.charTypeConstructor addfile ./tests/ast/should_fail/011.err hunk ./tests/ast/should_fail/011.err 1 +Lexer Error addfile ./tests/ast/should_fail/011.phc hunk ./tests/ast/should_fail/011.phc 1 - +main = "sadfa; addfile ./tests/type-inference/should_pass/032.out hunk ./tests/type-inference/should_pass/032.out 1 +foo :: List Char addfile ./tests/type-inference/should_pass/032.phc hunk ./tests/type-inference/should_pass/032.phc 1 +foo = "Hello World"; }