1
1
mirror of https://github.com/github/semantic.git synced 2024-12-15 01:51:39 +03:00

Implement Let

This commit is contained in:
joshvera 2018-12-06 15:29:30 -05:00
parent 61a0a9052f
commit 34d5825cf9

View File

@ -133,11 +133,19 @@ instance Ord1 Let where liftCompare = genericLiftCompare
instance Show1 Let where liftShowsPrec = genericLiftShowsPrec
instance Evaluatable Let where
eval _ Let{..} = do
undefined
-- name <- maybeM (throwEvalError NoNameError) (declaredName letVariable)
-- addr <- snd <$> letrec name (eval letValue >>= Abstract.value)
-- Rval <$> locally (bind name addr *> (eval letBody >>= address))
eval eval Let{..} = do
name <- maybeM (throwEvalError NoNameError) (declaredName letVariable)
letSpan <- ask @Span
valueName <- maybeM (throwEvalError NoNameError) (declaredName letValue)
assocScope <- associatedScope (Declaration valueName)
withLexicalScopeAndFrame $ do
declare (Declaration name) letSpan assocScope
letVal <- (eval letValue >>= Abstract.value)
slot <- lookupDeclaration (Declaration name)
assign slot letVal
eval letBody
rvalBox unit
-- Assignment