diff options
author | Camil Staps | 2016-04-01 21:51:21 +0200 |
---|---|---|
committer | Camil Staps | 2016-04-01 22:00:00 +0200 |
commit | 519a22b298c8858f909a95f1d4f1c84741bf23b1 (patch) | |
tree | f66864d1738e87a65e7699f2ef8692380beca5d5 | |
parent | Implemented memory (diff) |
Use dynamics and generics to output type
-rw-r--r-- | compile.c | 56 | ||||
-rw-r--r-- | iclean.icl | 78 |
2 files changed, 72 insertions, 62 deletions
@@ -1,29 +1,29 @@ /** - * Interactive Clean - * - * C functions to compile and run a Clean module - * - * The MIT License (MIT) - * - * Copyright (c) 2015 Camil Staps <info@camilstaps.nl> - * - * 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. +Interactive Clean + +C functions to compile and run a Clean module + +The MIT License (MIT) + +Copyright (c) 2015 Camil Staps <info@camilstaps.nl> + +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. */ #include <stdlib.h> #include <stdio.h> @@ -68,8 +68,10 @@ int64_t compile(CleanString path, CleanString module) { // Build command: // cd "<path>" && clm -ms <module> -o <module> - char cmd[64] = "cd \""; - snprintf(cmd, 64, "cd \"%s\" && clm -ms -nw %s -o %s", pathchars, modulechars, modulechars); + char cmd[182]; + snprintf(cmd, 182, "cd \"%s\" && clm -I $CLEAN_HOME/lib/StdLib -I " + "$CLEAN_HOME/lib/Generics -I $CLEAN_HOME/lib/Dynamics -dynamics " + "-ms -nw -b -nt %s -o %s", pathchars, modulechars, modulechars); free(pathchars); free(modulechars); @@ -1,29 +1,29 @@ /** - * Interactive Clean - * - * Clean program to easily compile and run one-line Clean expressions - * - * The MIT License (MIT) - * - * Copyright (c) 2015 Camil Staps <info@camilstaps.nl> - * - * 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. +Interactive Clean + +Clean program to easily compile and run one-line Clean expressions + +The MIT License (MIT) + +Copyright (c) 2015 Camil Staps <info@camilstaps.nl> + +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. */ module iclean @@ -34,8 +34,14 @@ import ExtraString // SETTINGS temp_path :== "/tmp/" temp_module :== "iclean" -readline_history :== ".iclean_history" -template :== ["import StdEnv"] +readline_history :== "/home/camil/.iclean_history" +template :== [ "import StdEnv" + , "import StdMaybe" + , "import StdDynamic" + , "import GenPrint" + , "derive gPrint (,),(,,),(,,,),(,,,,),(,,,,,),(,,,,,,),(,,,,,,,)," +++ + "(,,,,,,,,),(,,,,,,,,,),(,,,,,,,,,,),(,,,,,,,,,,,),(,,,,,,,,,,,,)" + ] // END SETTINGS temp_file :== temp_path +++ temp_module +++ ".icl" @@ -44,9 +50,9 @@ Start :: *World -> *World Start w # w = setReadLineName "iClean" w # w = usingHistory w -# w = checkedWorldFunc readHistory "Couldn't read history file\n" readline_history w +# w = checkedWorldFunc readHistory "Couldn't read history" readline_history w # w = loop template True w -# w = checkedWorldFunc writeHistory "Couldn't write history file\n" readline_history w +# w = checkedWorldFunc writeHistory "Couldn't write history" readline_history w = w where loop :: ![String] Bool !*World -> *World @@ -61,11 +67,11 @@ where | s == ":mem" = loop mem True (print (join "\n" mem) w) | matches ":import " s = loop (mem ++ [skip 1 s]) True w | matches ":def " s = loop (mem ++ [skip 5 s]) True w - | matches ":" s = loop mem False (print ("Unknown command " +++ s +++ "\n") w) + | matches ":" s = loop mem False (print ("Unknown command\n") w) # w = writemodule mem s w # (r,w) = compile temp_path temp_module w | r <> 0 = loop mem False w - # (r,w) = run (temp_path +++ temp_module +++ " -nt") w + # (r,w) = run (temp_path +++ temp_module) w | r <> 0 = loop mem False w = loop mem True w @@ -73,7 +79,7 @@ where checkedWorldFunc :: (a *World -> (Bool, *World)) !String !a !*World -> *World checkedWorldFunc f err s w # (ok, w) = f s w -| not ok = print err w +| not ok = print (err +++ "\n") w | otherwise = w print :: String *World -> *World @@ -88,9 +94,11 @@ writemodule :: ![String] !String !*World -> *World writemodule mem s w # (ok,f,w) = fopen temp_file FWriteText w | not ok = abort ("Couldn't open " +++ temp_file +++ " for writing.\n") -# f = fwrites ("module " +++ temp_module +++ "\n") f -# f = fwrites (join "\n" mem) f -# f = fwrites ("Start = " +++ s +++ "\n") f +# f = f <<< "module " <<< temp_module <<< "\n" +# f = f <<< join "\n" mem +# f = f <<< "start = " <<< s <<< "\n" + <<< "Start = toString (typeCodeOfDynamic (dynamic start)) " + <<< "+++ \" :: \" +++ printToString start +++ \"\\n\"\n" # (ok,w) = fclose f w | not ok = abort ("Couldn't close " +++ temp_file +++ "\n") | otherwise = w |