on master help sign in
Merge pull request #371 from raichoo/javascript
576d33bEdwin Brady
src/IRTS/CodegenJavaScript.hs+16−7
@@ -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
@@ -340,7 +349,7 @@ translateExpression (SOp op vars)
340 , (arg:_) <- vars = translateVariableName arg ++ "[0]"
349 , (arg:_) <- vars = translateVariableName arg ++ "[0]"
341 | LStrRev <- op
350 | LStrRev <- op
342 , (arg:_) <- vars = let v = translateVariableName arg in
351 , (arg:_) <- vars = let v = translateVariableName arg in
343− v ++ "split('').reverse().join('')"
352+ v ++ ".split('').reverse().join('')"
344 | LStrIndex <- op
353 | LStrIndex <- op
345 , (lhs:rhs:_) <- vars = let l = translateVariableName lhs
354 , (lhs:rhs:_) <- vars = let l = translateVariableName lhs
346 r = translateVariableName rhs in
355 r = translateVariableName rhs in
@@ -472,7 +481,7 @@ translateCase var (SConstCase ty e)
472 matchHelper tyName = translateTypeMatch var tyName e
481 matchHelper tyName = translateTypeMatch var tyName e
473
482
474translateCase var (SConstCase cst@(BI _) e) =
483translateCase var (SConstCase cst@(BI _) e) =
475− let cond = var ++ ".equals(" ++ translateConstant cst ++ ")" in
484+ let cond = "__IDRRT__.bigInt(" ++ var ++ ").equals(" ++ translateConstant cst ++ ")" in
476 createIfBlock cond (translateExpression e)
485 createIfBlock cond (translateExpression e)
477
486
478translateCase var (SConstCase cst e) =
487translateCase var (SConstCase cst e) =
test/Makefile+50
@@ -4,6 +4,56 @@ test:
4test_java:
4test_java:
5 perl ./runtest.pl all --target Java
5 perl ./runtest.pl all --target Java
6
6
7+test_js:
8+ @perl ./runtest.pl reg001 --target node
9+ @perl ./runtest.pl reg002 --target node
10+ @perl ./runtest.pl reg003 --target node
11+ @perl ./runtest.pl reg004 --target node
12+ @perl ./runtest.pl reg004 --target node
13+ @perl ./runtest.pl reg005 --target node
14+ @perl ./runtest.pl reg006 --target node
15+ @perl ./runtest.pl reg007 --target node
16+ @perl ./runtest.pl reg008 --target node
17+ @perl ./runtest.pl reg009 --target node
18+ @perl ./runtest.pl reg010 --target node
19+ @perl ./runtest.pl reg011 --target node
20+ @perl ./runtest.pl reg012 --target node
21+ @perl ./runtest.pl reg013 --target node
22+ @perl ./runtest.pl reg014 --target node
23+ @perl ./runtest.pl reg015 --target node
24+ @#perl ./runtest.pl reg016 --target node
25+ @perl ./runtest.pl reg017 --target node
26+ @perl ./runtest.pl reg018 --target node
27+ @perl ./runtest.pl reg019 --target node
28+ @perl ./runtest.pl test001 --target node
29+ @perl ./runtest.pl test002 --target node
30+ @perl ./runtest.pl test003 --target node
31+ @#perl ./runtest.pl test004 --target node
32+ @perl ./runtest.pl test005 --target node
33+ @perl ./runtest.pl test006 --target node
34+ @perl ./runtest.pl test007 --target node
35+ @perl ./runtest.pl test008 --target node
36+ @perl ./runtest.pl test009 --target node
37+ @perl ./runtest.pl test010 --target node
38+ @perl ./runtest.pl test011 --target node
39+ @perl ./runtest.pl test012 --target node
40+ @perl ./runtest.pl test013 --target node
41+ @#perl ./runtest.pl test014 --target node
42+ @perl ./runtest.pl test015 --target node
43+ @perl ./runtest.pl test016 --target node
44+ @perl ./runtest.pl test017 --target node
45+ @#perl ./runtest.pl test018 --target node
46+ @perl ./runtest.pl test019 --target node
47+ @perl ./runtest.pl test020 --target node
48+ @#perl ./runtest.pl test021 --target node
49+ @perl ./runtest.pl test022 --target node
50+ @perl ./runtest.pl test023 --target node
51+ @perl ./runtest.pl test024 --target node
52+ @#perl ./runtest.pl test025 --target node
53+ @perl ./runtest.pl test026 --target node
54+ @perl ./runtest.pl test027 --target node
55+ @perl ./runtest.pl test028 --target node
56+
7update:
57update:
8 perl ./runtest.pl all -u
58 perl ./runtest.pl all -u
9
59