From b605f30516cc1fef04a706137dc9bc202aadc991 Mon Sep 17 00:00:00 2001 From: Camil Staps Date: Tue, 12 Apr 2016 22:01:25 +0200 Subject: Initial commit --- .gitignore | 11 ++ LICENSE | 21 +++ Makefile | 17 ++ README.md | 6 + Smurf.dcl | 28 ++++ Smurf.icl | 118 ++++++++++++++ SmurfParse.dcl | 8 + SmurfParse.icl | 49 ++++++ test.icl | 34 ++++ test.prj | 508 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 800 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 README.md create mode 100644 Smurf.dcl create mode 100644 Smurf.icl create mode 100644 SmurfParse.dcl create mode 100644 SmurfParse.icl create mode 100644 test.icl create mode 100644 test.prj diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1fc2545 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +# Executables +*.exe +*.out +test + +# Directory used to store object files, abc files and assembly files +Clean System Files/ + +# iTasks environment extra data +*-data/ +sapl/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..932c31a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Camil Staps + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f017434 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +CPM=cpm +TEST=test +DEPS=Smurf.dcl Smurf.icl SmurfParse.dcl SmurfParse.icl + +all: $(TEST) + +$(TEST): %: %.icl $(DEPS) + $(CPM) project $@.prj build + +run_test: $(TEST) + ./$^ + +clean: + rm -fvr $(TEST) Clean\ System\ Files + +.PHONY: all clean run_test + diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c08583 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# CleanSmurf +Smurf interpreter in Clean + +## Copyright & license +Copyright © 2016 Camil Staps. Licensed under MIT, see LICENSE. + diff --git a/Smurf.dcl b/Smurf.dcl new file mode 100644 index 0000000..c4f1c45 --- /dev/null +++ b/Smurf.dcl @@ -0,0 +1,28 @@ +definition module Smurf + +from StdOverloaded import class zero, class toString + +from Data.Maybe import ::Maybe + +:: Stm = Push String + | Input | Output + | Cat | Head | Tail | Quotify + | Put | Get | Exec + +:: Program :== [Stm] + +:: Stack :== [String] +:: Store :== [(String, String)] + +:: State = { stack :: Stack + , store :: Store + } + +instance toString Stm + +instance zero State +instance toString State + +step :: !Program State !*File -> *(Maybe (!Program, State), *File) +run :: !Program State *File -> *(Maybe State, *File) + diff --git a/Smurf.icl b/Smurf.icl new file mode 100644 index 0000000..f00ef65 --- /dev/null +++ b/Smurf.icl @@ -0,0 +1,118 @@ +implementation module Smurf + +from StdFunc import o, flip +import StdArray +import StdList +import StdString +import StdTuple +import StdFile + +from Data.Func import $ +import Control.Applicative +import Control.Monad +import Data.Maybe + +import SmurfParse + +instance zero [a] where zero = [] + +instance toString Stm +where + toString (Push s) = "\"" +++ s +++ "\"" + toString Input = "i" + toString Output = "o" + toString Cat = "+" + toString Head = "h" + toString Tail = "t" + toString Quotify = "q" + toString Put = "p" + toString Get = "g" + toString Exec = "x" + +instance zero State where zero = { stack = zero, store = zero } + +instance toString State +where + toString {stack, store} + = "Stack:\n" + +++ foldl (+++) "" [" " +++ val +++ "\n" \\ val <- stack] + +++ "Store:\n" + +++ foldl (+++) "" [" " +++ var +++ " : " +++ val +++ "\n" + \\ (var, val) <- store] + +run :: !Program State *File -> *(Maybe State, *File) +run prog st io + # (mbProgSt, io) = step prog st io + | isNothing mbProgSt = (Nothing, io) + # (prog, st) = fromJust mbProgSt + = if (isEmpty prog) (Just st, io) (run prog st io) + +step :: !Program State !*File -> *(Maybe (!Program, State), *File) +step [] st io + = (pure ([], st), io) +step [Push s:p] st io + = (pure (p, { st & stack = push s st.stack }), io) +step [Input:p] st io + # (ip, io) = freadline io + # ip = ip % (0, size ip - 2) + = (pure (p, { st & stack = push ip st.stack }), io) +step [Output:p] st io + # mbSStk = pop st.stack + | isNothing mbSStk = (empty, io) + # (s, stk) = fromJust mbSStk + = (pure (p, { st & stack = stk }), io <<< s) +step [Cat:p] st io + = (pop st.stack >>= \(x,stk) -> pop stk >>= \(y,stk`) -> + pure (p, { st & stack = push (y +++ x) stk` }), io) +step [Head:p] st io + = (pop st.stack >>= \(x,stk) -> head x >>= \x` -> + pure (p, { st & stack = push x` stk }), io) +step [Tail:p] st io + = (pop st.stack >>= \(x,stk) -> tail x >>= \x` -> + pure (p, { st & stack = push x` stk }), io) +step [Quotify:p] st io + = (pop st.stack >>= \(x,stk) -> + pure (p, { st & stack = push (quotify x) stk }), io) +step [Put:p] st io + = (pop st.stack >>= \(var,stk) -> pop stk >>= \(val,stk`) -> + pure (p, { st & stack = stk`, store = put var val st.store }), io) +step [Get:p] st io + = (pop st.stack >>= \(var,stk) -> + pure (p, { st & stack = push (get var st.store) stk }), io) +step [Exec:p] st io + = (pop st.stack >>= parse o fromString o fst >>= \p -> + pure (p, zero), io) + +push :: String Stack -> Stack +push s st = [s:st] + +pop :: Stack -> Maybe (String, Stack) +pop [] = empty +pop [s:ss] = pure (s, ss) + +head :: String -> Maybe String +head "" = empty +head s = pure $ s % (0,0) + +tail :: String -> Maybe String +tail "" = empty +tail s = pure $ s % (1, size s - 1) + +put :: String String Store -> Store +put var val store = [(var,val) : filter ((<>)var o fst) store] + +get :: String Store -> String +get var store = case filter ((==)var o fst) store of [] = ""; [(_,val):_] = val + +quotify :: (String -> String) +quotify = (flip (+++) "\"") o ((+++)"\"") o toString o quot o fromString +where + quot :: [Char] -> [Char] + quot [] = [] + quot ['\\':cs] = ['\\':'\\':quot cs] + quot ['\n':cs] = ['\\':'n':quot cs] + quot ['\r':cs] = ['\\':'r':quot cs] + quot ['\t':cs] = ['\\':'t':quot cs] + quot ['"':cs] = ['\\':'"':quot cs] + quot [c:cs] = [c:quot cs] + diff --git a/SmurfParse.dcl b/SmurfParse.dcl new file mode 100644 index 0000000..fb06ab3 --- /dev/null +++ b/SmurfParse.dcl @@ -0,0 +1,8 @@ +definition module SmurfParse + +from Data.Maybe import ::Maybe + +from Smurf import ::Program, ::Stm + +parse :: ![Char] -> Maybe Program + diff --git a/SmurfParse.icl b/SmurfParse.icl new file mode 100644 index 0000000..71bfc34 --- /dev/null +++ b/SmurfParse.icl @@ -0,0 +1,49 @@ +implementation module SmurfParse + +from StdFunc import o, flip +import StdChar +import StdList +import StdFile +import StdTuple +import StdString + +from Data.Func import $ +import Data.Maybe +import Control.Applicative +import Control.Monad + +import Smurf + +parse :: ![Char] -> Maybe Program +parse [] = pure [] +parse ['"':cs] = parseString cs >>= \(s,cs`) -> append (Push s) $ parse cs` +parse ['i':cs] = apparse Input cs +parse ['o':cs] = apparse Output cs +parse ['+':cs] = apparse Cat cs +parse ['h':cs] = apparse Head cs +parse ['t':cs] = apparse Tail cs +parse ['q':cs] = apparse Quotify cs +parse ['p':cs] = apparse Put cs +parse ['g':cs] = apparse Get cs +parse ['x':cs] = apparse Exec cs +parse [c:cs] = if (isSpace c) (parse cs) empty + +apparse :: Stm -> [Char] -> Maybe Program +apparse stm = append stm o parse + +append :: a (m [a]) -> m [a] | Monad m +append x mx = mx >>= \xs -> pure [x:xs] + +parseString :: ![Char] -> Maybe (String, [Char]) +parseString cs = pS [] cs +where + pS :: ![Char] ![Char] -> Maybe (String, [Char]) + pS _ [] = empty + pS s ['"':cs] = pure (toString $ reverse s, cs) + pS s ['\\':'n':cs] = pS ['\n':s] cs + pS s ['\\':'r':cs] = pS ['\r':s] cs + pS s ['\\':'t':cs] = pS ['\t':s] cs + pS s ['\\':'\\':cs] = pS ['\\':s] cs + pS s ['\\':'"':cs] = pS ['"':s] cs + pS s [c:cs] = pS [c:s] cs + diff --git a/test.icl b/test.icl new file mode 100644 index 0000000..77e836c --- /dev/null +++ b/test.icl @@ -0,0 +1,34 @@ +module test + +import StdEnv +import Data.Maybe +from Data.Func import $ + +import Smurf +import SmurfParse + +Start :: *World -> *World +Start w +# (io, w) = stdio w +//# io = loop (prog reverse) zero io +# (mbSt, io) = run (prog reverse) zero io +# result = if (isNothing mbSt) "uh-oh." (toString $ fromJust mbSt) +# io = io <<< "\n--------------------\n" <<< result <<< "\n" += snd $ fclose io w +where + loop :: !Program State !*File -> *File + loop p st f + # (mbProgSt, f) = step p st f + | isNothing mbProgSt = f <<< "NOTHING!!!\n" + # (prog, st) = fromJust mbProgSt + | isEmpty prog = f <<< "\n---------------------------\n" <<< toString st + # f = f <<< "---> " <<< toString (hd prog) <<< " ? " + # (cmd, f) = freadline f + | cmd == "state\n" = loop prog st (f <<< toString st) + = loop prog st f + + prog txt = fromJust $ parse txt + + // From http://esolangs.org/wiki/Smurf + reverse = ['"+"i+""p""gtg""gt"i"p"\\"\\"p\\"i\\"gh\\"o\\"g+\\"o\\"p\\"i\\"gt\\"i\\"p\\"\\\\\\"+\\\\\\"\\\\\\"\\\\\\"p\\"\\"i\\"gq+\\"tg\\"+\\"i\\"gq+\\"\\\\\\"i\\\\\\"p\\"+\\"o\\"gq+\\"\\\\\\"o\\\\\\"p\\"+\\"\\"gq+\\"\\"g+\\"\\"p\\"o\\"gq\\"o\\"+\\"+\\"pgx"""p"\\"+\\"\\"\\"p""i"gq+"tg"+"i"gq+"\\"i\\"p\\"\\""+""gq+""g+""p"""+""i"g+pgx'] + diff --git a/test.prj b/test.prj new file mode 100644 index 0000000..00ff6fb --- /dev/null +++ b/test.prj @@ -0,0 +1,508 @@ +Version: 1.4 +Global + ProjectRoot: . + Target: StdEnv + Exec: {Project}/test + CodeGen + CheckStacks: False + CheckIndexes: True + Application + HeapSize: 2097152 + StackSize: 512000 + ExtraMemory: 8192 + IntialHeapSize: 204800 + HeapSizeMultiplier: 4096 + ShowExecutionTime: False + ShowGC: False + ShowStackSize: False + MarkingCollector: False + DisableRTSFlags: False + StandardRuntimeEnv: True + Profile + Memory: False + MemoryMinimumHeapSize: 0 + Time: False + Stack: False + Output + Output: NoConsole + Font: Monaco + FontSize: 9 + WriteStdErr: False + Link + LinkMethod: Static + GenerateRelocations: False + GenerateSymbolTable: False + GenerateLinkMap: False + LinkResources: False + ResourceSource: + GenerateDLL: False + ExportedNames: + Paths + Path: {Project}/ + Path: {Application}/lib/Generics/ + Path: {Application}/lib/clean-platform/OS-Independent/ + Precompile: + Postlink: +MainModule + Name: test + Dir: {Project} + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False +OtherModules + Module + Name: Smurf + Dir: {Project}/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: SmurfParse + Dir: {Project}/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: GenEq + Dir: {Application}/lib/Generics/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Control.Applicative + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Control.Monad + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Data.Func + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Data.Functor + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Data.List + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Data.Maybe + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Data.Monoid + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: Data.Void + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: System.IO + Dir: {Application}/lib/clean-platform/OS-Independent/ + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdArray + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdBool + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdChar + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdCharList + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdClass + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdEnum + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdEnv + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdFile + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdFunc + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdGeneric + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdInt + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdList + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdMisc + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdOrdList + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdOverloaded + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdReal + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdString + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: StdTuple + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: _SystemArray + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False + Module + Name: _SystemEnum + Dir: {Application}/lib/StdEnv + Compiler + NeverMemoryProfile: False + NeverTimeProfile: False + StrictnessAnalysis: True + ListTypes: StrictExportTypes + ListAttributes: True + Warnings: True + Verbose: True + ReadableABC: False + ReuseUniqueNodes: True + Fusion: False -- cgit v1.2.3