diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-04 22:25:55 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2022-12-05 14:21:53 +0200 |
| commit | 9b4ce32280fdc4298cfc7599491d8e8893de6354 (patch) | |
| tree | 68714ba8da4e0acd3fa105bad106093b31776518 /src | |
| parent | cb15649a09ef06cb9cb9c412636591435d587382 (diff) | |
Remove name mangling and qualified imports because they are hard
Diffstat (limited to 'src')
| -rw-r--r-- | src/Interpreter.hs | 32 | ||||
| -rw-r--r-- | src/Parser.hs | 3 |
2 files changed, 2 insertions, 33 deletions
diff --git a/src/Interpreter.hs b/src/Interpreter.hs index aa61be3..ce68270 100644 --- a/src/Interpreter.hs +++ b/src/Interpreter.hs @@ -46,21 +46,6 @@ traverseAndReplace param arg ast@AST { astNode = ASTHashMap hmap } = .> asPairs .> M.fromList } traverseAndReplace _ _ other = other -traverseAndRenameSymbol :: String -> String -> AST -> AST -traverseAndRenameSymbol name1 name2 ast@AST { astNode = ASTSymbol sym } - | sym == name1 = ast { astNode = ASTSymbol name2 } - | otherwise = ast -traverseAndRenameSymbol name1 name2 ast@AST { astNode = ASTFunctionCall body } = - ast { astNode = ASTFunctionCall $ (map (traverseAndRenameSymbol name1 name2) body) } -traverseAndRenameSymbol name1 name2 ast@AST { astNode = ASTVector vec } = - ast { astNode = ASTVector $ (map (traverseAndRenameSymbol name1 name2) vec) } -traverseAndRenameSymbol name1 name2 ast@AST { astNode = ASTHashMap hmap } = - ast { astNode = ASTHashMap $ M.assocs hmap - $> L.concatMap (\(a, b) -> [a, b]) - .> map (traverseAndRenameSymbol name1 name2) - .> asPairs .> M.fromList } -traverseAndRenameSymbol _ _ other = other - foldSymValPairs :: [(String, AST)] -> AST -> AST foldSymValPairs [] body = body foldSymValPairs ((sym, val):rest) body = @@ -227,23 +212,6 @@ evaluateImport asts = do stateEnv = emptyEnv { envImported = builtinEnv } } case args of - -- qualified import - [AST { astNode = ASTSymbol qualifier }, AST { astNode = ASTString path }] -> do - LState { stateEnv = evaledRawEnv } <- lift $ execStateT (runScriptFile path) initialState - let exportedEnvMap = envThis evaledRawEnv - - let mangle k = qualifier ++ ":" ++ k - let mangledExportsMap = M.mapKeys mangle exportedEnvMap - let nonMangledKeys = M.keys exportedEnvMap - let callWithAll (f:fs) x = callWithAll fs (f x) - callWithAll [] x = x - let traverseAndReplaceAllKeys = map (\k -> traverseAndRenameSymbol k (mangle k)) nonMangledKeys - let mangledTraversedMap = M.map (\a -> (callWithAll traverseAndReplaceAllKeys a)) mangledExportsMap - env <- getEnv - let importedEnv = envImported env - putImportedEnv $ M.union importedEnv mangledTraversedMap - return $ importAst { astNode = ASTUnit } - -- non-qualified import [AST { astNode = ASTString path }] -> do LState { stateEnv = evaledRawEnv } <- lift $ execStateT (runScriptFile path) initialState diff --git a/src/Parser.hs b/src/Parser.hs index 20a1454..fa806fd 100644 --- a/src/Parser.hs +++ b/src/Parser.hs @@ -5,6 +5,7 @@ module Parser ( import qualified Data.Map as M import qualified Data.List as L import qualified Data.Maybe as MB +import Control.Monad.State import Control.Monad.Except import Text.Regex.TDFA import Utils @@ -74,4 +75,4 @@ _parse acc (token:rest) = _parse (parseToken token : acc) rest parse :: [Token] -> LContext [AST] -parse = _parse []
\ No newline at end of file +parse = _parse [] |
