module DDC.Core.Salt.Profile
( profile
, lexModuleString
, lexExpString)
where
import DDC.Core.Salt.Env
import DDC.Core.Salt.Name
import DDC.Core.Fragment
import DDC.Core.Lexer
import DDC.Data.Token
import qualified DDC.Type.Env as Env
profile :: Profile Name
profile
= Profile
{ profileName = "Salt"
, profileFeatures = features
, profilePrimDataDefs = primDataDefs
, profilePrimSupers = Env.empty
, profilePrimKinds = primKindEnv
, profilePrimTypes = primTypeEnv
, profileTypeIsUnboxed = typeIsUnboxed }
features :: Features
features = zeroFeatures
{ featuresFunctionalEffects = True
, featuresFunctionalClosures = True
, featuresDebruijnBinders = True
, featuresUnusedBindings = True }
lexModuleString
:: String
-> Int
-> String
-> [Token (Tok Name)]
lexModuleString sourceName lineStart str
= map rn $ lexModuleWithOffside sourceName lineStart str
where rn (Token strTok sp)
= case renameTok readName strTok of
Just t' -> Token t' sp
Nothing -> Token (KJunk "lexical error") sp
lexExpString
:: String
-> Int
-> String
-> [Token (Tok Name)]
lexExpString sourceName lineStart str
= map rn $ lexExp sourceName lineStart str
where rn (Token strTok sp)
= case renameTok readName strTok of
Just t' -> Token t' sp
Nothing -> Token (KJunk "lexical error") sp