just need to find the source file now
Haldean Brown
4 years ago
30 | 30 |
, Language.Del.Imports
|
31 | 31 |
, Language.Del.InRep
|
32 | 32 |
, Language.Del.Inlining
|
|
33 |
, Language.Del.Load
|
33 | 34 |
, Language.Del.Ops
|
34 | 35 |
, Language.Del.Properties
|
35 | 36 |
, Language.Del.Reader
|
0 | |
(import http://git.haldean.org/del/raw/master/examples/sphere.del s)
|
|
0 |
(import sphere.del s)
|
|
1 |
|
|
2 |
(* (import http://git.haldean.org/del/raw/master/examples/sphere.del s) *)
|
1 | 3 |
|
2 | 4 |
(define root:color (v:f3)
|
3 | 5 |
(if (< (s.sphere 1.0 v) 0.001)
|
3 | 3 |
|
4 | 4 |
import Debug.Trace
|
5 | 5 |
import qualified Data.Map.Strict as Map
|
6 | |
import Data.Maybe
|
7 | 6 |
import qualified Data.Text as T
|
8 | 7 |
import Language.Del.AST
|
9 | 8 |
import Language.Del.CompileDefs
|
|
12 | 11 |
import Language.Del.Imports
|
13 | 12 |
import Language.Del.InRep
|
14 | 13 |
import Language.Del.Inlining
|
|
14 |
import Language.Del.Load
|
15 | 15 |
import Language.Del.Ops
|
16 | 16 |
import Language.Del.Properties
|
17 | 17 |
import qualified Language.Del.Reader as R
|
18 | 18 |
import Language.Del.TypeCheck
|
19 | 19 |
import Language.Del.Types
|
20 | |
|
21 | |
buildAST :: [R.Form] -> AST
|
22 | |
buildAST fs = AST defs imps
|
23 | |
where namePair (R.DefForm n t a b) = Just (n, Def n t a b)
|
24 | |
namePair _ = Nothing
|
25 | |
defs = Map.fromList $ mapMaybe namePair fs
|
26 | |
importFromForm (R.ImportForm s a) = Just $ Import s a
|
27 | |
importFromForm _ = Nothing
|
28 | |
imps = mapMaybe importFromForm fs
|
29 | 20 |
|
30 | 21 |
-- Drops all definitions other than the root definition
|
31 | 22 |
dropNonRoot :: AST -> Artifact Def
|
0 | 0 |
module Language.Del.Imports where
|
1 | 1 |
|
|
2 |
import qualified Data.Map.Strict as Map
|
|
3 |
import qualified Data.Text as T
|
2 | 4 |
import Language.Del.AST
|
3 | 5 |
import Language.Del.CompileDefs
|
4 | |
import qualified Data.Text as T
|
5 | |
import qualified Data.Map.Strict as Map
|
|
6 |
import Language.Del.Load
|
|
7 |
import qualified Language.Del.Reader as R
|
6 | 8 |
|
7 | 9 |
mergeBinds :: T.Text -> Map.Map T.Text Def -> Map.Map T.Text Def -> Artifact (Map.Map T.Text Def)
|
8 | 10 |
mergeBinds alias orig new =
|
|
14 | 16 |
then Failure $ ImportNameClash alias (Map.keys overlap)
|
15 | 17 |
else return $ Map.union orig aliased
|
16 | 18 |
|
|
19 |
findSourceFile :: T.Text -> IO FilePath
|
|
20 |
findSourceFile = undefined
|
17 | 21 |
|
18 | 22 |
loadImport :: Source -> IO (Artifact AST)
|
19 | |
loadImport = undefined
|
|
23 |
loadImport (Right _) = error "URL imports not yet supported"
|
|
24 |
loadImport (Left name) = do
|
|
25 |
path <- findSourceFile name
|
|
26 |
contents <- readFile path >>= return . T.pack
|
|
27 |
let forms = R.read contents
|
|
28 |
case forms of
|
|
29 |
Success f -> return $ Success (buildAST f)
|
|
30 |
Failure e -> return $ Failure e
|
20 | 31 |
|
21 | 32 |
collectImports :: [Source] -> AST -> IO (Artifact AST)
|
22 | 33 |
collectImports loaded (AST m ((Import src alias):xs)) =
|
|
0 |
module Language.Del.Load where
|
|
1 |
|
|
2 |
import qualified Data.Map.Strict as Map
|
|
3 |
import Data.Maybe
|
|
4 |
import Language.Del.AST
|
|
5 |
import qualified Language.Del.Reader as R
|
|
6 |
|
|
7 |
buildAST :: [R.Form] -> AST
|
|
8 |
buildAST fs = AST defs imps
|
|
9 |
where namePair (R.DefForm n t a b) = Just (n, Def n t a b)
|
|
10 |
namePair _ = Nothing
|
|
11 |
defs = Map.fromList $ mapMaybe namePair fs
|
|
12 |
importFromForm (R.ImportForm s a) = Just $ Import s a
|
|
13 |
importFromForm _ = Nothing
|
|
14 |
imps = mapMaybe importFromForm fs
|