on master help sign in
Merge pull request #371 from raichoo/javascript

Javascript

commit576d33b459811848f8711ae5ec7f09e2b789ae06 authorEdwin Brady <edwin.brady@gmail.com> dateThu 4 Jul 2013, 11:05 (13 years ago) parentc244c7140d9c0a
2 files changed+66−7
src/IRTS/CodegenJavaScript.hs+16−7 test/Makefile+50
src/IRTS/CodegenJavaScript.hs+16−7
@@ -16,11 +16,12 @@ import Data.Char
1616import Data.List
1717import qualified Data.Map as Map
1818import System.IO
19+import System.Directory
1920
2021idrNamespace :: String
2122idrNamespace = "__IDR__"
2223
23−data JSTarget = Node | JavaScript
24+data JSTarget = Node | JavaScript deriving Eq
2425
2526codegenJavaScript
2627 :: JSTarget
@@ -29,17 +30,25 @@ codegenJavaScript
2930 -> OutputType
3031 -> IO ()
3132codegenJavaScript target definitions filename outputType = do
32− let runtime = case target of
33− Node -> "-node"
34− JavaScript -> "-browser"
33+ let (header, runtime) = case target of
34+ Node ->
35+ ("#!/usr/bin/env node\n", "-node")
36+ JavaScript ->
37+ ("", "-browser")
3538 path <- getDataDir
3639 idrRuntime <- readFile $ path ++ "/js/Runtime-common.js"
3740 tgtRuntime <- readFile $ concat [path, "/js/Runtime", runtime, ".js"]
38− writeFile filename (idrRuntime
41+ writeFile filename ( header
42+ ++ idrRuntime
3943 ++ tgtRuntime
4044 ++ modules
4145 ++ functions
4246 ++ mainLoop)
47+
48+ setPermissions filename (emptyPermissions { readable = True
49+ , executable = target == Node
50+ , writable = True
51+ })
4352 where
4453 def = map (first translateNamespace) definitions
4554
@@ -340,7 +349,7 @@ translateExpression (SOp op vars)
340349 , (arg:_) <- vars = translateVariableName arg ++ "[0]"
341350 | LStrRev <- op
342351 , (arg:_) <- vars = let v = translateVariableName arg in
343− v ++ "split('').reverse().join('')"
352+ v ++ ".split('').reverse().join('')"
344353 | LStrIndex <- op
345354 , (lhs:rhs:_) <- vars = let l = translateVariableName lhs
346355 r = translateVariableName rhs in
@@ -472,7 +481,7 @@ translateCase var (SConstCase ty e)
472481 matchHelper tyName = translateTypeMatch var tyName e
473482
474483translateCase var (SConstCase cst@(BI _) e) =
475− let cond = var ++ ".equals(" ++ translateConstant cst ++ ")" in
484+ let cond = "__IDRRT__.bigInt(" ++ var ++ ").equals(" ++ translateConstant cst ++ ")" in
476485 createIfBlock cond (translateExpression e)
477486
478487translateCase var (SConstCase cst e) =
test/Makefile+50
@@ -4,6 +4,56 @@ test:
44test_java:
55 perl ./runtest.pl all --target Java
66
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+
757update:
858 perl ./runtest.pl all -u
959