on master help sign in
javascript: make node backend use shebang
3c34f40raichoo
src/IRTS/CodegenJavaScript.hs+14−5
@@ -16,11 +16,12 @@ import Data.Char
16import Data.List
16import Data.List
17import qualified Data.Map as Map
17import qualified Data.Map as Map
18import System.IO
18import System.IO
19+import System.Directory
19
20
20idrNamespace :: String
21idrNamespace :: String
21idrNamespace = "__IDR__"
22idrNamespace = "__IDR__"
22
23
23−data JSTarget = Node | JavaScript
24+data JSTarget = Node | JavaScript deriving Eq
24
25
25codegenJavaScript
26codegenJavaScript
26 :: JSTarget
27 :: JSTarget
@@ -29,17 +30,25 @@ codegenJavaScript
29 -> OutputType
30 -> OutputType
30 -> IO ()
31 -> IO ()
31codegenJavaScript target definitions filename outputType = do
32codegenJavaScript target definitions filename outputType = do
32− let runtime = case target of
33+ let (header, runtime) = case target of
33− Node -> "-node"
34+ Node ->
35+ ("#!/usr/bin/env node\n", "-node")
34− JavaScript -> "-browser"
36+ JavaScript ->
37+ ("", "-browser")
35 path <- getDataDir
38 path <- getDataDir
36 idrRuntime <- readFile $ path ++ "/js/Runtime-common.js"
39 idrRuntime <- readFile $ path ++ "/js/Runtime-common.js"
37 tgtRuntime <- readFile $ concat [path, "/js/Runtime", runtime, ".js"]
40 tgtRuntime <- readFile $ concat [path, "/js/Runtime", runtime, ".js"]
38− writeFile filename (idrRuntime
41+ writeFile filename ( header
42+ ++ idrRuntime
39 ++ tgtRuntime
43 ++ tgtRuntime
40 ++ modules
44 ++ modules
41 ++ functions
45 ++ functions
42 ++ mainLoop)
46 ++ mainLoop)
47+
48+ setPermissions filename (emptyPermissions { readable = True
49+ , executable = target == Node
50+ , writable = True
51+ })
43 where
52 where
44 def = map (first translateNamespace) definitions
53 def = map (first translateNamespace) definitions
45
54