optimized main.icl
authorMart Lubbers <mart@martlubbers.net>
Sat, 27 Feb 2016 13:38:31 +0000 (14:38 +0100)
committerMart Lubbers <mart@martlubbers.net>
Sat, 27 Feb 2016 13:38:31 +0000 (14:38 +0100)
src/main.icl

index 4739c35..edd07f1 100644 (file)
@@ -22,28 +22,18 @@ import lex
 
 :: *StartType :== (LexerOutput, ParserOutput, *World)
 
-parseArgs :: *World -> (Opts, *World)
-parseArgs w
-# ([p:args], w) = getCommandLine w
-= (pa args {program=p, lex=False, parse=False, fp=Nothing, help=False}, w)
-where
-       pa :: [String] -> (Opts -> Opts)
-       pa [] = id
-       pa ["--help":r] = \o.pa r {o & help=True}
-       pa ["--lex":r] = \o.pa r {o & lex=True, parse=False}
-       pa ["--parse":r] = \o.pa r {o & lex=False, parse=True}
-       pa [x:r] = \o.pa r {o & fp=Just x}
-
-//Start :: *World -> (LexerOutput, ParserOutput, *World)
-//Start w
-//# (args, w) = getCommandLine w
-//# (toparse, out) = readEntireFile out
-//= (lexer toparse, parse (lexer toparse), w)
-
 Start :: *World -> *StartType
 Start w
 # (args, w) = parseArgs w
-| args.help = help args.program w
+| args.help
+       # (out, w) = stdio w
+       # out = out <<< "\nUsage: " <<< args.program <<< " [opts] [FILENAME]\n"
+               <<< "\t--help  Show this help\n"
+               <<< "\t--lex   Lex only, is mutually exclusive with --parse\n"
+               <<< "\t--parse Lex & Parse only\n\n"
+               <<< "\tFILENAME   File to parse, when unspecified stdin is parsed\n"
+       # (_, w) = fclose out w
+       = (Left "", Left "", w)
 # (stdin, w) = stdio w
 # (contents, stdin, w) = readFileOrStdin stdin args.fp w
 | args.lex = case contents of
@@ -53,6 +43,18 @@ Start w
        (Left e) = (Left e, Left "", w)
        (Right cs) = let lexOut = lexer cs in (lexOut, parser lexOut, w)
 
+parseArgs :: *World -> (Opts, *World)
+parseArgs w
+# ([p:args], w) = getCommandLine w
+= (pa args {program=p, lex=False, parse=False, fp=Nothing, help=False}, w)
+where
+       pa :: [String] -> (Opts -> Opts)
+       pa [] = id
+       pa ["--help":r] = \o.pa r {o & help=True}
+       pa ["--lex":r] = \o.pa r {o & lex=True, parse=False}
+       pa ["--parse":r] = \o.pa r {o & lex=False, parse=True}
+       pa [x:r] = \o.pa r {o & fp=Just x}
+
 readFileOrStdin :: *File (Maybe String) *World -> *(Either String [Char], *File, *World)
 readFileOrStdin stdin Nothing w
 # (cs, stdin) = readEntireFile stdin
@@ -61,7 +63,8 @@ readFileOrStdin stdin (Just fp) w
 # (b, fin, w) = fopen fp FReadText w
 | not b = (Left "Unable to open file", stdin, w)
 # (cs,         fin) = readEntireFile fin
-# (_, w) = fclose fin w
+# (b, w) = fclose fin w
+| not b = (Left "Unable to close file", stdin, w)
 = (Right cs, stdin, w)
 
 readEntireFile :: *File -> *([Char], *File)
@@ -70,15 +73,3 @@ readEntireFile f
 | not b = ([], f)
 # (cs, f) = readEntireFile f
 = ([c:cs], f)
-
-help :: String *World -> *StartType
-help p w
-# (out, w) = stdio w
-# out = out <<< "\nUsage: " <<< p <<< " [opts] [FILENAME]\n"
-       <<< "\t--help  Show this help\n"
-       <<< "\t--lex   Lex only, is mutually exclusive with --parse\n"
-       <<< "\t--parse Lex & Parse only\n\n"
-       <<< "\tFILENAME   File to parse, when unspecified stdin is parsed\n"
-# (_, w) = fclose out w
-= (Left "", Left "", w)
-