1(* 2 Title: Standard Basis Library: Commands to build the library 3 Copyright David C.J. Matthews 2000, 2005, 2015-16, 2018-21 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Lesser General Public 7 License version 2.1 as published by the Free Software Foundation. 8 9 This library is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 Lesser General Public License for more details. 13 14 You should have received a copy of the GNU Lesser General Public 15 License along with this library; if not, write to the Free Software 16 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17*) 18 19(* Thread, Weak and Signal are Poly/ML extensions. *) 20 21val () = Bootstrap.use "basis/InitialBasis.ML"; 22val () = Bootstrap.use "basis/Universal.ML"; 23val () = Bootstrap.use "basis/General.sml"; 24val () = Bootstrap.use "basis/LibrarySupport.sml"; 25val () = Bootstrap.use "basis/PolyMLException.sml"; 26val () = Bootstrap.use "basis/Option.sml"; 27val () = Bootstrap.use "basis/ListSignature.sml"; 28val () = Bootstrap.use "basis/List.sml"; 29val () = Bootstrap.use "basis/VectorOperations.sml"; 30val () = Bootstrap.use "basis/PolyVectorOperations.sml"; 31val () = Bootstrap.use "basis/VectorSliceOperations.sml"; 32val () = Bootstrap.use "basis/MONO_VECTOR.sml"; 33val () = Bootstrap.use "basis/MONO_VECTOR_SLICE.sml"; 34val () = Bootstrap.use "basis/MONO_ARRAY.sml"; 35val () = Bootstrap.use "basis/MONO_ARRAY_SLICE.sml"; 36val () = Bootstrap.use "basis/StringSignatures.sml"; 37val () = Bootstrap.use "basis/String.sml"; 38 39structure Int = struct type int = int end; 40val () = Bootstrap.use "basis/INTEGER.sml"; 41val () = Bootstrap.use "basis/Int.sml"; 42val () = Bootstrap.use (if Bootstrap.intIsArbitraryPrecision then "basis/IntAsLargeInt.sml" else "basis/IntAsFixedInt.sml"); 43val () = 44 case FixedInt.precision of SOME 31 => Bootstrap.use "basis/Int31.sml" | SOME 63 => Bootstrap.use "basis/Int63.sml" | _ => (); 45val () = Bootstrap.use "basis/WordSignature.sml"; 46val () = Bootstrap.use "basis/LargeWord.sml"; 47val () = Bootstrap.use "basis/VectorSignature.sml"; 48val () = Bootstrap.use "basis/VectorSliceSignature.sml"; 49val () = Bootstrap.use "basis/Vector.sml"; 50val () = Bootstrap.use "basis/ArraySignature.sml"; 51val () = Bootstrap.use "basis/ArraySliceSignature.sml"; (* Depends on VectorSlice. *) 52val () = Bootstrap.use "basis/Array.sml"; 53 54val () = Bootstrap.use "basis/Text.sml"; (* Declares Char, String, CharArray, CharVector *) 55val () = Bootstrap.use "basis/Bool.sml"; 56val () = Bootstrap.use "basis/ListPair.sml"; 57 58(* Declare the appropriate additional structures. *) 59(* The version of Word32 we use depends on whether this is 60 32-bit or 64-bit. *) 61val () = 62 if LargeWord.wordSize = 32 63 then Bootstrap.use "basis/Word32.sml" 64 else if Word.wordSize >= 32 65 then Bootstrap.use "basis/Word32In64.sml" 66 else if LargeWord.wordSize = 64 67 then Bootstrap.use "basis/Word32InLargeWord64.sml" 68 else (); 69 70val () = Bootstrap.use "basis/Word16.sml"; 71val () = Bootstrap.use "basis/Word8.sml"; 72val () = Bootstrap.use "basis/IntInf.sml"; 73val () = Bootstrap.use "basis/Int32.sml"; 74val () = Bootstrap.use "basis/Word8Array.sml"; 75val () = Bootstrap.use "basis/Byte.sml"; 76val () = Bootstrap.use "basis/BoolArray.sml"; 77val () = Bootstrap.use "basis/IntArray.sml"; 78val () = Bootstrap.use "basis/RealArray.sml"; 79val () = Bootstrap.use "basis/IEEE_REAL.sml"; 80val () = Bootstrap.use "basis/IEEEReal.sml"; 81val () = Bootstrap.use "basis/MATH.sml"; 82val () = Bootstrap.use "basis/MATH.sml"; 83structure LargeReal = struct type real = real end; 84val () = Bootstrap.use "basis/RealSignature.sml"; 85val () = Bootstrap.use "basis/Real.sml"; 86val () = Bootstrap.use "basis/Real32.sml"; 87val () = Bootstrap.use "basis/Time.sml"; 88val () = Bootstrap.use "basis/DATE.sig"; 89val () = Bootstrap.use "basis/Date.sml"; 90val () = Bootstrap.use "basis/Thread.sml"; (* Non-standard. *) 91val () = Bootstrap.use "basis/ThreadLib.sml"; (* Non-standard. *) 92val () = Bootstrap.use "basis/Timer.sml"; 93val () = Bootstrap.use "basis/CommandLine.sml"; 94val () = Bootstrap.use "basis/ExnPrinter.sml"; 95val () = Bootstrap.use "basis/ForeignConstants.sml"; 96val () = Bootstrap.use "basis/ForeignMemory.sml"; 97val () = Bootstrap.useWithParms [Bootstrap.Universal.tagInject Bootstrap.maxInlineSizeTag 1000] "basis/Foreign.sml"; 98val () = Bootstrap.use "basis/IO.sml"; 99val () = Bootstrap.use "basis/OS.sml"; 100val () = Bootstrap.use "basis/PRIM_IO.sml"; 101val () = Bootstrap.use "basis/PrimIO.sml"; 102val () = Bootstrap.use "basis/LibraryIOSupport.sml"; 103val () = Bootstrap.use "basis/STREAM_IO.sml"; 104val () = Bootstrap.use "basis/BasicStreamIO.sml"; 105val () = Bootstrap.use "basis/IMPERATIVE_IO.sml"; 106val () = Bootstrap.use "basis/ImperativeIO.sml"; 107val () = Bootstrap.use "basis/TextIO.sml"; 108val () = Bootstrap.use "basis/BinIO.sml"; 109val () = Bootstrap.use "basis/Socket.sml"; 110val () = Bootstrap.use "basis/NetProtDB.sml"; 111val () = Bootstrap.use "basis/NetServDB.sml"; 112val () = Bootstrap.use "basis/GenericSock.sml"; 113val () = Bootstrap.use "basis/INetSock.sml"; 114val () = Bootstrap.use "basis/INet6Sock.sml"; 115val () = Bootstrap.use "basis/PackReal.sml"; 116val () = 117 if Word.wordSize = 31 118 then Bootstrap.use "basis/PackReal32Boxed.sml" 119 else Bootstrap.use "basis/PackReal32Tagged.sml"; 120 121val () = Bootstrap.use "basis/PackWord.sml"; 122val () = Bootstrap.use "basis/Array2Signature.sml"; 123val () = Bootstrap.use "basis/Array2.sml"; 124val () = Bootstrap.use "basis/IntArray2.sml"; 125val () = Bootstrap.use "basis/SML90.sml"; 126val () = Bootstrap.use "basis/Weak.sml"; 127val () = Bootstrap.use "basis/Signal.sml"; 128val () = Bootstrap.use "basis/BIT_FLAGS.sml"; 129val () = Bootstrap.use "basis/SingleAssignment.sml"; 130 131 132(* Build Windows or Unix structure as appropriate. *) 133local 134 val getOS: int = LibrarySupport.getOSType() 135in 136 val () = 137 if getOS = 0 138 then 139 ( 140 Bootstrap.use "basis/Posix.sml"; 141 Bootstrap.use "basis/Unix.sml"; 142 Bootstrap.use "basis/UnixSock.sml" 143 ) 144 else if getOS = 1 then (Bootstrap.use "basis/Windows.sml") 145 else () 146end; 147 148val () = Bootstrap.use "basis/HashArray.ML"; 149val () = Bootstrap.use "basis/UniversalArray.ML"; 150val () = Bootstrap.use "basis/PrettyPrinter.sml"; (* Add PrettyPrinter to PolyML structure. *) 151val () = Bootstrap.use "basis/ASN1.sml"; 152val () = Bootstrap.use "basis/Statistics.ML"; (* Add Statistics to PolyML structure. *) 153val () = Bootstrap.use "basis/InitialPolyML.ML"; (* Relies on OS. *) 154val () = Bootstrap.use "basis/FinalPolyML.sml"; 155val () = Bootstrap.use "basis/TopLevelPolyML.sml"; (* Add rootFunction to Poly/ML. *) 156 157val use = PolyML.use; 158 159(* Copy everything out of the original name space. *) 160(* Do this AFTER we've finished compiling PolyML and after adding "use". *) 161local 162 val values = 163 ["!", "*", "+", "-", "/", "::", ":=", "<", "<=", "<>", "=", ">", ">=", 164 "@", "Bind", "Chr", "Div", "Domain", "EQUAL", "Empty", "Fail", "GREATER", 165 "LESS", "Match", "NONE", "Option", "Overflow", "SOME", "Size", "Span", 166 "Subscript", "^", "abs", "app", "before", "ceil", "chr", "concat", "div", 167 "exnMessage", "exnName", "explode", "false", "floor", "foldl", "foldr", 168 "getOpt", "hd", "ignore", "implode", "isSome", "length", "map", 169 "mod", "nil", "not", "null", "o", "ord", "print", "quickSort", "real", 170 "ref", "rev", "round", "size", "sort", "str", "substring", "tl", "true", 171 "trunc", "use", "valOf", "vector", "~"] 172 173 val fixes = 174 ["*", "+", "-", "/", "::", ":=", "<", "<=", "<>", "=", ">", ">=", "@", 175 "^", "before", "div", "mod", "o"] 176 177 val sigs = 178 ["ARRAY", "ARRAY2", "ARRAY_SLICE", "BIN_IO", "BIT_FLAGS", "BOOL", "BYTE", 179 "CHAR", "COMMAND_LINE", "DATE", "GENERAL", "GENERIC_SOCK", "IEEE_REAL", 180 "IMPERATIVE_IO", "INET6_SOCK", "INET_SOCK", "INTEGER", "INT_INF", "IO", 181 "LIST", "LIST_PAIR", "MATH", "MONO_ARRAY", "MONO_ARRAY2", 182 "MONO_ARRAY_SLICE", "MONO_VECTOR", "MONO_VECTOR_SLICE", "NET_HOST_DB", 183 "NET_PROT_DB", "NET_SERV_DB", "OPTION", "OS", "OS_FILE_SYS", "OS_IO", 184 "OS_PATH", "OS_PROCESS", "PACK_REAL", "PACK_WORD", "POSIX", 185 "POSIX_ERROR", "POSIX_FILE_SYS", "POSIX_IO", "POSIX_PROCESS", 186 "POSIX_PROC_ENV", "POSIX_SIGNAL", "POSIX_SYS_DB", "POSIX_TTY", "PRIM_IO", 187 "REAL", "SIGNAL", "SML90", "SOCKET", "STREAM_IO", "STRING", "STRING_CVT", 188 "SUBSTRING", "TEXT", "TEXT_IO", "TEXT_STREAM_IO", "THREAD", "TIME", 189 "TIMER", "UNIX", "UNIX_SOCK", "VECTOR", "VECTOR_SLICE", "WEAK", "WINDOWS", "WORD"] 190 191 val types = 192 ["array", "bool", "char", "exn", "int", "list", "option", "order", "real", 193 "ref", "string", "substring", "unit", "vector", "word"] 194 195 val functs = ["ImperativeIO", "PrimIO", "StreamIO"] 196 197 val structs = 198 ["Array", "Array2", "ArraySlice", "Asn1", "BinIO", "BinPrimIO", "Bool", 199 "BoolArray", "BoolArray2", "BoolVector", "Byte", "Char", "CharArray", 200 "CharArray2", "CharArraySlice", "CharVector", "CharVectorSlice", 201 "CommandLine", "Date", "FixedInt", "Foreign", "General", "GenericSock", 202 "HashArray", "IEEEReal", "INet6Sock", "INetSock", "IO", "Int", "Int32", 203 "Int63", "IntArray", "IntArray2", "IntArraySlice", "IntInf", "IntVector", 204 "IntVectorSlice", "LargeInt", "LargeReal", "LargeWord", "List", 205 "ListPair", "Math", "Net6HostDB", "NetHostDB", "NetProtDB", "NetServDB", 206 "OS", "Option", "PackRealBig", "PackRealLittle", "PackReal32Big", 207 "PackReal32Little", "PackWord16Big", 208 "PackWord16Little", "PackWord32Big", "PackWord32Little", "PackWord8Big", 209 "PackWord8Little", "PolyML", "Position", "Posix", "Real", "Real32", 210 "RealArray", "RealArray2", "RealArraySlice", "RealVector", 211 "RealVectorSlice", "RunCall", "SML90", "Signal", "SingleAssignment", 212 "Socket", "String", "StringCvt", "Substring", "SysWord", "Text", 213 "TextIO", "TextPrimIO", "Thread", "ThreadLib", "Time", "Timer", 214 "Universal", "UniversalArray", "Unix", "UnixSock", "Vector", 215 "VectorSlice", "Weak", "Windows", "Word", "Word16", "Word32", "Word64", 216 "Word8", "Word8Array", "Word8Array2", "Word8ArraySlice", "Word8Vector", 217 "Word8VectorSlice"] 218 219 fun copyOver (enter, lookup) = 220 let 221 (* Copy over everything in the list if possible. Some items e.g. the Posix 222 structure, may not be present. *) 223 fun copy s = 224 enter PolyML.globalNameSpace (s, valOf(lookup Bootstrap.globalSpace s)) 225 handle Option => () 226 in 227 List.app copy 228 end 229in 230 val () = copyOver(#enterVal, #lookupVal) values 231 val () = copyOver(#enterFix, #lookupFix) fixes 232 val () = copyOver(#enterType, #lookupType) types 233 val () = copyOver(#enterSig, #lookupSig) sigs 234 val () = copyOver(#enterStruct, #lookupStruct) structs 235 val () = copyOver(#enterFunct, #lookupFunct) functs 236end; 237 238(* Now we've created the new name space we must use PolyML.make/use. N.B. Unlike Bootstrap.use 239 these don't automatically look at the -I option. *) 240 241 242 243