#!/usr/bin/env texlua local io, os, string, table, package, require, assert, error, ipairs, type, select, arg = io, os, string, table, package, require, assert, error, ipairs, type, select, arg os.type = os.type or "unix" if lfs and not package.loaded['lfs'] then package.loaded['lfs'] = lfs end if os.type == "windows" then package.preload["texrunner.pathutil"] = function(...) --[[ Copyright 2016 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] -- pathutil module local assert = assert local select = select local string = string local string_find = string.find local string_sub = string.sub local string_match = string.match local string_gsub = string.gsub local filesys = require "lfs" local function basename(path) local i = 0 while true do local j = string_find(path, "[\\/]", i + 1) if j == nil then return string_sub(path, i + 1) elseif j == #path then return string_sub(path, i + 1, -2) end i = j end end local function dirname(path) local i = 0 while true do local j = string_find(path, "[\\/]", i + 1) if j == nil then if i == 0 then -- No directory portion return "." elseif i == 1 then -- Root return string_sub(path, 1, 1) else -- Directory portion without trailing slash return string_sub(path, 1, i - 1) end end i = j end end local function parentdir(path) local i = 0 while true do local j = string_find(path, "[\\/]", i + 1) if j == nil then if i == 0 then -- No directory portion return "." elseif i == 1 then -- Root return string_sub(path, 1, 1) else -- Directory portion without trailing slash return string_sub(path, 1, i - 1) end elseif j == #path then -- Directory portion without trailing slash return string_sub(path, 1, i - 1) end i = j end end local function trimext(path) return (string_gsub(path, "%.[^\\/%.]*$", "")) end local function ext(path) return string_match(path, "%.([^\\/%.]*)$") or "" end local function replaceext(path, newext) local newpath, n = string_gsub(path, "%.([^\\/%.]*)$", function() return "." .. newext end) if n == 0 then return newpath .. "." .. newext else return newpath end end local function joinpath2(x, y) local xd = x local last = string_sub(x, -1) if last ~= "/" and last ~= "\\" then xd = x .. "\\" end if y == "." then return xd elseif y == ".." then return dirname(x) else if string_match(y, "^%.[\\/]") then return xd .. string_sub(y, 3) else return xd .. y end end end local function joinpath(...) local n = select("#", ...) if n == 2 then return joinpath2(...) elseif n == 0 then return "." elseif n == 1 then return ... else return joinpath(joinpath2(...), select(3, ...)) end end -- https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx local function isabspath(path) local init = string_sub(path, 1, 1) return init == "\\" or init == "/" or string_match(path, "^%a:[/\\]") end local function abspath(path, cwd) if isabspath(path) then -- absolute path return path else -- TODO: relative path with a drive letter is not supported cwd = cwd or filesys.currentdir() return joinpath2(cwd, path) end end return { basename = basename, dirname = dirname, parentdir = parentdir, trimext = trimext, ext = ext, replaceext = replaceext, join = joinpath, abspath = abspath, } end else package.preload["texrunner.pathutil"] = function(...) --[[ Copyright 2016 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] -- pathutil module for *nix local assert = assert local select = select local string = string local string_find = string.find local string_sub = string.sub local string_match = string.match local string_gsub = string.gsub local filesys = require "lfs" local function basename(path) local i = 0 while true do local j = string_find(path, "/", i + 1, true) if j == nil then return string_sub(path, i + 1) elseif j == #path then return string_sub(path, i + 1, -2) end i = j end end local function dirname(path) local i = 0 while true do local j = string_find(path, "/", i + 1, true) if j == nil then if i == 0 then -- No directory portion return "." elseif i == 1 then -- Root return "/" else -- Directory portion without trailing slash return string_sub(path, 1, i - 1) end end i = j end end local function parentdir(path) local i = 0 while true do local j = string_find(path, "/", i + 1, true) if j == nil then if i == 0 then -- No directory portion return "." elseif i == 1 then -- Root return "/" else -- Directory portion without trailing slash return string_sub(path, 1, i - 1) end elseif j == #path then -- Directory portion without trailing slash return string_sub(path, 1, i - 1) end i = j end end local function trimext(path) return (string_gsub(path, "%.[^/%.]*$", "")) end local function ext(path) return string_match(path, "%.([^/%.]*)$") or "" end local function replaceext(path, newext) local newpath, n = string_gsub(path, "%.([^/%.]*)$", function() return "." .. newext end) if n == 0 then return newpath .. "." .. newext else return newpath end end local function joinpath2(x, y) local xd = x if string_sub(x, -1) ~= "/" then xd = x .. "/" end if y == "." then return xd elseif y == ".." then return dirname(x) else if string_sub(y, 1, 2) == "./" then return xd .. string_sub(y, 3) else return xd .. y end end end local function joinpath(...) local n = select("#", ...) if n == 2 then return joinpath2(...) elseif n == 0 then return "." elseif n == 1 then return ... else return joinpath(joinpath2(...), select(3, ...)) end end local function abspath(path, cwd) if string_sub(path, 1, 1) == "/" then -- absolute path return path else cwd = cwd or filesys.currentdir() return joinpath2(cwd, path) end end return { basename = basename, dirname = dirname, parentdir = parentdir, trimext = trimext, ext = ext, replaceext = replaceext, join = joinpath, abspath = abspath, } end end if os.type == "windows" then package.preload["texrunner.shellutil"] = function(...) --[[ Copyright 2016,2019 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] local string_gsub = string.gsub local os_execute = os.execute -- s: string local function escape(s) return '"' .. string_gsub(string_gsub(s, '(\\*)"', '%1%1\\"'), '(\\+)$', '%1%1') .. '"' end local function has_command(name) local result = os_execute("where " .. escape(name) .. " > NUL 2>&1") -- Note that os.execute returns a number on Lua 5.1 or LuaTeX return result == 0 or result == true end return { escape = escape, has_command = has_command, } end else package.preload["texrunner.shellutil"] = function(...) --[[ Copyright 2016,2019 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] local assert = assert local string_match = string.match local table = table local table_insert = table.insert local table_concat = table.concat local os_execute = os.execute -- s: string local function escape(s) local len = #s local result = {} local t,i = string_match(s, "^([^']*)()") assert(t) if t ~= "" then table_insert(result, "'") table_insert(result, t) table_insert(result, "'") end while i < len do t,i = string_match(s, "^('+)()", i) assert(t) table_insert(result, '"') table_insert(result, t) table_insert(result, '"') t,i = string_match(s, "^([^']*)()", i) assert(t) if t ~= "" then table_insert(result, "'") table_insert(result, t) table_insert(result, "'") end end return table_concat(result, "") end local function has_command(name) local result = os_execute("which " .. escape(name) .. " > /dev/null") -- Note that os.execute returns a number on Lua 5.1 or LuaTeX return result == 0 or result == true end return { escape = escape, has_command = has_command, } end end package.preload["texrunner.fsutil"] = function(...) --[[ Copyright 2016 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] local assert = assert local os = os local os_execute = os.execute local os_remove = os.remove local filesys = require "lfs" local pathutil = require "texrunner.pathutil" local shellutil = require "texrunner.shellutil" local escape = shellutil.escape local copy_command if os.type == "windows" then function copy_command(from, to) -- TODO: What if `from` begins with a slash? return "copy " .. escape(from) .. " " .. escape(to) .. " > NUL" end else function copy_command(from, to) -- TODO: What if `from` begins with a hypen? return "cp " .. escape(from) .. " " .. escape(to) end end local isfile = filesys.isfile or function(path) return filesys.attributes(path, "mode") == "file" end local isdir = filesys.isdir or function(path) return filesys.attributes(path, "mode") == "directory" end local function mkdir_rec(path) local succ, err = filesys.mkdir(path) if not succ then succ, err = mkdir_rec(pathutil.parentdir(path)) if succ then return filesys.mkdir(path) end end return succ, err end local function remove_rec(path) if isdir(path) then for file in filesys.dir(path) do if file ~= "." and file ~= ".." then local succ, err = remove_rec(pathutil.join(path, file)) if not succ then return succ, err end end end return filesys.rmdir(path) else return os_remove(path) end end return { copy_command = copy_command, isfile = isfile, isdir = isdir, mkdir_rec = mkdir_rec, remove_rec = remove_rec, } end package.preload["texrunner.luatexinit"] = function(...) local function create_initialization_script(filename, options) local initscript = assert(io.open(filename,"w")) if type(options.file_line_error) == "boolean" then initscript:write(string.format("texconfig.file_line_error = %s\n", options.file_line_error)) end if type(options.halt_on_error) == "boolean" then initscript:write(string.format("texconfig.halt_on_error = %s\n", options.halt_on_error)) end initscript:write([==[ local print = print local io_open = io.open local io_write = io.write local os_execute = os.execute local texio_write = texio.write local texio_write_nl = texio.write_nl ]==]) -- Packages coded in Lua doesn't follow -output-directory option and doesn't write command to the log file initscript:write(string.format("local output_directory = %q\n", options.output_directory)) -- tex.jobname may not be available when io.open is called for the first time initscript:write(string.format("local jobname = %q\n", options.jobname)) initscript:write([==[ local luawritelog local function openluawritelog() if not luawritelog then luawritelog = assert(io_open(output_directory .. "/" .. jobname .. ".cluttex-fls", "w")) end return luawritelog end io.open = function(fname, mode) -- luatexja-ruby if mode == "w" and fname == jobname .. ".ltjruby" then fname = output_directory .. "/" .. fname end if type(mode) == "string" and string.find(mode, "w") ~= nil then -- write mode openluawritelog():write("OUTPUT " .. fname .. "\n") end return io_open(fname, mode) end os.execute = function(...) texio_write_nl("log", string.format("CLUTTEX_EXEC %s", ...), "") return os_execute(...) end ]==]) -- Silence some of the TeX output to the terminal. initscript:write([==[ local function start_file_cb(category, filename) if category == 1 then -- a normal data file, like a TeX source texio_write_nl("log", "("..filename) elseif category == 2 then -- a font map coupling font names to resources texio_write("log", "{"..filename) elseif category == 3 then -- an image file (png, pdf, etc) texio_write("<"..filename) elseif category == 4 then -- an embedded font subset texio_write("<"..filename) elseif category == 5 then -- a fully embedded font texio_write("<<"..filename) else print("start_file: unknown category", category, filename) end end callback.register("start_file", start_file_cb) local function stop_file_cb(category) if category == 1 then texio_write("log", ")") elseif category == 2 then texio_write("log", "}") elseif category == 3 then texio_write(">") elseif category == 4 then texio_write(">") elseif category == 5 then texio_write(">>") else print("stop_file: unknown category", category) end end callback.register("stop_file", stop_file_cb) texio.write = function(...) if select("#",...) == 1 then -- Suppress luaotfload's message (See src/fontloader/runtime/fontload-reference.lua) local s = ... if string.match(s, "^%(using cache: ") or string.match(s, "^%(using write cache: ") or string.match(s, "^%(using read cache: ") or string.match(s, "^%(load luc: ") or string.match(s, "^%(load cache: ") then return texio_write("log", ...) end end return texio_write(...) end ]==]) -- Fix "arg" to make luamplib work initscript:write([==[ if string.match(arg[0], "^%-%-lua=") then local minindex = 0 while arg[minindex - 1] ~= nil do minindex = minindex - 1 end local arg2 = {} for i = 0, #arg - minindex do arg2[i] = arg[i + minindex] end arg = arg2 end ]==]) initscript:close() end return { create_initialization_script = create_initialization_script } end package.preload["texrunner.isatty"] = function(...) --[[ Copyright 2018 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] if os.type == "unix" then -- Try LuaJIT-like FFI local succ, M = pcall(function() local ffi = require "ffi" assert(ffi.os ~= "" and ffi.arch ~= "", "ffi library is stub") ffi.cdef[[ int isatty(int fd); int fileno(void *stream); ]] local isatty = assert(ffi.C.isatty, "isatty not found") local fileno = assert(ffi.C.fileno, "fileno not found") return { isatty = function(file) -- LuaJIT converts Lua's file handles into FILE* (void*) return isatty(fileno(file)) ~= 0 end } end) if succ then if CLUTTEX_VERBOSITY >= 3 then io.stderr:write("ClutTeX: isatty found via FFI (Unix)\n") end return M else if CLUTTEX_VERBOSITY >= 3 then io.stderr:write("ClutTeX: FFI (Unix) not found: ", M, "\n") end end -- Try luaposix local succ, M = pcall(function() local isatty = require "posix.unistd".isatty local fileno = require "posix.stdio".fileno return { isatty = function(file) return isatty(fileno(file)) == 1 end, } end) if succ then if CLUTTEX_VERBOSITY >= 3 then io.stderr:write("ClutTeX: isatty found via luaposix\n") end return M else if CLUTTEX_VERBOSITY >= 3 then io.stderr:write("ClutTeX: luaposix not found: ", M, "\n") end end -- Fallback using system command return { isatty = function(file) local fd if file == io.stdin then fd = 0 elseif file == io.stdout then fd = 1 elseif file == io.stderr then fd = 2 else return false end local result = os.execute(string.format("test -t %d", fd)) return result == true or result == 0 end, } else -- Try LuaJIT local succ, M = pcall(function() local ffi = require "ffi" local bitlib = assert(bit32 or bit, "Neither bit32 (Lua 5.2) nor bit (LuaJIT) found") -- Lua 5.2 or LuaJIT ffi.cdef[[ int _isatty(int fd); int _fileno(void *stream); void *_get_osfhandle(int fd); // should return intptr_t typedef int BOOL; typedef uint32_t DWORD; typedef int FILE_INFO_BY_HANDLE_CLASS; // ??? typedef struct _FILE_NAME_INFO { DWORD FileNameLength; uint16_t FileName[?]; } FILE_NAME_INFO; DWORD GetFileType(void *hFile); BOOL GetFileInformationByHandleEx(void *hFile, FILE_INFO_BY_HANDLE_CLASS fic, void *fileinfo, DWORD dwBufferSize); BOOL GetConsoleMode(void *hConsoleHandle, DWORD* lpMode); BOOL SetConsoleMode(void *hConsoleHandle, DWORD dwMode); DWORD GetLastError(); ]] local isatty = assert(ffi.C._isatty, "_isatty not found") local fileno = assert(ffi.C._fileno, "_fileno not found") local get_osfhandle = assert(ffi.C._get_osfhandle, "_get_osfhandle not found") local GetFileType = assert(ffi.C.GetFileType, "GetFileType not found") local GetFileInformationByHandleEx = assert(ffi.C.GetFileInformationByHandleEx, "GetFileInformationByHandleEx not found") local GetConsoleMode = assert(ffi.C.GetConsoleMode, "GetConsoleMode not found") local SetConsoleMode = assert(ffi.C.SetConsoleMode, "SetConsoleMode not found") local GetLastError = assert(ffi.C.GetLastError, "GetLastError not found") local function wide_to_narrow(array, length) local t = {} for i = 0, length - 1 do table.insert(t, string.char(math.min(array[i], 0xff))) end return table.concat(t, "") end local function is_mintty(fd) local handle = get_osfhandle(fd) local filetype = GetFileType(handle) if filetype ~= 0x0003 then -- not FILE_TYPE_PIPE (0x0003) -- mintty must be a pipe if CLUTTEX_VERBOSITY >= 4 then io.stderr:write("ClutTeX: is_mintty: not a pipe\n") end return false end local nameinfo = ffi.new("FILE_NAME_INFO", 32768) local FileNameInfo = 2 -- : FILE_INFO_BY_HANDLE_CLASS if GetFileInformationByHandleEx(handle, FileNameInfo, nameinfo, ffi.sizeof("FILE_NAME_INFO", 32768)) ~= 0 then local filename = wide_to_narrow(nameinfo.FileName, math.floor(nameinfo.FileNameLength / 2)) -- \(cygwin|msys)--pty-(from|to)-master if CLUTTEX_VERBOSITY >= 4 then io.stderr:write("ClutTeX: is_mintty: GetFileInformationByHandleEx returned ", filename, "\n") end local a, b = string.match(filename, "^\\(%w+)%-%x+%-pty%d+%-(%w+)%-master$") return (a == "cygwin" or a == "msys") and (b == "from" or b == "to") else if CLUTTEX_VERBOSITY >= 4 then io.stderr:write("ClutTeX: is_mintty: GetFileInformationByHandleEx failed\n") end return false end end return { isatty = function(file) -- LuaJIT converts Lua's file handles into FILE* (void*) local fd = fileno(file) return isatty(fd) ~= 0 or is_mintty(fd) end, enable_virtual_terminal = function(file) local fd = fileno(file) if is_mintty(fd) then -- MinTTY if CLUTTEX_VERBOSITY >= 4 then io.stderr:write("ClutTeX: Detected MinTTY\n") end return true elseif isatty(fd) ~= 0 then -- Check for ConEmu or ansicon if os.getenv("ConEmuANSI") == "ON" or os.getenv("ANSICON") then if CLUTTEX_VERBOSITY >= 4 then io.stderr:write("ClutTeX: Detected ConEmu or ansicon\n") end return true else -- Try native VT support on recent Windows local handle = get_osfhandle(fd) local modePtr = ffi.new("DWORD[1]") local result = GetConsoleMode(handle, modePtr) if result == 0 then if CLUTTEX_VERBOSITY >= 3 then local err = GetLastError() io.stderr:write(string.format("ClutTeX: GetConsoleMode failed (0x%08X)\n", err)) end return false end local ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004 result = SetConsoleMode(handle, bitlib.bor(modePtr[0], ENABLE_VIRTUAL_TERMINAL_PROCESSING)) if result == 0 then -- SetConsoleMode failed: Command Prompt on older Windows if CLUTTEX_VERBOSITY >= 3 then local err = GetLastError() -- Typical error code: ERROR_INVALID_PARAMETER (0x57) io.stderr:write(string.format("ClutTeX: SetConsoleMode failed (0x%08X)\n", err)) end return false end if CLUTTEX_VERBOSITY >= 4 then io.stderr:write("ClutTeX: Detected recent Command Prompt\n") end return true end else -- Not a TTY return false end end, } end) if succ then if CLUTTEX_VERBOSITY >= 3 then io.stderr:write("ClutTeX: isatty found via FFI (Windows)\n") end return M else if CLUTTEX_VERBOSITY >= 3 then io.stderr:write("ClutTeX: FFI (Windows) not found: ", M, "\n") end end end return { isatty = function(file) return false end, } end package.preload["texrunner.fswatcher_windows"] = function(...) --[[ Copyright 2019 ARATA Mizuki This file is part of ClutTeX. ClutTeX is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. ClutTeX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ClutTeX. If not, see . ]] local ffi = require "ffi" local bitlib = assert(bit32 or bit, "Neither bit32 (Lua 5.2) nor bit (LuaJIT) found") -- Lua 5.2 or LuaJIT ffi.cdef[[ typedef int BOOL; typedef unsigned int UINT; typedef uint32_t DWORD; typedef void *HANDLE; typedef uintptr_t ULONG_PTR; typedef uint16_t WCHAR; typedef struct _OVERLAPPED { ULONG_PTR Internal; ULONG_PTR InternalHigh; union { struct { DWORD Offset; DWORD OffsetHigh; }; void *Pointer; }; HANDLE hEvent; } OVERLAPPED; typedef struct _FILE_NOTIFY_INFORMATION { DWORD NextEntryOffset; DWORD Action; DWORD FileNameLength; WCHAR FileName[?]; } FILE_NOTIFY_INFORMATION; typedef void (__stdcall *LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, OVERLAPPED *lpOverlapped); DWORD GetLastError(); BOOL CloseHandle(HANDLE hObject); HANDLE CreateFileA(const char *lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, void *lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile); HANDLE CreateIoCompletionPort(HANDLE fileHandle, HANDLE existingCompletionPort, ULONG_PTR completionKey, DWORD numberOfConcurrentThreads); BOOL ReadDirectoryChangesW(HANDLE hDirectory, void *lpBuffer, DWORD nBufferLength, BOOL bWatchSubtree, DWORD dwNotifyFilter, DWORD *lpBytesReturned, OVERLAPPED *lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE lpOverlappedCompletionRoutine); BOOL GetQueuedCompletionStatus(HANDLE CompletionPort, DWORD *lpNumberOfBytes, ULONG_PTR *lpCompletionKey, OVERLAPPED **lpOverlapped, DWORD dwMilliseconds); int MultiByteToWideChar(UINT CodePage, DWORD dwFlags, const char *lpMultiByteStr, int cbMultiByte, WCHAR *lpWideCharStr, int cchWideChar); int WideCharToMultiByte(UINT CodePage, DWORD dwFlags, const WCHAR *lpWideCharStr, int cchWideChar, char *lpMultiByteStr, int cbMultiByte, const char *lpDefaultChar, BOOL *lpUsedDefaultChar); DWORD GetFullPathNameA(const char *lpFileName, DWORD nBufferLength, char *lpBuffer, char **lpFilePart); uint64_t GetTickCount64(); ]] -- LuaTeX's FFI does not equate a null pointer with nil. -- On LuaJIT, ffi.NULL is just nil. local NULL = ffi.NULL -- GetLastError local ERROR_FILE_NOT_FOUND = 0x0002 local ERROR_PATH_NOT_FOUND = 0x0003 local ERROR_ACCESS_DENIED = 0x0005 local ERROR_INVALID_PARAMETER = 0x0057 local ERROR_INSUFFICIENT_BUFFER = 0x007A local WAIT_TIMEOUT = 0x0102 local ERROR_ABANDONED_WAIT_0 = 0x02DF local ERROR_NOACCESS = 0x03E6 local ERROR_INVALID_FLAGS = 0x03EC local ERROR_NOTIFY_ENUM_DIR = 0x03FE local ERROR_NO_UNICODE_TRANSLATION = 0x0459 local KnownErrors = { [ERROR_FILE_NOT_FOUND] = "ERROR_FILE_NOT_FOUND", [ERROR_PATH_NOT_FOUND] = "ERROR_PATH_NOT_FOUND", [ERROR_ACCESS_DENIED] = "ERROR_ACCESS_DENIED", [ERROR_INVALID_PARAMETER] = "ERROR_INVALID_PARAMETER", [ERROR_INSUFFICIENT_BUFFER] = "ERROR_INSUFFICIENT_BUFFER", [ERROR_ABANDONED_WAIT_0] = "ERROR_ABANDONED_WAIT_0", [ERROR_NOACCESS] = "ERROR_NOACCESS", [ERROR_INVALID_FLAGS] = "ERROR_INVALID_FLAGS", [ERROR_NOTIFY_ENUM_DIR] = "ERROR_NOTIFY_ENUM_DIR", [ERROR_NO_UNICODE_TRANSLATION] = "ERROR_NO_UNICODE_TRANSLATION", } -- CreateFile local FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 local FILE_FLAG_OVERLAPPED = 0x40000000 local OPEN_EXISTING = 3 local FILE_SHARE_READ = 0x00000001 local FILE_SHARE_WRITE = 0x00000002 local FILE_SHARE_DELETE = 0x00000004 local FILE_LIST_DIRECTORY = 0x1 local INVALID_HANDLE_VALUE = ffi.cast("void *", -1) -- ReadDirectoryChangesW / FILE_NOTIFY_INFORMATION local FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001 local FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002 local FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004 local FILE_NOTIFY_CHANGE_SIZE = 0x00000008 local FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010 local FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020 local FILE_NOTIFY_CHANGE_CREATION = 0x00000040 local FILE_NOTIFY_CHANGE_SECURITY = 0x00000100 local FILE_ACTION_ADDED = 0x00000001 local FILE_ACTION_REMOVED = 0x00000002 local FILE_ACTION_MODIFIED = 0x00000003 local FILE_ACTION_RENAMED_OLD_NAME = 0x00000004 local FILE_ACTION_RENAMED_NEW_NAME = 0x00000005 -- WideCharToMultiByte / MultiByteToWideChar local CP_ACP = 0 local CP_UTF8 = 65001 local C = ffi.C local function format_error(name, lasterror, extra) local errorname = KnownErrors[lasterror] or string.format("error code %d", lasterror) if extra then return string.format("%s failed with %s (0x%04x) [%s]", name, errorname, lasterror, extra) else return string.format("%s failed with %s (0x%04x)", name, errorname, lasterror) end end local function wcs_to_mbs(wstr, wstrlen, codepage) -- wstr: FFI uint16_t[?] -- wstrlen: length of wstr, or -1 if NUL-terminated if wstrlen == 0 then return "" end codepage = codepage or CP_ACP local dwFlags = 0 local result = C.WideCharToMultiByte(codepage, dwFlags, wstr, wstrlen, nil, 0, nil, nil) if result <= 0 then -- Failed local lasterror = C.GetLastError() -- Candidates: ERROR_INSUFFICIENT_BUFFER, ERROR_INVALID_FLAGS, ERROR_INVALID_PARAMETER, ERROR_NO_UNICODE_TRANSLATION return nil, format_error("WideCharToMultiByte", lasterror) end local mbsbuf = ffi.new("char[?]", result) result = C.WideCharToMultiByte(codepage, dwFlags, wstr, wstrlen, mbsbuf, result, nil, nil) if result <= 0 then -- Failed local lasterror = C.GetLastError() -- Candidates: ERROR_INSUFFICIENT_BUFFER, ERROR_INVALID_FLAGS, ERROR_INVALID_PARAMETER, ERROR_NO_UNICODE_TRANSLATION return nil, format_error("WideCharToMultiByte", lasterror) end return ffi.string(mbsbuf, result) end local function mbs_to_wcs(str, codepage) -- str: Lua string if str == "" then return ffi.new("WCHAR[0]") end codepage = codepage or CP_ACP local dwFlags = 0 local result = C.MultiByteToWideChar(codepage, dwFlags, str, #str, nil, 0) if result <= 0 then local lasterror = C.GetLastError() -- ERROR_INSUFFICIENT_BUFFER, ERROR_INVALID_FLAGS, ERROR_INVALID_PARAMETER, ERROR_NO_UNICODE_TRANSLATION return nil, format_error("MultiByteToWideChar", lasterror) end local wcsbuf = ffi.new("WCHAR[?]", result) result = C.MultiByteToWideChar(codepage, dwFlags, str, #str, wcsbuf, result) if result <= 0 then local lasterror = C.GetLastError() return nil, format_error("MultiByteToWideChar", lasterror) end return wcsbuf, result end local function get_full_path_name(filename) local bufsize = 1024 local buffer local filePartPtr = ffi.new("char*[1]") local result repeat buffer = ffi.new("char[?]", bufsize) result = C.GetFullPathNameA(filename, bufsize, buffer, filePartPtr) if result == 0 then local lasterror = C.GetLastError() return nil, format_error("GetFullPathNameA", lasterror, filename) elseif bufsize < result then -- result: buffer size required to hold the path + terminating NUL bufsize = result end until result < bufsize local fullpath = ffi.string(buffer, result) local filePart = ffi.string(filePartPtr[0]) local dirPart = ffi.string(buffer, ffi.cast("intptr_t", filePartPtr[0]) - ffi.cast("intptr_t", buffer)) -- LuaTeX's FFI doesn't support pointer subtraction return fullpath, filePart, dirPart end --[[ dirwatche.dirname : string dirwatcher._rawhandle : cdata HANDLE dirwatcher._overlapped : cdata OVERLAPPED dirwatcher._buffer : cdata char[?] ]] local dirwatcher_meta = {} dirwatcher_meta.__index = dirwatcher_meta function dirwatcher_meta:close() if self._rawhandle ~= nil then C.CloseHandle(ffi.gc(self._rawhandle, nil)) self._rawhandle = nil end end local function open_directory(dirname) local dwShareMode = bitlib.bor(FILE_SHARE_READ, FILE_SHARE_WRITE, FILE_SHARE_DELETE) local dwFlagsAndAttributes = bitlib.bor(FILE_FLAG_BACKUP_SEMANTICS, FILE_FLAG_OVERLAPPED) local handle = C.CreateFileA(dirname, FILE_LIST_DIRECTORY, dwShareMode, nil, OPEN_EXISTING, dwFlagsAndAttributes, nil) if handle == INVALID_HANDLE_VALUE then local lasterror = C.GetLastError() print("Failed to open "..dirname) return nil, format_error("CreateFileA", lasterror, dirname) end return setmetatable({ dirname = dirname, _rawhandle = ffi.gc(handle, C.CloseHandle), _overlapped = ffi.new("OVERLAPPED"), _buffer = ffi.new("char[?]", 1024), }, dirwatcher_meta) end function dirwatcher_meta:start_watch(watchSubtree) local dwNotifyFilter = bitlib.bor(FILE_NOTIFY_CHANGE_FILE_NAME, FILE_NOTIFY_CHANGE_DIR_NAME, FILE_NOTIFY_CHANGE_ATTRIBUTES, FILE_NOTIFY_CHANGE_SIZE, FILE_NOTIFY_CHANGE_LAST_WRITE, FILE_NOTIFY_CHANGE_LAST_ACCESS, FILE_NOTIFY_CHANGE_CREATION, FILE_NOTIFY_CHANGE_SECURITY) local buffer = self._buffer local bufferSize = ffi.sizeof(buffer) local result = C.ReadDirectoryChangesW(self._rawhandle, buffer, bufferSize, watchSubtree, dwNotifyFilter, nil, self._overlapped, nil) if result == 0 then local lasterror = C.GetLastError() return nil, format_error("ReadDirectoryChangesW", lasterror, self.dirname) end return true end local ActionTable = { [FILE_ACTION_ADDED] = "added", [FILE_ACTION_REMOVED] = "removed", [FILE_ACTION_MODIFIED] = "modified", [FILE_ACTION_RENAMED_OLD_NAME] = "rename_from", [FILE_ACTION_RENAMED_NEW_NAME] = "rename_to", } function dirwatcher_meta:process(numberOfBytes) -- self._buffer received `numberOfBytes` bytes local buffer = self._buffer numberOfBytes = math.min(numberOfBytes, ffi.sizeof(buffer)) local ptr = ffi.cast("char *", buffer) local structSize = ffi.sizeof("FILE_NOTIFY_INFORMATION", 1) local t = {} while numberOfBytes >= structSize do local notifyInfo = ffi.cast("FILE_NOTIFY_INFORMATION*", ptr) local nextEntryOffset = notifyInfo.NextEntryOffset local action = notifyInfo.Action local fileNameLength = notifyInfo.FileNameLength local fileName = notifyInfo.FileName local u = { action = ActionTable[action], filename = wcs_to_mbs(fileName, fileNameLength / 2) } table.insert(t, u) if nextEntryOffset == 0 or numberOfBytes <= nextEntryOffset then break end numberOfBytes = numberOfBytes - nextEntryOffset ptr = ptr + nextEntryOffset end return t end --[[ watcher._rawport : cdata HANDLE watcher._pending : array of { action = ..., filename = ... } watcher._directories[dirname] = { dir = directory watcher, dirname = dirname, files = { [filename] = user-supplied path } -- files to watch } watcher[i] = i-th directory (_directories[dirname] for some dirname) ]] local fswatcher_meta = {} fswatcher_meta.__index = fswatcher_meta local function new_watcher() local port = C.CreateIoCompletionPort(INVALID_HANDLE_VALUE, nil, 0, 0) if port == NULL then local lasterror = C.GetLastError() return nil, format_error("CreateIoCompletionPort", lasterror) end return setmetatable({ _rawport = ffi.gc(port, C.CloseHandle), -- ? _pending = {}, _directories = {}, }, fswatcher_meta) end local function add_directory(self, dirname) local t = self._directories[dirname] if not t then local dirwatcher, err = open_directory(dirname) if not dirwatcher then return dirwatcher, err end t = { dirwatcher = dirwatcher, dirname = dirname, files = {} } table.insert(self, t) local i = #self local result = C.CreateIoCompletionPort(dirwatcher._rawhandle, self._rawport, i, 0) if result == NULL then local lasterror = C.GetLastError() return nil, format_error("CreateIoCompletionPort", lasterror, dirname) end self._directories[dirname] = t local result, err = dirwatcher:start_watch(false) if not result then return result, err end end return t end function fswatcher_meta:add_file(path, ...) local fullpath, filename, dirname = get_full_path_name(path) local t, err = add_directory(self, dirname) if not t then return t, err end t.files[filename] = path return true end local INFINITE = 0xFFFFFFFF local function get_queued(self, timeout) local startTime = C.GetTickCount64() local timeout_ms if timeout == nil then timeout_ms = INFINITE else timeout_ms = timeout * 1000 end local numberOfBytesPtr = ffi.new("DWORD[1]") local completionKeyPtr = ffi.new("ULONG_PTR[1]") local lpOverlapped = ffi.new("OVERLAPPED*[1]") repeat local result = C.GetQueuedCompletionStatus(self._rawport, numberOfBytesPtr, completionKeyPtr, lpOverlapped, timeout_ms) if result == 0 then local lasterror = C.GetLastError() if lasterror == WAIT_TIMEOUT then return nil, "timeout" else return nil, format_error("GetQueuedCompletionStatus", lasterror) end end local numberOfBytes = numberOfBytesPtr[0] local completionKey = tonumber(completionKeyPtr[0]) local dir_t = assert(self[completionKey], "invalid completion key: " .. tostring(completionKey)) local t = dir_t.dirwatcher:process(numberOfBytes) dir_t.dirwatcher:start_watch(false) local found = false for i,v in ipairs(t) do local path = dir_t.files[v.filename] if path then found = true table.insert(self._pending, {path = path, action = v.action}) end end if found then return true end if timeout_ms ~= INFINITE then local tt = C.GetTickCount64() timeout_ms = timeout_ms - (tt - startTime) startTime = tt end until timeout_ms < 0 return nil, "timeout" end function fswatcher_meta:next(timeout) if #self._pending > 0 then local result = table.remove(self._pending, 1) get_queued(self, 0) -- ignore error return result else local result, err = get_queued(self, timeout) if result == nil then return nil, err end return table.remove(self._pending, 1) end end function fswatcher_meta:close() if self._rawport ~= nil then for i,v in ipairs(self) do v.dirwatcher:close() end C.CloseHandle(ffi.gc(self._rawport, nil)) self._rawport = nil end end --[[ local watcher = require("fswatcher_windows").new() assert(watcher:add_file("rdc-sync.c")) assert(watcher:add_file("sub2/hoge")) for i = 1, 10 do local result, err = watcher:next(2) if err == "timeout" then print(os.date(), "timeout") else assert(result, err) print(os.date(), result.path, result.action) end end watcher:close() ]] return { new = new_watcher, } end local getmetatable = getmetatable local pcall = pcall local setmetatable = setmetatable local math = math local math_type = math.type local math_maxinteger = math.maxinteger local math_mininteger = math.mininteger local math_ult = math.ult local string_char = string.char local string_format = string.format local table_concat = table.concat local function _id(x) return x end local _exn_meta = {} function _exn_meta:__tostring() local traceback = self.traceback if traceback then traceback = "\n" .. traceback else traceback = "" end return string_format("%s: %s%s", self.location or "", self.tag[1], traceback) end local _Match_tag = { "Match" } local _Match = setmetatable({ tag = _Match_tag }, _exn_meta) local _Bind_tag = { "Bind" } local _Bind = setmetatable({ tag = _Bind_tag }, _exn_meta) local _Overflow_tag = { "Overflow" } local _Overflow = setmetatable({ tag = _Overflow_tag }, _exn_meta) local _Div_tag = { "Div" } local _Div = setmetatable({ tag = _Div_tag }, _exn_meta) local _Size_tag = { "Size" } local _Size = setmetatable({ tag = _Size_tag }, _exn_meta) local _Subscript_tag = { "Subscript" } local _Subscript = setmetatable({ tag = _Subscript_tag }, _exn_meta) local _Fail_tag = { "Fail" } local function _Fail(message) return setmetatable({ tag = _Fail_tag, payload = message }, _exn_meta) end local _Error_tag = { "Error" } local function _Error(x) return setmetatable({ tag = _Error_tag, payload = x }, _exn_meta) end local function _handle(f) local success, result = pcall(f) if not success and getmetatable(result) ~= _exn_meta then result = _Error(result) end return success, result end local function __exn_instanceof(e, tag) return e.tag == tag end local function _raise(x, location) local e if x.tag == _Error_tag then e = x.payload elseif location ~= nil then local traceback = debug.traceback(nil, 2) e = setmetatable({ tag = x.tag, payload = x.payload, location = location, traceback = traceback }, _exn_meta) else e = x end error(e, 1) end local function _Int_add(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") local z = x + y if y > 0 and z < x then _raise(_Overflow, "Int.+") elseif y < 0 and z > x then _raise(_Overflow, "Int.+") else return z end end local function _Int_sub(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") local z = x - y if y < 0 and z < x then _raise(_Overflow, "Int.-") elseif y > 0 and x < z then _raise(_Overflow, "Int.-") else return z end end local function _Int_mul(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") local z = x * y if (x ~= 0 and z // x ~= y) or (y ~= 0 and z // y ~= x) then _raise(_Overflow, "Int.*") else return z end end local function _Int_div(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") if y == 0 then _raise(_Div, "Int.div") elseif x == math_mininteger and y == -1 then _raise(_Overflow, "Int.div") end return x // y end local function _Int_mod(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") if y == 0 then _raise(_Div, "Int.mod") end return x % y end local function _Int_negate(x) -- assert(math_type(x) == "integer") if x == math_mininteger then _raise(_Overflow, "Int.~") end return - x end local function _Word_div(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") if y == 0 then _raise(_Div, "Word.div") elseif y > 0 then if x >= 0 then return x // y else -- x < 0 -- Algorithm from Programming in Lua, 4th ed. local q = ((x >> 1) // y) << 1 local r = x - q * y if math_ult(r, y) then return q else return q + 1 end end else -- y < 0 if math_ult(x, y) then return 0 else return 1 end end end local function _Word_mod(x, y) -- assert(math_type(x) == "integer") -- assert(math_type(y) == "integer") if y == 0 then _raise(_Div, "Word.mod") elseif y > 0 then if x >= 0 then return x % y else -- x < 0 local q = ((x >> 1) // y) << 1 local r = x - q * y if math_ult(r, y) then return r else return r - y end end else -- y < 0 if math_ult(x, y) then return x else return x - y end end end local function _list(t) local xs = nil for i = t.n, 1, -1 do xs = { t[i], xs } end return xs end local function _Array_array(n, init) if n < 0 then -- or maxLen < n _raise(_Size, "Array.array") end local t = { n = n } for i = 1, n do t[i] = init end return t end local function _VectorOrArray_fromList(xs) local t = {} local n = 0 while xs ~= nil do n = n + 1 t[n] = xs[1] xs = xs[2] end t.n = n return t end local function _VectorOrArray_tabulate(t) local n, f = t[1], t[2] if n < 0 then -- or maxLen < n _raise(_Size, "(Vector|Array).tabulate") end local t = { n = n } for i = 1, n do t[i] = f(i - 1) end return t end local ref, _COLON_COLON, Chr, Domain, LESS, EQUAL, GREATER, _EXCLAM, _COLON_EQ, NONE, Option, getOpt, app, mapPartial, tmp, revAppend, app1, map, mapPartial1, find, foldl, exists, all, tabulate, sub, update, foldr, length, array, size, str, eq, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7, tmp8, tmp9, tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16, tmp17, tmp18, tmp19, tmp20, tmp21, tmp22, tmp23, TypeError_tag, DEC, quot, rem, compare, tmp24, tmp25, fromManExp, sub1, substring, extract, concat, implode, implodeRev, fields, isPrefix, isSuffix, isAscii, isDigit, isAlphaNum, isHexDigit, isPrint, isSpace, toUpper, toString, scanString do ref = function(x) return {x} end _COLON_COLON = function(a) local x = a[1] return {x, a[2]} end Chr = {tag = {"Chr"}} Domain = {tag = {"Domain"}} LESS = "LESS" EQUAL = "EQUAL" GREATER = "GREATER" _EXCLAM = function(a) return a[1] end _COLON_EQ = function(a) local x = a[1] x[1] = a[2] return nil end NONE = {tag = "NONE"} Option = {tag = {"Option"}} getOpt = function(tmp26, default) if tmp26.tag == "NONE" then return default elseif tmp26.tag == "SOME" then return tmp26.payload else _raise(_Match, "option.sml:19:5") end end app = function(a) return function(a1) if a1.tag == "SOME" then elseif a1.tag == "NONE" then return nil else _raise(_Match, "option.sml:31:5") end do return a(a1.payload) end end end mapPartial = function(a) return function(a1) if a1.tag == "SOME" then elseif a1.tag == "NONE" then return NONE else _raise(_Match, "option.sml:35:5") end do return a(a1.payload) end end end tmp = function(eq1) return function(p) if p[1].tag == "NONE" and p[2].tag == "NONE" then return true else if p[1].tag == "SOME" and p[2].tag == "SOME" then else return false end do return eq1({p[1].payload, p[2].payload}) end end end end revAppend = function(tmp26, ys) local tmp27, tmp28 = tmp26, ys ::cont:: do local tmp29, ys1 = tmp27, tmp28 if tmp29 == nil then return ys1 elseif tmp29 ~= nil then local tmp30 = tmp29[1] local tmp31 = tmp29[2] tmp27 = tmp31 tmp28 = {tmp30, ys1} goto cont else _raise(_Match, "list.sml:60:5") end end end app1 = function(a) return function(a1) if a1 == nil then return nil end if a1 ~= nil then else _raise(_Match, "list.sml:64:5") end do local tmp26 = a1[1] local tmp27 = a1[2] a(tmp26) local tmp28 = app1(a) return tmp28(tmp27) end end end map = function(a) return function(a1) if a1 == nil then return nil end if a1 ~= nil then else _raise(_Match, "list.sml:66:5") end do local tmp26 = a1[1] local tmp27 = a1[2] local tmp28 = a(tmp26) local tmp29 = map(a) local tmp30 = tmp29(tmp27) return {tmp28, tmp30} end end end mapPartial1 = function(a) return function(a1) if a1 == nil then return nil end if a1 ~= nil then else _raise(_Match, "list.sml:68:5") end do local tmp26, exp do local tmp27 = a1[1] tmp26 = a1[2] exp = a(tmp27) if exp.tag == "NONE" then else goto else1 end do local tmp28 = mapPartial1(a) return tmp28(tmp26) end end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "list.sml:69:30") end do local y = exp.payload local tmp27 = mapPartial1(a) local tmp28 = tmp27(tmp26) return {y, tmp28} end end end end find = function(a) return function(a1) if a1 == nil then return NONE end if a1 ~= nil then else _raise(_Match, "list.sml:72:5") end do local tmp26 = a1[1] local tmp27 = a1[2] local tmp28 = a(tmp26) if tmp28 then return {tag = "SOME", payload = tmp26} end local tmp29 = find(a) return tmp29(tmp27) end end end foldl = function(a) return function(a1) return function(a2) if a2 == nil then return a1 end if a2 ~= nil then else _raise(_Match, "list.sml:91:5") end do local tmp26 = a2[1] local tmp27 = a2[2] local tmp28 = foldl(a) local tmp29 = a({tmp26, a1}) local tmp30 = tmp28(tmp29) return tmp30(tmp27) end end end end exists = function(a) return function(a1) if a1 == nil then return false end if a1 ~= nil then else _raise(_Match, "list.sml:96:5") end do local tmp26 = a1[1] local tmp27 = a1[2] local tmp28 = a(tmp26) if tmp28 then return true end local tmp29 = exists(a) return tmp29(tmp27) end end end all = function(a) return function(a1) if a1 == nil then return true end if a1 ~= nil then else _raise(_Match, "list.sml:98:5") end do local tmp26 = a1[1] local tmp27 = a1[2] local tmp28 = a(tmp26) if tmp28 then else return false end do local tmp29 = all(a) return tmp29(tmp27) end end end end tabulate = function(n, f) if n < 0 then _raise(_Size, "list.sml:101:27") end if n < 10 then else goto else1 end do local function go(a) if a >= n then return nil end local tmp26 = f(a) local tmp27 = go(_Int_add(a, 1)) return {tmp26, tmp27} end return go(0) end ::else1:: local tmp26, tmp27 = 0, nil ::cont:: do local i, acc = tmp26, tmp27 if i >= n then else goto else2 end do return revAppend(acc, nil) end ::else2:: local tmp28 = _Int_add(i, 1) local tmp29 = f(i) tmp26 = tmp28 tmp27 = {tmp29, acc} goto cont end end sub = function(a) local arr = a[1] return arr[a[2] + 1] end update = function(a) local arr = a[1] local i = a[2] arr[i + 1] = a[3] return nil end foldr = function(a, a1) return function(a2) local tmp26, tmp27, tmp28, tmp29 = a, a1, a2, _Int_sub(a2.n, 1) ::cont:: do local f, acc, vec, i = tmp26, tmp27, tmp28, tmp29 if i < 0 then return acc end local tmp30 = f({vec[i + 1], acc}) tmp26 = f tmp27 = tmp30 tmp28 = vec tmp29 = _Int_sub(i, 1) goto cont end end end length = function(a) return a.n end array = function(a) local n = a[1] return _Array_array(n, a[2]) end size = function(a) return #a end str = function(a) return string_char(a) end eq = function(a) local x = a[1] return x == a[2] end local tmp26 = _ENV.io tmp1 = _ENV.os tmp2 = _ENV.package tmp3 = _ENV.require tmp4 = _ENV.tonumber tmp5 = _ENV.tostring tmp6 = _ENV.type tmp7 = tmp26.open tmp8 = tmp26.popen tmp9 = tmp26.stderr tmp10 = tmp26.stdout tmp11 = math.huge tmp12 = math.modf tmp13 = tmp1.difftime tmp14 = tmp1.execute tmp15 = tmp1.exit tmp16 = tmp1.getenv tmp17 = tmp1.setlocale tmp18 = tmp1.time tmp19 = string.byte tmp20 = string.find tmp21 = string.gsub tmp22 = string.match local tmp27 = string.sub do local tmp28, tmp29 = pcall(tmp3, "lfs") if tmp28 then tmp23 = {tag = "SOME", payload = tmp29} else tmp23 = NONE end end TypeError_tag = {"TypeError"} DEC = "DEC" quot = function(x, y) do local tmp28 = x >= 0 and y >= 0 local tmp29 tmp29 = tmp28 or x <= 0 and y <= 0 if tmp29 then return _Int_div(x, y) end if x == math_mininteger then else goto else1 end do if y == 1 then return x end local tmp30 = _Int_negate(y) return _Int_negate(_Int_div(x, tmp30)) end end ::else1:: local tmp28 = _Int_negate(x) return _Int_negate(_Int_div(tmp28, y)) end rem = function(x, y) if y == -1 then return 0 end local tmp28 = quot(x, y) return _Int_sub(x, _Int_mul(tmp28, y)) end compare = function(a) local x = a[1] local y = a[2] if x == y then return EQUAL elseif x < y then return LESS else return GREATER end end do local tmp28, tmp29 = math_maxinteger, 1 ::cont5:: do local x, n = tmp28, tmp29 if x == 0 then tmp24 = n else local tmp30 = x >> 1 tmp28 = tmp30 tmp29 = _Int_add(n, 1) goto cont5 end end end tmp25 = - tmp11 fromManExp = function(exp, man) local tmp28, tmp29 = exp, man ::cont:: do local exp1, man1 = tmp28, tmp29 if -1022 <= exp1 then if exp1 < 1024 then return man1 * 2.0 ^ exp1 end local exp_PRIME if exp1 > 2098 then exp_PRIME = 2098 else exp_PRIME = exp1 end local tmp30 = man1 * 0x1p1023 tmp28 = _Int_sub(exp_PRIME, 1023) tmp29 = tmp30 goto cont end local exp_PRIME if exp1 < -2099 then exp_PRIME = -2099 else exp_PRIME = exp1 end local tmp30 = exp_PRIME % -1022 if tmp30 ~= 0 then local tmp31 = man1 * 2.0 ^ tmp30 tmp28 = _Int_sub(exp_PRIME, tmp30) tmp29 = tmp31 goto cont else local tmp31 = man1 * 0x1p-1022 tmp28 = _Int_add(exp_PRIME, 1022) tmp29 = tmp31 goto cont end end end sub1 = function(a) local s = a[1] local i = a[2] if i < 0 or #s <= i then _raise(_Subscript, "string-1.sml:33:44") else return tmp19(s, _Int_add(i, 1)) end end substring = function(s, i, j) local tmp28 if i < 0 then tmp28 = true elseif j < 0 then tmp28 = true else local tmp29 = #s tmp28 = tmp29 < _Int_add(i, j) end if tmp28 then _raise(_Subscript, "string-1.sml:40:59") else local tmp29 = _Int_add(i, 1) return tmp27(s, tmp29, _Int_add(i, j)) end end extract = function(s, i, tmp28) if tmp28.tag == "NONE" then if i < 0 or #s < i then _raise(_Subscript, "string-1.sml:46:69") else return tmp27(s, _Int_add(i, 1)) end else if tmp28.tag == "SOME" then else _raise(_Match, "string-1.sml:45:5") end do return substring(s, i, tmp28.payload) end end end concat = function(a) return table_concat(_VectorOrArray_fromList(a)) end implode = function(a) local v = _VectorOrArray_fromList(a) local tmp28 do local tmp29 = v.n tmp28 = _VectorOrArray_tabulate({tmp29, function(i) return string_char(v[i + 1]) end}) end return table_concat(tmp28) end implodeRev = function(a) local tmp28 = revAppend(a, nil) local v = _VectorOrArray_fromList(tmp28) local tmp29 do local tmp30 = v.n tmp29 = _VectorOrArray_tabulate({tmp30, function(i) return string_char(v[i + 1]) end}) end return table_concat(tmp29) end fields = function(a) return function(a1) local tmp28, tmp29, tmp30 do local tmp31 do local tmp32 = foldr(_COLON_COLON, nil) local tmp33 = _VectorOrArray_tabulate({#a1, function(i) return sub1({a1, i}) end}) tmp31 = tmp32(tmp33) end tmp30, tmp29, tmp28 = nil, nil, tmp31 end ::cont:: do local revFields, acc, tmp31 = tmp30, tmp29, tmp28 if tmp31 == nil then else goto else1 end do local tmp32 = implodeRev(acc) return revAppend({tmp32, revFields}, nil) end ::else1:: if tmp31 ~= nil then else _raise(_Match, "string-1.sml:80:26") end do local tmp32 = tmp31[1] local tmp33 = tmp31[2] local tmp34 = a(tmp32) if tmp34 then else tmp30 = revFields tmp29 = {tmp32, acc} tmp28 = tmp33 goto cont end do local tmp35 = implodeRev(acc) tmp30 = {tmp35, revFields} tmp29 = nil tmp28 = tmp33 goto cont end end end end end isPrefix = function(a) return function(a1) local tmp28 = #a if tmp28 > #a1 then return false end local tmp29 = substring(a1, 0, tmp28) return tmp29 == a end end isSuffix = function(a) return function(a1) local tmp28 = #a local tmp29 = #a1 if tmp28 > tmp29 then return false end local tmp30 = substring(a1, _Int_sub(tmp29, tmp28), tmp28) return tmp30 == a end end isAscii = function(a) return a <= 127 end isDigit = function(a) return 48 <= a and a <= 57 end isAlphaNum = function(a) local tmp28 if 65 <= a and a <= 90 then return true else tmp28 = 97 <= a and a <= 122 end return tmp28 or 48 <= a and a <= 57 end isHexDigit = function(a) return 48 <= a and a <= 57 or (97 <= a and a <= 102 or 65 <= a and a <= 70) end isPrint = function(a) return 33 <= a and a <= 126 or a == 32 end isSpace = function(a) return 9 <= a and a <= 13 or a == 32 end toUpper = function(a) if 97 <= a and a <= 122 then local tmp28 = _Int_sub(a, 32) if tmp28 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp28 > 255 then _raise(Chr, "char-1.sml:47:37") else return tmp28 end else return a end end toString = function(a) if a == 92 then return "\\\\" end if a == 34 then return "\\\"" end local tmp28 = isPrint(a) if tmp28 then return string_char(a) end if a == 7 then return "\\a" end if a == 8 then return "\\b" end if a == 9 then return "\\t" end if a == 10 then return "\\n" end if a == 11 then return "\\v" end if a == 12 then return "\\f" end if a == 13 then return "\\r" end local tmp29 = a if tmp29 < 32 then local tmp30 = _Int_add(tmp29, 64) if tmp30 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp30 > 255 then _raise(Chr, "char-1.sml:47:37") else return "\\^" .. string_char(tmp30) end elseif tmp29 < 100 then return "\\0" .. tmp21(tmp5(tmp29), "-", "~") else return "\\" .. tmp21(tmp5(tmp29), "-", "~") end end scanString = function(a) return function(a1) local tmp28 = a(function(a2) local s = a2[1] local i = a2[2] if i < #s then else return NONE end do local tmp29 = sub1({s, i}) return {tag = "SOME", payload = {tmp29, {s, _Int_add(i, 1)}}} end end) local exp = tmp28({a1, 0}) if exp.tag == "SOME" then return {tag = "SOME", payload = exp.payload[1]} elseif exp.tag == "NONE" then return NONE else _raise(_Match, "string-cvt-1.sml:33:25") end end end do if tmp24 ~= 64 then else goto cont end do local tmp28 = _Fail("Word64 is not available") _raise(tmp28, "word.sml:333:18") end end end ::cont:: local MonoSequence, CharArray, extract1, full, string1, isEmpty, getc, concat1, splitl, splitr, tokens, tmp26, tmp27, tmp28, tmp29, tmp30, tmp31, tmp32, tmp33, tmp34, tmp35, tmp36, tmp37, tmp38, tmp39, tmp40, tmp41, tmp42 do MonoSequence = function(fromList, length1, maxLen, tmp43, create, tmp44, tmp45, tmp46, tmp47, fromList1, length2, maxLen1, tmp48, vector, tmp49, tmp50, tmp51) local tabulate1, sub2, update1, appi, app2, mapi, map1, foldli, foldri, foldl1, foldr1, findi, find1, exists1, all1, collate, toList, append, prepend, array1, tabulate2, sub3, update2, copy, copyVec, appi1, app3, modifyi, modify, foldli1, foldri1, foldl2, foldr2, findi1, find2, exists2, all2, collate1, toList1, vector1, fromVector, length3, sub4, update3, full1, slice, subslice, base, copy1, copyVec1, isEmpty1, getItem, appi2, app4, modifyi1, modify1, foldli2, foldri2, foldl3, foldr3, findi2, find3, exists3, all3, collate2, vector2, UnsafeMonoVector, UnsafeMonoArray, MonoVectorSlice do tabulate1 = function(a) local n = a[1] local tmp52 = tabulate(n, a[2]) return tmp49({n, tmp52}) end sub2 = function(a) local v = a[1] local i = a[2] local tmp52 do if 0 <= i then else tmp52 = false goto cont end do local tmp53 = length2(v) tmp52 = i < tmp53 end end ::cont:: if tmp52 then else _raise(_Subscript, "mono-sequence.sml:221:22") end do return tmp51({v, i}) end end update1 = function(a) local v = a[1] local i = a[2] local x = a[3] local tmp52 = tmp48({base = v, length = i, start = 0}) local tmp53 = fromList1({x, nil}) local tmp54 = _Int_add(i, 1) local tmp55 = length2(v) local tmp56 = tmp48({base = v, length = _Int_sub(_Int_sub(tmp55, i), 1), start = tmp54}) return tmp47({tmp52, {tmp53, {tmp56, nil}}}) end appi = function(a) return function(a1) local n = length2(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return nil end local tmp53 = tmp51({a1, a2}) a({a2, tmp53}) tmp52 = _Int_add(a2, 1) goto cont end end end app2 = function(a) return function(a1) local n = length2(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return nil end local tmp53 = tmp51({a1, a2}) a(tmp53) tmp52 = _Int_add(a2, 1) goto cont end end end mapi = function(a) return function(a1) local n = length2(a1) local tmp52 = tabulate(n, function(i) local tmp53 = tmp51({a1, i}) return a({i, tmp53}) end) return tmp49({n, tmp52}) end end map1 = function(a) return function(a1) local n = length2(a1) local tmp52 = tabulate(n, function(i) local tmp53 = tmp51({a1, i}) return a(tmp53) end) return tmp49({n, tmp52}) end end foldli = function(a) return function(a1) return function(a2) local n = length2(a2) local tmp52, tmp53 = 0, a1 ::cont:: do local i, acc = tmp52, tmp53 if i >= n then return acc end local tmp54 = _Int_add(i, 1) local tmp55 = tmp51({a2, i}) local tmp56 = a({i, tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end foldri = function(a) return function(a1) return function(a2) local tmp52, tmp53 do local tmp54 = length2(a2) tmp53, tmp52 = _Int_sub(tmp54, 1), a1 end ::cont:: do local i, acc = tmp53, tmp52 if i < 0 then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp51({a2, i}) local tmp56 = a({i, tmp55, acc}) tmp53 = tmp54 tmp52 = tmp56 goto cont end end end end foldl1 = function(a) return function(a1) return function(a2) local n = length2(a2) local tmp52, tmp53 = 0, a1 ::cont:: do local i, acc = tmp52, tmp53 if i >= n then return acc end local tmp54 = _Int_add(i, 1) local tmp55 = tmp51({a2, i}) local tmp56 = a({tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end foldr1 = function(a) return function(a1) return function(a2) local tmp52, tmp53 do local tmp54 = length2(a2) tmp53, tmp52 = _Int_sub(tmp54, 1), a1 end ::cont:: do local i, acc = tmp53, tmp52 if i < 0 then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp51({a2, i}) local tmp56 = a({tmp55, acc}) tmp53 = tmp54 tmp52 = tmp56 goto cont end end end end findi = function(a) return function(a1) local n = length2(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return NONE end local x = tmp51({a1, a2}) local tmp53 = a({a2, x}) if tmp53 then return {tag = "SOME", payload = {a2, x}} else tmp52 = _Int_add(a2, 1) goto cont end end end end find1 = function(a) return function(a1) local n = length2(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return NONE end local x = tmp51({a1, a2}) local tmp53 = a(x) if tmp53 then return {tag = "SOME", payload = x} else tmp52 = _Int_add(a2, 1) goto cont end end end end exists1 = function(a) return function(a1) local n = length2(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return false end local tmp53 = tmp51({a1, a2}) local tmp54 = a(tmp53) if tmp54 then return true else tmp52 = _Int_add(a2, 1) goto cont end end end end all1 = function(a) return function(a1) local n = length2(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return true end local tmp53 = tmp51({a1, a2}) local tmp54 = a(tmp53) if tmp54 then tmp52 = _Int_add(a2, 1) goto cont else return false end end end end collate = function(a) return function(a1) local xs = a1[1] local ys = a1[2] local xl = length2(xs) local yl = length2(ys) local tmp52 = 0 ::cont:: do local a2 = tmp52 local tmp53 = xl <= a2 local tmp54 = yl <= a2 local tmp55 tmp55 = tmp53 and tmp54 if tmp55 then return EQUAL end local tmp56 tmp56 = tmp53 and not tmp54 if tmp56 then return LESS end if not tmp53 and tmp54 then return GREATER end if not tmp53 and not tmp54 then else _raise(_Match, "mono-sequence.sml:310:49") end do local tmp57 = tmp51({xs, a2}) local tmp58 = tmp51({ys, a2}) local exp = a({tmp57, tmp58}) if exp == "EQUAL" then tmp52 = _Int_add(a2, 1) goto cont else return exp end end end end end toList = function(a) local tmp52 = foldr1(_COLON_COLON) local tmp53 = tmp52(nil) return tmp53(a) end append = function(a) local v = a[1] local tmp52 = fromList1({a[2], nil}) return tmp47({v, {tmp52, nil}}) end prepend = function(a) local x = a[1] local v = a[2] local tmp52 = fromList1({x, nil}) return tmp47({tmp52, {v, nil}}) end local length4 = function(tmp52) return tmp52.length end local sub5 = function(a) local base1 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] if 0 <= i and i < length5 then else _raise(_Subscript, "mono-sequence.sml:331:44") end do return tmp51({base1, _Int_add(start, i)}) end end local full2 = function(a) local tmp52 = length2(a) return {base = a, length = tmp52, start = 0} end local slice1 = function(a) if a[3].tag == "NONE" then else goto else1 end do local v = a[1] local i = a[2] local n = length2(v) if 0 <= i and i <= n then return {base = v, length = _Int_sub(n, i), start = i} else _raise(_Subscript, "mono-sequence.sml:337:33") end end ::else1:: if a[3].tag == "SOME" then else _raise(_Match, "mono-sequence.sml:333:5") end do local v = a[1] local i = a[2] local n = a[3].payload local tmp52 do if 0 <= i then else tmp52 = false goto cont end do if 0 <= n then else tmp52 = false goto cont end do local tmp53 = _Int_add(i, n) local tmp54 = length2(v) tmp52 = tmp53 <= tmp54 end end end ::cont:: if tmp52 then return {base = v, length = n, start = i} else _raise(_Subscript, "mono-sequence.sml:342:32") end end end local subslice1 = function(a) if a[3].tag == "NONE" then local base1 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] if 0 <= i and i <= length5 then local tmp52 = _Int_add(start, i) return {base = base1, length = _Int_sub(length5, i), start = tmp52} else _raise(_Subscript, "mono-sequence.sml:346:55") end end if a[3].tag == "SOME" then local base1 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] local n = a[3].payload if 0 <= i and (0 <= n and _Int_add(i, n) <= length5) then return {base = base1, length = n, start = _Int_add(start, i)} else _raise(_Subscript, "mono-sequence.sml:350:57") end else _raise(_Match, "mono-sequence.sml:343:5") end end local base1 = function(a) local b = a.base local start = a.start return {b, start, a.length} end local concat2 = function(a) local tmp52 = map(tmp48) local tmp53 = tmp52(a) return tmp47(tmp53) end local isEmpty2 = function(a) return a.length == 0 end local getItem1 = function(a) local base2 = a.base local start = a.start local length5 = a.length if length5 > 0 then else return NONE end do local tmp52 = tmp51({base2, start}) local tmp53 = _Int_add(start, 1) return {tag = "SOME", payload = {tmp52, {base = base2, length = _Int_sub(length5, 1), start = tmp53}}} end end local appi3 = function(a) return function(a1) local base2 = a1.base local start = a1.start local length5 = a1.length local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= length5 then return nil end local tmp53 = tmp51({base2, _Int_add(start, a2)}) a({a2, tmp53}) tmp52 = _Int_add(a2, 1) goto cont end end end local app5 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return nil end local tmp54 = tmp51({base2, a2}) a(tmp54) tmp53 = _Int_add(a2, 1) goto cont end end end local mapi1 = function(a) return function(a1) local base2 = a1.base local start = a1.start local length5 = a1.length local tmp52, tmp53 = 0, nil ::cont:: do local i, acc = tmp52, tmp53 if i >= length5 then else goto else1 end do return tmp50({length5, acc}) end ::else1:: local tmp54 = _Int_add(i, 1) local tmp55 = tmp51({base2, _Int_add(start, i)}) local tmp56 = a({i, tmp55}) tmp52 = tmp54 tmp53 = {tmp56, acc} goto cont end end end local map2 = function(a) return function(a1) local base2, length5, tmp52, tmp53, tmp54 do base2 = a1.base local start = a1.start length5 = a1.length tmp52 = _Int_add(start, length5) tmp54, tmp53 = start, nil end ::cont:: do local i, acc = tmp54, tmp53 if i >= tmp52 then else goto else1 end do return tmp50({length5, acc}) end ::else1:: local tmp55 = _Int_add(i, 1) local tmp56 = tmp51({base2, i}) local tmp57 = a(tmp56) tmp54 = tmp55 tmp53 = {tmp57, acc} goto cont end end end local foldli3 = function(a) return function(a1) return function(a2) local base2 = a2.base local start = a2.start local length5 = a2.length local tmp52, tmp53 = 0, a1 ::cont:: do local i, acc = tmp52, tmp53 if i >= length5 then return acc end local tmp54 = _Int_add(i, 1) local tmp55 = tmp51({base2, _Int_add(start, i)}) local tmp56 = a({i, tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end local foldri3 = function(a) return function(a1) return function(a2) local base2 = a2.base local start = a2.start local tmp52, tmp53 = _Int_sub(a2.length, 1), a1 ::cont:: do local i, acc = tmp52, tmp53 if i < 0 then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp51({base2, _Int_add(start, i)}) local tmp56 = a({i, tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end local foldl4 = function(a) return function(a1) return function(a2) local base2, tmp52, tmp53, tmp54 do base2 = a2.base local start = a2.start tmp52 = _Int_add(start, a2.length) tmp54, tmp53 = start, a1 end ::cont:: do local i, acc = tmp54, tmp53 if i >= tmp52 then return acc end local tmp55 = _Int_add(i, 1) local tmp56 = tmp51({base2, i}) local tmp57 = a({tmp56, acc}) tmp54 = tmp55 tmp53 = tmp57 goto cont end end end end local foldr4 = function(a) return function(a1) return function(a2) local base2 = a2.base local start = a2.start local tmp52, tmp53 = _Int_sub(_Int_add(start, a2.length), 1), a1 ::cont:: do local i, acc = tmp52, tmp53 if i < start then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp51({base2, i}) local tmp56 = a({tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end local findi3 = function(a) return function(a1) local base2 = a1.base local start = a1.start local length5 = a1.length local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= length5 then return NONE end local x = tmp51({base2, _Int_add(start, a2)}) local tmp53 = a({a2, x}) if tmp53 then return {tag = "SOME", payload = {a2, x}} else tmp52 = _Int_add(a2, 1) goto cont end end end end local find4 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return NONE end local x = tmp51({base2, a2}) local tmp54 = a(x) if tmp54 then return {tag = "SOME", payload = x} else tmp53 = _Int_add(a2, 1) goto cont end end end end local exists4 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return false end local tmp54 = tmp51({base2, a2}) local tmp55 = a(tmp54) if tmp55 then return true else tmp53 = _Int_add(a2, 1) goto cont end end end end local all4 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return true end local tmp54 = tmp51({base2, a2}) local tmp55 = a(tmp54) if tmp55 then tmp53 = _Int_add(a2, 1) goto cont else return false end end end end local collate3 = function(a) return function(a1) local base2, base_PRIME, tmp52, tmp53, tmp54, tmp55 do base2 = a1[1].base local start = a1[1].start local length5 = a1[1].length base_PRIME = a1[2].base local start_PRIME = a1[2].start local length_PRIME = a1[2].length tmp52 = _Int_add(start, length5) tmp53 = _Int_add(start_PRIME, length_PRIME) tmp55, tmp54 = start, start_PRIME end ::cont:: do local i, j = tmp55, tmp54 local tmp56 = tmp52 <= i local tmp57 = tmp53 <= j local tmp58 tmp58 = tmp56 and tmp57 if tmp58 then return EQUAL end local tmp59 tmp59 = tmp56 and not tmp57 if tmp59 then return LESS end if not tmp56 and tmp57 then return GREATER end if not tmp56 and not tmp57 then else _raise(_Match, "mono-sequence.sml:454:29") end do local tmp60 = tmp51({base2, i}) local tmp61 = tmp51({base_PRIME, j}) local exp = a({tmp60, tmp61}) if exp == "EQUAL" then tmp55 = _Int_add(i, 1) tmp54 = _Int_add(j, 1) goto cont else return exp end end end end end array1 = function(a) local n = a[1] local init = a[2] if n < 0 or maxLen < n then _raise(_Size, "mono-sequence.sml:470:27") else return tmp43({n, init}) end end tabulate2 = function(a) local n = a[1] local f = a[2] if maxLen < n then _raise(_Size, "mono-sequence.sml:475:27") end local tmp52 = tabulate(n, f) return tmp44({n, tmp52}) end sub3 = function(a) local a1 = a[1] local i = a[2] local tmp52 do if 0 <= i then else tmp52 = false goto cont end do local tmp53 = length1(a1) tmp52 = i < tmp53 end end ::cont:: if tmp52 then else _raise(_Subscript, "mono-sequence.sml:482:22") end do return tmp45({a1, i}) end end update2 = function(a) local a1 = a[1] local i = a[2] local x = a[3] local tmp52 do if 0 <= i then else tmp52 = false goto cont end do local tmp53 = length1(a1) tmp52 = i < tmp53 end end ::cont:: if tmp52 then else _raise(_Subscript, "mono-sequence.sml:486:28") end do return tmp46({a1, i, x}) end end copy = function(a) local src = a.src local dst = a.dst local di = a.di local srcLen = length1(src) local tmp52 do if 0 <= di then else tmp52 = false goto cont end do local tmp53 = _Int_add(di, srcLen) local tmp54 = length1(dst) tmp52 = tmp53 <= tmp54 end end ::cont:: if tmp52 then else _raise(_Subscript, "mono-sequence.sml:499:36") end do local tmp53 = 0 ::cont1:: do local a1 = tmp53 if a1 >= srcLen then return nil end local tmp54 = _Int_add(di, a1) local tmp55 = tmp45({src, a1}) tmp46({dst, tmp54, tmp55}) tmp53 = _Int_add(a1, 1) goto cont1 end end end copyVec = function(a) local src = a.src local dst = a.dst local di = a.di local srcLen = length2(src) local tmp52 do if 0 <= di then else tmp52 = false goto cont end do local tmp53 = _Int_add(di, srcLen) local tmp54 = length1(dst) tmp52 = tmp53 <= tmp54 end end ::cont:: if tmp52 then else _raise(_Subscript, "mono-sequence.sml:513:39") end do local tmp53 = 0 ::cont1:: do local a1 = tmp53 if a1 >= srcLen then return nil end local tmp54 = _Int_add(di, a1) local tmp55 = tmp51({src, a1}) tmp46({dst, tmp54, tmp55}) tmp53 = _Int_add(a1, 1) goto cont1 end end end appi1 = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return nil end local tmp53 = tmp45({a1, a2}) a({a2, tmp53}) tmp52 = _Int_add(a2, 1) goto cont end end end app3 = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return nil end local tmp53 = tmp45({a1, a2}) a(tmp53) tmp52 = _Int_add(a2, 1) goto cont end end end modifyi = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return nil end local x = tmp45({a1, a2}) local y = a({a2, x}) tmp46({a1, a2, y}) tmp52 = _Int_add(a2, 1) goto cont end end end modify = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return nil end local x = tmp45({a1, a2}) local y = a(x) tmp46({a1, a2, y}) tmp52 = _Int_add(a2, 1) goto cont end end end foldli1 = function(a) return function(a1) return function(a2) local n = length1(a2) local tmp52, tmp53 = 0, a1 ::cont:: do local i, acc = tmp52, tmp53 if i >= n then return acc end local tmp54 = _Int_add(i, 1) local tmp55 = tmp45({a2, i}) local tmp56 = a({i, tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end foldri1 = function(a) return function(a1) return function(a2) local tmp52, tmp53 do local tmp54 = length1(a2) tmp53, tmp52 = _Int_sub(tmp54, 1), a1 end ::cont:: do local i, acc = tmp53, tmp52 if i < 0 then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp45({a2, i}) local tmp56 = a({i, tmp55, acc}) tmp53 = tmp54 tmp52 = tmp56 goto cont end end end end foldl2 = function(a) return function(a1) return function(a2) local n = length1(a2) local tmp52, tmp53 = 0, a1 ::cont:: do local i, acc = tmp52, tmp53 if i >= n then return acc end local tmp54 = _Int_add(i, 1) local tmp55 = tmp45({a2, i}) local tmp56 = a({tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end foldr2 = function(a) return function(a1) return function(a2) local tmp52, tmp53 do local tmp54 = length1(a2) tmp53, tmp52 = _Int_sub(tmp54, 1), a1 end ::cont:: do local i, acc = tmp53, tmp52 if i < 0 then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp45({a2, i}) local tmp56 = a({tmp55, acc}) tmp53 = tmp54 tmp52 = tmp56 goto cont end end end end findi1 = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return NONE end local x = tmp45({a1, a2}) local tmp53 = a({a2, x}) if tmp53 then return {tag = "SOME", payload = {a2, x}} else tmp52 = _Int_add(a2, 1) goto cont end end end end find2 = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return NONE end local x = tmp45({a1, a2}) local tmp53 = a(x) if tmp53 then return {tag = "SOME", payload = x} else tmp52 = _Int_add(a2, 1) goto cont end end end end exists2 = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return false end local tmp53 = tmp45({a1, a2}) local tmp54 = a(tmp53) if tmp54 then return true else tmp52 = _Int_add(a2, 1) goto cont end end end end all2 = function(a) return function(a1) local n = length1(a1) local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= n then return true end local tmp53 = tmp45({a1, a2}) local tmp54 = a(tmp53) if tmp54 then tmp52 = _Int_add(a2, 1) goto cont else return false end end end end collate1 = function(a) return function(a1) local xs = a1[1] local ys = a1[2] local xl = length1(xs) local yl = length1(ys) local tmp52 = 0 ::cont:: do local a2 = tmp52 local tmp53 = xl <= a2 local tmp54 = yl <= a2 local tmp55 tmp55 = tmp53 and tmp54 if tmp55 then return EQUAL end local tmp56 tmp56 = tmp53 and not tmp54 if tmp56 then return LESS end if not tmp53 and tmp54 then return GREATER end if not tmp53 and not tmp54 then else _raise(_Match, "mono-sequence.sml:621:49") end do local tmp57 = tmp45({xs, a2}) local tmp58 = tmp45({ys, a2}) local exp = a({tmp57, tmp58}) if exp == "EQUAL" then tmp52 = _Int_add(a2, 1) goto cont else return exp end end end end end toList1 = function(a) local tmp52 = foldr2(_COLON_COLON) local tmp53 = tmp52(nil) return tmp53(a) end vector1 = function(a) local tmp52 = length1(a) local tmp53 do local tmp54 = foldr2(_COLON_COLON) local tmp55 = tmp54(nil) tmp53 = tmp55(a) end return tmp49({tmp52, tmp53}) end fromVector = function(a) local tmp52 = length2(a) local tmp53 do local tmp54 = foldr1(_COLON_COLON) local tmp55 = tmp54(nil) tmp53 = tmp55(a) end return tmp44({tmp52, tmp53}) end length3 = function(tmp52) return tmp52.length end sub4 = function(a) local base2 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] if 0 <= i and i < length5 then else _raise(_Subscript, "mono-sequence.sml:645:44") end do return tmp45({base2, _Int_add(start, i)}) end end update3 = function(a) local base2 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] local x = a[3] if 0 <= i and i < length5 then else _raise(_Subscript, "mono-sequence.sml:649:50") end do return tmp46({base2, _Int_add(start, i), x}) end end full1 = function(a) local tmp52 = length1(a) return {base = a, length = tmp52, start = 0} end slice = function(a) if a[3].tag == "NONE" then else goto else1 end do local v = a[1] local i = a[2] local n = length1(v) if 0 <= i and i <= n then return {base = v, length = _Int_sub(n, i), start = i} else _raise(_Subscript, "mono-sequence.sml:655:33") end end ::else1:: if a[3].tag == "SOME" then else _raise(_Match, "mono-sequence.sml:651:5") end do local v = a[1] local i = a[2] local n = a[3].payload local tmp52 do if 0 <= i then else tmp52 = false goto cont end do if 0 <= n then else tmp52 = false goto cont end do local tmp53 = _Int_add(i, n) local tmp54 = length1(v) tmp52 = tmp53 <= tmp54 end end end ::cont:: if tmp52 then return {base = v, length = n, start = i} else _raise(_Subscript, "mono-sequence.sml:660:32") end end end subslice = function(a) if a[3].tag == "NONE" then local base2 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] if 0 <= i and i <= length5 then local tmp52 = _Int_add(start, i) return {base = base2, length = _Int_sub(length5, i), start = tmp52} else _raise(_Subscript, "mono-sequence.sml:664:55") end end if a[3].tag == "SOME" then local base2 = a[1].base local start = a[1].start local length5 = a[1].length local i = a[2] local n = a[3].payload if 0 <= i and (0 <= n and _Int_add(i, n) <= length5) then return {base = base2, length = n, start = _Int_add(start, i)} else _raise(_Subscript, "mono-sequence.sml:668:57") end else _raise(_Match, "mono-sequence.sml:661:5") end end base = function(a) local b = a.base local start = a.start return {b, start, a.length} end copy1 = function(a) local base2 = a.src.base local start = a.src.start local length5 = a.src.length local dst = a.dst local di = a.di local tmp52 do if di < 0 then tmp52 = true goto cont end local tmp53 = length1(dst) tmp52 = tmp53 < _Int_add(di, length5) end ::cont:: if tmp52 then _raise(_Subscript, "mono-sequence.sml:684:14") end if start >= di then else goto else1 end do local tmp53 = 0 ::cont2:: do local a1 = tmp53 if a1 >= length5 then return nil end local tmp54 = _Int_add(di, a1) local tmp55 = tmp45({base2, _Int_add(start, a1)}) tmp46({dst, tmp54, tmp55}) tmp53 = _Int_add(a1, 1) goto cont2 end end ::else1:: local tmp53 = _Int_sub(length5, 1) ::cont1:: do local a1 = tmp53 if a1 < 0 then return nil end local tmp54 = _Int_add(di, a1) local tmp55 = tmp45({base2, _Int_add(start, a1)}) tmp46({dst, tmp54, tmp55}) tmp53 = _Int_sub(a1, 1) goto cont1 end end copyVec1 = function(a) local base2, start, length5, dst, di, tmp52 do base2 = a.src.base start = a.src.start length5 = a.src.length dst = a.dst di = a.di if di < 0 then _raise(_Subscript, "mono-sequence.sml:699:14") end local tmp53 = length1(dst) if tmp53 < _Int_add(di, length5) then _raise(_Subscript, "mono-sequence.sml:699:14") end tmp52 = 0 end ::cont:: do local a1 = tmp52 if a1 >= length5 then return nil end local tmp53 = _Int_add(di, a1) local tmp54 = tmp51({base2, _Int_add(start, a1)}) tmp46({dst, tmp53, tmp54}) tmp52 = _Int_add(a1, 1) goto cont end end isEmpty1 = function(a) return a.length == 0 end getItem = function(a) local base2 = a.base local start = a.start local length5 = a.length if length5 > 0 then else return NONE end do local tmp52 = tmp45({base2, start}) local tmp53 = _Int_add(start, 1) return {tag = "SOME", payload = {tmp52, {base = base2, length = _Int_sub(length5, 1), start = tmp53}}} end end appi2 = function(a) return function(a1) local base2 = a1.base local start = a1.start local length5 = a1.length local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= length5 then return nil end local tmp53 = tmp45({base2, _Int_add(start, a2)}) a({a2, tmp53}) tmp52 = _Int_add(a2, 1) goto cont end end end app4 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return nil end local tmp54 = tmp45({base2, a2}) a(tmp54) tmp53 = _Int_add(a2, 1) goto cont end end end modifyi1 = function(a) return function(a1) local base2 = a1.base local start = a1.start local length5 = a1.length local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= length5 then return nil end local tmp53 = _Int_add(start, a2) local x = tmp45({base2, tmp53}) local y = a({a2, x}) tmp46({base2, tmp53, y}) tmp52 = _Int_add(a2, 1) goto cont end end end modify1 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return nil end local x = tmp45({base2, a2}) local y = a(x) tmp46({base2, a2, y}) tmp53 = _Int_add(a2, 1) goto cont end end end foldli2 = function(a) return function(a1) return function(a2) local base2 = a2.base local start = a2.start local length5 = a2.length local tmp52, tmp53 = 0, a1 ::cont:: do local i, acc = tmp52, tmp53 if i >= length5 then return acc end local tmp54 = _Int_add(i, 1) local tmp55 = tmp45({base2, _Int_add(start, i)}) local tmp56 = a({i, tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end foldri2 = function(a) return function(a1) return function(a2) local base2 = a2.base local start = a2.start local tmp52, tmp53 = _Int_sub(a2.length, 1), a1 ::cont:: do local i, acc = tmp52, tmp53 if i < 0 then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp45({base2, _Int_add(start, i)}) local tmp56 = a({i, tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end foldl3 = function(a) return function(a1) return function(a2) local base2, tmp52, tmp53, tmp54 do base2 = a2.base local start = a2.start tmp52 = _Int_add(start, a2.length) tmp54, tmp53 = start, a1 end ::cont:: do local i, acc = tmp54, tmp53 if i >= tmp52 then return acc end local tmp55 = _Int_add(i, 1) local tmp56 = tmp45({base2, i}) local tmp57 = a({tmp56, acc}) tmp54 = tmp55 tmp53 = tmp57 goto cont end end end end foldr3 = function(a) return function(a1) return function(a2) local base2 = a2.base local start = a2.start local tmp52, tmp53 = _Int_sub(_Int_add(start, a2.length), 1), a1 ::cont:: do local i, acc = tmp52, tmp53 if i < start then return acc end local tmp54 = _Int_sub(i, 1) local tmp55 = tmp45({base2, i}) local tmp56 = a({tmp55, acc}) tmp52 = tmp54 tmp53 = tmp56 goto cont end end end end findi2 = function(a) return function(a1) local base2 = a1.base local start = a1.start local length5 = a1.length local tmp52 = 0 ::cont:: do local a2 = tmp52 if a2 >= length5 then return NONE end local x = tmp45({base2, _Int_add(start, a2)}) local tmp53 = a({a2, x}) if tmp53 then return {tag = "SOME", payload = {a2, x}} else tmp52 = _Int_add(a2, 1) goto cont end end end end find3 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return NONE end local x = tmp45({base2, a2}) local tmp54 = a(x) if tmp54 then return {tag = "SOME", payload = x} else tmp53 = _Int_add(a2, 1) goto cont end end end end exists3 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return false end local tmp54 = tmp45({base2, a2}) local tmp55 = a(tmp54) if tmp55 then return true else tmp53 = _Int_add(a2, 1) goto cont end end end end all3 = function(a) return function(a1) local base2, tmp52, tmp53 do base2 = a1.base local start = a1.start tmp52 = _Int_add(start, a1.length) tmp53 = start end ::cont:: do local a2 = tmp53 if a2 >= tmp52 then return true end local tmp54 = tmp45({base2, a2}) local tmp55 = a(tmp54) if tmp55 then tmp53 = _Int_add(a2, 1) goto cont else return false end end end end collate2 = function(a) return function(a1) local base2, base_PRIME, tmp52, tmp53, tmp54, tmp55 do base2 = a1[1].base local start = a1[1].start local length5 = a1[1].length base_PRIME = a1[2].base local start_PRIME = a1[2].start local length_PRIME = a1[2].length tmp52 = _Int_add(start, length5) tmp53 = _Int_add(start_PRIME, length_PRIME) tmp55, tmp54 = start, start_PRIME end ::cont:: do local i, j = tmp55, tmp54 local tmp56 = tmp52 <= i local tmp57 = tmp53 <= j local tmp58 tmp58 = tmp56 and tmp57 if tmp58 then return EQUAL end local tmp59 tmp59 = tmp56 and not tmp57 if tmp59 then return LESS end if not tmp56 and tmp57 then return GREATER end if not tmp56 and not tmp57 then else _raise(_Match, "mono-sequence.sml:812:29") end do local tmp60 = tmp45({base2, i}) local tmp61 = tmp45({base_PRIME, j}) local exp = a({tmp60, tmp61}) if exp == "EQUAL" then tmp55 = _Int_add(i, 1) tmp54 = _Int_add(j, 1) goto cont else return exp end end end end end vector2 = function(a) local tmp52 = a.length local tmp53 = foldr3(_COLON_COLON) local tmp54 = tmp53(nil) local tmp55 = tmp54(a) return tmp49({tmp52, tmp55}) end UnsafeMonoVector = {sub = tmp51} UnsafeMonoArray = {create = create, sub = tmp45, update = tmp46} MonoVectorSlice = {all = all4, app = app5, appi = appi3, base = base1, collate = collate3, concat = concat2, exists = exists4, find = find4, findi = findi3, foldl = foldl4, foldli = foldli3, foldr = foldr4, foldri = foldri3, full = full2, getItem = getItem1, isEmpty = isEmpty2, length = length4, map = map2, mapi = mapi1, slice = slice1, sub = sub5, subslice = subslice1, vector = vector} end local MonoVector = {all = all1, app = app2, append = append, appi = appi, collate = collate, concat = tmp47, exists = exists1, find = find1, findi = findi, foldl = foldl1, foldli = foldli, foldr = foldr1, foldri = foldri, fromList = fromList1, length = length2, map = map1, mapi = mapi, maxLen = maxLen1, prepend = prepend, sub = sub2, tabulate = tabulate1, toList = toList, update = update1} local MonoArraySlice = {all = all3, app = app4, appi = appi2, base = base, collate = collate2, copy = copy1, copyVec = copyVec1, exists = exists3, find = find3, findi = findi2, foldl = foldl3, foldli = foldli2, foldr = foldr3, foldri = foldri2, full = full1, getItem = getItem, isEmpty = isEmpty1, length = length3, modify = modify1, modifyi = modifyi1, slice = slice, sub = sub4, subslice = subslice, update = update3, vector = vector2} return {_MonoArray = {all = all2, app = app3, appi = appi1, array = array1, collate = collate1, copy = copy, copyVec = copyVec, exists = exists2, find = find2, findi = findi1, foldl = foldl2, foldli = foldli1, foldr = foldr2, foldri = foldri1, fromList = fromList, fromVector = fromVector, length = length1, maxLen = maxLen, modify = modify, modifyi = modifyi, sub = sub3, tabulate = tabulate2, toList = toList1, toVector = vector1, update = update2, vector = vector1}, _MonoArraySlice = MonoArraySlice, _MonoVector = MonoVector, _MonoVectorSlice = MonoVectorSlice, _UnsafeMonoArray = UnsafeMonoArray, _UnsafeMonoVector = UnsafeMonoVector} end local unsafeFromListN = function(a) return implode(a[2]) end local unsafeFromListRevN = function(a) return implodeRev(a[2]) end local sliceToVector = function(a) local base = a.base local start = a.start return substring(base, start, a.length) end local unsafeCreateWithZero = function(a) return _Array_array(a, 0) end local Base = MonoSequence(_VectorOrArray_fromList, length, math_maxinteger, array, unsafeCreateWithZero, function(a) return _VectorOrArray_fromList(a[2]) end, sub, update, concat, implode, size, math_maxinteger, sliceToVector, sliceToVector, unsafeFromListN, unsafeFromListRevN, sub1) local CharVector = Base._MonoVector local CharVectorSlice = Base._MonoVectorSlice CharArray = Base._MonoArray local CharArraySlice = Base._MonoArraySlice local UnsafeCharVector = Base._UnsafeMonoVector local sub2 = CharVectorSlice.sub extract1 = CharVectorSlice.slice full = CharVectorSlice.full string1 = CharVectorSlice.vector isEmpty = CharVectorSlice.isEmpty getc = CharVectorSlice.getItem concat1 = CharVectorSlice.concat splitl = function(a) return function(a1) local base = a1.base local start = a1.start local length1 = a1.length local tmp43 = 0 ::cont:: do local a2 = tmp43 if a2 >= length1 then return {a1, {base = base, length = 0, start = _Int_add(start, a2)}} end local tmp44 = sub2({a1, a2}) local tmp45 = a(tmp44) if tmp45 then tmp43 = _Int_add(a2, 1) goto cont else local tmp46 = {base = base, length = a2, start = start} return {tmp46, {base = base, length = _Int_sub(length1, a2), start = _Int_add(start, a2)}} end end end end splitr = function(a, a1) local base = a1.base local start = a1.start local length1 = a1.length local tmp43 = _Int_sub(length1, 1) ::cont:: do local a2 = tmp43 if a2 < 0 then return {{base = base, length = 0, start = start}, a1} end local tmp44 = sub2({a1, a2}) local tmp45 = a(tmp44) if tmp45 then tmp43 = _Int_sub(a2, 1) goto cont else local tmp46 = _Int_add(a2, 1) local tmp47 = {base = base, length = tmp46, start = start} local tmp48 = _Int_add(start, tmp46) return {tmp47, {base = base, length = _Int_sub(length1, tmp46), start = tmp48}} end end end tokens = function(a) return function(a1) local base, tmp43, tmp44, tmp45, tmp46 do base = a1.base local start = a1.start tmp43 = _Int_add(start, a1.length) tmp46, tmp45, tmp44 = nil, start, start end ::cont:: do local revTokens, s, i = tmp46, tmp45, tmp44 if i >= tmp43 then else goto else1 end do if s == i then else return revAppend({{base = base, length = _Int_sub(i, s), start = s}, revTokens}, nil) end do return revAppend(revTokens, nil) end end ::else1:: local tmp47 = sub1({base, i}) local tmp48 = a(tmp47) if tmp48 then local tmp49 = _Int_add(i, 1) if s == i then tmp46 = revTokens tmp45 = tmp49 tmp44 = tmp49 goto cont else tmp46 = {{base = base, length = _Int_sub(i, s), start = s}, revTokens} tmp45 = tmp49 tmp44 = tmp49 goto cont end else tmp46 = revTokens tmp45 = s tmp44 = _Int_add(i, 1) goto cont end end end end tmp26 = UnsafeCharVector.sub tmp27 = CharVectorSlice.concat tmp28 = CharVectorSlice.full tmp29 = CharVectorSlice.length tmp30 = CharVectorSlice.slice tmp31 = CharVectorSlice.vector tmp32 = CharVector.all tmp33 = CharVector.appi tmp34 = CharVector.exists tmp35 = CharVector.fromList tmp36 = CharVector.length tmp37 = CharArraySlice.base tmp38 = CharArraySlice.copyVec tmp39 = CharArraySlice.full tmp40 = CharArraySlice.length tmp41 = CharArraySlice.slice tmp42 = CharArraySlice.vector end local _L = {} do _L[1] = CharArray.array _L[2] = CharArray.copyVec _L[3] = function(getc1, strm) local tmp43, tmp44 = getc1, strm ::cont:: do local getc2, strm1 = tmp43, tmp44 local exp = getc2(strm1) if exp.tag == "NONE" then return strm1 end if exp.tag == "SOME" then else _raise(_Match, "scan-num-utils.sml:2:42") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp45 = isSpace(c) if tmp45 then tmp43 = getc2 tmp44 = strm_PRIME goto cont else return strm1 end end end end _L[4] = function(a) return a == 48 or a == 49 end _L[5] = function(a) return 48 <= a and a <= 55 end _L[6] = function(a) if 48 <= a and a <= 57 then return _Int_sub(a, 48) elseif 97 <= a and a <= 102 then return _Int_add(_Int_sub(a, 97), 10) else return _Int_add(_Int_sub(a, 65), 10) end end _L[7] = function(getc1, strm) local exp = getc1(strm) if exp.tag == "SOME" and exp.payload[1] == 43 then return {false, exp.payload[2]} elseif exp.tag == "SOME" and exp.payload[1] == 126 then return {true, exp.payload[2]} elseif exp.tag == "SOME" and exp.payload[1] == 45 then return {true, exp.payload[2]} else return {false, strm} end end local scanSubstring = function(getc1, strm, s) local tmp43, tmp44, tmp45 = getc1, strm, s ::cont:: do local getc2, strm1, s1 = tmp43, tmp44, tmp45 local exp = getc(s1) if exp.tag == "NONE" then return {tag = "SOME", payload = strm1} end if exp.tag == "SOME" then else _raise(_Match, "scan-num.sml:341:37") end do local c = exp.payload[1] local s_PRIME = exp.payload[2] local exp1 = getc2(strm1) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:343:57") end do local strm_PRIME, tmp46 do local c_PRIME = exp1.payload[1] strm_PRIME = exp1.payload[2] do if c == c_PRIME then tmp46 = true goto cont1 end local tmp47 tmp47 = 65 <= c and c <= 90 or 97 <= c and c <= 122 if tmp47 then else tmp46 = false goto cont1 end do local tmp48 tmp48 = 65 <= c_PRIME and c_PRIME <= 90 or 97 <= c_PRIME and c_PRIME <= 122 if tmp48 then else tmp46 = false goto cont1 end do local tmp49 = toUpper(c) local tmp50 = toUpper(c_PRIME) tmp46 = tmp49 == tmp50 end end end end ::cont1:: if tmp46 then tmp43 = getc2 tmp44 = strm_PRIME tmp45 = s_PRIME goto cont else return NONE end end end end end local scanZeroOrMoreDigits = function(getc1, strm, revAcc) local tmp43, tmp44, tmp45 = getc1, strm, revAcc ::cont:: do local getc2, strm1, revAcc1 = tmp43, tmp44, tmp45 local exp = getc2(strm1) if exp.tag == "SOME" then local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then tmp43 = getc2 tmp44 = strm_PRIME tmp45 = {c, revAcc1} goto cont else return {revAcc1, strm1} end elseif exp.tag == "NONE" then return {revAcc1, strm1} else _raise(_Match, "scan-num.sml:349:49") end end end local scanOneOrMoreDigits = function(getc1, strm, revAcc) local exp = getc1(strm) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:355:48") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then else return NONE end do local tmp43 = scanZeroOrMoreDigits(getc1, strm_PRIME, {c, revAcc}) return {tag = "SOME", payload = tmp43} end end end local scanOptExpPart = function(getc1, strm, revAcc) local exp = getc1(strm) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return {revAcc, strm} else _raise(_Match, "scan-num.sml:367:43") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if c == 101 or c == 69 then else return {revAcc, strm} end do local exp1 = _L[7](getc1, strm_PRIME) local isNegative = exp1[1] local strm_PRIME_PRIME = exp1[2] local tmp43 if isNegative then tmp43 = {45, {101, revAcc}} else tmp43 = {101, revAcc} end local exp2 = scanOneOrMoreDigits(getc1, strm_PRIME_PRIME, tmp43) if exp2.tag == "SOME" then local revAcc1 = exp2.payload[1] return {revAcc1, exp2.payload[2]} elseif exp2.tag == "NONE" then return {revAcc, strm} else _raise(_Match, "scan-num.sml:370:73") end end end end _L[8] = function(a) return function(a1) local isNegative, signPart, exp do local strm = _L[3](a, a1) local exp1 = _L[7](a, strm) isNegative = exp1[1] local strm1 = exp1[2] if isNegative then signPart = {45, nil} else signPart = nil end exp = a(strm1) if exp.tag == "SOME" and exp.payload[1] == 46 then else goto else1 end do local exp2 = scanOneOrMoreDigits(a, exp.payload[2], {46, {48, signPart}}) if exp2.tag == "SOME" then elseif exp2.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:385:52") end do local exp3 = scanOptExpPart(a, exp2.payload[2], exp2.payload[1]) local revAcc = exp3[1] local strm_PRIME_PRIME_PRIME = exp3[2] local tmp43 = implodeRev(revAcc) return {tag = "SOME", payload = {tmp4(tmp43) * 1.0, strm_PRIME_PRIME_PRIME}} end end end ::else1:: if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:384:25") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if c == 105 or c == 73 then else goto else2 end do local tmp43 = full("nf") local exp1 = scanSubstring(a, strm_PRIME, tmp43) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:393:52") end do local strm_PRIME_PRIME = exp1.payload local inf if isNegative then inf = tmp25 else inf = tmp11 end local tmp44 = full("inity") local exp2 = scanSubstring(a, strm_PRIME_PRIME, tmp44) if exp2.tag == "SOME" then return {tag = "SOME", payload = {inf, exp2.payload}} elseif exp2.tag == "NONE" then return {tag = "SOME", payload = {inf, strm_PRIME_PRIME}} else _raise(_Match, "scan-num.sml:395:74") end end end ::else2:: if c == 110 or c == 78 then else goto else3 end do local tmp43 = full("an") local exp1 = scanSubstring(a, strm_PRIME, tmp43) if exp1.tag == "SOME" then local strm_PRIME_PRIME = exp1.payload return {tag = "SOME", payload = {0.0 / 0.0, strm_PRIME_PRIME}} elseif exp1.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:402:52") end end ::else3:: if 48 <= c and c <= 57 then else return NONE end do local strm_PRIME_PRIME_PRIME, revAcc do local exp1 = scanZeroOrMoreDigits(a, strm_PRIME, {c, signPart}) local revAcc1 = exp1[1] local strm_PRIME_PRIME = exp1[2] do local exp2 = a(strm_PRIME_PRIME) if exp2.tag == "SOME" and exp2.payload[1] == 46 then else strm_PRIME_PRIME_PRIME = strm_PRIME_PRIME revAcc = revAcc1 goto cont end do local exp3 = scanOneOrMoreDigits(a, exp2.payload[2], {46, revAcc1}) if exp3.tag == "SOME" then strm_PRIME_PRIME_PRIME = exp3.payload[2] revAcc = exp3.payload[1] elseif exp3.tag == "NONE" then strm_PRIME_PRIME_PRIME = strm_PRIME_PRIME revAcc = revAcc1 else _raise(_Match, "scan-num.sml:362:71") end end end end ::cont:: local exp1 = scanOptExpPart(a, strm_PRIME_PRIME_PRIME, revAcc) local revAcc1 = exp1[1] local strm_PRIME_PRIME_PRIME_PRIME = exp1[2] local tmp43 = implodeRev(revAcc1) return {tag = "SOME", payload = {tmp4(tmp43) * 1.0, strm_PRIME_PRIME_PRIME_PRIME}} end end end end _L[9] = {"Io"} _L[10] = {tag = {"BlockingNotSupported"}} _L[11] = {tag = {"NonblockingNotSupported"}} _L[12] = {tag = {"RandomAccessNotSupported"}} _L[13] = {tag = {"ClosedStream"}} _L[14] = "NO_BUF" _L[15] = "LINE_BUF" _L[16] = "BLOCK_BUF" _L[17] = function(tmp43, tmp44) return tmp43 == "NO_BUF" and tmp44 == "NO_BUF" or (tmp43 == "LINE_BUF" and tmp44 == "LINE_BUF" or tmp43 == "BLOCK_BUF" and tmp44 == "BLOCK_BUF") end _L[18] = function(base, length1, start, i) if 0 <= i and i < length1 then return base[_Int_add(start, i) + 1] else _raise(_Subscript, "vector-slice.sml:39:44") end end _L[19] = function(a, i, tmp43) if tmp43.tag == "NONE" then if 0 <= i and i <= a.n then return {base = a, length = _Int_sub(a.n, i), start = i} else _raise(_Subscript, "vector-slice.sml:44:30") end end if tmp43.tag == "SOME" then local n = tmp43.payload local tmp44 if 0 <= i then if 0 <= n then local tmp45 = _Int_add(i, n) tmp44 = tmp45 <= a.n else tmp44 = false end else tmp44 = false end if tmp44 then return {base = a, length = n, start = i} else _raise(_Subscript, "vector-slice.sml:48:32") end else _raise(_Match, "vector-slice.sml:41:5") end end _L[20] = function(a) return function(a1) local base = a1.base local start = a1.start local length1 = a1.length local tmp43 = 0 ::cont:: do local a2 = tmp43 if a2 >= length1 then return false end local tmp44 = a(base[_Int_add(start, a2) + 1]) if tmp44 then return true else tmp43 = _Int_add(a2, 1) goto cont end end end end _L[21] = {tag = "ZERO"} local tmp43 = 0x1 << tmp24 // 2 local tmp44 if tmp43 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp44 = tmp43 end _L[22] = function(a) if a == 0 then return _L[21] end if a > 0 then else goto else1 end do local function go(a1) if a1 == 0 then return nil end local tmp45 = _Int_div(a1, tmp44) local tmp46 = _Int_mod(a1, tmp44) local tmp47 = _Int_div(tmp45, tmp44) local tmp48 = tmp46 + _Int_mod(tmp45, tmp44) * tmp43 local tmp49 = go(tmp47) return {tmp48, tmp49} end local tmp45 = go(a) return {tag = "POSITIVE", payload = _VectorOrArray_fromList(tmp45)} end ::else1:: local function go(a1) if a1 == 0 then return nil end local q1 = quot(a1, tmp44) local r1 = rem(a1, tmp44) local q2 = quot(q1, tmp44) local r2 = rem(q1, tmp44) local tmp45 = _Int_negate(r1) local tmp46 = _Int_negate(r2) local tmp47 = tmp45 + tmp46 * tmp43 local tmp48 = go(q2) return {tmp47, tmp48} end local tmp45 = go(a) return {tag = "NEGATIVE", payload = _VectorOrArray_fromList(tmp45)} end local add2 = function(x, y) local tmp45 = x + y if math_ult(tmp45, x) then return {hi = 0x1, lo = tmp45} else return {hi = 0x0, lo = tmp45} end end local add3 = function(x, y, z) local exp = add2(x, y) local lo1 = exp.lo local hi1 = exp.hi local exp1 = add2(lo1, z) local lo2 = exp1.lo return {hi = hi1 + exp1.hi, lo = lo2} end local tmp45 = tmp24 >> 1 local tmp46 = (0x1 << tmp45) - 0x1 _L[23] = function(words, words_PRIME) local tmp47 = words.n local exp = compare({tmp47, words_PRIME.n}) if exp == "EQUAL" then local tmp48 = _Int_sub(tmp47, 1) ::cont:: do local a = tmp48 if a < 0 then return EQUAL end local tmp49 = words[a + 1] local tmp50 = words_PRIME[a + 1] local exp1 if tmp49 == tmp50 then exp1 = EQUAL elseif math_ult(tmp49, tmp50) then exp1 = LESS else exp1 = GREATER end if exp1 == "EQUAL" then tmp48 = _Int_sub(a, 1) goto cont else return exp1 end end else return exp end end _L[24] = function(a) local length1 do local tmp47 = a.n ::cont:: do local a1 = tmp47 local tmp48 = _Int_sub(a1, 1) if tmp48 < 0 then length1 = a1 elseif a[tmp48 + 1] ~= 0x0 then length1 = a1 else tmp47 = tmp48 goto cont end end end if 0 <= length1 and length1 <= a.n then else _raise(_Subscript, "array-slice.sml:52:32") end do return _VectorOrArray_tabulate({length1, function(i) return a[i + 1] end}) end end _L[25] = function(words, words_PRIME) local tmp47, tmp48, tmp49, tmp50, tmp51, tmp52 do tmp47 = words.n tmp48 = words_PRIME.n local tmp53 if tmp47 < tmp48 then tmp53 = tmp48 else tmp53 = tmp47 end tmp49 = _Int_add(tmp53, 1) tmp50 = _Array_array(tmp49, 0x0) tmp52, tmp51 = 0x0, 0 end ::cont:: do local carry, i = tmp52, tmp51 if i == tmp49 then else goto else1 end do return _L[24](tmp50) end ::else1:: local w if i < tmp47 then w = words[i + 1] else w = 0x0 end local w_PRIME if i < tmp48 then w_PRIME = words_PRIME[i + 1] else w_PRIME = 0x0 end local exp = add3(w, w_PRIME, carry) local x = exp.lo local carry1 = exp.hi tmp50[i + 1] = x tmp52 = carry1 tmp51 = _Int_add(i, 1) goto cont end end _L[26] = function(words, words_PRIME) local tmp47 = words.n local tmp48 = words_PRIME.n local tmp49 = _Array_array(tmp47, 0x0) local tmp50, tmp51 = 0x0, 0 ::cont:: do local carry, i = tmp50, tmp51 if i == tmp47 then else goto else1 end do if carry == 0x0 then else goto else2 end do return _L[24](tmp49) end ::else2:: local tmp52 = _Fail("subAbs: carry not zero") _raise(tmp52, "int-inf.sml:276:77") end ::else1:: local tmp52 = words[i + 1] local w_PRIME if i < tmp48 then w_PRIME = words_PRIME[i + 1] else w_PRIME = 0x0 end local carry1, lo if math_ult(tmp52, w_PRIME) then lo = tmp52 - w_PRIME - carry carry1 = 0x1 elseif math_ult(w_PRIME, tmp52) then lo = tmp52 - w_PRIME - carry carry1 = 0x0 elseif carry == 0x0 then lo = 0x0 carry1 = 0x0 else lo = - carry carry1 = 0x1 end tmp49[i + 1] = lo tmp50 = carry1 tmp51 = _Int_add(i, 1) goto cont end end _L[27] = function(words, words_PRIME) local tmp47 = words.n local tmp48 = words_PRIME.n local tmp49 = _Array_array(_Int_add(tmp47, tmp48), 0x0) local tmp50 = 0 ::cont:: do local a = tmp50 if a >= tmp48 then else goto else1 end do return _L[24](tmp49) end ::else1:: local tmp51 = words_PRIME[a + 1] local tmp52, tmp53 = 0, 0x0 ::cont1:: do local k, i, lo, hi do i, k = tmp52, tmp53 if i >= tmp47 then tmp49[_Int_add(i, a) + 1] = k tmp50 = _Int_add(a, 1) goto cont end local tmp54 = words[i + 1] do if tmp54 == 0x0 then lo = 0x0 hi = 0x0 goto cont2 end if tmp51 == 0x0 then lo = 0x0 hi = 0x0 goto cont2 end local tmp55 = tmp54 >> tmp45 local tmp56 = tmp54 & tmp46 local tmp57 = tmp51 >> tmp45 local tmp58 = tmp51 & tmp46 local tmp59 = tmp56 * tmp58 local tmp60 = tmp55 * tmp58 local tmp61 = tmp60 << tmp45 local tmp62 = tmp60 >> tmp45 local tmp63 = tmp56 * tmp57 local tmp64 = tmp63 << tmp45 local tmp65 = tmp63 >> tmp45 local tmp66 = tmp55 * tmp57 local exp = add3(tmp59, tmp61, tmp64) local lo1 = exp.lo local hi4 = exp.hi lo = lo1 hi = tmp62 + tmp65 + tmp66 + hi4 end end ::cont2:: local exp = add3(lo, tmp49[_Int_add(i, a) + 1], k) local lo1 = exp.lo local hi_PRIME = exp.hi tmp49[_Int_add(i, a) + 1] = lo1 local tmp54 = _Int_add(i, 1) tmp52 = tmp54 tmp53 = hi + hi_PRIME goto cont1 end end end end local add, mul, log2Word, LShiftAbs, scan, tmp43 do add = function(tmp44, y) if tmp44.tag == "ZERO" then return y end if y.tag == "ZERO" then return tmp44 end if tmp44.tag == "POSITIVE" and y.tag == "POSITIVE" then else goto else1 end do local words = tmp44.payload local tmp45 = _L[25](words, y.payload) return {tag = "POSITIVE", payload = tmp45} end ::else1:: if tmp44.tag == "POSITIVE" and y.tag == "NEGATIVE" then else goto else2 end do local words = tmp44.payload local words_PRIME = y.payload local exp = _L[23](words, words_PRIME) if exp == "LESS" then else goto else4 end do local tmp45 = _L[26](words_PRIME, words) return {tag = "NEGATIVE", payload = tmp45} end ::else4:: if exp == "GREATER" then elseif exp == "EQUAL" then return _L[21] else _raise(_Match, "int-inf.sml:347:46") end do local tmp45 = _L[26](words, words_PRIME) return {tag = "POSITIVE", payload = tmp45} end end ::else2:: if tmp44.tag == "NEGATIVE" and y.tag == "POSITIVE" then else goto else3 end do local words = tmp44.payload local words_PRIME = y.payload local exp = _L[23](words, words_PRIME) if exp == "LESS" then else goto else4 end do local tmp45 = _L[26](words_PRIME, words) return {tag = "POSITIVE", payload = tmp45} end ::else4:: if exp == "GREATER" then elseif exp == "EQUAL" then return _L[21] else _raise(_Match, "int-inf.sml:352:46") end do local tmp45 = _L[26](words, words_PRIME) return {tag = "NEGATIVE", payload = tmp45} end end ::else3:: if tmp44.tag == "NEGATIVE" and y.tag == "NEGATIVE" then else _raise(_Match, "int-inf.sml:344:5") end do local words = tmp44.payload local tmp45 = _L[25](words, y.payload) return {tag = "NEGATIVE", payload = tmp45} end end mul = function(tmp44, tmp45) if tmp44.tag == "ZERO" then return tmp44 end if tmp45.tag == "ZERO" then return tmp45 end if tmp44.tag == "POSITIVE" and tmp45.tag == "POSITIVE" then else goto else1 end do local words = tmp44.payload local tmp46 = _L[27](words, tmp45.payload) return {tag = "POSITIVE", payload = tmp46} end ::else1:: if tmp44.tag == "POSITIVE" and tmp45.tag == "NEGATIVE" then else goto else2 end do local words = tmp44.payload local tmp46 = _L[27](words, tmp45.payload) return {tag = "NEGATIVE", payload = tmp46} end ::else2:: if tmp44.tag == "NEGATIVE" and tmp45.tag == "POSITIVE" then else goto else3 end do local words = tmp44.payload local tmp46 = _L[27](words, tmp45.payload) return {tag = "NEGATIVE", payload = tmp46} end ::else3:: if tmp44.tag == "NEGATIVE" and tmp45.tag == "NEGATIVE" then else _raise(_Match, "int-inf.sml:375:5") end do local words = tmp44.payload local tmp46 = _L[27](words, tmp45.payload) return {tag = "POSITIVE", payload = tmp46} end end log2Word = function(a) if a == 0x0 then _raise(Domain, "int-inf.sml:422:20") end if a == 0x1 then return 0 end local tmp44 = log2Word(a >> 1) return _Int_add(1, tmp44) end LShiftAbs = function(words, amount) local tmp44, tmp45, tmp46, tmp47 do tmp44 = _Word_div(amount, tmp24) tmp45 = _Word_mod(amount, tmp24) tmp46 = words.n local tmp48 if tmp44 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp48 = tmp44 end tmp47 = _Int_add(tmp46, tmp48) if tmp45 == 0x0 then else goto else1 end do return _VectorOrArray_tabulate({tmp47, function(i) local tmp49 if tmp44 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp49 = tmp44 end if i < tmp49 then return 0x0 elseif tmp44 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else return words[_Int_sub(i, tmp44) + 1] end end}) end end ::else1:: local tmp48 = _Array_array(_Int_add(tmp47, 1), 0x0) local tmp49, tmp50 = 0x0, 0 ::cont:: do local lo, i = tmp49, tmp50 if i == _Int_add(tmp46, 1) then else goto else2 end do if lo == 0x0 then else goto else3 end do return _L[24](tmp48) end ::else3:: local tmp51 = _Fail("LShiftAbs: carry not zero") _raise(tmp51, "int-inf.sml:567:84") end ::else2:: local w if i < tmp46 then w = words[i + 1] else w = 0x0 end local tmp51 = w << tmp45 | lo local tmp52 = w >> tmp24 - tmp45 if tmp44 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp48[_Int_add(i, tmp44) + 1] = tmp51 tmp49 = tmp52 tmp50 = _Int_add(i, 1) goto cont end end end local scanDigits = function(radix, isDigit1, getc1) return function(strm) local exp = getc1(strm) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "int-inf.sml:949:25") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp44 = isDigit1(c) if tmp44 then else return NONE end do local tmp45, tmp46 do local tmp47 = _L[6](c) local tmp48 = _L[22](tmp47) tmp46, tmp45 = tmp48, strm_PRIME end ::cont:: do local x, strm1 = tmp46, tmp45 local exp1 = getc1(strm1) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return {tag = "SOME", payload = {x, strm1}} else _raise(_Match, "int-inf.sml:943:35") end do local c1 = exp1.payload[1] local strm_PRIME1 = exp1.payload[2] local tmp47 = isDigit1(c1) if tmp47 then else return {tag = "SOME", payload = {x, strm1}} end do local tmp48 = mul(radix, x) local tmp49 = _L[6](c1) local tmp50 = _L[22](tmp49) local tmp51 = add(tmp48, tmp50) tmp46 = tmp51 tmp45 = strm_PRIME1 goto cont end end end end end end end local scanNegativeDigits = function(radix, isDigit1, getc1) return function(strm) local exp = getc1(strm) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "int-inf.sml:963:25") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp44 = isDigit1(c) if tmp44 then else return NONE end do local tmp45, tmp46 do local tmp47 = _L[6](c) local tmp48 = _Int_negate(tmp47) local tmp49 = _L[22](tmp48) tmp46, tmp45 = tmp49, strm_PRIME end ::cont:: do local x, strm1 = tmp46, tmp45 local exp1 = getc1(strm1) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return {tag = "SOME", payload = {x, strm1}} else _raise(_Match, "int-inf.sml:957:35") end do local c1 = exp1.payload[1] local strm_PRIME1 = exp1.payload[2] local tmp47 = isDigit1(c1) if tmp47 then else return {tag = "SOME", payload = {x, strm1}} end do local tmp48, tmp49 do tmp48 = mul(radix, x) local tmp50 = _L[6](c1) tmp49 = _L[22](tmp50) if tmp49.tag == "ZERO" then tmp46 = tmp48 tmp45 = strm_PRIME1 goto cont end if tmp48.tag == "ZERO" and tmp49.tag == "POSITIVE" then tmp46 = {tag = "NEGATIVE", payload = tmp49.payload} tmp45 = strm_PRIME1 goto cont end if tmp48.tag == "ZERO" and tmp49.tag == "NEGATIVE" then tmp46 = {tag = "POSITIVE", payload = tmp49.payload} tmp45 = strm_PRIME1 goto cont end if tmp48.tag == "POSITIVE" and tmp49.tag == "POSITIVE" then else goto else1 end do local words = tmp48.payload local words_PRIME = tmp49.payload local exp2 = _L[23](words, words_PRIME) if exp2 == "LESS" then else goto else4 end do local tmp51 = _L[26](words_PRIME, words) tmp46 = {tag = "NEGATIVE", payload = tmp51} tmp45 = strm_PRIME1 goto cont end ::else4:: if exp2 == "GREATER" then elseif exp2 == "EQUAL" then tmp46 = _L[21] tmp45 = strm_PRIME1 goto cont else _raise(_Match, "int-inf.sml:362:46") end do local tmp51 = _L[26](words, words_PRIME) tmp46 = {tag = "POSITIVE", payload = tmp51} tmp45 = strm_PRIME1 goto cont end end end ::else1:: if tmp48.tag == "POSITIVE" and tmp49.tag == "NEGATIVE" then else goto else2 end do local tmp50 = _L[25](tmp48.payload, tmp49.payload) tmp46 = {tag = "POSITIVE", payload = tmp50} tmp45 = strm_PRIME1 goto cont end ::else2:: if tmp48.tag == "NEGATIVE" and tmp49.tag == "POSITIVE" then else goto else3 end do local tmp50 = _L[25](tmp48.payload, tmp49.payload) tmp46 = {tag = "NEGATIVE", payload = tmp50} tmp45 = strm_PRIME1 goto cont end ::else3:: if tmp48.tag == "NEGATIVE" and tmp49.tag == "NEGATIVE" then else _raise(_Match, "int-inf.sml:359:5") end do local words = tmp48.payload local words_PRIME = tmp49.payload local exp2 = _L[23](words, words_PRIME) if exp2 == "LESS" then else goto else4 end do local tmp50 = _L[26](words_PRIME, words) tmp46 = {tag = "POSITIVE", payload = tmp50} tmp45 = strm_PRIME1 goto cont end ::else4:: if exp2 == "GREATER" then elseif exp2 == "EQUAL" then tmp46 = _L[21] tmp45 = strm_PRIME1 goto cont else _raise(_Match, "int-inf.sml:369:46") end do local tmp50 = _L[26](words, words_PRIME) tmp46 = {tag = "NEGATIVE", payload = tmp50} tmp45 = strm_PRIME1 goto cont end end end end end end end end end scan = function(a, a1) return function(a2) if a == "BIN" then else goto else1 end do local strm do local strm1 = _L[3](a1, a2) local exp = _L[7](a1, strm1) local isNegative = exp[1] strm = exp[2] if isNegative then else goto else4 end do local tmp44 = _L[22](2) local tmp45 = scanNegativeDigits(tmp44, _L[4], a1) return tmp45(strm) end end ::else4:: local tmp44 = _L[22](2) local tmp45 = scanDigits(tmp44, _L[4], a1) return tmp45(strm) end ::else1:: if a == "OCT" then else goto else2 end do local strm do local strm1 = _L[3](a1, a2) local exp = _L[7](a1, strm1) local isNegative = exp[1] strm = exp[2] if isNegative then else goto else4 end do local tmp44 = _L[22](8) local tmp45 = scanNegativeDigits(tmp44, _L[5], a1) return tmp45(strm) end end ::else4:: local tmp44 = _L[22](8) local tmp45 = scanDigits(tmp44, _L[5], a1) return tmp45(strm) end ::else2:: if a == "DEC" then else goto else3 end do local strm do local strm1 = _L[3](a1, a2) local exp = _L[7](a1, strm1) local isNegative = exp[1] strm = exp[2] if isNegative then else goto else4 end do local tmp44 = _L[22](10) local tmp45 = scanNegativeDigits(tmp44, isDigit, a1) return tmp45(strm) end end ::else4:: local tmp44 = _L[22](10) local tmp45 = scanDigits(tmp44, isDigit, a1) return tmp45(strm) end ::else3:: if a == "HEX" then else _raise(_Match, "int-inf.sml:971:5") end do local isNegative, strm do local strm1 = _L[3](a1, a2) local exp = _L[7](a1, strm1) isNegative = exp[1] local strm2 = exp[2] local exp1 = a1(strm2) local tmp44 = exp1.tag == "SOME" and exp1.payload[1] == 48 do if tmp44 then else strm = strm2 goto cont end do local exp2 = a1(exp1.payload[2]) if exp2.tag == "SOME" then elseif exp2.tag == "NONE" then strm = strm2 goto cont else _raise(_Match, "int-inf.sml:996:56") end do local c = exp2.payload[1] local strm_PRIME_PRIME = exp2.payload[2] if c == 120 or c == 88 then else strm = strm2 goto cont end do local exp3 = a1(strm_PRIME_PRIME) if exp3.tag == "SOME" then elseif exp3.tag == "NONE" then strm = strm2 goto cont else _raise(_Match, "int-inf.sml:999:64") end do local tmp45 = isHexDigit(exp3.payload[1]) if tmp45 then strm = strm_PRIME_PRIME else strm = strm2 end end end end end end end ::cont:: if isNegative then else goto else4 end do local tmp44 = _L[22](16) local tmp45 = scanNegativeDigits(tmp44, isHexDigit, a1) return tmp45(strm) end ::else4:: local tmp44 = _L[22](16) local tmp45 = scanDigits(tmp44, isHexDigit, a1) return tmp45(strm) end end end do local tmp44, tmp45, tmp46 do local tmp47 = 2.0 tmp46, tmp45, tmp44 = tmp47, tmp24, 1.0 end ::cont5:: do local _L1 = {} local a, tmp47, acc = tmp46, tmp45, tmp44 if tmp47 == 0 then tmp43 = acc goto cont1 end if tmp47 == 1 then tmp43 = acc * a goto cont1 end local tmp48 = tmp47 // 2 if tmp47 % 2 == 0 then tmp46 = a * a tmp45 = tmp48 tmp44 = acc goto cont5 else local tmp49 = a * a tmp46 = tmp49 tmp45 = tmp48 tmp44 = acc * a goto cont5 end end end end ::cont1:: local toRealAbs, Word8Vector, Word8Array, Word8ArraySlice, UnsafeWord8Array, tmp44, tmp45, tmp46, tmp47, tmp48 do local function wordToReal(a) if a == 0x0 then return 0.0 end local tmp49 = wordToReal(a >> 0x1F) local tmp50 = tmp49 * 0x1p31 local tmp51 = a & 0x7FFFFFFF if tmp51 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else return tmp50 + tmp51 * 1.0 end end local simpleNatToReal = function(a) local tmp49 = function(a1) local w = a1[1] local tmp50 = a1[2] * tmp43 local tmp51 = wordToReal(w) return tmp50 + tmp51 end local tmp50 = foldr(tmp49, 0.0) return tmp50(a) end toRealAbs = function(a) local k do local tmp49 = _Int_sub(a.n, 1) local tmp50 = _Int_mul(tmp24, tmp49) local tmp51 = log2Word(a[tmp49 + 1]) k = _Int_add(tmp50, tmp51) end if k < 53 then else goto else1 end do return simpleNatToReal(a) end ::else1:: if k >= 1024 then return tmp11 end local tmp49 = _Int_add(_Int_sub(k, 53), 1) local q do local tmp50, tmp51, tmp52 do tmp50 = _Word_div(tmp49, tmp24) tmp51 = _Word_mod(tmp49, tmp24) local tmp53 = a.n local tmp54 if tmp50 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp54 = tmp50 end tmp52 = _Int_sub(tmp53, tmp54) if tmp52 <= 0 then q = {n = 0} goto cont end if tmp51 == 0x0 then else goto else4 end do local tmp55 = _VectorOrArray_tabulate({tmp52, function(i) if tmp50 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else return a[_Int_add(i, tmp50) + 1] end end}) local tmp56 = _L[20](function(x) return x ~= 0x0 end) if tmp50 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") end local tmp57 = _L[19](a, 0, {tag = "SOME", payload = tmp50}) tmp56(tmp57) q = tmp55 goto cont end end ::else4:: local tmp53 = _Array_array(tmp52, 0x0) local hasRemainder do local tmp54, tmp55 = 0x0, _Int_sub(tmp52, 1) ::cont2:: do local hi, i = tmp54, tmp55 if i < 0 then hasRemainder = hi ~= 0x0 goto cont1 end local tmp56 if tmp50 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp56 = tmp50 end local tmp57 = a[_Int_add(i, tmp56) + 1] local tmp58 = tmp57 >> tmp51 | hi local tmp59 = tmp57 << tmp24 - tmp51 tmp53[i + 1] = tmp58 tmp54 = tmp59 tmp55 = _Int_sub(i, 1) goto cont2 end end ::cont1:: do if hasRemainder then else goto else5 end q = _L[24](tmp53) goto cont ::else5:: local tmp54 = _L[20](function(x) return x ~= 0x0 end) if tmp50 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") end local tmp55 = _L[19](a, 0, {tag = "SOME", payload = tmp50}) tmp54(tmp55) end q = _L[24](tmp53) end ::cont:: local exp do local tmp50 = LShiftAbs({n = 1, 0x1}, tmp49) local tmp51 = _L[26](tmp50, {n = 1, 0x1}) local r do local l, tmp52, tmp53 do local tmp54 = a.n local tmp55 = tmp51.n if tmp54 < tmp55 then l = tmp54 else l = tmp55 end tmp52 = _Array_array(l, 0x0) tmp53 = 0 end ::cont1:: do local a1 = tmp53 if a1 == l then else local tmp54 = a[a1 + 1] tmp52[a1 + 1] = tmp54 & tmp51[a1 + 1] tmp53 = _Int_add(a1, 1) goto cont1 end r = _L[24](tmp52) end end local tmp52 = {n = 1, 0x1} local tmp53 = LShiftAbs(tmp52, _Int_sub(tmp49, 1)) exp = _L[23](r, tmp53) if exp == "LESS" then else goto else2 end do local tmp54 = simpleNatToReal(q) return fromManExp(tmp49, tmp54) end end ::else2:: if exp == "EQUAL" then else goto else3 end do if q[0 + 1] & 0x1 == 0x0 then else goto else4 end do local tmp50 = simpleNatToReal(q) return fromManExp(tmp49, tmp50) end ::else4:: local tmp50 = _L[25](q, {n = 1, 0x1}) local tmp51 = simpleNatToReal(tmp50) return fromManExp(tmp49, tmp51) end ::else3:: if exp == "GREATER" then else _raise(_Match, "int-inf.sml:1073:33") end do local tmp50 = _L[25](q, {n = 1, 0x1}) local tmp51 = simpleNatToReal(tmp50) return fromManExp(tmp49, tmp51) end end local unsafeSub = function(a) local v = a[1] local tmp49 = sub1({v, a[2]}) return tmp49 & 0xFF end local fromList = function(a) local tmp49 = map(function(a1) if a1 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") elseif a1 < 0 then _raise(Chr, "char-1.sml:47:37") elseif a1 > 255 then _raise(Chr, "char-1.sml:47:37") else return a1 end end) local tmp50 = tmp49(a) return implode(tmp50) end local unsafeFromListN = function(a) return fromList(a[2]) end _L[28] = function(a) local xs = a[2] local tmp49 = map(function(a1) if a1 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") elseif a1 < 0 then _raise(Chr, "char-1.sml:47:37") elseif a1 > 255 then _raise(Chr, "char-1.sml:47:37") else return a1 end end) local tmp50 = tmp49(xs) return implodeRev(tmp50) end _L[29] = function(a) local base = a.base local start = a.start return substring(base, start, a.length) end _L[30] = function(a) return _Array_array(a, 0x0) end _L[31] = MonoSequence(_VectorOrArray_fromList, length, math_maxinteger, array, _L[30], function(a) return _VectorOrArray_fromList(a[2]) end, sub, update, concat, fromList, size, math_maxinteger, _L[29], _L[29], unsafeFromListN, _L[28], unsafeSub) Word8Vector = _L[31]._MonoVector _L[32] = _L[31]._MonoVectorSlice Word8Array = _L[31]._MonoArray Word8ArraySlice = _L[31]._MonoArraySlice UnsafeWord8Array = _L[31]._UnsafeMonoArray tmp44 = _L[32].concat tmp45 = _L[32].full tmp46 = _L[32].length tmp47 = _L[32].slice tmp48 = _L[32].vector end local tmp49 = Word8Vector.concat local tmp50 = Word8Vector.fromList local tmp51 = Word8Vector.length local tmp52 = Word8Vector.sub local tmp53 = Word8Vector.tabulate _L[33] = Word8ArraySlice.base _L[34] = Word8ArraySlice.copyVec _L[35] = Word8ArraySlice.full _L[36] = Word8ArraySlice.length _L[37] = Word8ArraySlice.slice _L[38] = Word8ArraySlice.vector _L[39] = Word8Array.array _L[40] = Word8Array.copyVec _L[41] = Word8Array.length _L[42] = Word8Array.maxLen _L[43] = Word8Array.sub _L[44] = Word8Array.tabulate _L[45] = Word8Array.update _L[46] = UnsafeWord8Array.sub _L[47] = UnsafeWord8Array.update _L[48] = function(a, i, bytesPerElem) if i < 0 then _raise(_Subscript, "pack-word.sml:29:48") end local tmp54 = _Int_mul(bytesPerElem, i) local tmp55 = _L[41](a) if tmp55 < _Int_add(tmp54, bytesPerElem) then _raise(_Subscript, "pack-word.sml:33:55") else return tmp54 end end _L[49] = function(a) return function(a1) local tmp54 = #a local tmp55 = _Int_sub(#a1, tmp54) local tmp56 = 0 ::cont:: do local a2 = tmp56 if a2 > tmp55 then return false end local tmp57 do local tmp58 = 0 ::cont2:: do local a3 = tmp58 if a3 >= tmp54 then tmp57 = true goto cont1 end local tmp59 = tmp26({a, a3}) local tmp60 = tmp26({a1, _Int_add(a2, a3)}) if tmp59 == tmp60 then tmp58 = _Int_add(a3, 1) goto cont2 else tmp57 = false end end end ::cont1:: if tmp57 then return true else tmp56 = _Int_add(a2, 1) goto cont end end end end _L[50] = {} _L[50].year = 2001 _L[50].month = 1 _L[50].day = 1 _L[50].hour = 0 _L[51] = tmp18(_L[50]) _L[52] = {tag = {"Time"}} _L[53] = function(a) local tmp54 = tmp13(a, _L[51]) local status, exn = _handle(function() local tmp55 = tmp54 * 1e6 local tmp56 = tmp12(tmp55) if math_type(tmp56) == "integer" then return tmp56 elseif tmp55 ~= tmp55 then _raise(Domain, "real-1.sml:301:26") else _raise(_Overflow, "real-1.sml:303:26") end end) if not status then _raise(_L[52], "time.sml:79:82") else return exn end end _L[54] = {} _L[55] = {} _L[55].__mode = "k" setmetatable(_L[54], _L[55]) _L[56] = {} _L[57] = {} _L[57].__mode = "v" setmetatable(_L[56], _L[57]) _L[58] = {{0, nil}} _L[59] = function(a) local tmp54 = _L[54][a] if tmp54 == nil then local d do local x = _L[58][1] if x[2] == nil then local n = x[1] _L[58][1] = {_Int_add(n, 1), nil} d = n elseif x[2] ~= nil then local n = x[1] local tmp55 = x[2][1] _L[58][1] = {n, x[2][2]} d = tmp55 else _raise(_Match, "iodesc.sml:29:24") end end _L[54][a] = d _L[56][d] = a return d else return tmp54 end end _L[60] = function(a) local tmp54 = _L[56][a] if tmp54 ~= nil then local x = _L[58][1] local n = x[1] _L[58][1] = {n, {a, x[2]}} _L[56][a] = nil _L[54][tmp54] = nil return nil else return nil end end _L[61] = {"SysErr"} _L[62] = function(field, f) if tmp23.tag == "SOME" then elseif tmp23.tag == "NONE" then return function(a) _raise({tag = _L[61], payload = {"LuaFileSystem not available", NONE}}, "os.sml:56:70") end else _raise(_Match, "os.sml:54:50") end do return f(tmp23.payload[field]) end end _L[63] = _L[62]("chdir", function(lfs_chdir) return function(path) local tmp54, tmp55 = lfs_chdir(path) if not tmp54 then local tmp56 = tmp6(tmp55) if tmp56 == "string" then _raise({tag = _L[61], payload = {tmp55, {tag = "SOME", payload = tmp55}}}, "os.sml:61:98") else _raise({tag = TypeError_tag, payload = "expected a string, but got " .. tmp56}, "lua.sml:467:37") end else return nil end end end) _L[64] = _L[62]("currentdir", function(lfs_currentdir) return function(a) local tmp54, tmp55 = lfs_currentdir() if tmp6(tmp54) == "string" then return tmp54 end local tmp56 = tmp6(tmp55) if tmp56 == "string" then _raise({tag = _L[61], payload = {tmp55, {tag = "SOME", payload = tmp55}}}, "os.sml:73:102") else _raise({tag = TypeError_tag, payload = "expected a string, but got " .. tmp56}, "lua.sml:467:37") end end end) _L[65] = _L[62]("mkdir", function(lfs_mkdir) return function(path) local tmp54, tmp55 = lfs_mkdir(path) if not tmp54 then local tmp56 = tmp6(tmp55) if tmp56 == "string" then _raise({tag = _L[61], payload = {tmp55, {tag = "SOME", payload = tmp55}}}, "os.sml:81:98") else _raise({tag = TypeError_tag, payload = "expected a string, but got " .. tmp56}, "lua.sml:467:37") end else return nil end end end) _L[66] = _L[62]("attributes", function(lfs_attributes) return function(path) local tmp54, tmp55 = lfs_attributes(path, "modification") if not tmp54 then local tmp56 = tmp6(tmp55) if tmp56 == "string" then _raise({tag = _L[61], payload = {tmp55, {tag = "SOME", payload = tmp55}}}, "os.sml:132:103") else _raise({tag = TypeError_tag, payload = "expected a string, but got " .. tmp56}, "lua.sml:467:37") end else return _L[53](tmp54) end end end) _L[67] = _L[62]("attributes", function(lfs_attributes) return function(path) local tmp54, tmp55 = lfs_attributes(path, "size") if not tmp54 then local tmp56 = tmp6(tmp55) if tmp56 == "string" then _raise({tag = _L[61], payload = {tmp55, {tag = "SOME", payload = tmp55}}}, "os.sml:142:114") else _raise({tag = TypeError_tag, payload = "expected a string, but got " .. tmp56}, "lua.sml:467:37") end else return tmp54 end end end) _L[68] = {tag = {"Path"}} _L[69] = {tag = {"InvalidArc"}} _L[70] = function(a) local tmp54 = tmp32(function(c) return c ~= 47 end) return tmp54(a) end _L[71] = function(a) local dir = a.dir local file = a.file local arcs, isAbs, vol do local tmp54 = fields(function(c) return c == 47 end) local exp = tmp54(dir) if exp ~= nil and (exp[1] == "" and exp[2] == nil) then vol = "" isAbs = false arcs = nil elseif exp ~= nil and exp[1] == "" then vol = "" isAbs = true arcs = exp[2] else vol = "" isAbs = false arcs = exp end end local tmp54 = {file, nil} local tmp55 do local tmp56 = revAppend(arcs, nil) tmp55 = revAppend(tmp56, tmp54) end if vol ~= "" then _raise(_L[68], "os-path-unix.sml:24:41") end if not isAbs and (tmp55 ~= nil and tmp55[1] == "") then _raise(_L[68], "os-path-unix.sml:27:65") end local tmp56 = all(_L[70]) local tmp57 = tmp56(tmp55) if tmp57 then if isAbs then return "/" .. table_concat(_VectorOrArray_fromList(tmp55), "/") else return table_concat(_VectorOrArray_fromList(tmp55), "/") end else _raise(_L[69], "os-path-unix.sml:34:54") end end _L[72] = function(a) local tmp54 do if #a >= 5 then else tmp54 = false goto cont end do local tmp55 = sub1({a, 0}) if tmp55 == 47 or tmp55 == 92 then else tmp54 = false goto cont end do local tmp56 = sub1({a, 1}) if tmp56 == 47 or tmp56 == 92 then else tmp54 = false goto cont end do local tmp57 = sub1({a, 2}) tmp54 = tmp57 ~= 47 and tmp57 ~= 92 end end end end ::cont:: if tmp54 then else return NONE end do local tmp55 = 3 ::cont1:: do local a1 = tmp55 if #a <= a1 then return NONE end local tmp56 = sub1({a, a1}) if tmp56 == 47 or tmp56 == 92 then else tmp55 = _Int_add(a1, 1) goto cont1 end do local tmp57 = _Int_add(a1, 1) local tmp58 do if #a > tmp57 then else tmp58 = false goto cont2 end do local tmp59 = sub1({a, tmp57}) tmp58 = tmp59 ~= 47 and tmp59 ~= 92 end end ::cont2:: if tmp58 then else return NONE end do local tmp59 = _Int_add(tmp57, 1) ::cont3:: do local a2 = tmp59 if #a <= a2 then return {tag = "SOME", payload = a2} end local tmp60 = sub1({a, a2}) if tmp60 == 47 or tmp60 == 92 then return {tag = "SOME", payload = a2} else tmp59 = _Int_add(a2, 1) goto cont3 end end end end end end end _L[73] = {tag = "DOS_VOLUME"} _L[74] = {tag = "NO_VOLUME"} _L[75] = function(a) local tmp54 = tmp32(function(c) return c ~= 47 and c ~= 92 end) return tmp54(a) end _L[76] = function(a) local vol, isAbs, tmp54, tmp55 do local dir = a.dir local file = a.file local arcs do local exp do local tmp56 do if #dir >= 2 then else tmp56 = false goto cont3 end do local tmp57 = sub1({dir, 1}) if tmp57 == 58 then else tmp56 = false goto cont3 end do local tmp58 = sub1({dir, 0}) tmp56 = 65 <= tmp58 and tmp58 <= 90 or 97 <= tmp58 and tmp58 <= 122 end end end ::cont3:: if tmp56 then exp = _L[73] goto cont1 end local exp1 = _L[72](dir) if exp1.tag == "SOME" then exp = {tag = "UNC_PATH", payload = exp1.payload} elseif exp1.tag == "NONE" then exp = _L[74] else _raise(_Match, "os-path-windows.sml:44:27") end end ::cont1:: local isUNC, vol1, rest do if exp.tag == "DOS_VOLUME" then else goto else1 end do local tmp56 = substring(dir, 0, 2) local tmp57 = extract(dir, 2, NONE) rest = tmp57 vol1 = tmp56 isUNC = false goto cont2 end ::else1:: if exp.tag == "UNC_PATH" then elseif exp.tag == "NO_VOLUME" then rest = dir vol1 = "" isUNC = false goto cont2 else _raise(_Match, "os-path-windows.sml:75:52") end do local i = exp.payload local tmp56 = substring(dir, 0, i) local tmp57 = extract(dir, i, NONE) rest = tmp57 vol1 = tmp56 isUNC = true end end ::cont2:: local tmp56 = fields(function(c) return c == 47 or c == 92 end) local exp1 = tmp56(rest) if exp1 ~= nil and (exp1[1] == "" and exp1[2] == nil) then vol = vol1 isAbs = isUNC arcs = nil elseif exp1 ~= nil and exp1[1] == "" then vol = vol1 isAbs = true arcs = exp1[2] else vol = vol1 isAbs = isUNC arcs = exp1 end end local tmp56 = {file, nil} do local tmp57 = revAppend(arcs, nil) tmp54 = revAppend(tmp57, tmp56) end do if not isAbs and vol == "" then tmp55 = true goto cont end local tmp57 do if #vol == 2 then else tmp57 = false goto cont1 end do local tmp58 = sub1({vol, 0}) local tmp59 tmp59 = 65 <= tmp58 and tmp58 <= 90 or 97 <= tmp58 and tmp58 <= 122 if tmp59 then else tmp57 = false goto cont1 end do local tmp60 = sub1({vol, 1}) tmp57 = tmp60 == 58 end end end ::cont1:: if tmp57 then tmp55 = true goto cont end if isAbs then else tmp55 = false goto cont end do local exp = _L[72](vol) if exp.tag == "SOME" then local i = exp.payload tmp55 = i == #vol elseif exp.tag == "NONE" then tmp55 = false else _raise(_Match, "os-path-windows.sml:73:56") end end end end ::cont:: if not tmp55 then _raise(_L[68], "os-path-windows.sml:87:41") end if not isAbs and #vol >= 3 then _raise(_L[68], "os-path-windows.sml:89:41") end if not isAbs and (tmp54 ~= nil and tmp54[1] == "") then _raise(_L[68], "os-path-windows.sml:92:65") end local tmp56 = all(_L[75]) local tmp57 = tmp56(tmp54) if tmp57 then if isAbs then local tmp58 = vol .. "\\" return tmp58 .. table_concat(_VectorOrArray_fromList(tmp54), "\\") else return vol .. table_concat(_VectorOrArray_fromList(tmp54), "\\") end else _raise(_L[69], "os-path-windows.sml:99:54") end end do _L[78] = sub1({tmp2.config, 0}) if _L[78] == 92 then _L[77] = _L[76] else _L[77] = _L[71] end end _L[79] = function(tmp54, tmp55, tmp56, tmp57, tmp58, tmp59, tmp60, tmp61, tmp62, tmp63, tmp64, tmp65, tmp66, tmp67, compare1, tmp68) local RD = function(payload) return payload end local WR = function(payload) return payload end local openVector = function(a) local tmp69 = {0} local tmp70 = {false} local readVec = function(a1) if a1 < 0 then _raise(_Size, "prim-io.sml:112:31") end local x = tmp69[1] local total = tmp63(a) local tmp71 = _Int_add(x, a1) local newPos if tmp71 < total then newPos = tmp71 else newPos = total end tmp69[1] = newPos local tmp72 = tmp66({a, x, {tag = "SOME", payload = _Int_sub(newPos, x)}}) return tmp67(tmp72) end local readArr = function(a1) local x = tmp69[1] local total = tmp63(a) local tmp71 = tmp59(a1) local tmp72 = _Int_add(x, tmp71) local newPos if tmp72 < total then newPos = tmp72 else newPos = total end local exp = tmp56(a1) local baseArr = exp[1] local start = exp[2] local tmp73 = _Int_sub(newPos, x) tmp69[1] = newPos local tmp74 = tmp66({a, x, {tag = "SOME", payload = tmp73}}) tmp57({di = start, dst = baseArr, src = tmp74}) return tmp73 end local tmp71 = tmp63(a) local tmp72 = {tag = "SOME", payload = function(n) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readVec", name = ""}}, "prim-io.sml:108:36") else return readVec(n) end end} local tmp73 = {tag = "SOME", payload = function(slice) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readArr", name = ""}}, "prim-io.sml:108:36") else return readArr(slice) end end} local tmp74 = {tag = "SOME", payload = function(n) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readVecNB", name = ""}}, "prim-io.sml:108:36") end local tmp75 = readVec(n) return {tag = "SOME", payload = tmp75} end} local tmp75 = {tag = "SOME", payload = function(slice) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readArrNB", name = ""}}, "prim-io.sml:108:36") end local tmp76 = readArr(slice) return {tag = "SOME", payload = tmp76} end} local tmp76 = {tag = "SOME", payload = function(a1) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "block", name = ""}}, "prim-io.sml:108:36") else return nil end end} local tmp77 = {tag = "SOME", payload = function(a1) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "canInput", name = ""}}, "prim-io.sml:108:36") else return true end end} local tmp78 = function(a1) if tmp70[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "avail", name = ""}}, "prim-io.sml:108:36") end local tmp79 = tmp63(a) return {tag = "SOME", payload = _Int_sub(tmp79, tmp69[1])} end return {avail = tmp78, block = tmp76, canInput = tmp77, chunkSize = tmp71, close = function(a1) tmp70[1] = true return nil end, endPos = NONE, getPos = NONE, ioDesc = NONE, name = "", readArr = tmp73, readArrNB = tmp75, readVec = tmp72, readVecNB = tmp74, setPos = NONE, verifyPos = NONE} end local nullRd = function(a) local tmp69 = {false} local empty = tmp62(nil) local tmp70 = {tag = "SOME", payload = function(n) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readVec", name = ""}}, "prim-io.sml:149:46") elseif n < 0 then _raise(_Size, "prim-io.sml:155:81") else return empty end end} local tmp71 = {tag = "SOME", payload = function(slice) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readArr", name = ""}}, "prim-io.sml:149:46") else return 0 end end} local tmp72 = {tag = "SOME", payload = function(n) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readVecNB", name = ""}}, "prim-io.sml:149:46") else return {tag = "SOME", payload = empty} end end} local tmp73 = {tag = "SOME", payload = function(slice) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "readArrNB", name = ""}}, "prim-io.sml:149:46") else return {tag = "SOME", payload = 0} end end} local tmp74 = {tag = "SOME", payload = function(a1) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "block", name = ""}}, "prim-io.sml:149:46") else return nil end end} local tmp75 = {tag = "SOME", payload = function(a1) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "canInput", name = ""}}, "prim-io.sml:149:46") else return true end end} local tmp76 = function(a1) return {tag = "SOME", payload = 0} end return {avail = tmp76, block = tmp74, canInput = tmp75, chunkSize = 1, close = function(a1) tmp69[1] = true return nil end, endPos = NONE, getPos = NONE, ioDesc = NONE, name = "", readArr = tmp71, readArrNB = tmp73, readVec = tmp70, readVecNB = tmp72, setPos = NONE, verifyPos = NONE} end local nullWr = function(a) local tmp69 = {false} local tmp70 = {tag = "SOME", payload = function(slice) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "writeVec", name = ""}}, "prim-io.sml:173:46") else return tmp65(slice) end end} local tmp71 = {tag = "SOME", payload = function(slice) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "writeArr", name = ""}}, "prim-io.sml:173:46") else return tmp59(slice) end end} local tmp72 = {tag = "SOME", payload = function(slice) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "writeVecNB", name = ""}}, "prim-io.sml:173:46") end local tmp73 = tmp65(slice) return {tag = "SOME", payload = tmp73} end} local tmp73 = {tag = "SOME", payload = function(slice) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "writeArrNB", name = ""}}, "prim-io.sml:173:46") end local tmp74 = tmp59(slice) return {tag = "SOME", payload = tmp74} end} local tmp74 = {tag = "SOME", payload = function(a1) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "block", name = ""}}, "prim-io.sml:173:46") else return nil end end} local tmp75 = {tag = "SOME", payload = function(a1) if tmp69[1] then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "canOutput", name = ""}}, "prim-io.sml:173:46") else return true end end} return {block = tmp74, canOutput = tmp75, chunkSize = 1, close = function(a1) tmp69[1] = true return nil end, endPos = NONE, getPos = NONE, ioDesc = NONE, name = "", setPos = NONE, verifyPos = NONE, writeArr = tmp71, writeArrNB = tmp73, writeVec = tmp70, writeVecNB = tmp72} end local augmentReader = function(a) local name, chunkSize, readVec, readArr, readVecNB, readArrNB, block, canInput, avail, getPos, setPos, endPos, verifyPos, close, ioDesc, readVec_PRIME do name = a.name chunkSize = a.chunkSize readVec = a.readVec readArr = a.readArr readVecNB = a.readVecNB readArrNB = a.readArrNB block = a.block canInput = a.canInput avail = a.avail getPos = a.getPos setPos = a.setPos endPos = a.endPos verifyPos = a.verifyPos close = a.close ioDesc = a.ioDesc local empty = tmp62(nil) if readVec.tag == "SOME" then readVec_PRIME = readVec goto cont end if readVec.tag == "NONE" then if readArr.tag == "SOME" then local ra = readArr.payload readVec_PRIME = {tag = "SOME", payload = function(n) local arr = tmp54({n, tmp68}) local tmp69 = tmp58(arr) local actual = ra(tmp69) local tmp70 = tmp60({arr, 0, {tag = "SOME", payload = actual}}) return tmp61(tmp70) end} goto cont end if readArr.tag == "NONE" then if block.tag == "SOME" and readVecNB.tag == "SOME" then local block_PRIME = block.payload local rvNB = readVecNB.payload readVec_PRIME = {tag = "SOME", payload = function(n) if n < 0 then _raise(_Size, "prim-io.sml:205:72") end local exp = rvNB(n) if exp.tag == "SOME" then return exp.payload end if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:207:72") end do block_PRIME(nil) local exp1 = rvNB(n) if exp1.tag == "SOME" then return exp1.payload elseif exp1.tag == "NONE" then return empty else _raise(_Match, "prim-io.sml:210:86") end end end} elseif block.tag == "SOME" and (readVecNB.tag == "NONE" and readArrNB.tag == "SOME") then local block_PRIME = block.payload local raNB = readArrNB.payload readVec_PRIME = {tag = "SOME", payload = function(n) if n < 0 then _raise(_Size, "prim-io.sml:217:72") end local arr = tmp54({n, tmp68}) local aslice = tmp58(arr) local exp = raNB(aslice) if exp.tag == "SOME" then else goto else1 end do local tmp69 = tmp60({arr, 0, {tag = "SOME", payload = exp.payload}}) return tmp61(tmp69) end ::else1:: if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:221:75") end do block_PRIME(nil) local exp1 = raNB(aslice) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return empty else _raise(_Match, "prim-io.sml:224:89") end do local tmp69 = tmp60({arr, 0, {tag = "SOME", payload = exp1.payload}}) return tmp61(tmp69) end end end} else readVec_PRIME = NONE end else _raise(_Match, "prim-io.sml:196:38") end else _raise(_Match, "prim-io.sml:194:26") end end ::cont:: local readArr_PRIME if readArr.tag == "SOME" then readArr_PRIME = readArr goto cont1 end if readArr.tag == "NONE" then if readVec.tag == "SOME" then local rv = readVec.payload readArr_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp59(slice) local v = rv(tmp69) local exp = tmp56(slice) tmp55({di = exp[2], dst = exp[1], src = v}) return tmp63(v) end} goto cont1 end if readVec.tag == "NONE" then if block.tag == "SOME" and readArrNB.tag == "SOME" then local block_PRIME = block.payload local raNB = readArrNB.payload readArr_PRIME = {tag = "SOME", payload = function(slice) local exp = raNB(slice) if exp.tag == "SOME" then return exp.payload end if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:242:72") end do block_PRIME(nil) local exp1 = raNB(slice) if exp1.tag == "SOME" then return exp1.payload elseif exp1.tag == "NONE" then return 0 else _raise(_Match, "prim-io.sml:245:86") end end end} elseif block.tag == "SOME" and (readVecNB.tag == "SOME" and readArrNB.tag == "NONE") then local block_PRIME = block.payload local rvNB = readVecNB.payload readArr_PRIME = {tag = "SOME", payload = function(slice) local n, base, start, exp do n = tmp59(slice) local exp1 = tmp56(slice) base = exp1[1] start = exp1[2] exp = rvNB(n) if exp.tag == "SOME" then else goto else1 end do local v = exp.payload tmp55({di = start, dst = base, src = v}) return tmp63(v) end end ::else1:: if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:253:75") end do block_PRIME(nil) local exp1 = rvNB(n) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return 0 else _raise(_Match, "prim-io.sml:258:89") end do local v = exp1.payload tmp55({di = start, dst = base, src = v}) return tmp63(v) end end end} else readArr_PRIME = NONE end else _raise(_Match, "prim-io.sml:233:38") end else _raise(_Match, "prim-io.sml:231:26") end ::cont1:: local readVecNB_PRIME if readVecNB.tag == "SOME" then readVecNB_PRIME = readVecNB goto cont2 end if readVecNB.tag == "NONE" then if readArrNB.tag == "SOME" then local raNB = readArrNB.payload readVecNB_PRIME = {tag = "SOME", payload = function(n) if n < 0 then _raise(_Size, "prim-io.sml:271:75") end local arr = tmp54({n, tmp68}) local tmp69 = tmp58(arr) local exp = raNB(tmp69) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "prim-io.sml:274:78") end do local tmp70 = tmp60({arr, 0, {tag = "SOME", payload = exp.payload}}) local tmp71 = tmp61(tmp70) return {tag = "SOME", payload = tmp71} end end} goto cont2 end if readArrNB.tag == "NONE" then if canInput.tag == "SOME" and readVec.tag == "SOME" then local canInput_PRIME = canInput.payload local rv = readVec.payload readVecNB_PRIME = {tag = "SOME", payload = function(n) local tmp69 = canInput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = rv(n) return {tag = "SOME", payload = tmp70} end end} elseif canInput.tag == "SOME" and (readVec.tag == "NONE" and readArr.tag == "SOME") then local canInput_PRIME = canInput.payload local ra = readArr.payload readVecNB_PRIME = {tag = "SOME", payload = function(n) local tmp69 = canInput_PRIME(nil) if tmp69 then else return NONE end do if n < 0 then _raise(_Size, "prim-io.sml:289:78") end local arr = tmp54({n, tmp68}) local tmp70 = tmp58(arr) local actual = ra(tmp70) local tmp71 = tmp60({arr, 0, {tag = "SOME", payload = actual}}) local tmp72 = tmp61(tmp71) return {tag = "SOME", payload = tmp72} end end} else readVecNB_PRIME = NONE end else _raise(_Match, "prim-io.sml:269:40") end else _raise(_Match, "prim-io.sml:267:28") end ::cont2:: local readArrNB_PRIME if readArrNB.tag == "SOME" then readArrNB_PRIME = readArrNB goto cont3 end if readArrNB.tag == "NONE" then if readVecNB.tag == "SOME" then local rvNB = readVecNB.payload readArrNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp59(slice) local exp = rvNB(tmp69) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "prim-io.sml:303:62") end do local v = exp.payload local exp1 = tmp56(slice) tmp55({di = exp1[2], dst = exp1[1], src = v}) local tmp70 = tmp63(v) return {tag = "SOME", payload = tmp70} end end} goto cont3 end if readVecNB.tag == "NONE" then if canInput.tag == "SOME" and readArr.tag == "SOME" then local canInput_PRIME = canInput.payload local ra = readArr.payload readArrNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = canInput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = ra(slice) return {tag = "SOME", payload = tmp70} end end} elseif canInput.tag == "SOME" and (readVec.tag == "SOME" and readArr.tag == "NONE") then local canInput_PRIME = canInput.payload local rv = readVec.payload readArrNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = canInput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = tmp59(slice) local v = rv(tmp70) local exp = tmp56(slice) tmp55({di = exp[2], dst = exp[1], src = v}) local tmp71 = tmp63(v) return {tag = "SOME", payload = tmp71} end end} else readArrNB_PRIME = NONE end else _raise(_Match, "prim-io.sml:301:40") end else _raise(_Match, "prim-io.sml:299:28") end ::cont3:: return {avail = avail, block = block, canInput = canInput, chunkSize = chunkSize, close = close, endPos = endPos, getPos = getPos, ioDesc = ioDesc, name = name, readArr = readArr_PRIME, readArrNB = readArrNB_PRIME, readVec = readVec_PRIME, readVecNB = readVecNB_PRIME, setPos = setPos, verifyPos = verifyPos} end return {RD = RD, WR = WR, augmentReader = augmentReader, augmentWriter = function(a) local name = a.name local chunkSize = a.chunkSize local writeVec = a.writeVec local writeArr = a.writeArr local writeVecNB = a.writeVecNB local writeArrNB = a.writeArrNB local block = a.block local canOutput = a.canOutput local getPos = a.getPos local setPos = a.setPos local endPos = a.endPos local verifyPos = a.verifyPos local close = a.close local ioDesc = a.ioDesc local writeVec_PRIME if writeVec.tag == "SOME" then writeVec_PRIME = writeVec goto cont end if writeVec.tag == "NONE" then if writeArr.tag == "SOME" then local wa = writeArr.payload writeVec_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp65(slice) local arr = tmp54({tmp69, tmp68}) tmp57({di = 0, dst = arr, src = slice}) local tmp70 = tmp58(arr) return wa(tmp70) end} goto cont end if writeArr.tag == "NONE" then if block.tag == "SOME" and writeVecNB.tag == "SOME" then local block_PRIME = block.payload local wvNB = writeVecNB.payload writeVec_PRIME = {tag = "SOME", payload = function(slice) local exp = wvNB(slice) if exp.tag == "SOME" then return exp.payload end if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:359:64") end do block_PRIME(nil) local exp1 = wvNB(slice) if exp1.tag == "SOME" then return exp1.payload elseif exp1.tag == "NONE" then return 0 else _raise(_Match, "prim-io.sml:362:78") end end end} elseif block.tag == "SOME" and (writeVecNB.tag == "NONE" and writeArrNB.tag == "SOME") then local block_PRIME = block.payload local waNB = writeArrNB.payload writeVec_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp65(slice) local arr = tmp54({tmp69, tmp68}) local aslice = tmp58(arr) tmp57({di = 0, dst = arr, src = slice}) local exp = waNB(aslice) if exp.tag == "SOME" then return exp.payload end if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:372:67") end do block_PRIME(nil) local exp1 = waNB(aslice) if exp1.tag == "SOME" then return exp1.payload elseif exp1.tag == "NONE" then return 0 else _raise(_Match, "prim-io.sml:375:81") end end end} else writeVec_PRIME = NONE end else _raise(_Match, "prim-io.sml:348:39") end else _raise(_Match, "prim-io.sml:346:27") end ::cont:: local writeArr_PRIME if writeArr.tag == "SOME" then writeArr_PRIME = writeArr goto cont1 end if writeArr.tag == "NONE" then if writeVec.tag == "SOME" then local wv = writeVec.payload writeArr_PRIME = {tag = "SOME", payload = function(slice) local v = tmp61(slice) local tmp69 = tmp64(v) return wv(tmp69) end} goto cont1 end if writeVec.tag == "NONE" then if block.tag == "SOME" and writeArrNB.tag == "SOME" then local block_PRIME = block.payload local waNB = writeArrNB.payload writeArr_PRIME = {tag = "SOME", payload = function(slice) local exp = waNB(slice) if exp.tag == "SOME" then return exp.payload end if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:393:64") end do block_PRIME(nil) local exp1 = waNB(slice) if exp1.tag == "SOME" then return exp1.payload elseif exp1.tag == "NONE" then return 0 else _raise(_Match, "prim-io.sml:396:78") end end end} elseif block.tag == "SOME" and (writeVecNB.tag == "SOME" and writeArrNB.tag == "NONE") then local block_PRIME = block.payload local wvNB = writeVecNB.payload writeArr_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp61(slice) local vslice = tmp64(tmp69) local exp = wvNB(vslice) if exp.tag == "SOME" then return exp.payload end if exp.tag == "NONE" then else _raise(_Match, "prim-io.sml:404:67") end do block_PRIME(nil) local exp1 = wvNB(vslice) if exp1.tag == "SOME" then return exp1.payload elseif exp1.tag == "NONE" then return 0 else _raise(_Match, "prim-io.sml:407:81") end end end} else writeArr_PRIME = NONE end else _raise(_Match, "prim-io.sml:384:39") end else _raise(_Match, "prim-io.sml:382:27") end ::cont1:: local writeVecNB_PRIME if writeVecNB.tag == "SOME" then writeVecNB_PRIME = writeVecNB goto cont2 end if writeVecNB.tag == "NONE" then if writeArrNB.tag == "SOME" then local waNB = writeArrNB.payload writeVecNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp65(slice) local arr = tmp54({tmp69, tmp68}) tmp57({di = 0, dst = arr, src = slice}) local tmp70 = tmp58(arr) return waNB(tmp70) end} goto cont2 end if writeArrNB.tag == "NONE" then if canOutput.tag == "SOME" and writeVec.tag == "SOME" then local canOutput_PRIME = canOutput.payload local wv = writeVec.payload writeVecNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = canOutput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = wv(slice) return {tag = "SOME", payload = tmp70} end end} elseif canOutput.tag == "SOME" and (writeVec.tag == "NONE" and writeArr.tag == "SOME") then local canOutput_PRIME = canOutput.payload local wa = writeArr.payload writeVecNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = canOutput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = tmp65(slice) local arr = tmp54({tmp70, tmp68}) tmp57({di = 0, dst = arr, src = slice}) local tmp71 = tmp58(arr) local tmp72 = wa(tmp71) return {tag = "SOME", payload = tmp72} end end} else writeVecNB_PRIME = NONE end else _raise(_Match, "prim-io.sml:416:41") end else _raise(_Match, "prim-io.sml:414:29") end ::cont2:: local writeArrNB_PRIME if writeArrNB.tag == "SOME" then writeArrNB_PRIME = writeArrNB goto cont3 end if writeArrNB.tag == "NONE" then if writeVecNB.tag == "SOME" then local wvNB = writeVecNB.payload writeArrNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = tmp61(slice) local vslice = tmp64(tmp69) return wvNB(vslice) end} goto cont3 end if writeVecNB.tag == "NONE" then if canOutput.tag == "SOME" and writeArr.tag == "SOME" then local canOutput_PRIME = canOutput.payload local wa = writeArr.payload writeArrNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = canOutput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = wa(slice) return {tag = "SOME", payload = tmp70} end end} elseif canOutput.tag == "SOME" and (writeVec.tag == "SOME" and writeArr.tag == "NONE") then local canOutput_PRIME = canOutput.payload local wv = writeVec.payload writeArrNB_PRIME = {tag = "SOME", payload = function(slice) local tmp69 = canOutput_PRIME(nil) if tmp69 then else return NONE end do local tmp70 = tmp61(slice) local vslice = tmp64(tmp70) local tmp71 = wv(vslice) return {tag = "SOME", payload = tmp71} end end} else writeArrNB_PRIME = NONE end else _raise(_Match, "prim-io.sml:445:41") end else _raise(_Match, "prim-io.sml:443:29") end ::cont3:: return {block = block, canOutput = canOutput, chunkSize = chunkSize, close = close, endPos = endPos, getPos = getPos, ioDesc = ioDesc, name = name, setPos = setPos, verifyPos = verifyPos, writeArr = writeArr_PRIME, writeArrNB = writeArrNB_PRIME, writeVec = writeVec_PRIME, writeVecNB = writeVecNB_PRIME} end, compare = compare1, nullRd = nullRd, nullWr = nullWr, openVector = openVector} end _L[80] = _L[79](_L[39], _L[40], _L[33], _L[34], _L[35], _L[36], _L[37], _L[38], tmp50, tmp51, tmp45, tmp46, tmp47, tmp48, compare, 0x0) _L[81] = _L[80].RD _L[82] = _L[80].WR _L[83] = _L[79](_L[1], _L[2], tmp37, tmp38, tmp39, tmp40, tmp41, tmp42, tmp35, tmp36, tmp28, tmp29, tmp30, tmp31, compare, 0) _L[84] = _L[83].RD _L[85] = _L[83].WR _L[86] = function(tmp54, tmp55, tmp56, tmp57, tmp58, tmp59, tmp60, tmp61, tmp62, tmp63, tmp64, tmp65, tmp66, tmp67, tmp68, tmp69, tmp70, tmp71, tmp72, tmp73, tmp74) local input = function(a) local exp = tmp65(a[1]) local chunk = exp[1] a[1] = exp[2] return chunk end local input1 = function(a) local exp = tmp66(a[1]) if exp.tag == "NONE" then return NONE elseif exp.tag == "SOME" then local e = exp.payload[1] a[1] = exp.payload[2] return {tag = "SOME", payload = e} else _raise(_Match, "imperative-io.sml:51:21") end end local inputN = function(a) local stream = a[1] local n = a[2] local exp = tmp68({stream[1], n}) local chunk = exp[1] stream[1] = exp[2] return chunk end local inputAll = function(a) local exp = tmp67(a[1]) local chunk = exp[1] a[1] = exp[2] return chunk end local canInput = function(a) local stream = a[1] local n = a[2] return tmp54({stream[1], n}) end local lookahead = function(a) local exp = tmp66(a[1]) if exp.tag == "NONE" then return NONE elseif exp.tag == "SOME" then return {tag = "SOME", payload = exp.payload[1]} else _raise(_Match, "imperative-io.sml:65:24") end end local closeIn = function(a) return tmp55(a[1]) end local endOfStream = function(a) return tmp57(a[1]) end local output = function(a) local stream = a[1] local chunk = a[2] return tmp71({stream[1], chunk}) end local output1 = function(a) local stream = a[1] local elem = a[2] return tmp72({stream[1], elem}) end local flushOut = function(a) return tmp60(a[1]) end local closeOut = function(a) return tmp56(a[1]) end local mkInstream = function(a) return {a} end local getInstream = function(a) return a[1] end local setInstream = function(a) local stream = a[1] stream[1] = a[2] return nil end local getPosOut = function(a) return tmp62(a[1]) end local setPosOut = function(a) local stream = a[1] local tmp75 = tmp74(a[2]) stream[1] = tmp75 return nil end return {_StreamIO = {canInput = tmp54, closeIn = tmp55, closeOut = tmp56, endOfStream = tmp57, filePosIn = tmp58, filePosOut = tmp59, flushOut = tmp60, getBufferMode = tmp61, getPosOut = tmp62, getReader = tmp63, getWriter = tmp64, input = tmp65, input1 = tmp66, inputAll = tmp67, inputN = tmp68, mkInstream = tmp69, mkOutstream = tmp70, output = tmp71, output1 = tmp72, setBufferMode = tmp73, setPosOut = tmp74}, canInput = canInput, closeIn = closeIn, closeOut = closeOut, endOfStream = endOfStream, flushOut = flushOut, getInstream = getInstream, getOutstream = _EXCLAM, getPosOut = getPosOut, input = input, input1 = input1, inputAll = inputAll, inputN = inputN, lookahead = lookahead, mkInstream = mkInstream, mkOutstream = ref, output = output, output1 = output1, setInstream = setInstream, setOutstream = _COLON_EQ, setPosOut = setPosOut} end _L[87] = function(a) local rd = a[1] local content = a[2] local tip if rd.ioDesc.tag == "SOME" then local name = rd.name tip = {{tag = "READABLE", payload = {name = name, readable = _L[56][rd.ioDesc.payload]}}} else tip = {{tag = "PRIM_READER", payload = rd}} end local tmp54 = tmp36(content) if tmp54 > 0 then return {{tag = "BUFFERED", payload = {buffer = content, initialPosition = NONE, next = tip, position = 0}}} else return tip end end _L[88] = function(a) local tmp54, tmp55 = a, nil ::cont:: do local ins, acc = tmp54, tmp55 local x = ins[1] if x.tag == "READABLE" then else goto else1 end do local readable = x.payload.readable local name = x.payload.name ins[1] = {tag = "CLOSED", payload = name} local tmp56 do local ioDesc = _L[59](readable) local tmp57 = {tag = "SOME", payload = function(a1) local exp do local tmp58 = readable:read(a1) if not tmp58 then exp = NONE else exp = {tag = "SOME", payload = tmp58} end end if exp.tag == "NONE" then return "" elseif exp.tag == "SOME" then return exp.payload else _raise(_Match, "text-io.sml:35:28") end end} local tmp58 = function(a1) return NONE end local tmp59 = function(a1) _L[60](ioDesc) readable:close() return nil end tmp56 = _L[84]({avail = tmp58, block = NONE, canInput = NONE, chunkSize = 1024, close = tmp59, endPos = NONE, getPos = NONE, ioDesc = {tag = "SOME", payload = ioDesc}, name = name, readArr = NONE, readArrNB = NONE, readVec = tmp57, readVecNB = NONE, setPos = NONE, verifyPos = NONE}) end local tmp57 = revAppend(acc, nil) local tmp58 = tmp27(tmp57) return {tmp56, tmp58} end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end do local rd = x.payload ins[1] = {tag = "CLOSED", payload = x.payload.name} local tmp56 = revAppend(acc, nil) local tmp57 = tmp27(tmp56) return {rd, tmp57} end ::else2:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "getReader", name = x.payload}}, "text-io.sml:113:57") else _raise(_Match, "text-io.sml:109:38") end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local tmp56 = tmp30({buffer, position, NONE}) tmp54 = next tmp55 = {tmp56, acc} goto cont end end end _L[89] = function(a) local x = a[1] if x.tag == "READABLE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = x.payload.name}}, "text-io.sml:118:55") end if x.tag == "PRIM_READER" and x.payload.getPos.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = x.payload.name}}, "text-io.sml:119:89") end if x.tag == "PRIM_READER" and x.payload.getPos.tag == "SOME" then else goto else1 end do return x.payload.getPos.payload(nil) end ::else1:: if x.tag == "BUFFERED" and x.payload.initialPosition.tag == "NONE" then local tmp54 do local tmp55 = x.payload.next ::cont:: do local a1 = tmp55 local x1 = a1[1] if x1.tag == "READABLE" then tmp54 = x1.payload.name elseif x1.tag == "PRIM_READER" then tmp54 = x1.payload.name elseif x1.tag == "BUFFERED" then tmp55 = x1.payload.next goto cont elseif x1.tag == "CLOSED" then tmp54 = x1.payload else _raise(_Match, "text-io.sml:93:23") end end end _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = tmp54}}, "text-io.sml:121:92") end if x.tag == "BUFFERED" and x.payload.initialPosition.tag == "SOME" then elseif x.tag == "CLOSED" then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "filePosIn", name = x.payload}}, "text-io.sml:135:44") else _raise(_Match, "text-io.sml:117:25") end do local position, initialPosition, tmp54 do position = x.payload.position local next = x.payload.next initialPosition = x.payload.initialPosition.payload tmp54 = next[1] end ::cont:: do local a1 = tmp54 if a1.tag == "PRIM_READER" and (a1.payload.getPos.tag == "SOME" and (a1.payload.setPos.tag == "SOME" and a1.payload.readVec.tag == "SOME")) then elseif a1.tag == "BUFFERED" then tmp54 = a1.payload.next[1] goto cont elseif a1.tag == "CLOSED" then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "filePosIn", name = a1.payload}}, "text-io.sml:130:56") elseif a1.tag == "PRIM_READER" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = a1.payload.name}}, "text-io.sml:131:86") elseif a1.tag == "READABLE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = a1.payload.name}}, "text-io.sml:132:67") else _raise(_Match, "text-io.sml:123:37") end do local getPos = a1.payload.getPos.payload local setPos = a1.payload.setPos.payload local readVec = a1.payload.readVec.payload local savedPosition = getPos(nil) setPos(initialPosition) readVec(position) local tmp55 = getPos(nil) setPos(savedPosition) return tmp55 end end end end _L[90] = function(stream, f, n) local exp do local tmp54 = stream.readable:read(n) if not tmp54 then exp = NONE else exp = {tag = "SOME", payload = tmp54} end end if exp.tag == "SOME" then local chunk = exp.payload f[1] = {tag = "BUFFERED", payload = {buffer = chunk, initialPosition = NONE, next = {{tag = "READABLE", payload = stream}}, position = 0}} return true elseif exp.tag == "NONE" then return false else _raise(_Match, "text-io.sml:137:11") end end _L[91] = function(rd, f, n) local name = rd.name local readVec = rd.readVec local readArr = rd.readArr local readVecNB = rd.readVecNB local readArrNB = rd.readArrNB local block = rd.block local initialPosition do if rd.getPos.tag == "SOME" then else initialPosition = NONE goto cont end do local tmp54 = rd.getPos.payload(nil) initialPosition = {tag = "SOME", payload = tmp54} end end ::cont:: local chunk do if readVec.tag == "SOME" then else goto else1 end chunk = readVec.payload(n) goto cont1 ::else1:: if readVec.tag == "NONE" then else _raise(_Match, "text-io.sml:152:27") end do if readArr.tag == "SOME" then else goto else2 end do local ra = readArr.payload local arr = _L[1]({n, 0}) local tmp54 = tmp39(arr) local actual = ra(tmp54) local tmp55 = tmp41({arr, 0, {tag = "SOME", payload = actual}}) chunk = tmp42(tmp55) goto cont1 end ::else2:: if readArr.tag == "NONE" then else _raise(_Match, "text-io.sml:154:39") end do if block.tag == "SOME" and readVecNB.tag == "SOME" then else goto else3 end do local block_PRIME = block.payload local rvNB = readVecNB.payload local exp = rvNB(n) if exp.tag == "SOME" then chunk = exp.payload goto cont1 end if exp.tag == "NONE" then else _raise(_Match, "text-io.sml:161:56") end do block_PRIME(nil) local exp1 = rvNB(n) if exp1.tag == "SOME" then chunk = exp1.payload goto cont1 elseif exp1.tag == "NONE" then chunk = "" goto cont1 else _raise(_Match, "text-io.sml:164:70") end end end ::else3:: if block.tag == "SOME" and (readVecNB.tag == "NONE" and readArrNB.tag == "SOME") then else _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "", name = name}}, "text-io.sml:180:60") end do local block_PRIME = block.payload local raNB = readArrNB.payload local arr = _L[1]({n, 0}) local aslice = tmp39(arr) local exp = raNB(aslice) if exp.tag == "SOME" then else goto else4 end do local tmp54 = tmp41({arr, 0, {tag = "SOME", payload = exp.payload}}) chunk = tmp42(tmp54) goto cont1 end ::else4:: if exp.tag == "NONE" then else _raise(_Match, "text-io.sml:172:58") end do block_PRIME(nil) local exp1 = raNB(aslice) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then chunk = "" goto cont1 else _raise(_Match, "text-io.sml:175:72") end do local tmp54 = tmp41({arr, 0, {tag = "SOME", payload = exp1.payload}}) chunk = tmp42(tmp54) end end end end end end ::cont1:: f[1] = {tag = "BUFFERED", payload = {buffer = chunk, initialPosition = initialPosition, next = {{tag = "PRIM_READER", payload = rd}}, position = 0}} return nil end _L[92] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then else goto else1 end do local tmp55 = _L[90](x.payload, a1, 1) if tmp55 then tmp54 = a1 goto cont else return {"", a1} end end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end do local rd = x.payload _L[91](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end ::else2:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then return {"", a1} else _raise(_Match, "text-io.sml:183:32") end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local tmp55 = extract(buffer, position, NONE) return {tmp55, next} end end end _L[93] = function(buffer, position, next, initialPosition) if position >= #buffer then return next else return {{tag = "BUFFERED", payload = {buffer = buffer, initialPosition = initialPosition, next = next, position = position}}} end end _L[94] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then else goto else1 end do local tmp55 = _L[90](x.payload, a1, 1) if tmp55 then tmp54 = a1 goto cont else return NONE end end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end do local rd = x.payload _L[91](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end ::else2:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then return NONE else _raise(_Match, "text-io.sml:196:33") end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local initialPosition = x.payload.initialPosition local tmp55 = sub1({buffer, position}) local tmp56 = _L[93](buffer, _Int_add(position, 1), next, initialPosition) return {tag = "SOME", payload = {tmp55, tmp56}} end end end _L[95] = function(a) local tmp54, tmp55 do local f = a[1] tmp54 = f tmp55 = a[2] end ::cont:: do local f, n = tmp54, tmp55 local x = f[1] if x.tag == "READABLE" then else goto else1 end do local tmp56 = _L[90](x.payload, f, n) if tmp56 then tmp54 = f tmp55 = n goto cont else return {"", f} end end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end _L[91](x.payload, f, n) tmp54 = f tmp55 = n goto cont ::else2:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then return {"", f} else _raise(_Match, "text-io.sml:204:36") end do local buffer, position, next do buffer = x.payload.buffer position = x.payload.position next = x.payload.next local initialPosition = x.payload.initialPosition local tmp56 = _Int_add(position, n) if tmp56 <= #buffer then else goto else3 end do local tmp57 = substring(buffer, position, n) local tmp58 = _L[93](buffer, tmp56, next, initialPosition) return {tmp57, tmp58} end end ::else3:: local buffer0 = extract(buffer, position, NONE) local exp = _L[95]({next, _Int_sub(n, #buffer0)}) local buffer1 = exp[1] local next1 = exp[2] return {buffer0 .. buffer1, next1} end end end _L[96] = function(a) local tmp54 = a ::cont:: do local x do local a1 = tmp54 x = a1[1] if x.tag == "READABLE" then local s = x.payload local exp do local tmp55 = s.readable:read("L") if not tmp55 then exp = NONE else exp = {tag = "SOME", payload = tmp55} end end if exp.tag == "SOME" then local chunk = exp.payload a1[1] = {tag = "BUFFERED", payload = {buffer = chunk, initialPosition = NONE, next = {{tag = "READABLE", payload = s}}, position = 0}} tmp54 = a1 goto cont elseif exp.tag == "NONE" then return NONE else _raise(_Match, "text-io.sml:141:11") end end if x.tag == "PRIM_READER" then else goto else1 end do local rd = x.payload _L[91](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end end ::else1:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then return NONE else _raise(_Match, "text-io.sml:221:36") end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local initialPosition = x.payload.initialPosition local tmp55 = position ::cont1:: do local a1 = tmp55 if a1 >= #buffer then else goto else2 end do local exp = _L[96](next) if exp.tag == "NONE" then else goto else3 end do local tmp56 = extract(buffer, position, NONE) return {tag = "SOME", payload = {tmp56 .. "\n", next}} end ::else3:: if exp.tag == "SOME" then else _raise(_Match, "text-io.sml:229:68") end do local line = exp.payload[1] local next1 = exp.payload[2] local tmp56 = extract(buffer, position, NONE) return {tag = "SOME", payload = {tmp56 .. line, next1}} end end ::else2:: local tmp56 = sub1({buffer, a1}) if tmp56 == 10 then else tmp55 = _Int_add(a1, 1) goto cont1 end do local tmp57 = _Int_add(a1, 1) local tmp58 = substring(buffer, position, _Int_sub(tmp57, position)) local tmp59 = _L[93](buffer, tmp57, next, initialPosition) return {tag = "SOME", payload = {tmp58, tmp59}} end end end end end _L[97] = function(a) local tmp54, tmp55 do local x = a[1] if x.tag == "READABLE" then local s = x.payload local tmp56 = s.readable:read("a") local tmp57 = {{tag = "READABLE", payload = s}} a[1] = {tag = "BUFFERED", payload = {buffer = tmp56, initialPosition = NONE, next = tmp57, position = 0}} return {tmp56, tmp57} end tmp55, tmp54 = nil, a end ::cont:: do local contentsRev, f = tmp55, tmp54 local exp = _L[92](f) if exp[1] == "" then else local content = exp[1] local f1 = exp[2] tmp55 = {content, contentsRev} tmp54 = f1 goto cont end do local f1 = exp[2] local tmp56 = revAppend(contentsRev, nil) return {table_concat(_VectorOrArray_fromList(tmp56)), f1} end end end _L[98] = function(a) local n, x do local f = a[1] n = a[2] if n < 0 then _raise(_Size, "text-io.sml:251:42") end x = f[1] if x.tag == "READABLE" then _raise({tag = _L[9], payload = {cause = _L[11], ["function"] = "canInput", name = x.payload.name}}, "text-io.sml:254:77") end if x.tag == "PRIM_READER" and x.payload.canInput.tag == "SOME" then else goto else1 end do local tmp54 = x.payload.canInput.payload(nil) if tmp54 then return {tag = "SOME", payload = 1} else return NONE end end end ::else1:: if x.tag == "PRIM_READER" and x.payload.canInput.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[11], ["function"] = "canInput", name = x.payload.name}}, "text-io.sml:259:108") end if x.tag == "BUFFERED" then local buffer = x.payload.buffer local position = x.payload.position local tmp54 = _Int_sub(#buffer, position) if n < tmp54 then return {tag = "SOME", payload = n} else return {tag = "SOME", payload = tmp54} end elseif x.tag == "CLOSED" then return {tag = "SOME", payload = 0} else _raise(_Match, "text-io.sml:253:42") end end _L[99] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then local readable = x.payload.readable local name = x.payload.name readable:close() a1[1] = {tag = "CLOSED", payload = name} return nil end if x.tag == "PRIM_READER" then elseif x.tag == "BUFFERED" then tmp54 = x.payload.next goto cont elseif x.tag == "CLOSED" then return nil else _raise(_Match, "text-io.sml:262:34") end do local name = x.payload.name x.payload.close(nil) a1[1] = {tag = "CLOSED", payload = name} return nil end end end _L[100] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then return not x.payload.readable:read(0) end if x.tag == "PRIM_READER" then elseif x.tag == "BUFFERED" then return false elseif x.tag == "CLOSED" then return true else _raise(_Match, "text-io.sml:269:38") end do local rd = x.payload _L[91](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end end end _L[101] = function(stream, name, s) local tmp54, tmp55 = stream:write(s) if not tmp54 then else return nil end do local tmp56 = _Fail(tmp55) _raise({tag = _L[9], payload = {cause = tmp56, ["function"] = "output", name = name}}, "text-io.sml:290:43") end end _L[102] = function(a) if a[1].tag == "LUA_WRITABLE" then else goto else1 end do local writable = a[1].payload.writable local name = a[1].payload.name return _L[101](writable, name, a[2]) end ::else1:: if a[1].tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:361:9") end do local name, chunkSize, writeVec, buffer, content, x do name = a[1].payload.writer.name chunkSize = a[1].payload.writer.chunkSize writeVec = a[1].payload.writer.writeVec local buffer_mode = a[1].payload.buffer_mode buffer = a[1].payload.buffer content = a[2] x = buffer_mode[1] if x == "NO_BUF" then else goto else2 end do if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "output", name = name}}, "text-io.sml:367:41") else _raise(_Match, "text-io.sml:365:29") end do local writeVec1 = writeVec.payload local tmp54 = tmp28(content) writeVec1(tmp54) return nil end end end ::else2:: if x == "LINE_BUF" then else goto else3 end do local tmp54 = tmp34(function(c) return c == 10 end) local tmp55 = tmp54(content) if tmp55 then else buffer[1] = {content, buffer[1]} return nil end do local tmp56 = revAppend({content, buffer[1]}, nil) local tmp57 = table_concat(_VectorOrArray_fromList(tmp56)) if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "output", name = name}}, "text-io.sml:373:49") else _raise(_Match, "text-io.sml:371:37") end do local writeVec1 = writeVec.payload local tmp58 = tmp28(tmp57) writeVec1(tmp58) buffer[1] = nil return nil end end end ::else3:: if x == "BLOCK_BUF" then else _raise(_Match, "text-io.sml:364:11") end do local x1 = buffer[1] local tmp54 = foldl(function(a1) local z = a1[1] return _Int_add(a1[2], #z) end) local tmp55 = tmp54(#content) local bufSize = tmp55(x1) if bufSize >= chunkSize then else buffer[1] = {content, buffer[1]} return nil end do local tmp56 = revAppend({content, buffer[1]}, nil) local tmp57 = table_concat(_VectorOrArray_fromList(tmp56)) if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "output", name = name}}, "text-io.sml:384:53") else _raise(_Match, "text-io.sml:382:41") end do local writeVec1 = writeVec.payload local tmp58 = tmp28(tmp57) writeVec1(tmp58) buffer[1] = nil return nil end end end end end _L[103] = function(a) local stream = a[1] return _L[102]({stream, string_char(a[2])}) end _L[104] = function(name, writeVec, buffer) local tmp54 = revAppend(buffer[1], nil) local tmp55 = table_concat(_VectorOrArray_fromList(tmp54)) buffer[1] = nil if tmp55 ~= "" then else return nil end do if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "flushOut", name = name}}, "text-io.sml:406:30") else _raise(_Match, "text-io.sml:404:18") end do local writeVec1 = writeVec.payload local tmp56 = tmp28(tmp55) writeVec1(tmp56) return nil end end end _L[105] = function(a) if a.tag == "LUA_WRITABLE" then a.payload.writable:flush() return nil else if a.tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:410:9") end do local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec return _L[104](name, writeVec, a.payload.buffer) end end end _L[106] = function(a) if a.tag == "LUA_WRITABLE" then a.payload.writable:close() return nil end if a.tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:413:9") end do local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec local close = a.payload.writer.close _L[104](name, writeVec, a.payload.buffer) return close(nil) end end _L[107] = function(a) if a[1].tag == "LUA_WRITABLE" then local writable = a[1].payload.writable local buffer_mode = a[1].payload.buffer_mode local mode = a[2] local modeString if mode == "NO_BUF" then modeString = "no" elseif mode == "BLOCK_BUF" then modeString = "full" elseif mode == "LINE_BUF" then modeString = "line" else _raise(_Match, "text-io.sml:295:61") end writable:setvbuf(modeString) buffer_mode[1] = mode return nil end if a[1].tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:418:9") end do local name = a[1].payload.writer.name local writeVec = a[1].payload.writer.writeVec local buffer_mode = a[1].payload.buffer_mode local buffer = a[1].payload.buffer local mode = a[2] local tmp54 = _L[17](mode, _L[14]) if tmp54 then else buffer_mode[1] = mode return nil end do _L[104](name, writeVec, buffer) buffer_mode[1] = mode return nil end end end _L[108] = function(a) if a.tag == "LUA_WRITABLE" then return a.payload.buffer_mode[1] elseif a.tag == "PRIM_WRITER" then return a.payload.buffer_mode[1] else _raise(_Match, "text-io.sml:429:9") end end _L[109] = function(a) if a[1].ioDesc.tag == "SOME" then local name = a[1].name local ioDesc = a[1].ioDesc.payload local mode = a[2] local tmp54 = _L[56][ioDesc] return {tag = "LUA_WRITABLE", payload = {buffer_mode = {mode}, name = name, writable = tmp54}} else local w = a[1] local tmp54 = {a[2]} return {tag = "PRIM_WRITER", payload = {buffer = {nil}, buffer_mode = tmp54, writer = w}} end end _L[110] = function(a) if a.tag == "LUA_WRITABLE" then else goto else1 end do local writable = a.payload.writable local buffer_mode = a.payload.buffer_mode local name = a.payload.name writable:flush() local tmp54 do local ioDesc = _L[59](writable) local tmp55 = {tag = "SOME", payload = function(slice) local tmp56 = tmp31(slice) _L[101](writable, name, tmp56) writable:flush() return tmp29(slice) end} local tmp56 = function(a1) _L[60](ioDesc) writable:close() return nil end tmp54 = _L[85]({block = NONE, canOutput = NONE, chunkSize = 1024, close = tmp56, endPos = NONE, getPos = NONE, ioDesc = {tag = "SOME", payload = ioDesc}, name = name, setPos = NONE, verifyPos = NONE, writeArr = NONE, writeArrNB = NONE, writeVec = tmp55, writeVecNB = NONE}) end return {tmp54, buffer_mode[1]} end ::else1:: if a.tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:436:9") end do local writer = a.payload.writer local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec local buffer_mode = a.payload.buffer_mode _L[104](name, writeVec, a.payload.buffer) return {writer, buffer_mode[1]} end end _L[111] = function(a) if a.tag == "LUA_WRITABLE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "getPosOut", name = a.payload.name}}, "text-io.sml:443:50") end if a.tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:443:9") end do local writer = a.payload.writer local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec local getPos = a.payload.writer.getPos local buffer_mode = a.payload.buffer_mode local buffer = a.payload.buffer if getPos.tag == "SOME" then elseif getPos.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "getPosOut", name = name}}, "text-io.sml:449:23") else _raise(_Match, "text-io.sml:445:11") end do local getPos1 = getPos.payload _L[104](name, writeVec, buffer) local tmp54 = getPos1(nil) return {buffer = buffer, buffer_mode = buffer_mode, pos = tmp54, writer = writer} end end end _L[112] = function(a) local writer = a.writer local name = a.writer.name local setPos = a.writer.setPos local buffer_mode = a.buffer_mode local buffer = a.buffer local pos = a.pos if setPos.tag == "SOME" then elseif setPos.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "setPosOut", name = name}}, "text-io.sml:455:23") else _raise(_Match, "text-io.sml:451:11") end do setPos.payload(pos) return {tag = "PRIM_WRITER", payload = {buffer = buffer, buffer_mode = buffer_mode, writer = writer}} end end _L[113] = _L[86](_L[98], _L[99], _L[106], _L[100], _L[89], function(a) return a.pos end, _L[105], _L[108], _L[111], _L[88], _L[110], _L[92], _L[94], _L[97], _L[95], _L[87], _L[109], _L[102], _L[103], _L[107], _L[112]) _L[114] = function(a) local tmp54 = _L[113].getInstream(a) local exp = _L[96](tmp54) if exp.tag == "NONE" then return NONE end if exp.tag == "SOME" then else _raise(_Match, "text-io.sml:472:24") end do local line = exp.payload[1] local stream_PRIME = exp.payload[2] local tmp55 = _L[113].setInstream tmp55({a, stream_PRIME}) return {tag = "SOME", payload = line} end end _L[115] = function(a) local tmp54, tmp55 = tmp7(a, "r") if tmp54 == nil then else local tmp56 = _L[113].mkInstream return tmp56({{tag = "READABLE", payload = {name = a, readable = tmp54}}}) end do local tmp56 = _Fail(tmp55) _raise({tag = _L[9], payload = {cause = tmp56, ["function"] = "TextIO.openIn", name = a}}, "text-io.sml:479:26") end end do _L[117] = _L[113].mkOutstream _L[116] = _L[117]({tag = "LUA_WRITABLE", payload = {buffer_mode = {_L[15]}, name = "", writable = tmp10}}) end do _L[119] = _L[113].mkOutstream _L[118] = _L[119]({tag = "LUA_WRITABLE", payload = {buffer_mode = {_L[14]}, name = "", writable = tmp9}}) end _L[120] = _L[113].closeIn _L[121] = _L[113].closeOut _L[122] = _L[113].getInstream _L[123] = _L[113].inputAll _L[124] = _L[113].output _L[125] = function(a) local rd = a[1] local content = a[2] local tip if rd.ioDesc.tag == "SOME" then local name = rd.name tip = {{tag = "READABLE", payload = {name = name, readable = _L[56][rd.ioDesc.payload]}}} else tip = {{tag = "PRIM_READER", payload = rd}} end local tmp54 = tmp51(content) if tmp54 > 0 then return {{tag = "BUFFERED", payload = {buffer = content, initialPosition = NONE, next = tip, position = 0}}} else return tip end end _L[126] = function(a) local tmp54, tmp55 = a, nil ::cont:: do local ins, acc = tmp54, tmp55 local x = ins[1] if x.tag == "READABLE" then else goto else1 end do local readable = x.payload.readable local name = x.payload.name ins[1] = {tag = "CLOSED", payload = name} local tmp56 do local ioDesc = _L[59](readable) local tmp57 = {tag = "SOME", payload = function(a1) local exp do local tmp58 = readable:read(a1) if not tmp58 then exp = NONE else exp = {tag = "SOME", payload = tmp58} end end if exp.tag == "NONE" then elseif exp.tag == "SOME" then return exp.payload else _raise(_Match, "bin-io.sml:28:28") end do return tmp50(nil) end end} local tmp58 = function(a1) return NONE end local tmp59 = function(a1) _L[60](ioDesc) readable:close() return nil end tmp56 = _L[81]({avail = tmp58, block = NONE, canInput = NONE, chunkSize = 1024, close = tmp59, endPos = NONE, getPos = NONE, ioDesc = {tag = "SOME", payload = ioDesc}, name = name, readArr = NONE, readArrNB = NONE, readVec = tmp57, readVecNB = NONE, setPos = NONE, verifyPos = NONE}) end local tmp57 = revAppend(acc, nil) local tmp58 = tmp44(tmp57) return {tmp56, tmp58} end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end do local rd = x.payload ins[1] = {tag = "CLOSED", payload = x.payload.name} local tmp56 = revAppend(acc, nil) local tmp57 = tmp44(tmp56) return {rd, tmp57} end ::else2:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "getReader", name = x.payload}}, "bin-io.sml:103:57") else _raise(_Match, "bin-io.sml:99:38") end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local tmp56 = tmp47({buffer, position, NONE}) tmp54 = next tmp55 = {tmp56, acc} goto cont end end end _L[127] = function(a) local x = a[1] if x.tag == "READABLE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = x.payload.name}}, "bin-io.sml:108:55") end if x.tag == "PRIM_READER" and x.payload.getPos.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = x.payload.name}}, "bin-io.sml:109:88") end if x.tag == "PRIM_READER" and x.payload.getPos.tag == "SOME" then else goto else1 end do return x.payload.getPos.payload(nil) end ::else1:: if x.tag == "BUFFERED" and x.payload.initialPosition.tag == "NONE" then local tmp54 do local tmp55 = x.payload.next ::cont:: do local a1 = tmp55 local x1 = a1[1] if x1.tag == "READABLE" then tmp54 = x1.payload.name elseif x1.tag == "PRIM_READER" then tmp54 = x1.payload.name elseif x1.tag == "BUFFERED" then tmp55 = x1.payload.next goto cont elseif x1.tag == "CLOSED" then tmp54 = x1.payload else _raise(_Match, "bin-io.sml:84:23") end end end _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "filePosIn", name = tmp54}}, "bin-io.sml:111:92") elseif x.tag == "BUFFERED" and x.payload.initialPosition.tag == "SOME" then local position = x.payload.position return _Int_add(x.payload.initialPosition.payload, position) elseif x.tag == "CLOSED" then _raise({tag = _L[9], payload = {cause = _L[13], ["function"] = "filePosIn", name = x.payload}}, "bin-io.sml:113:44") else _raise(_Match, "bin-io.sml:107:25") end end _L[128] = function(stream, f, n) local exp do local tmp54 = stream.readable:read(n) if not tmp54 then exp = NONE else exp = {tag = "SOME", payload = tmp54} end end if exp.tag == "SOME" then local chunk = exp.payload f[1] = {tag = "BUFFERED", payload = {buffer = chunk, initialPosition = NONE, next = {{tag = "READABLE", payload = stream}}, position = 0}} return true elseif exp.tag == "NONE" then return false else _raise(_Match, "bin-io.sml:115:11") end end _L[129] = function(rd, f, n) local name = rd.name local readVec = rd.readVec local readArr = rd.readArr local readVecNB = rd.readVecNB local readArrNB = rd.readArrNB local block = rd.block local initialPosition do if rd.getPos.tag == "SOME" then else initialPosition = NONE goto cont end do local tmp54 = rd.getPos.payload(nil) initialPosition = {tag = "SOME", payload = tmp54} end end ::cont:: local chunk do if readVec.tag == "SOME" then else goto else1 end chunk = readVec.payload(n) goto cont1 ::else1:: if readVec.tag == "NONE" then else _raise(_Match, "bin-io.sml:126:27") end do if readArr.tag == "SOME" then else goto else2 end do local ra = readArr.payload local arr = _L[39]({n, 0x0}) local tmp54 = _L[35](arr) local actual = ra(tmp54) local tmp55 = _L[37]({arr, 0, {tag = "SOME", payload = actual}}) chunk = _L[38](tmp55) goto cont1 end ::else2:: if readArr.tag == "NONE" then else _raise(_Match, "bin-io.sml:128:39") end do if block.tag == "SOME" and readVecNB.tag == "SOME" then else goto else3 end do local block_PRIME = block.payload local rvNB = readVecNB.payload local exp = rvNB(n) if exp.tag == "SOME" then chunk = exp.payload goto cont1 end if exp.tag == "NONE" then else _raise(_Match, "bin-io.sml:135:56") end do block_PRIME(nil) local exp1 = rvNB(n) if exp1.tag == "SOME" then chunk = exp1.payload goto cont1 else if exp1.tag == "NONE" then else _raise(_Match, "bin-io.sml:138:70") end chunk = tmp50(nil) goto cont1 end end end ::else3:: if block.tag == "SOME" and (readVecNB.tag == "NONE" and readArrNB.tag == "SOME") then else _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "", name = name}}, "bin-io.sml:154:60") end do local block_PRIME = block.payload local raNB = readArrNB.payload local arr = _L[39]({n, 0x0}) local aslice = _L[35](arr) local exp = raNB(aslice) if exp.tag == "SOME" then else goto else4 end do local tmp54 = _L[37]({arr, 0, {tag = "SOME", payload = exp.payload}}) chunk = _L[38](tmp54) goto cont1 end ::else4:: if exp.tag == "NONE" then else _raise(_Match, "bin-io.sml:146:58") end do block_PRIME(nil) local exp1 = raNB(aslice) if exp1.tag == "SOME" then else if exp1.tag == "NONE" then else _raise(_Match, "bin-io.sml:149:72") end chunk = tmp50(nil) goto cont1 end do local tmp54 = _L[37]({arr, 0, {tag = "SOME", payload = exp1.payload}}) chunk = _L[38](tmp54) end end end end end end ::cont1:: f[1] = {tag = "BUFFERED", payload = {buffer = chunk, initialPosition = initialPosition, next = {{tag = "PRIM_READER", payload = rd}}, position = 0}} return nil end _L[130] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then else goto else1 end do local tmp55 = _L[128](x.payload, a1, 1) if tmp55 then tmp54 = a1 goto cont end local tmp56 = tmp50(nil) return {tmp56, a1} end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end do local rd = x.payload _L[129](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end ::else2:: if x.tag == "BUFFERED" then else goto else3 end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local tmp55 = tmp47({buffer, position, NONE}) local tmp56 = tmp48(tmp55) return {tmp56, next} end ::else3:: if x.tag == "CLOSED" then else _raise(_Match, "bin-io.sml:157:32") end do local tmp55 = tmp50(nil) return {tmp55, a1} end end end _L[131] = function(buffer, position, next, initialPosition) local tmp54 = tmp51(buffer) if position >= tmp54 then return next else return {{tag = "BUFFERED", payload = {buffer = buffer, initialPosition = initialPosition, next = next, position = position}}} end end _L[132] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then else goto else1 end do local tmp55 = _L[128](x.payload, a1, 1) if tmp55 then tmp54 = a1 goto cont else return NONE end end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end do local rd = x.payload _L[129](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end ::else2:: if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then return NONE else _raise(_Match, "bin-io.sml:170:33") end do local buffer = x.payload.buffer local position = x.payload.position local next = x.payload.next local initialPosition = x.payload.initialPosition local tmp55 = tmp52({buffer, position}) local tmp56 = _L[131](buffer, _Int_add(position, 1), next, initialPosition) return {tag = "SOME", payload = {tmp55, tmp56}} end end end _L[133] = function(a) local tmp54, tmp55 do local f = a[1] tmp54 = f tmp55 = a[2] end ::cont:: do local f, n = tmp54, tmp55 local x = f[1] if x.tag == "READABLE" then else goto else1 end do local tmp56 = _L[128](x.payload, f, n) if tmp56 then tmp54 = f tmp55 = n goto cont end local tmp57 = tmp50(nil) return {tmp57, f} end ::else1:: if x.tag == "PRIM_READER" then else goto else2 end _L[129](x.payload, f, n) tmp54 = f tmp55 = n goto cont ::else2:: if x.tag == "BUFFERED" then else goto else3 end do local buffer, position, next do buffer = x.payload.buffer position = x.payload.position next = x.payload.next local initialPosition = x.payload.initialPosition local tmp56 = _Int_add(position, n) local tmp57 = tmp51(buffer) if tmp56 <= tmp57 then else goto else4 end do local tmp58 = tmp47({buffer, position, {tag = "SOME", payload = n}}) local tmp59 = tmp48(tmp58) local tmp60 = _L[131](buffer, tmp56, next, initialPosition) return {tmp59, tmp60} end end ::else4:: local buffer0 = tmp47({buffer, position, NONE}) local tmp56 = tmp46(buffer0) local exp = _L[133]({next, _Int_sub(n, tmp56)}) local buffer1 = exp[1] local next1 = exp[2] local tmp57 = tmp45(buffer1) local tmp58 = tmp44({buffer0, {tmp57, nil}}) return {tmp58, next1} end ::else3:: if x.tag == "CLOSED" then else _raise(_Match, "bin-io.sml:178:36") end do local tmp56 = tmp50(nil) return {tmp56, f} end end end _L[134] = function(a) local tmp54, tmp55 do local x = a[1] if x.tag == "READABLE" then local s = x.payload local tmp56 = s.readable:read("a") local tmp57 = {{tag = "READABLE", payload = s}} a[1] = {tag = "BUFFERED", payload = {buffer = tmp56, initialPosition = NONE, next = tmp57, position = 0}} return {tmp56, tmp57} end tmp55, tmp54 = nil, a end ::cont:: do local contentsRev, f = tmp55, tmp54 local exp = _L[130](f) local content = exp[1] local f1 = exp[2] local tmp56 = tmp51(content) if tmp56 == 0 then else tmp55 = {content, contentsRev} tmp54 = f1 goto cont end do local tmp57 = revAppend(contentsRev, nil) local tmp58 = tmp49(tmp57) return {tmp58, f1} end end end _L[135] = function(a) local n, x do local f = a[1] n = a[2] if n < 0 then _raise(_Size, "bin-io.sml:208:42") end x = f[1] if x.tag == "READABLE" then _raise({tag = _L[9], payload = {cause = _L[11], ["function"] = "canInput", name = x.payload.name}}, "bin-io.sml:211:77") end if x.tag == "PRIM_READER" and x.payload.canInput.tag == "SOME" then else goto else1 end do local tmp54 = x.payload.canInput.payload(nil) if tmp54 then return {tag = "SOME", payload = 1} else return NONE end end end ::else1:: if x.tag == "PRIM_READER" and x.payload.canInput.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[11], ["function"] = "canInput", name = x.payload.name}}, "bin-io.sml:216:107") end if x.tag == "BUFFERED" then elseif x.tag == "CLOSED" then return {tag = "SOME", payload = 0} else _raise(_Match, "bin-io.sml:210:42") end do local buffer = x.payload.buffer local position = x.payload.position local tmp54 = tmp51(buffer) local tmp55 = _Int_sub(tmp54, position) if n < tmp55 then return {tag = "SOME", payload = n} else return {tag = "SOME", payload = tmp55} end end end _L[136] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then local readable = x.payload.readable local name = x.payload.name readable:close() a1[1] = {tag = "CLOSED", payload = name} return nil end if x.tag == "PRIM_READER" then elseif x.tag == "BUFFERED" then tmp54 = x.payload.next goto cont elseif x.tag == "CLOSED" then return nil else _raise(_Match, "bin-io.sml:219:34") end do local name = x.payload.name x.payload.close(nil) a1[1] = {tag = "CLOSED", payload = name} return nil end end end _L[137] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 local x = a1[1] if x.tag == "READABLE" then return not x.payload.readable:read(0) end if x.tag == "PRIM_READER" then elseif x.tag == "BUFFERED" then return false elseif x.tag == "CLOSED" then return true else _raise(_Match, "bin-io.sml:226:38") end do local rd = x.payload _L[129](rd, a1, x.payload.chunkSize) tmp54 = a1 goto cont end end end _L[138] = function(stream, name, s) local tmp54, tmp55 = stream:write(s) if not tmp54 then else return nil end do local tmp56 = _Fail(tmp55) _raise({tag = _L[9], payload = {cause = tmp56, ["function"] = "output", name = name}}, "bin-io.sml:248:18") end end _L[139] = function(a) if a[1].tag == "LUA_WRITABLE" then else goto else1 end do local writable = a[1].payload.writable local name = a[1].payload.name return _L[138](writable, name, a[2]) end ::else1:: if a[1].tag == "PRIM_WRITER" then else _raise(_Match, "bin-io.sml:317:9") end do local name, chunkSize, writeVec, buffer, content do name = a[1].payload.writer.name chunkSize = a[1].payload.writer.chunkSize writeVec = a[1].payload.writer.writeVec local buffer_mode = a[1].payload.buffer_mode buffer = a[1].payload.buffer content = a[2] if buffer_mode[1] == "NO_BUF" then else goto else2 end do if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "output", name = name}}, "bin-io.sml:323:41") else _raise(_Match, "bin-io.sml:321:29") end do local writeVec1 = writeVec.payload local tmp54 = tmp45(content) writeVec1(tmp54) return nil end end end ::else2:: local x = buffer[1] local tmp54 = foldl(function(a1) local z = a1[1] local acc = a1[2] local tmp55 = tmp51(z) return _Int_add(acc, tmp55) end) local tmp55 = tmp51(content) local tmp56 = tmp54(tmp55) local bufSize = tmp56(x) if bufSize >= chunkSize then else buffer[1] = {content, buffer[1]} return nil end do local tmp57 = revAppend({content, buffer[1]}, nil) local content_PRIME = tmp49(tmp57) if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "output", name = name}}, "bin-io.sml:332:37") else _raise(_Match, "bin-io.sml:330:25") end do local writeVec1 = writeVec.payload local tmp58 = tmp45(content_PRIME) writeVec1(tmp58) buffer[1] = nil return nil end end end end _L[140] = function(a) local stream = a[1] local tmp54 = tmp50({a[2], nil}) return _L[139]({stream, tmp54}) end _L[141] = function(name, writeVec, buffer) local tmp54 = revAppend(buffer[1], nil) local content = tmp49(tmp54) buffer[1] = nil local tmp55 = tmp51(content) if tmp55 > 0 then else return nil end do if writeVec.tag == "SOME" then elseif writeVec.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "flushOut", name = name}}, "bin-io.sml:353:30") else _raise(_Match, "bin-io.sml:351:18") end do local writeVec1 = writeVec.payload local tmp56 = tmp45(content) writeVec1(tmp56) return nil end end end _L[142] = function(a) if a.tag == "LUA_WRITABLE" then a.payload.writable:flush() return nil else if a.tag == "PRIM_WRITER" then else _raise(_Match, "bin-io.sml:357:9") end do local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec return _L[141](name, writeVec, a.payload.buffer) end end end _L[143] = function(a) if a.tag == "LUA_WRITABLE" then a.payload.writable:close() return nil end if a.tag == "PRIM_WRITER" then else _raise(_Match, "bin-io.sml:360:9") end do local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec local close = a.payload.writer.close _L[141](name, writeVec, a.payload.buffer) return close(nil) end end _L[144] = function(a) if a[1].tag == "LUA_WRITABLE" then local writable = a[1].payload.writable local buffer_mode = a[1].payload.buffer_mode local mode = a[2] local modeString if mode == "NO_BUF" then modeString = "no" else modeString = "full" end writable:setvbuf(modeString) buffer_mode[1] = mode return nil end if a[1].tag == "PRIM_WRITER" then else _raise(_Match, "bin-io.sml:365:9") end do local name = a[1].payload.writer.name local writeVec = a[1].payload.writer.writeVec local buffer_mode = a[1].payload.buffer_mode local buffer = a[1].payload.buffer local mode = a[2] local tmp54 = _L[17](mode, _L[14]) if tmp54 then else buffer_mode[1] = mode return nil end do _L[141](name, writeVec, buffer) buffer_mode[1] = mode return nil end end end _L[145] = function(a) if a.tag == "LUA_WRITABLE" then return a.payload.buffer_mode[1] elseif a.tag == "PRIM_WRITER" then return a.payload.buffer_mode[1] else _raise(_Match, "bin-io.sml:376:9") end end _L[146] = function(a) if a[1].ioDesc.tag == "SOME" then local name = a[1].name local ioDesc = a[1].ioDesc.payload local mode = a[2] local tmp54 = _L[56][ioDesc] return {tag = "LUA_WRITABLE", payload = {buffer_mode = {mode}, name = name, writable = tmp54}} else local w = a[1] local tmp54 = {a[2]} return {tag = "PRIM_WRITER", payload = {buffer = {nil}, buffer_mode = tmp54, writer = w}} end end _L[147] = function(a) if a.tag == "LUA_WRITABLE" then else goto else1 end do local writable = a.payload.writable local buffer_mode = a.payload.buffer_mode local name = a.payload.name writable:flush() local tmp54 do local ioDesc = _L[59](writable) local tmp55 = {tag = "SOME", payload = function(slice) local tmp56 = tmp48(slice) _L[138](writable, name, tmp56) writable:flush() return tmp46(slice) end} local tmp56 = function(a1) _L[60](ioDesc) writable:close() return nil end tmp54 = _L[82]({block = NONE, canOutput = NONE, chunkSize = 1024, close = tmp56, endPos = NONE, getPos = NONE, ioDesc = {tag = "SOME", payload = ioDesc}, name = name, setPos = NONE, verifyPos = NONE, writeArr = NONE, writeArrNB = NONE, writeVec = tmp55, writeVecNB = NONE}) end return {tmp54, buffer_mode[1]} end ::else1:: if a.tag == "PRIM_WRITER" then else _raise(_Match, "bin-io.sml:383:9") end do local writer = a.payload.writer local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec local buffer_mode = a.payload.buffer_mode _L[141](name, writeVec, a.payload.buffer) return {writer, buffer_mode[1]} end end _L[148] = function(a) if a.tag == "LUA_WRITABLE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "getPosOut", name = a.payload.name}}, "bin-io.sml:390:50") end if a.tag == "PRIM_WRITER" then else _raise(_Match, "bin-io.sml:390:9") end do local writer = a.payload.writer local name = a.payload.writer.name local writeVec = a.payload.writer.writeVec local getPos = a.payload.writer.getPos local buffer_mode = a.payload.buffer_mode local buffer = a.payload.buffer if getPos.tag == "SOME" then elseif getPos.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "getPosOut", name = name}}, "bin-io.sml:396:23") else _raise(_Match, "bin-io.sml:392:11") end do local getPos1 = getPos.payload _L[141](name, writeVec, buffer) local tmp54 = getPos1(nil) return {buffer = buffer, buffer_mode = buffer_mode, pos = tmp54, writer = writer} end end end _L[149] = function(a) local writer = a.writer local name = a.writer.name local setPos = a.writer.setPos local buffer_mode = a.buffer_mode local buffer = a.buffer local pos = a.pos if setPos.tag == "SOME" then elseif setPos.tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[12], ["function"] = "setPosOut", name = name}}, "bin-io.sml:402:23") else _raise(_Match, "bin-io.sml:398:11") end do setPos.payload(pos) return {tag = "PRIM_WRITER", payload = {buffer = buffer, buffer_mode = buffer_mode, writer = writer}} end end _L[150] = _L[86](_L[135], _L[136], _L[143], _L[137], _L[127], function(a) return a.pos end, _L[142], _L[145], _L[148], _L[126], _L[147], _L[130], _L[132], _L[134], _L[133], _L[125], _L[146], _L[139], _L[140], _L[144], _L[149]) _L[151] = function(a) local tmp54, tmp55 = tmp7(a, "rb") if tmp54 == nil then else local tmp56 = _L[150].mkInstream return tmp56({{tag = "READABLE", payload = {name = a, readable = tmp54}}}) end do local tmp56 = _Fail(tmp55) _raise({tag = _L[9], payload = {cause = tmp56, ["function"] = "BinIO.openIn", name = a}}, "bin-io.sml:421:26") end end _L[152] = _L[150].closeIn _L[153] = _L[150].inputAll _L[154] = _ENV.arg _Array_array(64, nil) _L[155] = function(a) local status, exn = _handle(function() local tmp54 = _Int_add(a, a) if tmp54 < math_maxinteger then else return a end do return _L[155](tmp54) end end) if not status then if __exn_instanceof(exn, _Overflow_tag) then return a else _raise(exn, nil) end else return exn end end _L[155](65536) _L[156] = _L[39]({256, 0xFF}) _L[45]({_L[156], 9, 0x41}) _L[45]({_L[156], 10, 0x41}) _L[45]({_L[156], 13, 0x41}) _L[45]({_L[156], 32, 0x41}) _L[157] = tmp33(function(a) local i = a[1] local c = a[2] return _L[45]({_L[156], c, i & 0xFF}) end) _L[157]("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/") tmp53({256, function(i) return _L[43]({_L[156], i}) end}) _L[158] = _L[39]({256, 0xFF}) _L[159] = tmp33(function(a) local i = a[1] local c = a[2] return _L[45]({_L[158], c, i & 0xFF}) end) _L[159]("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/") tmp53({256, function(i) return _L[43]({_L[158], i}) end}) tmp50(_list({n = 9, 0x0, 0x1, 0x3, 0x7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF})) tmp50(_list({n = 9, 0xFF, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x0})) do _L[160], _L[161] = _handle(function() _Int_mul(8, _L[42]) return nil end) if not _L[160] then if __exn_instanceof(_L[161], _Overflow_tag) then else _raise(_L[161], nil) end end end do _L[162] = _L[22](2147483646) if _L[162].tag == "ZERO" then elseif _L[162].tag == "POSITIVE" then elseif _L[162].tag == "NEGATIVE" then else _raise(_Match, "int-inf.sml:130:5") end end _L[163] = _L[22](2147483647) do if _L[163].tag == "ZERO" then goto cont2 end if _L[163].tag == "POSITIVE" then else goto else1 end toRealAbs(_L[163].payload) goto cont2 ::else1:: if _L[163].tag == "NEGATIVE" then else _raise(_Match, "int-inf.sml:1082:5") end do _L[164] = toRealAbs(_L[163].payload) end end ::cont2:: _id(32768 * 1.0) _id(32768 * 1.0) _Int_add(3, 48) do _L[165] = 123 & 0x7FFFFFFF if not math_ult(0x1, tmp24) then _L[166] = 0x0 else _L[166] = _L[165] << 0x1 end _L[167], _L[168], _L[169], _L[170] = 48, nil, _L[166] + 0x1, 73256 ::cont5:: do local _L1 = {} _L1[1], _L1[2], _L1[3], _L1[4] = _L[167], _L[168], _L[169], _L[170] if _L1[1] == 0 then goto cont3 end _L1[5], _L1[6], _L1[7], _L1[8] = 31, 0x0, _L1[3], _L1[4] ::cont6:: do local _L2 = {} _L2[1], _L2[2], _L2[3], _L2[4] = _L1[5], _L1[6], _L1[7], _L1[8] if _L2[1] == 0 then _L2[5] = _Int_sub(_L1[1], 1) _L[167] = _L2[5] _L[168] = {_L2[2], _L1[2]} _L[169] = _L2[3] _L[170] = _L2[4] goto cont5 end _L2[6] = _Int_sub(_L2[1], 1) do _L2[8] = 0xBC8F * _Word_mod(_L2[3], 0xADC8) _L2[9] = 0xD47 * ((_L2[3] >> 3) // 5561) if math_ult(_L2[9], _L2[8]) then _L2[7] = _L2[8] - _L2[9] else _L2[7] = 0x7FFFFFFF - _L2[9] + _L2[8] end end if not math_ult(0x12, tmp24) then _L2[10] = 0x0 else _L2[10] = _L2[4] << 0x12 end _L2[11] = _L2[4] ~ _L2[10] if not math_ult(0xD, tmp24) then _L2[12] = 0x0 else _L2[12] = _L2[11] >> 0xD end _L2[13] = _L2[11] ~ _L2[12] if not math_ult(0x1, tmp24) then _L2[14] = 0x0 else _L2[14] = _L2[2] >> 0x1 end _L2[15] = 0x3FFFFFFF & _L2[14] _L1[5] = _L2[6] _L1[6] = _L2[15] | 0x40000000 & (_L2[7] ~ _L2[13]) _L1[7] = _L2[7] _L1[8] = _L2[13] goto cont6 end end end ::cont3:: _L[171] = {"InvalidUtf8"} _L[172] = {tag = _L[171]} _L[173] = "START" _L[174] = "MID_1_OF_3_E0" _L[175] = "MID_1_OF_3_ED" _L[176] = "MID_1_OF_4_F0" _L[177] = "MID_1_OF_4_F4" _L[178] = "TAIL_1" _L[179] = "TAIL_2" _L[180] = "TAIL_3" _L[181] = {tag = "PREFIX_ZERO"} _L[182] = {tag = "INVALID_UNICODE_SCALAR"} _L[183] = {tag = "INVALID_DATE"} _L[184] = {tag = "INVALID_TIME"} _L[185] = function(a) if a == "" then return "\"\"" end local tmp54 = tmp32(function(c) local tmp55 do local tmp56 if 65 <= c and c <= 90 then tmp55 = true goto cont else tmp56 = 97 <= c and c <= 122 end tmp55 = tmp56 or 48 <= c and c <= 57 end ::cont:: return tmp55 or (c == 45 or c == 95) end) local tmp55 = tmp54(a) if tmp55 then return a else return "\"" .. a .. "\"" end end _L[186] = {"ParseError"} _L[187] = function(i, accum) if math_ult(i, 0x80) then if i < 0x0 then _raise(_Overflow, "word-1.sml:52:39") elseif i < 0 then _raise(Chr, "char-1.sml:47:37") elseif i > 255 then _raise(Chr, "char-1.sml:47:37") else return {i, accum} end end if math_ult(i, 0x800) then local tmp54 if not math_ult(0x6, tmp24) then tmp54 = 0x0 else tmp54 = i >> 0x6 end local tmp55 = 0xC0 | tmp54 local tmp56 = 0x80 | i & 0x3F local tmp57 if tmp56 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp57 = tmp56 end local tmp58 if tmp57 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp57 > 255 then _raise(Chr, "char-1.sml:47:37") else tmp58 = tmp57 end if tmp55 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") elseif tmp55 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp55 > 255 then _raise(Chr, "char-1.sml:47:37") else return {tmp58, {tmp55, accum}} end end if math_ult(i, 0x10000) then if not math_ult(i, 0xD800) and math_ult(i, 0xE000) then _raise({tag = _L[186], payload = _L[182]}, "parse_toml_util.sml:33:9") end local tmp54 if not math_ult(0xC, tmp24) then tmp54 = 0x0 else tmp54 = i >> 0xC end local tmp55 = 0xE0 | tmp54 local tmp56 if not math_ult(0x6, tmp24) then tmp56 = 0x0 else tmp56 = i >> 0x6 end local tmp57 = 0x80 | tmp56 & 0x3F local tmp58 = 0x80 | i & 0x3F local tmp59 if tmp58 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp59 = tmp58 end local tmp60 if tmp59 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp59 > 255 then _raise(Chr, "char-1.sml:47:37") else tmp60 = tmp59 end local tmp61 if tmp57 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp61 = tmp57 end local tmp62 if tmp61 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp61 > 255 then _raise(Chr, "char-1.sml:47:37") else tmp62 = tmp61 end local tmp63 if tmp55 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp63 = tmp55 end if tmp63 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp63 > 255 then _raise(Chr, "char-1.sml:47:37") else return {tmp60, {tmp62, {tmp63, accum}}} end end if math_ult(i, 0x110000) then local tmp54, tmp55, tmp56, tmp57 do local tmp58 if not math_ult(0x12, tmp24) then tmp58 = 0x0 else tmp58 = i >> 0x12 end local tmp59 = 0xF0 | tmp58 local tmp60 if not math_ult(0xC, tmp24) then tmp60 = 0x0 else tmp60 = i >> 0xC end local tmp61 = 0x80 | tmp60 & 0x3F local tmp62 if not math_ult(0x6, tmp24) then tmp62 = 0x0 else tmp62 = i >> 0x6 end local tmp63 = 0x80 | tmp62 & 0x3F local tmp64 = 0x80 | i & 0x3F local tmp65 if tmp64 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp65 = tmp64 end if tmp65 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp65 > 255 then _raise(Chr, "char-1.sml:47:37") else tmp54 = tmp65 end local tmp66 if tmp63 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp66 = tmp63 end if tmp66 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp66 > 255 then _raise(Chr, "char-1.sml:47:37") else tmp55 = tmp66 end local tmp67 if tmp61 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp67 = tmp61 end if tmp67 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp67 > 255 then _raise(Chr, "char-1.sml:47:37") else tmp56 = tmp67 end if tmp59 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp57 = tmp59 end end if tmp57 < 0 then _raise(Chr, "char-1.sml:47:37") elseif tmp57 > 255 then _raise(Chr, "char-1.sml:47:37") else return {tmp54, {tmp55, {tmp56, {tmp57, accum}}}} end else _raise({tag = _L[186], payload = _L[182]}, "parse_toml_util.sml:54:7") end end _L[188] = function(a) local tmp54 do local tmp55 = scanString(_L[8]) tmp54 = tmp55(a) end if tmp54.tag == "SOME" then return {tag = "FLOAT", payload = tmp54.payload} elseif tmp54.tag == "NONE" then _raise(Option, "option.sml:24:18") else _raise(_Match, "option.sml:23:5") end end _L[189] = function(x, y) local tmp54 if not math_ult(y, tmp24) then tmp54 = 0x0 else tmp54 = x << y & 0xFFFFFFFF end local tmp55 = 0x20 - y if not math_ult(tmp55, tmp24) then return tmp54 else return tmp54 | x >> tmp55 end end _L[190] = function(a) local tmp54 if not math_ult(0x4, tmp24) then tmp54 = 0x0 else tmp54 = a >> 0x4 end local tmp55 if tmp54 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp55 = sub1({"0123456789abcdef", tmp54}) end local tmp56 = a & 0xF local tmp57 if tmp56 < 0x0 then _raise(_Overflow, "word-1.sml:52:39") else tmp57 = sub1({"0123456789abcdef", tmp56}) end return implode({tmp55, {tmp57, nil}}) end _L[191] = function(a) local content8 do local origLen = tmp51(a) local tmp54 = tmp51(a) local tmp55 = tmp54 % 64 local tmp56 = tmp50({0x80, nil}) local tmp57 if tmp55 < 56 then tmp57 = _Int_sub(63, tmp55) else tmp57 = _Int_sub(127, tmp55) end local tmp58 = tmp53({tmp57, function(a1) return 0x0 end}) local padded = tmp49({a, {tmp56, {tmp58, nil}}}) local paddedLen = tmp51(padded) content8 = _L[44]({paddedLen, function(i) return tmp52({padded, i}) end}) local tmp59 = _Int_sub(paddedLen // 8, 1) local tmp60 = _Int_mul(8, origLen) do local ii do ii = _L[48](content8, tmp59, 8) _L[47]({content8, ii, tmp60 & 0xFF}) local tmp61 = _Int_add(ii, 1) local tmp62 if not math_ult(0x8, tmp24) then tmp62 = 0x0 else tmp62 = tmp60 >> 0x8 end _L[47]({content8, tmp61, tmp62 & 0xFF}) local tmp63 = _Int_add(ii, 2) local tmp64 if not math_ult(0x10, tmp24) then tmp64 = 0x0 else tmp64 = tmp60 >> 0x10 end _L[47]({content8, tmp63, tmp64 & 0xFF}) local tmp65 = _Int_add(ii, 3) local tmp66 if not math_ult(0x18, tmp24) then tmp66 = 0x0 else tmp66 = tmp60 >> 0x18 end _L[47]({content8, tmp65, tmp66 & 0xFF}) local tmp67 = _Int_add(ii, 4) local tmp68 if not math_ult(0x20, tmp24) then tmp68 = 0x0 else tmp68 = tmp60 >> 0x20 end _L[47]({content8, tmp67, tmp68 & 0xFF}) local tmp69 = _Int_add(ii, 5) local tmp70 if not math_ult(0x28, tmp24) then tmp70 = 0x0 else tmp70 = tmp60 >> 0x28 end _L[47]({content8, tmp69, tmp70 & 0xFF}) end local tmp61 = _Int_add(ii, 6) local tmp62 if not math_ult(0x30, tmp24) then tmp62 = 0x0 else tmp62 = tmp60 >> 0x30 end _L[47]({content8, tmp61, tmp62 & 0xFF}) local tmp63 = _Int_add(ii, 7) local tmp64 if not math_ult(0x38, tmp24) then tmp64 = 0x0 else tmp64 = tmp60 >> 0x38 end _L[47]({content8, tmp63, tmp64 & 0xFF}) end end local content32, tmp54, tmp55, tmp56, tmp57, tmp58, tmp59 do local tmp60 = _L[41](content8) local tmp61 = tmp60 // 4 content32 = _VectorOrArray_tabulate({tmp61, function(i) local ii = _L[48](content8, i, 4) local x0 = _L[46]({content8, ii}) local x1 = _L[46]({content8, _Int_add(ii, 1)}) local x2 = _L[46]({content8, _Int_add(ii, 2)}) local x3 = _L[46]({content8, _Int_add(ii, 3)}) local tmp62 if not math_ult(0x18, tmp24) then tmp62 = 0x0 else tmp62 = x3 << 0x18 end local tmp63 if not math_ult(0x10, tmp24) then tmp63 = 0x0 else tmp63 = x2 << 0x10 end local tmp64 = tmp62 | tmp63 local tmp65 if not math_ult(0x8, tmp24) then tmp65 = 0x0 else tmp65 = x1 << 0x8 end return (tmp64 | tmp65 | x0) & 0xFFFFFFFF end}) tmp54 = content32.n // 16 tmp59, tmp58, tmp57, tmp56, tmp55 = 0, 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476 end ::cont:: do local d, c, b, b_PRIME, c_PRIME, d_PRIME, tmp60, tmp61 do local i, a1 i, a1, b, c, d = tmp59, tmp58, tmp57, tmp56, tmp55 if i >= tmp54 then return {a1, b, c, d} end local tmp62 = _Int_mul(i, 16) local X = _L[19](content32, tmp62, {tag = "SOME", payload = 16}) local tmp63 = {a1, b, c, d} local tmp64 do local ABCD, DABC, CDAB, BCDA, tmp65 do ABCD = function(k, t) return function(a2) local a3 = a2[1] local b1 = a2[2] local c1 = a2[3] local d1 = a2[4] local tmp66 = a3 + (b1 & c1 | ~ b1 & 0xFFFFFFFF & d1) & 0xFFFFFFFF local tmp67 do local base = X.base tmp67 = _L[18](base, X.length, X.start, k) end local tmp68 = _L[189]((tmp66 + tmp67 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x7) return {b1 + tmp68 & 0xFFFFFFFF, b1, c1, d1} end end DABC = function(k, t) return function(a2) local b1 = a2[1] local c1 = a2[2] local d1 = a2[3] local a3 = a2[4] local tmp66 = a3 + (b1 & c1 | ~ b1 & 0xFFFFFFFF & d1) & 0xFFFFFFFF local tmp67 do local base = X.base tmp67 = _L[18](base, X.length, X.start, k) end local tmp68 = _L[189]((tmp66 + tmp67 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0xC) return {b1, c1, d1, b1 + tmp68 & 0xFFFFFFFF} end end CDAB = function(k, t) return function(a2) local c1 = a2[1] local d1 = a2[2] local a3 = a2[3] local b1 = a2[4] local tmp66 = a3 + (b1 & c1 | ~ b1 & 0xFFFFFFFF & d1) & 0xFFFFFFFF local tmp67 do local base = X.base tmp67 = _L[18](base, X.length, X.start, k) end local tmp68 = _L[189]((tmp66 + tmp67 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x11) return {c1, d1, b1 + tmp68 & 0xFFFFFFFF, b1} end end BCDA = function(k, t) return function(a2) local d1 = a2[1] local a3 = a2[2] local b1 = a2[3] local c1 = a2[4] local tmp66 = a3 + (b1 & c1 | ~ b1 & 0xFFFFFFFF & d1) & 0xFFFFFFFF local tmp67 do local base = X.base tmp67 = _L[18](base, X.length, X.start, k) end local tmp68 = _L[189]((tmp66 + tmp67 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x16) return {d1, b1 + tmp68 & 0xFFFFFFFF, b1, c1} end end local tmp66 = ABCD(0, 0xD76AA478) local tmp67 = tmp66(tmp63) local tmp68 = DABC(1, 0xE8C7B756) local tmp69 = tmp68(tmp67) local tmp70 = CDAB(2, 0x242070DB) local tmp71 = tmp70(tmp69) local tmp72 = BCDA(3, 0xC1BDCEEE) local tmp73 = tmp72(tmp71) local tmp74 = ABCD(4, 0xF57C0FAF) local tmp75 = tmp74(tmp73) local tmp76 = DABC(5, 0x4787C62A) tmp65 = tmp76(tmp75) end local tmp66 do local tmp67 = CDAB(6, 0xA8304613) local tmp68 = tmp67(tmp65) local tmp69 = BCDA(7, 0xFD469501) local tmp70 = tmp69(tmp68) local tmp71 = ABCD(8, 0x698098D8) local tmp72 = tmp71(tmp70) local tmp73 = DABC(9, 0x8B44F7AF) local tmp74 = tmp73(tmp72) local tmp75 = CDAB(10, 0xFFFF5BB1) local tmp76 = tmp75(tmp74) local tmp77 = BCDA(11, 0x895CD7BE) tmp66 = tmp77(tmp76) end local tmp67 = ABCD(12, 0x6B901122) local tmp68 = tmp67(tmp66) local tmp69 = DABC(13, 0xFD987193) local tmp70 = tmp69(tmp68) local tmp71 = CDAB(14, 0xA679438E) local tmp72 = tmp71(tmp70) local tmp73 = BCDA(15, 0x49B40821) tmp64 = tmp73(tmp72) end local tmp65 do local ABCD, DABC, CDAB, BCDA, tmp66 do ABCD = function(k, t) return function(a2) local a3 = a2[1] local b1 = a2[2] local c1 = a2[3] local d1 = a2[4] local tmp67 = a3 + (b1 & d1 | c1 & (~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp68 do local base = X.base tmp68 = _L[18](base, X.length, X.start, k) end local tmp69 = _L[189]((tmp67 + tmp68 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x5) return {b1 + tmp69 & 0xFFFFFFFF, b1, c1, d1} end end DABC = function(k, t) return function(a2) local b1 = a2[1] local c1 = a2[2] local d1 = a2[3] local a3 = a2[4] local tmp67 = a3 + (b1 & d1 | c1 & (~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp68 do local base = X.base tmp68 = _L[18](base, X.length, X.start, k) end local tmp69 = _L[189]((tmp67 + tmp68 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x9) return {b1, c1, d1, b1 + tmp69 & 0xFFFFFFFF} end end CDAB = function(k, t) return function(a2) local c1 = a2[1] local d1 = a2[2] local a3 = a2[3] local b1 = a2[4] local tmp67 = a3 + (b1 & d1 | c1 & (~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp68 do local base = X.base tmp68 = _L[18](base, X.length, X.start, k) end local tmp69 = _L[189]((tmp67 + tmp68 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0xE) return {c1, d1, b1 + tmp69 & 0xFFFFFFFF, b1} end end BCDA = function(k, t) return function(a2) local d1 = a2[1] local a3 = a2[2] local b1 = a2[3] local c1 = a2[4] local tmp67 = a3 + (b1 & d1 | c1 & (~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp68 do local base = X.base tmp68 = _L[18](base, X.length, X.start, k) end local tmp69 = _L[189]((tmp67 + tmp68 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x14) return {d1, b1 + tmp69 & 0xFFFFFFFF, b1, c1} end end local tmp67 = ABCD(1, 0xF61E2562) local tmp68 = tmp67(tmp64) local tmp69 = DABC(6, 0xC040B340) local tmp70 = tmp69(tmp68) local tmp71 = CDAB(11, 0x265E5A51) local tmp72 = tmp71(tmp70) local tmp73 = BCDA(0, 0xE9B6C7AA) local tmp74 = tmp73(tmp72) local tmp75 = ABCD(5, 0xD62F105D) local tmp76 = tmp75(tmp74) local tmp77 = DABC(10, 0x2441453) tmp66 = tmp77(tmp76) end local tmp67 do local tmp68 = CDAB(15, 0xD8A1E681) local tmp69 = tmp68(tmp66) local tmp70 = BCDA(4, 0xE7D3FBC8) local tmp71 = tmp70(tmp69) local tmp72 = ABCD(9, 0x21E1CDE6) local tmp73 = tmp72(tmp71) local tmp74 = DABC(14, 0xC33707D6) local tmp75 = tmp74(tmp73) local tmp76 = CDAB(3, 0xF4D50D87) local tmp77 = tmp76(tmp75) local tmp78 = BCDA(8, 0x455A14ED) tmp67 = tmp78(tmp77) end local tmp68 = ABCD(13, 0xA9E3E905) local tmp69 = tmp68(tmp67) local tmp70 = DABC(2, 0xFCEFA3F8) local tmp71 = tmp70(tmp69) local tmp72 = CDAB(7, 0x676F02D9) local tmp73 = tmp72(tmp71) local tmp74 = BCDA(12, 0x8D2A4C8A) tmp65 = tmp74(tmp73) end local tmp66 do local ABCD, DABC, CDAB, BCDA, tmp67 do ABCD = function(k, t) return function(a2) local a3 = a2[1] local b1 = a2[2] local c1 = a2[3] local d1 = a2[4] local tmp68 = a3 + (b1 ~ (c1 ~ d1)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x4) return {b1 + tmp70 & 0xFFFFFFFF, b1, c1, d1} end end DABC = function(k, t) return function(a2) local b1 = a2[1] local c1 = a2[2] local d1 = a2[3] local tmp68 = a2[4] + (b1 ~ (c1 ~ d1)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0xB) return {b1, c1, d1, b1 + tmp70 & 0xFFFFFFFF} end end CDAB = function(k, t) return function(a2) local c1 = a2[1] local d1 = a2[2] local a3 = a2[3] local b1 = a2[4] local tmp68 = a3 + (b1 ~ (c1 ~ d1)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x10) return {c1, d1, b1 + tmp70 & 0xFFFFFFFF, b1} end end BCDA = function(k, t) return function(a2) local d1 = a2[1] local a3 = a2[2] local b1 = a2[3] local c1 = a2[4] local tmp68 = a3 + (b1 ~ (c1 ~ d1)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x17) return {d1, b1 + tmp70 & 0xFFFFFFFF, b1, c1} end end local tmp68 = ABCD(5, 0xFFFA3942) local tmp69 = tmp68(tmp65) local tmp70 = DABC(8, 0x8771F681) local tmp71 = tmp70(tmp69) local tmp72 = CDAB(11, 0x6D9D6122) local tmp73 = tmp72(tmp71) local tmp74 = BCDA(14, 0xFDE5380C) local tmp75 = tmp74(tmp73) local tmp76 = ABCD(1, 0xA4BEEA44) local tmp77 = tmp76(tmp75) local tmp78 = DABC(4, 0x4BDECFA9) tmp67 = tmp78(tmp77) end local tmp68 do local tmp69 = CDAB(7, 0xF6BB4B60) local tmp70 = tmp69(tmp67) local tmp71 = BCDA(10, 0xBEBFBC70) local tmp72 = tmp71(tmp70) local tmp73 = ABCD(13, 0x289B7EC6) local tmp74 = tmp73(tmp72) local tmp75 = DABC(0, 0xEAA127FA) local tmp76 = tmp75(tmp74) local tmp77 = CDAB(3, 0xD4EF3085) local tmp78 = tmp77(tmp76) local tmp79 = BCDA(6, 0x4881D05) tmp68 = tmp79(tmp78) end local tmp69 = ABCD(9, 0xD9D4D039) local tmp70 = tmp69(tmp68) local tmp71 = DABC(12, 0xE6DB99E5) local tmp72 = tmp71(tmp70) local tmp73 = CDAB(15, 0x1FA27CF8) local tmp74 = tmp73(tmp72) local tmp75 = BCDA(2, 0xC4AC5665) tmp66 = tmp75(tmp74) end local exp do local ABCD, DABC, CDAB, BCDA, tmp67 do ABCD = function(k, t) return function(a2) local a3 = a2[1] local b1 = a2[2] local c1 = a2[3] local d1 = a2[4] local tmp68 = a3 + (c1 ~ (b1 | ~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x6) return {b1 + tmp70 & 0xFFFFFFFF, b1, c1, d1} end end DABC = function(k, t) return function(a2) local b1 = a2[1] local c1 = a2[2] local d1 = a2[3] local tmp68 = a2[4] + (c1 ~ (b1 | ~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0xA) return {b1, c1, d1, b1 + tmp70 & 0xFFFFFFFF} end end CDAB = function(k, t) return function(a2) local c1 = a2[1] local d1 = a2[2] local a3 = a2[3] local b1 = a2[4] local tmp68 = a3 + (c1 ~ (b1 | ~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0xF) return {c1, d1, b1 + tmp70 & 0xFFFFFFFF, b1} end end BCDA = function(k, t) return function(a2) local d1 = a2[1] local a3 = a2[2] local b1 = a2[3] local c1 = a2[4] local tmp68 = a3 + (c1 ~ (b1 | ~ d1 & 0xFFFFFFFF)) & 0xFFFFFFFF local tmp69 do local base = X.base tmp69 = _L[18](base, X.length, X.start, k) end local tmp70 = _L[189]((tmp68 + tmp69 & 0xFFFFFFFF) + t & 0xFFFFFFFF, 0x15) return {d1, b1 + tmp70 & 0xFFFFFFFF, b1, c1} end end local tmp68 = ABCD(0, 0xF4292244) local tmp69 = tmp68(tmp66) local tmp70 = DABC(7, 0x432AFF97) local tmp71 = tmp70(tmp69) local tmp72 = CDAB(14, 0xAB9423A7) local tmp73 = tmp72(tmp71) local tmp74 = BCDA(5, 0xFC93A039) local tmp75 = tmp74(tmp73) local tmp76 = ABCD(12, 0x655B59C3) local tmp77 = tmp76(tmp75) local tmp78 = DABC(3, 0x8F0CCC92) tmp67 = tmp78(tmp77) end local tmp68 do local tmp69 = CDAB(10, 0xFFEFF47D) local tmp70 = tmp69(tmp67) local tmp71 = BCDA(1, 0x85845DD1) local tmp72 = tmp71(tmp70) local tmp73 = ABCD(8, 0x6FA87E4F) local tmp74 = tmp73(tmp72) local tmp75 = DABC(15, 0xFE2CE6E0) local tmp76 = tmp75(tmp74) local tmp77 = CDAB(6, 0xA3014314) local tmp78 = tmp77(tmp76) local tmp79 = BCDA(13, 0x4E0811A1) tmp68 = tmp79(tmp78) end local tmp69 = ABCD(4, 0xF7537E82) local tmp70 = tmp69(tmp68) local tmp71 = DABC(11, 0xBD3AF235) local tmp72 = tmp71(tmp70) local tmp73 = CDAB(2, 0x2AD7D2BB) local tmp74 = tmp73(tmp72) local tmp75 = BCDA(9, 0xEB86D391) exp = tmp75(tmp74) end local a_PRIME = exp[1] b_PRIME = exp[2] c_PRIME = exp[3] d_PRIME = exp[4] tmp60 = _Int_add(i, 1) tmp61 = a1 + a_PRIME & 0xFFFFFFFF end local tmp62 = b + b_PRIME & 0xFFFFFFFF local tmp63 = c + c_PRIME & 0xFFFFFFFF tmp59 = tmp60 tmp58 = tmp61 tmp57 = tmp62 tmp56 = tmp63 tmp55 = d + d_PRIME & 0xFFFFFFFF goto cont end end _L[192] = function(a) local tmp54 = _L[190](a & 0xFF) local tmp55 if not math_ult(0x8, tmp24) then tmp55 = 0x0 else tmp55 = a >> 0x8 end local tmp56 = _L[190](tmp55 & 0xFF) local tmp57 if not math_ult(0x10, tmp24) then tmp57 = 0x0 else tmp57 = a >> 0x10 end local tmp58 = _L[190](tmp57 & 0xFF) local tmp59 if not math_ult(0x18, tmp24) then tmp59 = 0x0 else tmp59 = a >> 0x18 end local tmp60 = _L[190](tmp59) return table_concat({n = 4, tmp54, tmp56, tmp58, tmp60}) end _L[193] = function(a, b, c, d) local tmp54 = _L[192](a) local tmp55 = _L[192](b) local tmp56 = tmp54 .. tmp55 local tmp57 = _L[192](c) local tmp58 = tmp56 .. tmp57 local tmp59 = _L[192](d) return tmp58 .. tmp59 end _L[194] = "R" _L[195] = "B" _L[196] = {tag = "E"} _L[197] = {0, _L[196]} _L[198] = function(tmp54, x) local nItems = tmp54[1] local m = tmp54[2] local tmp55 = {nItems} local function ins(a) if a.tag == "E" then tmp55[1] = _Int_add(nItems, 1) return {tag = "T", payload = {_L[194], _L[196], x, _L[196]}} end if a.tag == "T" then else _raise(_Match, "redblack-set-fn.sml:64:8") end do local color = a.payload[1] local a1 = a.payload[2] local y = a.payload[3] local b = a.payload[4] local exp if x == y then exp = EQUAL elseif x < y then exp = LESS else exp = GREATER end if exp == "LESS" then else goto else1 end do if a1.tag == "T" and a1.payload[1] == "R" then else goto else2 end do local c = a1.payload[2] local z = a1.payload[3] local d = a1.payload[4] local exp1 if x == z then exp1 = EQUAL elseif x < z then exp1 = LESS else exp1 = GREATER end if exp1 == "LESS" then else goto else3 end do local exp2 = ins(c) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local w = exp2.payload[3] local tmp56 = {tag = "T", payload = {_L[195], e, w, exp2.payload[4]}} return {tag = "T", payload = {_L[194], tmp56, z, {tag = "T", payload = {_L[195], d, y, b}}}} else return {tag = "T", payload = {_L[195], {tag = "T", payload = {_L[194], exp2, z, d}}, y, b}} end end ::else3:: if exp1 == "EQUAL" then return {tag = "T", payload = {color, {tag = "T", payload = {_L[194], c, x, d}}, y, b}} end if exp1 == "GREATER" then else _raise(_Match, "redblack-set-fn.sml:67:31") end do local exp2 = ins(d) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local w = exp2.payload[3] local f = exp2.payload[4] local tmp56 = {tag = "T", payload = {_L[195], c, z, e}} return {tag = "T", payload = {_L[194], tmp56, w, {tag = "T", payload = {_L[195], f, y, b}}}} else return {tag = "T", payload = {_L[195], {tag = "T", payload = {_L[194], c, z, exp2}}, y, b}} end end end ::else2:: local tmp56 = ins(a1) return {tag = "T", payload = {_L[195], tmp56, y, b}} end ::else1:: if exp == "EQUAL" then return {tag = "T", payload = {color, a1, x, b}} end if exp == "GREATER" then else _raise(_Match, "redblack-set-fn.sml:65:47") end do if b.tag == "T" and b.payload[1] == "R" then else goto else2 end do local c = b.payload[2] local z = b.payload[3] local d = b.payload[4] local exp1 if x == z then exp1 = EQUAL elseif x < z then exp1 = LESS else exp1 = GREATER end if exp1 == "LESS" then else goto else3 end do local exp2 = ins(c) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local w = exp2.payload[3] local f = exp2.payload[4] local tmp56 = {tag = "T", payload = {_L[195], a1, y, e}} return {tag = "T", payload = {_L[194], tmp56, w, {tag = "T", payload = {_L[195], f, z, d}}}} else return {tag = "T", payload = {_L[195], a1, y, {tag = "T", payload = {_L[194], exp2, z, d}}}} end end ::else3:: if exp1 == "EQUAL" then return {tag = "T", payload = {color, a1, y, {tag = "T", payload = {_L[194], c, x, d}}}} end if exp1 == "GREATER" then else _raise(_Match, "redblack-set-fn.sml:82:31") end do local exp2 = ins(d) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local w = exp2.payload[3] local f = exp2.payload[4] local tmp56 = {tag = "T", payload = {_L[195], a1, y, c}} return {tag = "T", payload = {_L[194], tmp56, z, {tag = "T", payload = {_L[195], e, w, f}}}} else return {tag = "T", payload = {_L[195], a1, y, {tag = "T", payload = {_L[194], c, z, exp2}}}} end end end ::else2:: local tmp56 = ins(b) return {tag = "T", payload = {_L[195], a1, y, tmp56}} end end end local exp = ins(m) if exp.tag == "T" then local a = exp.payload[2] local y = exp.payload[3] local b = exp.payload[4] local x1 = tmp55[1] return {x1, {tag = "T", payload = {_L[195], a, y, b}}} else _raise(_Bind, "redblack-set-fn.sml:96:8") end end _L[199] = function(tmp54, k) local tmp55 = tmp54[2] ::cont:: do local a = tmp55 if a.tag == "E" then return false end if a.tag == "T" then local a1 = a.payload[2] local y = a.payload[3] local b = a.payload[4] local exp if k == y then exp = EQUAL elseif k < y then exp = LESS else exp = GREATER end if exp == "LESS" then tmp55 = a1 goto cont elseif exp == "EQUAL" then return true elseif exp == "GREATER" then tmp55 = b goto cont else _raise(_Match, "redblack-set-fn.sml:226:33") end else _raise(_Match, "redblack-set-fn.sml:225:8") end end end _L[200] = "R" _L[201] = "B" _L[202] = {tag = "E"} _L[203] = {0, _L[202]} _L[204] = function(tmp54, xk, x) local nItems = tmp54[1] local m = tmp54[2] local tmp55 = {nItems} local function ins(a) if a.tag == "E" then tmp55[1] = _Int_add(nItems, 1) return {tag = "T", payload = {_L[200], _L[202], xk, x, _L[202]}} end if a.tag == "T" then else _raise(_Match, "redblack-map-fn.sml:46:8") end do local color = a.payload[1] local a1 = a.payload[2] local yk = a.payload[3] local y = a.payload[4] local b = a.payload[5] local exp if xk == yk then exp = EQUAL elseif xk < yk then exp = LESS else exp = GREATER end if exp == "LESS" then else goto else1 end do if a1.tag == "T" and a1.payload[1] == "R" then else goto else2 end do local c = a1.payload[2] local zk = a1.payload[3] local z = a1.payload[4] local d = a1.payload[5] local exp1 if xk == zk then exp1 = EQUAL elseif xk < zk then exp1 = LESS else exp1 = GREATER end if exp1 == "LESS" then else goto else3 end do local exp2 = ins(c) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local wk = exp2.payload[3] local w = exp2.payload[4] local tmp56 = {tag = "T", payload = {_L[201], e, wk, w, exp2.payload[5]}} return {tag = "T", payload = {_L[200], tmp56, zk, z, {tag = "T", payload = {_L[201], d, yk, y, b}}}} else return {tag = "T", payload = {_L[201], {tag = "T", payload = {_L[200], exp2, zk, z, d}}, yk, y, b}} end end ::else3:: if exp1 == "EQUAL" then return {tag = "T", payload = {color, {tag = "T", payload = {_L[200], c, xk, x, d}}, yk, y, b}} end if exp1 == "GREATER" then else _raise(_Match, "redblack-map-fn.sml:49:35") end do local exp2 = ins(d) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local wk = exp2.payload[3] local w = exp2.payload[4] local f = exp2.payload[5] local tmp56 = {tag = "T", payload = {_L[201], c, zk, z, e}} return {tag = "T", payload = {_L[200], tmp56, wk, w, {tag = "T", payload = {_L[201], f, yk, y, b}}}} else return {tag = "T", payload = {_L[201], {tag = "T", payload = {_L[200], c, zk, z, exp2}}, yk, y, b}} end end end ::else2:: local tmp56 = ins(a1) return {tag = "T", payload = {_L[201], tmp56, yk, y, b}} end ::else1:: if exp == "EQUAL" then return {tag = "T", payload = {color, a1, xk, x, b}} end if exp == "GREATER" then else _raise(_Match, "redblack-map-fn.sml:47:51") end do if b.tag == "T" and b.payload[1] == "R" then else goto else2 end do local c = b.payload[2] local zk = b.payload[3] local z = b.payload[4] local d = b.payload[5] local exp1 if xk == zk then exp1 = EQUAL elseif xk < zk then exp1 = LESS else exp1 = GREATER end if exp1 == "LESS" then else goto else3 end do local exp2 = ins(c) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local wk = exp2.payload[3] local w = exp2.payload[4] local f = exp2.payload[5] local tmp56 = {tag = "T", payload = {_L[201], a1, yk, y, e}} return {tag = "T", payload = {_L[200], tmp56, wk, w, {tag = "T", payload = {_L[201], f, zk, z, d}}}} else return {tag = "T", payload = {_L[201], a1, yk, y, {tag = "T", payload = {_L[200], exp2, zk, z, d}}}} end end ::else3:: if exp1 == "EQUAL" then return {tag = "T", payload = {color, a1, yk, y, {tag = "T", payload = {_L[200], c, xk, x, d}}}} end if exp1 == "GREATER" then else _raise(_Match, "redblack-map-fn.sml:66:35") end do local exp2 = ins(d) if exp2.tag == "T" and exp2.payload[1] == "R" then local e = exp2.payload[2] local wk = exp2.payload[3] local w = exp2.payload[4] local f = exp2.payload[5] local tmp56 = {tag = "T", payload = {_L[201], a1, yk, y, c}} return {tag = "T", payload = {_L[200], tmp56, zk, z, {tag = "T", payload = {_L[201], e, wk, w, f}}}} else return {tag = "T", payload = {_L[201], a1, yk, y, {tag = "T", payload = {_L[200], c, zk, z, exp2}}}} end end end ::else2:: local tmp56 = ins(b) return {tag = "T", payload = {_L[201], a1, yk, y, tmp56}} end end end local exp = ins(m) local a, b, y, yk if exp.tag == "T" then local a1 = exp.payload[2] local yk1 = exp.payload[3] local y1 = exp.payload[4] yk = yk1 y = y1 b = exp.payload[5] a = a1 else _raise(_Bind, "redblack-map-fn.sml:82:8") end local x1 = tmp55[1] return {x1, {tag = "T", payload = {_L[201], a, yk, y, b}}} end _L[205] = function(tmp54, k) local tmp55 = tmp54[2] ::cont:: do local a = tmp55 if a.tag == "E" then return NONE end if a.tag == "T" then local a1 = a.payload[2] local yk = a.payload[3] local y = a.payload[4] local b = a.payload[5] local exp if k == yk then exp = EQUAL elseif k < yk then exp = LESS else exp = GREATER end if exp == "LESS" then tmp55 = a1 goto cont elseif exp == "EQUAL" then return {tag = "SOME", payload = y} elseif exp == "GREATER" then tmp55 = b goto cont else _raise(_Match, "redblack-map-fn.sml:155:37") end else _raise(_Match, "redblack-map-fn.sml:154:8") end end end _L[206] = function(a) local function mapf(a1) if a1.tag == "E" then return _L[202] end if a1.tag == "T" then else _raise(_Match, "redblack-map-fn.sml:551:8") end do local color = a1.payload[1] local a2 = a1.payload[2] local xk = a1.payload[3] local x = a1.payload[4] local b = a1.payload[5] local tmp54 = mapf(a2) local tmp55 = a(x) local tmp56 = mapf(b) return {tag = "T", payload = {color, tmp54, xk, tmp55, tmp56}} end end return function(a1) local n = a1[1] local tmp54 = mapf(a1[2]) return {n, tmp54} end end _L[207] = tmp3("texrunner.shellutil") _L[208] = _L[207].escape _L[209] = _L[207].has_command _L[210] = tmp3("texrunner.pathutil") _L[211] = _L[210].basename _L[212] = _L[210].dirname _L[213] = _L[210].trimext _L[214] = _L[210].ext _L[215] = function(cwd, path) if cwd.tag == "SOME" then local cwd1 = cwd.payload return _L[210].abspath(path, cwd1) elseif cwd.tag == "NONE" then return _L[210].abspath(path) else _raise(_Match, "path-util.sml:22:7") end end _L[216] = tmp3("lfs") _L[217] = tmp3("texrunner.fsutil") _L[218] = _L[217].isfile _L[219] = _L[217].isdir _L[220] = tmp1.type == "windows" _L[221] = tmp1.setenv _L[222] = "BATCHMODE" _L[223] = "NONSTOPMODE" _L[224] = "SCROLLMODE" _L[225] = "ERRORSTOPMODE" _L[226] = "ALLOWED" _L[227] = "RESTRICTED" _L[228] = "FORBIDDEN" _L[229] = function(p) return p[1] == "ALLOWED" and p[2] == "ALLOWED" or (p[1] == "RESTRICTED" and p[2] == "RESTRICTED" or p[1] == "FORBIDDEN" and p[2] == "FORBIDDEN") end _L[230] = "PDF" _L[231] = "DVI" _L[232] = function(tmp54, tmp55) return tmp54 == "PDF" and tmp55 == "PDF" or tmp54 == "DVI" and tmp55 == "DVI" end _L[233] = "PDFTEX" _L[234] = "XETEX" _L[235] = "LUATEX" _L[236] = "OTHER" _L[237] = function(tmp54, tmp55) return tmp54 == "PDFTEX" and tmp55 == "PDFTEX" or (tmp54 == "XETEX" and tmp55 == "XETEX" or (tmp54 == "LUATEX" and tmp55 == "LUATEX" or tmp54 == "OTHER" and tmp55 == "OTHER")) end _L[238] = {dvi_extension = "dvi", engine_type = _L[233], executable = "pdftex", name = "pdftex", supports_draftmode = true, supports_pdf_generation = true} _L[239] = {dvi_extension = "dvi", engine_type = _L[233], executable = "pdflatex", name = "pdflatex", supports_draftmode = true, supports_pdf_generation = true} _L[240] = {dvi_extension = "dvi", engine_type = _L[235], executable = "luatex", name = "luatex", supports_draftmode = true, supports_pdf_generation = true} _L[241] = {dvi_extension = "dvi", engine_type = _L[235], executable = "lualatex", name = "lualatex", supports_draftmode = true, supports_pdf_generation = true} _L[242] = {dvi_extension = "dvi", engine_type = _L[235], executable = "luajittex", name = "luajittex", supports_draftmode = true, supports_pdf_generation = true} _L[243] = {dvi_extension = "xdv", engine_type = _L[234], executable = "xetex", name = "xetex", supports_draftmode = true, supports_pdf_generation = true} _L[244] = {dvi_extension = "xdv", engine_type = _L[234], executable = "xelatex", name = "xelatex", supports_draftmode = true, supports_pdf_generation = true} _L[245] = {dvi_extension = "dvi", engine_type = _L[236], executable = "tex", name = "tex", supports_draftmode = false, supports_pdf_generation = false} _L[246] = {dvi_extension = "dvi", engine_type = _L[236], executable = "etex", name = "etex", supports_draftmode = false, supports_pdf_generation = false} _L[247] = {dvi_extension = "dvi", engine_type = _L[236], executable = "latex", name = "latex", supports_draftmode = false, supports_pdf_generation = false} _L[248] = {dvi_extension = "dvi", engine_type = _L[236], executable = "ptex", name = "ptex", supports_draftmode = false, supports_pdf_generation = false} _L[249] = {dvi_extension = "dvi", engine_type = _L[236], executable = "eptex", name = "eptex", supports_draftmode = false, supports_pdf_generation = false} _L[250] = {dvi_extension = "dvi", engine_type = _L[236], executable = "platex", name = "platex", supports_draftmode = false, supports_pdf_generation = false} _L[251] = {dvi_extension = "dvi", engine_type = _L[236], executable = "uptex", name = "uptex", supports_draftmode = false, supports_pdf_generation = false} _L[252] = {dvi_extension = "dvi", engine_type = _L[236], executable = "euptex", name = "euptex", supports_draftmode = false, supports_pdf_generation = false} _L[253] = {dvi_extension = "dvi", engine_type = _L[236], executable = "uplatex", name = "uplatex", supports_draftmode = false, supports_pdf_generation = false} _L[254] = function(a) if a == "pdftex" then return {tag = "SOME", payload = _L[238]} elseif a == "pdflatex" then return {tag = "SOME", payload = _L[239]} elseif a == "luatex" then return {tag = "SOME", payload = _L[240]} elseif a == "lualatex" then return {tag = "SOME", payload = _L[241]} elseif a == "luajittex" then return {tag = "SOME", payload = _L[242]} elseif a == "xetex" then return {tag = "SOME", payload = _L[243]} elseif a == "xelatex" then return {tag = "SOME", payload = _L[244]} elseif a == "tex" then return {tag = "SOME", payload = _L[245]} elseif a == "etex" then return {tag = "SOME", payload = _L[246]} elseif a == "latex" then return {tag = "SOME", payload = _L[247]} elseif a == "ptex" then return {tag = "SOME", payload = _L[248]} elseif a == "eptex" then return {tag = "SOME", payload = _L[249]} elseif a == "platex" then return {tag = "SOME", payload = _L[250]} elseif a == "uptex" then return {tag = "SOME", payload = _L[251]} elseif a == "euptex" then return {tag = "SOME", payload = _L[252]} elseif a == "uplatex" then return {tag = "SOME", payload = _L[253]} else return NONE end end _L[255] = "DEFAULT" _L[256] = "BLACK" _L[257] = "RED" _L[258] = "GREEN" _L[259] = "YELLOW" _L[260] = "BLUE" _L[261] = "MAGENTA" _L[262] = "CYAN" _L[263] = "WHITE" _L[264] = "BRIGHT_BLACK" _L[265] = "BRIGHT_RED" _L[266] = "BRIGHT_GREEN" _L[267] = "BRIGHT_YELLOW" _L[268] = "BRIGHT_BLUE" _L[269] = "BRIGHT_MAGENTA" _L[270] = "BRIGHT_CYAN" _L[271] = "BRIGHT_WHITE" _L[272] = function(a) if a == "DEFAULT" then return NONE elseif a == "BLACK" then return {tag = "SOME", payload = "30"} elseif a == "RED" then return {tag = "SOME", payload = "31"} elseif a == "GREEN" then return {tag = "SOME", payload = "32"} elseif a == "YELLOW" then return {tag = "SOME", payload = "33"} elseif a == "BLUE" then return {tag = "SOME", payload = "34"} elseif a == "MAGENTA" then return {tag = "SOME", payload = "35"} elseif a == "CYAN" then return {tag = "SOME", payload = "36"} elseif a == "WHITE" then return {tag = "SOME", payload = "37"} elseif a == "BRIGHT_BLACK" then return {tag = "SOME", payload = "90"} elseif a == "BRIGHT_RED" then return {tag = "SOME", payload = "91"} elseif a == "BRIGHT_GREEN" then return {tag = "SOME", payload = "92"} elseif a == "BRIGHT_YELLOW" then return {tag = "SOME", payload = "93"} elseif a == "BRIGHT_BLUE" then return {tag = "SOME", payload = "94"} elseif a == "BRIGHT_MAGENTA" then return {tag = "SOME", payload = "95"} elseif a == "BRIGHT_CYAN" then return {tag = "SOME", payload = "96"} elseif a == "BRIGHT_WHITE" then return {tag = "SOME", payload = "97"} else _raise(_Match, "ansi-color.sml:62:7") end end _L[273] = function(a) if a == "DEFAULT" then return NONE elseif a == "BLACK" then return {tag = "SOME", payload = "40"} elseif a == "RED" then return {tag = "SOME", payload = "41"} elseif a == "GREEN" then return {tag = "SOME", payload = "42"} elseif a == "YELLOW" then return {tag = "SOME", payload = "43"} elseif a == "BLUE" then return {tag = "SOME", payload = "44"} elseif a == "MAGENTA" then return {tag = "SOME", payload = "45"} elseif a == "CYAN" then return {tag = "SOME", payload = "46"} elseif a == "WHITE" then return {tag = "SOME", payload = "47"} elseif a == "BRIGHT_BLACK" then return {tag = "SOME", payload = "100"} elseif a == "BRIGHT_RED" then return {tag = "SOME", payload = "101"} elseif a == "BRIGHT_GREEN" then return {tag = "SOME", payload = "102"} elseif a == "BRIGHT_YELLOW" then return {tag = "SOME", payload = "103"} elseif a == "BRIGHT_BLUE" then return {tag = "SOME", payload = "104"} elseif a == "BRIGHT_MAGENTA" then return {tag = "SOME", payload = "105"} elseif a == "BRIGHT_CYAN" then return {tag = "SOME", payload = "106"} elseif a == "BRIGHT_WHITE" then return {tag = "SOME", payload = "107"} else _raise(_Match, "ansi-color.sml:79:7") end end _L[274] = function(tmp54, xs) if tmp54.tag == "SOME" then return {tmp54.payload, xs} elseif tmp54.tag == "NONE" then return xs else _raise(_Match, "ansi-color.sml:137:7") end end _L[275] = function(background, blink, bold, dim, foreground, italic, reverse, strike, underline) local attrs, tmp54 do local attrs1 if strike then attrs1 = {"9", nil} else attrs1 = nil end local attrs2 if reverse then attrs2 = {"7", attrs1} else attrs2 = attrs1 end local attrs3 if blink then attrs3 = {"5", attrs2} else attrs3 = attrs2 end local attrs4 if underline then attrs4 = {"4", attrs3} else attrs4 = attrs3 end local attrs5 if italic then attrs5 = {"3", attrs4} else attrs5 = attrs4 end local attrs6 if dim then attrs6 = {"2", attrs5} else attrs6 = attrs5 end local attrs7 if bold then attrs7 = {"1", attrs6} else attrs7 = attrs6 end local tmp55 = mapPartial(_L[273]) local tmp56 = tmp55(background) attrs = _L[274](tmp56, attrs7) local tmp57 = mapPartial(_L[272]) tmp54 = tmp57(foreground) end local attrs1 = _L[274](tmp54, attrs) return "\x1B[" .. table_concat(_VectorOrArray_fromList(attrs1), ";") .. "m" end _ENV.CLUTTEX_VERBOSITY = 0 _L[276] = "ALWAYS" _L[277] = "AUTO" _L[278] = "NEVER" _L[279] = {false} _L[280] = function(a) if a == "ALWAYS" then else goto else1 end do local tmp54 = tmp3("texrunner.isatty").enable_virtual_terminal local tmp55 = _ENV.io.stderr _L[279][1] = true if not not tmp54 then else return nil end do if not tmp54(tmp55) and _ENV.CLUTTEX_VERBOSITY >= 2 then else return nil end do return _L[124]({_L[118], "ClutTeX: Failed to enable virtual terminal\n"}) end end end ::else1:: if a == "AUTO" then elseif a == "NEVER" then _L[279][1] = false return nil else _raise(_Match, "message.sml:26:5") end do local tmp54 = tmp3("texrunner.isatty") local tmp55 = tmp54.enable_virtual_terminal local tmp56 = _ENV.io.stderr local tmp57 = not not tmp54.isatty(tmp56) _L[279][1] = tmp57 local tmp58 tmp58 = tmp57 and not not tmp55 if tmp58 then else return nil end do local tmp59 = tmp55(tmp56) _L[279][1] = tmp59 if not tmp59 and _ENV.CLUTTEX_VERBOSITY >= 2 then else return nil end do return _L[124]({_L[118], "ClutTeX: Failed to enable virtual terminal\n"}) end end end end _L[281] = {tag = "SOME", payload = _L[271]} _L[282] = _L[275]({tag = "SOME", payload = _L[257]}, false, false, false, _L[281], false, false, false, false) _L[283] = {_L[282]} _L[284] = _L[275](NONE, false, false, false, {tag = "SOME", payload = _L[262]}, false, false, false, false) _L[285] = {_L[284]} _L[286] = _L[275](NONE, false, false, false, {tag = "SOME", payload = _L[257]}, false, false, false, false) _L[287] = {_L[286]} _L[288] = _L[275](NONE, false, false, false, {tag = "SOME", payload = _L[260]}, false, false, false, false) _L[289] = {_L[288]} _L[290] = _L[275](NONE, false, false, false, {tag = "SOME", payload = _L[260]}, false, false, false, false) _L[291] = {_L[290]} _L[292] = _L[275](NONE, false, false, false, {tag = "SOME", payload = _L[261]}, false, false, false, false) _L[293] = {_L[292]} _L[294] = function(a) local tmp54 do local background = a.background local blink = a.blink local bold = a.bold local dim = a.dim local foreground = a.foreground local italic = a.italic local reverse = a.reverse local strike = a.strike tmp54 = _L[275](background, blink, bold, dim, foreground, italic, reverse, strike, a.underline) end _L[283][1] = tmp54 return nil end _L[295] = function(a) local tmp54 do local background = a.background local blink = a.blink local bold = a.bold local dim = a.dim local foreground = a.foreground local italic = a.italic local reverse = a.reverse local strike = a.strike tmp54 = _L[275](background, blink, bold, dim, foreground, italic, reverse, strike, a.underline) end _L[285][1] = tmp54 return nil end _L[296] = function(a) local tmp54 do local background = a.background local blink = a.blink local bold = a.bold local dim = a.dim local foreground = a.foreground local italic = a.italic local reverse = a.reverse local strike = a.strike tmp54 = _L[275](background, blink, bold, dim, foreground, italic, reverse, strike, a.underline) end _L[287][1] = tmp54 return nil end _L[297] = function(a) local tmp54 do local background = a.background local blink = a.blink local bold = a.bold local dim = a.dim local foreground = a.foreground local italic = a.italic local reverse = a.reverse local strike = a.strike tmp54 = _L[275](background, blink, bold, dim, foreground, italic, reverse, strike, a.underline) end _L[289][1] = tmp54 return nil end _L[298] = function(a) local tmp54 do local background = a.background local blink = a.blink local bold = a.bold local dim = a.dim local foreground = a.foreground local italic = a.italic local reverse = a.reverse local strike = a.strike tmp54 = _L[275](background, blink, bold, dim, foreground, italic, reverse, strike, a.underline) end _L[291][1] = tmp54 return nil end _L[299] = function(a) local tmp54 do local background = a.background local blink = a.blink local bold = a.bold local dim = a.dim local foreground = a.foreground local italic = a.italic local reverse = a.reverse local strike = a.strike tmp54 = _L[275](background, blink, bold, dim, foreground, italic, reverse, strike, a.underline) end _L[293][1] = tmp54 return nil end _L[300] = function(a) if _L[279][1] then else return _L[124]({_L[118], "[EXEC] " .. a .. "\n"}) end do local tmp54 = _L[283][1] .. "[EXEC]" .. "\x1B[0m" .. " " return _L[124]({_L[118], tmp54 .. _L[285][1] .. a .. "\x1B[0m" .. "\n"}) end end _L[301] = function(a) if _L[279][1] then else return _L[124]({_L[118], "[ERROR] " .. a .. "\n"}) end do local tmp54 = _L[283][1] .. "[ERROR]" .. "\x1B[0m" .. " " return _L[124]({_L[118], tmp54 .. _L[287][1] .. a .. "\x1B[0m" .. "\n"}) end end _L[302] = function(a) if _L[279][1] then else return _L[124]({_L[118], "[WARN] " .. a .. "\n"}) end do local tmp54 = _L[283][1] .. "[WARN]" .. "\x1B[0m" .. " " return _L[124]({_L[118], tmp54 .. _L[289][1] .. a .. "\x1B[0m" .. "\n"}) end end _L[303] = function(a) if _L[279][1] then else return _L[124]({_L[118], "[DIAG] " .. a .. "\n"}) end do local tmp54 = _L[283][1] .. "[DIAG]" .. "\x1B[0m" .. " " return _L[124]({_L[118], tmp54 .. _L[291][1] .. a .. "\x1B[0m" .. "\n"}) end end _L[304] = function(a) if _L[279][1] then else return _L[124]({_L[118], "[INFO] " .. a .. "\n"}) end do local tmp54 = _L[283][1] .. "[INFO]" .. "\x1B[0m" .. " " return _L[124]({_L[118], tmp54 .. _L[293][1] .. a .. "\x1B[0m" .. "\n"}) end end _L[305] = "DVIPDFMX" _L[306] = "DVIPS" _L[307] = "DVISVGM" _L[308] = "PDFTEX" _L[309] = "XETEX" _L[310] = "LUATEX" _L[311] = "DVIPDFMX" _L[312] = "DVIPS" _L[313] = "DVISVGM" _L[314] = "PDFTEX" _L[315] = "XETEX" _L[316] = "LUATEX" _L[317] = "UNKNOWN" _L[318] = function(a) if a == "DVIPDFMX" then return "dvipdfmx" elseif a == "DVIPS" then return "dvips" elseif a == "DVISVGM" then return "dvisvgm" elseif a == "PDFTEX" then return "pdftex" elseif a == "XETEX" then return "xetex" elseif a == "LUATEX" then return "luatex" elseif a == "UNKNOWN" then return "unknown" else _raise(_Match, "check-driver.sml:24:9") end end _L[319] = "PDFMODE" _L[320] = "DVISVGM" _L[321] = "XDVIPDFMX" _L[322] = "DVIPDFMX" _L[323] = "DVIPS" _L[324] = "PDFTEX" _L[325] = "LUATEX" _L[326] = "XETEX" _L[327] = "UNKNOWN" _L[328] = function(tmp54, tmp55) return tmp54 == "PDFMODE" and tmp55 == "PDFMODE" or (tmp54 == "DVISVGM" and tmp55 == "DVISVGM" or (tmp54 == "XDVIPDFMX" and tmp55 == "XDVIPDFMX" or (tmp54 == "DVIPDFMX" and tmp55 == "DVIPDFMX" or (tmp54 == "DVIPS" and tmp55 == "DVIPS" or (tmp54 == "PDFTEX" and tmp55 == "PDFTEX" or (tmp54 == "LUATEX" and tmp55 == "LUATEX" or (tmp54 == "XETEX" and tmp55 == "XETEX" or tmp54 == "UNKNOWN" and tmp55 == "UNKNOWN"))))))) end _L[329] = function(a) if a == "PDFMODE" then return "pdfmode" elseif a == "DVISVGM" then return "dvisvgm" elseif a == "XDVIPDFMX" then return "xdvipdfmx" elseif a == "DVIPDFMX" then return "dvipdfmx" elseif a == "DVIPS" then return "dvips" elseif a == "PDFTEX" then return "pdftex" elseif a == "LUATEX" then return "luatex" elseif a == "XETEX" then return "xetex" elseif a == "UNKNOWN" then return "unknown" else _raise(_Match, "check-driver.sml:44:9") end end _L[330] = "DVIPDFMX" _L[331] = "DVIPS" _L[332] = "PDFTEX" _L[333] = "LUATEX" _L[334] = "XETEX" _L[335] = "UNKNOWN" _L[336] = function(a) if a == "DVIPDFMX" then return "dvipdfmx" elseif a == "DVIPS" then return "dvips" elseif a == "PDFTEX" then return "pdftex" elseif a == "LUATEX" then return "luatex" elseif a == "XETEX" then return "xetex" elseif a == "UNKNOWN" then return "unknown" else _raise(_Match, "check-driver.sml:57:9") end end _L[337] = "PDF" _L[338] = "DVIPS" _L[339] = "UNKNOWN" _L[340] = "DVIPDFMX" _L[341] = "DVIPS" _L[342] = "DVISVGM" _L[343] = "FSWATCH" _L[344] = "INOTIFYWAIT" _L[345] = "AUTO" _L[346] = function(tmp54, tmp55) return tmp54 == "FSWATCH" and tmp55 == "FSWATCH" or (tmp54 == "INOTIFYWAIT" and tmp55 == "INOTIFYWAIT" or tmp54 == "AUTO" and tmp55 == "AUTO") end _L[347] = {tag = "NOW"} _L[348] = function(p) if p[1].tag == "NOW" and p[2].tag == "NOW" then return true elseif p[1].tag == "RAW" and p[2].tag == "RAW" then local a = p[1].payload return a == p[2].payload else return false end end _L[349] = {bibtex_or_biber = NONE, change_directory = NONE, check_driver = NONE, color = NONE, config_file = NONE, dvipdfmx_extraoptions = nil, engine = NONE, engine_executable = NONE, file_line_error = true, fmt = NONE, fresh = false, halt_on_error = true, includeonly = NONE, interaction = NONE, jobname = NONE, make_depends = NONE, makeglossaries = NONE, makeindex = NONE, max_iterations = NONE, output = NONE, output_directory = NONE, output_format = NONE, package_support = {epstopdf = false, minted = false, pdfx = false}, print_output_directory = false, shell_escape = NONE, source_date_epoch = NONE, start_with_draft = false, synctex = NONE, tex_extraoptions = nil, watch = NONE} _L[350] = function(a) return function(a1) local tmp54 = isPrefix(a) local tmp55 = tmp54(a1) if tmp55 then else return NONE end do local tmp56 = extract1({a1, #a, NONE}) return {tag = "SOME", payload = tmp56} end end end _L[351] = function(line, outdir) local tmp54 = _L[350]("\\@input{") local exp = tmp54(line) if exp.tag == "NONE" then return NONE end if exp.tag == "SOME" then else _raise(_Match, "auxfile.sml:15:5") end do local rest = exp.payload local tmp55 = splitl(function(c) return c ~= 125 end) local tmp56 = tmp55(rest) local subauxfile = string1(tmp56[1]) local subauxfile_abs = _L[215]({tag = "SOME", payload = outdir}, subauxfile) return {tag = "SOME", payload = {subauxfile = subauxfile, subauxfile_abs = subauxfile_abs}} end end _L[352] = function(auxfile, outdir, seen) local ins, tmp54, tmp55 do ins = _L[115](auxfile) local seen1 = _L[198](seen, auxfile) tmp55, tmp54 = false, seen1 end ::cont:: do local did, seen1 = tmp55, tmp54 local exp = _L[114](ins) if exp.tag == "NONE" then else goto else1 end do _L[120](ins) return {did, seen1} end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "auxfile.sml:31:9") end do local exp1 = _L[351](exp.payload, outdir) if exp1.tag == "NONE" then tmp55 = did tmp54 = seen1 goto cont end if exp1.tag == "SOME" then else _raise(_Match, "auxfile.sml:34:13") end do local subauxfile do subauxfile = exp1.payload.subauxfile local subauxfile_abs = exp1.payload.subauxfile_abs local tmp56 = _L[218](subauxfile_abs) if tmp56 then else goto else2 end do local exp2 = _L[352](subauxfile_abs, outdir, seen1) local did_PRIME = exp2[1] local seen2 = exp2[2] if did then tmp55 = true tmp54 = seen2 goto cont else tmp55 = did_PRIME tmp54 = seen2 goto cont end end end ::else2:: local tmp56 = _L[212](subauxfile) local tmp57 = _L[210].join(outdir, tmp56) local tmp58 = _L[219](tmp57) if tmp58 then tmp55 = did tmp54 = seen1 goto cont end local tmp59, tmp60 = _L[217].mkdir_rec(tmp57) if not tmp59 then else tmp55 = true tmp54 = seen1 goto cont end do local tmp61 = _Error(tmp60) _raise(tmp61, "fs-util.sml:16:28") end end end end end _L[353] = function(auxfile, outdir, revLines) local ins = _L[115](auxfile) local tmp54 = revLines ::cont:: do local a = tmp54 local exp = _L[114](ins) if exp.tag == "NONE" then else goto else1 end do _L[120](ins) return a end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "auxfile.sml:62:9") end do local line = exp.payload local exp1 = _L[351](line, outdir) if exp1.tag == "SOME" then else goto else2 end do local subauxfile_abs = exp1.payload.subauxfile_abs local tmp55 = _L[218](subauxfile_abs) if tmp55 then else tmp54 = a goto cont end tmp54 = _L[353](subauxfile_abs, outdir, a) goto cont end ::else2:: if exp1.tag == "NONE" then else _raise(_Match, "auxfile.sml:65:13") end do local isBibTeXLine do local tmp55 = _L[350]("\\") local exp2 = tmp55(line) do if exp2.tag == "SOME" then elseif exp2.tag == "NONE" then isBibTeXLine = false goto cont1 else _raise(_Match, "auxfile.sml:83:21") end do local s = exp2.payload local tmp56 do local tmp57 = splitl(function(c) local tmp58 tmp58 = 65 <= c and c <= 90 or 97 <= c and c <= 122 return tmp58 or c == 64 end) local tmp58 = tmp57(s) tmp56 = tmp58[1] end local exp3 = string1(tmp56) isBibTeXLine = exp3 == "citation" or (exp3 == "bibdata" or exp3 == "bibstyle") end end end ::cont1:: if isBibTeXLine then else tmp54 = a goto cont end do if _ENV.CLUTTEX_VERBOSITY >= 2 then else tmp54 = {line, a} goto cont end do local tmp55 = full(line) local tmp56 = splitr(isSpace, tmp55) local tmp57 = string1(tmp56[1]) _L[304]("BibTeX line: " .. tmp57) tmp54 = {line, a} goto cont end end end end end end _L[354] = tmp3("texrunner.luatexinit") _L[355] = "INPUT" _L[356] = "OUTPUT" _L[357] = "AUXILIARY" _L[358] = function(tmp54, tmp55) return tmp54 == "INPUT" and tmp55 == "INPUT" or (tmp54 == "OUTPUT" and tmp55 == "OUTPUT" or tmp54 == "AUXILIARY" and tmp55 == "AUXILIARY") end _L[359] = function(fileInfo, fileMap) local tmp54 = foldl(function(a) local x = a[1] return {x[1], a[2]} end) local tmp55 = tmp54(nil) local tmp56 = tmp55(fileInfo) local tmp57 = _L[206](_EXCLAM) local tmp58 = tmp57(fileMap) return {tmp56, tmp58} end _L[360] = function(file, tmp54, fileList, fileMap) local ins = _L[115](file) local tmp55, tmp56 = fileList, fileMap ::cont:: do local fileList1, fileMap1 = tmp55, tmp56 local exp = _L[114](ins) if exp.tag == "NONE" then else goto else1 end do _L[120](ins) return {fileList1, fileMap1} end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "reruncheck.sml:29:17") end do local path, exp1 do local line = exp.payload local tmp57 = splitl(isAlphaNum) local tmp58 = full(line) local exp2 = tmp57(tmp58) local t = exp2[1] local tmp59 do local tmp60 = splitr(isSpace, exp2[2]) tmp59 = tmp60[1] end local tmp60 do local tmp61 = splitl(isSpace) local tmp62 = tmp61(tmp59) tmp60 = tmp62[2] end path = string1(tmp60) exp1 = string1(t) if exp1 == "PWD" then tmp55 = fileList1 tmp56 = fileMap1 goto cont end if exp1 == "INPUT" then else goto else2 end do local abspath = _L[215](NONE, path) local exp3 = _L[205](fileMap1, abspath) if exp3.tag == "SOME" then else goto else4 end do local r = exp3.payload local path_PRIME = exp3.payload[1].path local abspath_PRIME = exp3.payload[1].abspath local kind = exp3.payload[1].kind local tmp61 = #path local tmp62 if tmp61 < #path_PRIME then tmp62 = path else tmp62 = path_PRIME end local tmp63 = _L[358](kind, _L[356]) local tmp64 if tmp63 then tmp64 = _L[357] else tmp64 = kind end r[1] = {abspath = abspath_PRIME, kind = tmp64, path = tmp62} tmp55 = fileList1 tmp56 = fileMap1 goto cont end ::else4:: if exp3.tag == "NONE" then else _raise(_Match, "reruncheck.sml:38:31") end do local tmp61 = _L[218](path) if tmp61 then else tmp55 = fileList1 tmp56 = fileMap1 goto cont end do local tmp62 = _L[214](path) local tmp63 if tmp62 == "bbl" then tmp63 = _L[357] else tmp63 = _L[355] end local tmp64 = {{abspath = abspath, kind = tmp63, path = path}} local tmp65 = {tmp64, fileList1} local tmp66 = _L[204](fileMap1, abspath, tmp64) tmp55 = tmp65 tmp56 = tmp66 goto cont end end end end ::else2:: if exp1 == "OUTPUT" then else goto else3 end do local abspath = _L[215](NONE, path) local exp2 = _L[205](fileMap1, abspath) if exp2.tag == "SOME" then else goto else4 end do local r = exp2.payload local path_PRIME = exp2.payload[1].path local abspath_PRIME = exp2.payload[1].abspath local kind = exp2.payload[1].kind local tmp57 = #path local tmp58 if tmp57 < #path_PRIME then tmp58 = path else tmp58 = path_PRIME end local tmp59 = _L[358](kind, _L[355]) local tmp60 if tmp59 then tmp60 = _L[357] else tmp60 = kind end r[1] = {abspath = abspath_PRIME, kind = tmp60, path = tmp58} tmp55 = fileList1 tmp56 = fileMap1 goto cont end ::else4:: if exp2.tag == "NONE" then else _raise(_Match, "reruncheck.sml:70:31") end do local tmp57 do local ext = _L[214](path) do if ext == "out" then tmp57 = true goto cont1 end local tmp58 = tmp(eq) local tmp59 do local tmp60 = tmp58({tmp54, NONE}) tmp59 = not tmp60 end local tmp60 tmp60 = tmp59 and ext == "idx" tmp57 = tmp60 or (ext == "bcf" or ext == "glo") end end ::cont1:: local tmp58 if tmp57 then tmp58 = _L[357] else tmp58 = _L[356] end local tmp59 = {{abspath = abspath, kind = tmp58, path = path}} local tmp60 = {tmp59, fileList1} local tmp61 = _L[204](fileMap1, abspath, tmp59) tmp55 = tmp60 tmp56 = tmp61 goto cont end end ::else3:: _L[302]("Unrecognized line in recorder file '" .. file .. "': " .. exp1) tmp55 = fileList1 tmp56 = fileMap1 goto cont end end end _L[361] = function(fileList, auxstatus) local shouldRerun, auxstatus1 do local tmp54, tmp55 = fileList, _L[203] ::cont1:: do local tmp56, newauxstatus = tmp54, tmp55 if tmp56 == nil then auxstatus1 = newauxstatus shouldRerun = false goto cont end if tmp56 ~= nil then else _raise(_Match, "reruncheck.sml:155:15") end do local shortPath = tmp56[1].path local abspath = tmp56[1].abspath local kind = tmp56[1].kind local tmp57 = tmp56[2] local tmp58 = _L[218](abspath) if tmp58 then else tmp54 = tmp57 tmp55 = newauxstatus goto cont1 end do local shouldRerun1, newauxstatus1 do if kind == "INPUT" then else goto else1 end do local mtime = _L[66](abspath) local exp = _L[205](auxstatus, abspath) if exp.tag == "SOME" and exp.payload.mtime.tag == "SOME" then else newauxstatus1 = newauxstatus shouldRerun1 = false goto cont2 end do if exp.payload.mtime.payload < mtime then else newauxstatus1 = newauxstatus shouldRerun1 = false goto cont2 end do _L[304]("Input file '" .. shortPath .. "' was modified (by user, or some external commands).") local tmp59 = _L[204](newauxstatus, abspath, {{md5sum = NONE, mtime = {tag = "SOME", payload = mtime}, size = NONE}}) newauxstatus1 = tmp59 shouldRerun1 = true goto cont2 end end end ::else1:: if kind == "AUXILIARY" then elseif kind == "OUTPUT" then newauxstatus1 = newauxstatus shouldRerun1 = false goto cont2 else _raise(_Match, "reruncheck.sml:159:31") end do local exp = _L[205](auxstatus, abspath) if exp.tag == "SOME" then else goto else2 end do local newauxstatus2, modifiedBecause do local s = exp.payload local size1 = _L[67](abspath) local exp1 = s.size local sizeIsDifferent if exp1.tag == "SOME" then sizeIsDifferent = exp1.payload ~= size1 elseif exp1.tag == "NONE" then sizeIsDifferent = true else _raise(_Match, "reruncheck.sml:178:66") end do if sizeIsDifferent then else goto else4 end do local exp2 = s.size local previousSize if exp2.tag == "SOME" then previousSize = tmp21(tmp5(exp2.payload), "-", "~") elseif exp2.tag == "NONE" then previousSize = "(N/A)" else _raise(_Match, "reruncheck.sml:183:77") end local tmp59 = "size: " .. previousSize .. " -> " local tmp60 = {tag = "SOME", payload = tmp59 .. tmp21(tmp5(size1), "-", "~")} local tmp61 = _L[204](newauxstatus, abspath, {{md5sum = NONE, mtime = NONE, size = {tag = "SOME", payload = size1}}}) newauxstatus2 = tmp61 modifiedBecause = tmp60 goto cont3 end ::else4:: local md5sum do local ins = _L[151](abspath) local tmp59 = _L[153](ins) _L[152](ins) md5sum = _L[191](tmp59) end local exp2 = s.md5sum local md5sumIsDifferent if exp2.tag == "SOME" then local h = exp2.payload local tmp59 = h[1] local tmp60 = h[2] local tmp61 = h[3] local tmp62 = h[4] local tmp63 = md5sum[1] local tmp64 = md5sum[2] local tmp65 = md5sum[3] md5sumIsDifferent = tmp62 ~= md5sum[4] or (tmp61 ~= tmp65 or (tmp60 ~= tmp64 or tmp59 ~= tmp63)) elseif exp2.tag == "NONE" then md5sumIsDifferent = true else _raise(_Match, "reruncheck.sml:190:82") end if md5sumIsDifferent then else newauxstatus2 = newauxstatus modifiedBecause = NONE goto cont3 end do local previousMd5sum do local exp3 = s.md5sum do if exp3.tag == "SOME" then elseif exp3.tag == "NONE" then previousMd5sum = "(N/A)" goto cont4 else _raise(_Match, "reruncheck.sml:194:86") end do local h = exp3.payload local a = h[1] local b = h[2] local c = h[3] previousMd5sum = _L[193](a, b, c, h[4]) end end end ::cont4:: local tmp59 = "md5: " .. previousMd5sum .. " -> " local tmp60 do local a = md5sum[1] local b = md5sum[2] local c = md5sum[3] tmp60 = _L[193](a, b, c, md5sum[4]) end local tmp61 = {tag = "SOME", payload = tmp59 .. tmp60} local tmp62 = {tag = "SOME", payload = size1} local tmp63 = _L[204](newauxstatus, abspath, {{md5sum = {tag = "SOME", payload = md5sum}, mtime = NONE, size = tmp62}}) newauxstatus2 = tmp63 modifiedBecause = tmp61 end end end ::cont3:: if modifiedBecause.tag == "SOME" then else goto else3 end do local reason = modifiedBecause.payload _L[304]("File '" .. shortPath .. "' was modified (" .. reason .. ").") newauxstatus1 = newauxstatus2 shouldRerun1 = true goto cont2 end ::else3:: if modifiedBecause.tag == "NONE" then else _raise(_Match, "reruncheck.sml:202:43") end do if _ENV.CLUTTEX_VERBOSITY >= 1 then else newauxstatus1 = newauxstatus2 shouldRerun1 = false goto cont2 end _L[304]("File '" .. shortPath .. "' unmodified (size and md5sum).") newauxstatus1 = newauxstatus2 shouldRerun1 = false goto cont2 end end ::else2:: if exp.tag == "NONE" then else _raise(_Match, "reruncheck.sml:175:36") end do local newauxstatus2, shouldRerun2 do local tmp59 = isSuffix(".aux") local tmp60 = tmp59(abspath) do if tmp60 then else newauxstatus2 = newauxstatus shouldRerun2 = true goto cont3 end do local size1 = _L[67](abspath) if size1 == 8 then else goto else4 end do local ins = _L[151](abspath) local tmp61 = _L[153](ins) _L[152](ins) local tmp62 = tmp61 == "\\relax \n" local tmp63 = {tag = "SOME", payload = size1} local tmp64 = _L[191](tmp61) local newauxstatus3 = _L[204](newauxstatus, abspath, {{md5sum = {tag = "SOME", payload = tmp64}, mtime = NONE, size = tmp63}}) newauxstatus2 = newauxstatus3 shouldRerun2 = not tmp62 goto cont3 end ::else4:: local newauxstatus3 = _L[204](newauxstatus, abspath, {{md5sum = NONE, mtime = NONE, size = {tag = "SOME", payload = size1}}}) newauxstatus2 = newauxstatus3 shouldRerun2 = true end end end ::cont3:: if shouldRerun2 then else goto else3 end _L[304]("New auxiliary file '" .. shortPath .. "'.") newauxstatus1 = newauxstatus2 shouldRerun1 = shouldRerun2 goto cont2 ::else3:: if _ENV.CLUTTEX_VERBOSITY >= 1 then else newauxstatus1 = newauxstatus2 shouldRerun1 = shouldRerun2 goto cont2 end _L[304]("Ignoring almost-empty auxiliary file '" .. shortPath .. "'.") newauxstatus1 = newauxstatus2 shouldRerun1 = shouldRerun2 end end end ::cont2:: if shouldRerun1 then auxstatus1 = newauxstatus1 shouldRerun = true else tmp54 = tmp57 tmp55 = newauxstatus1 goto cont1 end end end end end ::cont:: local tmp54 = _L[206](_EXCLAM) local tmp55 = tmp54(auxstatus1) return {shouldRerun, tmp55} end _L[362] = function(auxstatus, dst, srcAbs) local tmp54 = _L[218](dst) if not tmp54 then return true end local exp = _L[205](auxstatus, srcAbs) if exp.tag == "SOME" and exp.payload.mtime.tag == "SOME" then else return false end do local mtime = exp.payload.mtime.payload local tmp55 = _L[66](dst) return mtime > tmp55 end end _L[363] = {color = {diagnostic = NONE, error = NONE, execute = NONE, information = NONE, type_ = NONE, warning = NONE}, temporary_directory = NONE} _L[364] = function(table, key) local tmp54 = find(function(a) return a[1] == key end) local exp = tmp54(table) if exp.tag == "NONE" then return NONE elseif exp.tag == "SOME" then return {tag = "SOME", payload = exp.payload[2]} else _raise(_Match, "config-file.sml:42:5") end end _L[365] = function(tmp54, key) if tmp54.tag == "SOME" then elseif tmp54.tag == "NONE" then return NONE else _raise(_Match, "config-file.sml:46:7") end do local table = tmp54.payload local tmp55 = find(function(a) return a[1] == key end) local exp = tmp55(table) if exp.tag == "NONE" then return NONE elseif exp.tag == "SOME" then return {tag = "SOME", payload = exp.payload[2]} else _raise(_Match, "config-file.sml:47:10") end end end _L[366] = function(tmp54, f) if tmp54.tag == "SOME" then elseif tmp54.tag == "NONE" then return NONE else _raise(_Match, "config-file.sml:54:7") end do return f(tmp54.payload) end end _L[367] = function(a) return function(a1) if a1.tag == "BOOL" then return {tag = "SOME", payload = a1.payload} end _L[302]("Config entry " .. a .. " should be a boolean.") return NONE end end _L[368] = function(a) return function(a1) if a1.tag == "STRING" then else goto else1 end do local x = a1.payload local exp if x == "default" then exp = {tag = "SOME", payload = _L[255]} elseif x == "black" then exp = {tag = "SOME", payload = _L[256]} elseif x == "red" then exp = {tag = "SOME", payload = _L[257]} elseif x == "green" then exp = {tag = "SOME", payload = _L[258]} elseif x == "yellow" then exp = {tag = "SOME", payload = _L[259]} elseif x == "blue" then exp = {tag = "SOME", payload = _L[260]} elseif x == "magenta" then exp = {tag = "SOME", payload = _L[261]} elseif x == "cyan" then exp = {tag = "SOME", payload = _L[262]} elseif x == "white" then exp = {tag = "SOME", payload = _L[263]} elseif x == "brightblack" then exp = {tag = "SOME", payload = _L[264]} elseif x == "brightred" then exp = {tag = "SOME", payload = _L[265]} elseif x == "brightgreen" then exp = {tag = "SOME", payload = _L[266]} elseif x == "brightyellow" then exp = {tag = "SOME", payload = _L[267]} elseif x == "brightblue" then exp = {tag = "SOME", payload = _L[268]} elseif x == "brightmagenta" then exp = {tag = "SOME", payload = _L[269]} elseif x == "brightcyan" then exp = {tag = "SOME", payload = _L[270]} elseif x == "brightwhite" then exp = {tag = "SOME", payload = _L[271]} else exp = NONE end if exp.tag == "SOME" then return {tag = "SOME", payload = exp.payload} end if exp.tag == "NONE" then else _raise(_Match, "config-file.sml:76:10") end do _L[302]("Config entry " .. a .. " should be a valid color.") return NONE end end ::else1:: _L[302]("Config entry " .. a .. " should be a string.") return NONE end end _L[369] = function(a) return function(a1) if a1.tag == "TABLE" then else goto else1 end do local t, tmp54, tmp55, tmp56, tmp57 do t = a1.payload local tmp58 = _L[364](t, "fore") local tmp59 = _L[368](a .. ".fore") tmp54 = _L[366](tmp58, tmp59) local tmp60 = _L[364](t, "back") local tmp61 = _L[368](a .. ".back") tmp55 = _L[366](tmp60, tmp61) local tmp62 = _L[364](t, "bold") local tmp63 = _L[367](a .. ".bold") local tmp64 = _L[366](tmp62, tmp63) tmp56 = getOpt(tmp64, false) local tmp65 = _L[364](t, "dim") local tmp66 = _L[367](a .. ".dim") local tmp67 = _L[366](tmp65, tmp66) tmp57 = getOpt(tmp67, false) end local tmp58, tmp59, tmp60, tmp61 do local tmp62 = _L[364](t, "underline") local tmp63 = _L[367](a .. ".underline") local tmp64 = _L[366](tmp62, tmp63) tmp58 = getOpt(tmp64, false) local tmp65 = _L[364](t, "blink") local tmp66 = _L[367](a .. ".blink") local tmp67 = _L[366](tmp65, tmp66) tmp59 = getOpt(tmp67, false) local tmp68 = _L[364](t, "reverse") local tmp69 = _L[367](a .. ".reverse") local tmp70 = _L[366](tmp68, tmp69) tmp60 = getOpt(tmp70, false) local tmp71 = _L[364](t, "italic") local tmp72 = _L[367](a .. ".italic") tmp61 = _L[366](tmp71, tmp72) end local tmp62 = getOpt(tmp61, false) local tmp63 = _L[364](t, "strike") local tmp64 = _L[367](a .. ".strike") local tmp65 = _L[366](tmp63, tmp64) local tmp66 = getOpt(tmp65, false) return {tag = "SOME", payload = {background = tmp55, blink = tmp59, bold = tmp56, dim = tmp57, foreground = tmp54, italic = tmp62, reverse = tmp60, strike = tmp66, underline = tmp58}} end ::else1:: _L[302]("Config entry " .. a .. " should be a table.") return NONE end end _L[370] = {"Abort"} _L[371] = {tag = _L[370]} tmp17("", "ctype") _L[372] = function(a) local tmp54 = a ::cont:: do local a1 = tmp54 if a1 == nil then return NONE end if a1 ~= nil then local tmp55 = a1[1] local tmp56 = a1[2] local exp do local tmp57 = tmp16(tmp55) if tmp57 == nil then exp = NONE else exp = {tag = "SOME", payload = tmp57} end end if exp.tag == "SOME" then return {tag = "SOME", payload = exp.payload} elseif exp.tag == "NONE" then tmp54 = tmp56 goto cont else _raise(_Match, "main.sml:27:32") end else _raise(_Match, "main.sml:26:5") end end end _L[373] = function() local progName do local tmp54 = _L[154][0] if tmp54 == nil then else progName = tmp54 goto cont end do local tmp55 = _Fail("CommandLine.name: arg is not available") _raise(tmp55, "command-line.sml:10:45") end end ::cont:: _L[124]({_L[118], "ClutTeX: Process TeX files without cluttering your working directory\n\nUsage:\n " .. progName .. " [options] [--] FILE.tex\n\nOptions:\n -e, --engine=ENGINE Specify which TeX engine to use.\n ENGINE is one of the following:\n pdflatex, pdftex,\n lualatex, luatex, luajittex,\n xelatex, xetex, latex, etex, tex,\n platex, eptex, ptex,\n uplatex, euptex, uptex,\n --engine-executable=COMMAND+OPTIONs\n The actual TeX command to use.\n [default: ENGINE]\n -o, --output=FILE The name of output file.\n [default: JOBNAME.pdf or JOBNAME.dvi]\n --fresh Clean intermediate files before running TeX.\n Cannot be used with --output-directory.\n --max-iterations=N Maximum number of running TeX to resolve\n cross-references. [default: 3]\n --start-with-draft Start with draft mode.\n --[no-]change-directory Change directory before running TeX.\n --watch[=ENGINE] Watch input files for change. Requires fswatch\n or inotifywait to be installed. ENGINE is one of\n `fswatch', `inotifywait' or `auto' [default: `auto']\n --tex-option=OPTION Pass OPTION to TeX as a single option.\n --tex-options=OPTIONs Pass OPTIONs to TeX as multiple options.\n --dvipdfmx-option[s]=OPTION[s] Same for dvipdfmx.\n --makeindex=COMMAND+OPTIONs Command to generate index, such as\n `makeindex' or `mendex'.\n --bibtex=COMMAND+OPTIONs Command for BibTeX, such as\n `bibtex' or `pbibtex'.\n --biber[=COMMAND+OPTIONs] Command for Biber.\n --makeglossaries[=COMMAND+OPTIONs] Command for makeglossaries.\n -h, --help Print this message and exit.\n -v, --version Print version information and exit.\n -V, --verbose Be more verbose.\n --color[=WHEN] Make ClutTeX's message colorful. WHEN is one of\n `always', `auto', or `never'.\n [default: `auto' if --color is omitted,\n `always' if WHEN is omitted]\n --includeonly=NAMEs Insert '\\includeonly{NAMEs}'.\n --make-depends=FILE Write dependencies as a Makefile rule.\n --print-output-directory Print the output directory and exit.\n --package-support=PKG1[,PKG2,...]\n Enable special support for some shell-escaping\n packages.\n Currently supported: minted, epstopdf\n --check-driver=DRIVER Check that the correct driver file is loaded.\n DRIVER is one of `dvipdfmx', `dvips', `dvisvgm'.\n --source-date-epoch=TIME\n Set SOURCE_DATE_EPOCH variable.\n TIME is `now' or an integer.\n\n --[no-]shell-escape\n --shell-restricted\n --synctex=NUMBER\n --fmt=FMTNAME\n --[no-]file-line-error [default: yes]\n --[no-]halt-on-error [default: yes]\n --interaction=STRING [default: nonstopmode]\n --jobname=STRING\n --output-directory=DIR [default: somewhere in the temporary directory]\n --output-format=FORMAT FORMAT is `pdf' or `dvi'. [default: pdf]\n\n" .. "Copyright (C) 2016-2024 ARATA Mizuki\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program. If not, see .\n"}) tmp15(0, true) end _L[374] = function(payload) return {tag = "OPT_ENGINE", payload = payload} end _L[375] = function(payload) return {tag = "OPT_ENGINE_EXECUTABLE", payload = payload} end _L[376] = function(payload) return {tag = "OPT_OUTPUT", payload = payload} end _L[377] = {tag = "OPT_FRESH"} _L[378] = function(payload) return {tag = "OPT_MAX_ITERATIONS", payload = payload} end _L[379] = {tag = "OPT_START_WITH_DRAFT"} _L[380] = function(payload) return {tag = "OPT_WATCH", payload = payload} end _L[381] = {tag = "OPT_HELP"} _L[382] = {tag = "OPT_VERSION"} _L[383] = {tag = "OPT_VERBOSE"} _L[384] = function(payload) return {tag = "OPT_COLOR", payload = payload} end _L[385] = function(payload) return {tag = "OPT_INCLUDEONLY", payload = payload} end _L[386] = function(payload) return {tag = "OPT_MAKE_DEPENDS", payload = payload} end _L[387] = {tag = "OPT_PRINT_OUTPUT_DIRECTORY"} _L[388] = function(payload) return {tag = "OPT_PACKAGE_SUPPORT", payload = payload} end _L[389] = function(payload) return {tag = "OPT_CHECK_DRIVER", payload = payload} end _L[390] = function(payload) return {tag = "OPT_SOURCE_DATE_EPOCH", payload = payload} end _L[391] = function(payload) return {tag = "OPT_SYNCTEX", payload = payload} end _L[392] = function(payload) return {tag = "OPT_INTERACTION", payload = payload} end _L[393] = function(payload) return {tag = "OPT_JOBNAME", payload = payload} end _L[394] = function(payload) return {tag = "OPT_FMT", payload = payload} end _L[395] = function(payload) return {tag = "OPT_OUTPUT_DIRECTORY", payload = payload} end _L[396] = function(payload) return {tag = "OPT_OUTPUT_FORMAT", payload = payload} end _L[397] = function(payload) return {tag = "OPT_TEX_OPTION", payload = payload} end _L[398] = function(payload) return {tag = "OPT_TEX_OPTIONS", payload = payload} end _L[399] = function(payload) return {tag = "OPT_DVIPDFMX_OPTION", payload = payload} end _L[400] = function(payload) return {tag = "OPT_DVIPDFMX_OPTIONS", payload = payload} end _L[401] = function(payload) return {tag = "OPT_MAKEINDEX", payload = payload} end _L[402] = function(payload) return {tag = "OPT_BIBTEX", payload = payload} end _L[403] = function(payload) return {tag = "OPT_BIBER", payload = payload} end _L[404] = function(payload) return {tag = "OPT_MAKEGLOSSARIES", payload = payload} end _L[405] = function(payload) return {tag = "OPT_CONFIG_FILE", payload = payload} end _L[406] = {tag = "SHORT", payload = "-e"} _L[407] = {_L[406], {tag = "WITH_ARG", payload = _L[374]}} _L[408] = {tag = "LONG", payload = "--engine"} _L[409] = {_L[408], {tag = "WITH_ARG", payload = _L[374]}} _L[410] = {tag = "LONG", payload = "--engine-executable"} _L[411] = {_L[410], {tag = "WITH_ARG", payload = _L[375]}} _L[412] = {tag = "SHORT", payload = "-o"} _L[413] = {_L[412], {tag = "WITH_ARG", payload = _L[376]}} _L[414] = {tag = "LONG", payload = "--output"} _L[415] = {_L[414], {tag = "WITH_ARG", payload = _L[376]}} _L[416] = {tag = "LONG", payload = "--fresh"} _L[417] = {_L[416], {tag = "SIMPLE", payload = _L[377]}} _L[418] = {tag = "LONG", payload = "--max-iterations"} _L[419] = {_L[418], {tag = "WITH_ARG", payload = _L[378]}} _L[420] = {tag = "LONG", payload = "--start-with-draft"} _L[421] = {_L[420], {tag = "SIMPLE", payload = _L[379]}} _L[422] = {tag = "LONG", payload = "--change-directory"} _L[423] = {_L[422], {tag = "SIMPLE", payload = {tag = "OPT_CHANGE_DIRECTORY", payload = true}}} _L[424] = {tag = "LONG", payload = "--no-change-directory"} _L[425] = {_L[424], {tag = "SIMPLE", payload = {tag = "OPT_CHANGE_DIRECTORY", payload = false}}} _L[426] = {tag = "LONG", payload = "--watch"} _L[427] = {_L[426], {tag = "WITH_OPTIONAL_ARG", payload = {action = _L[380], default = "auto"}}} _L[428] = {tag = "SHORT", payload = "-h"} _L[429] = {_L[428], {tag = "SIMPLE", payload = _L[381]}} _L[430] = {tag = "LONG", payload = "-help"} _L[431] = {_L[430], {tag = "SIMPLE", payload = _L[381]}} _L[432] = {tag = "LONG", payload = "--help"} _L[433] = {_L[432], {tag = "SIMPLE", payload = _L[381]}} _L[434] = {tag = "SHORT", payload = "-v"} _L[435] = {_L[434], {tag = "SIMPLE", payload = _L[382]}} _L[436] = {tag = "LONG", payload = "--version"} _L[437] = {_L[436], {tag = "SIMPLE", payload = _L[382]}} _L[438] = {tag = "SHORT", payload = "-V"} _L[439] = {_L[438], {tag = "SIMPLE", payload = _L[383]}} _L[440] = {tag = "LONG", payload = "--verbose"} _L[441] = {_L[440], {tag = "SIMPLE", payload = _L[383]}} _L[442] = {tag = "LONG", payload = "--color"} _L[443] = {_L[442], {tag = "WITH_OPTIONAL_ARG", payload = {action = _L[384], default = "always"}}} _L[444] = {tag = "LONG", payload = "--includeonly"} _L[445] = {_L[444], {tag = "WITH_ARG", payload = _L[385]}} _L[446] = {tag = "LONG", payload = "--make-depends"} _L[447] = {_L[446], {tag = "WITH_ARG", payload = _L[386]}} _L[448] = {tag = "LONG", payload = "--print-output-directory"} _L[449] = {_L[448], {tag = "SIMPLE", payload = _L[387]}} _L[450] = {tag = "LONG", payload = "--package-support"} _L[451] = {_L[450], {tag = "WITH_ARG", payload = _L[388]}} _L[452] = {tag = "LONG", payload = "--check-driver"} _L[453] = {_L[452], {tag = "WITH_ARG", payload = _L[389]}} _L[454] = {tag = "LONG", payload = "--source-date-epoch"} _L[455] = {_L[454], {tag = "WITH_ARG", payload = _L[390]}} _L[456] = {tag = "LONG", payload = "-synctex"} _L[457] = {_L[456], {tag = "WITH_ARG", payload = _L[391]}} _L[458] = {tag = "LONG", payload = "--synctex"} _L[459] = {_L[458], {tag = "WITH_ARG", payload = _L[391]}} _L[460] = {tag = "LONG", payload = "-file-line-error"} _L[461] = {_L[460], {tag = "SIMPLE", payload = {tag = "OPT_FILE_LINE_ERROR", payload = true}}} _L[462] = {tag = "LONG", payload = "--file-line-error"} _L[463] = {_L[462], {tag = "SIMPLE", payload = {tag = "OPT_FILE_LINE_ERROR", payload = true}}} _L[464] = {tag = "LONG", payload = "-no-file-line-error"} _L[465] = {_L[464], {tag = "SIMPLE", payload = {tag = "OPT_FILE_LINE_ERROR", payload = false}}} _L[466] = {tag = "LONG", payload = "--no-file-line-error"} _L[467] = {_L[466], {tag = "SIMPLE", payload = {tag = "OPT_FILE_LINE_ERROR", payload = false}}} _L[468] = {tag = "LONG", payload = "-interaction"} _L[469] = {_L[468], {tag = "WITH_ARG", payload = _L[392]}} _L[470] = {tag = "LONG", payload = "--interaction"} _L[471] = {_L[470], {tag = "WITH_ARG", payload = _L[392]}} _L[472] = {tag = "LONG", payload = "-halt-on-error"} _L[473] = {_L[472], {tag = "SIMPLE", payload = {tag = "OPT_HALT_ON_ERROR", payload = true}}} _L[474] = {tag = "LONG", payload = "--halt-on-error"} _L[475] = {_L[474], {tag = "SIMPLE", payload = {tag = "OPT_HALT_ON_ERROR", payload = true}}} _L[476] = {tag = "LONG", payload = "-no-halt-on-error"} _L[477] = {_L[476], {tag = "SIMPLE", payload = {tag = "OPT_HALT_ON_ERROR", payload = false}}} _L[478] = {tag = "LONG", payload = "--no-halt-on-error"} _L[479] = {_L[478], {tag = "SIMPLE", payload = {tag = "OPT_HALT_ON_ERROR", payload = false}}} _L[480] = {tag = "LONG", payload = "-shell-escape"} _L[481] = {_L[480], {tag = "SIMPLE", payload = {tag = "OPT_SHELL_ESCAPE", payload = _L[226]}}} _L[482] = {tag = "LONG", payload = "--shell-escape"} _L[483] = {_L[482], {tag = "SIMPLE", payload = {tag = "OPT_SHELL_ESCAPE", payload = _L[226]}}} _L[484] = {tag = "LONG", payload = "-no-shell-escape"} _L[485] = {_L[484], {tag = "SIMPLE", payload = {tag = "OPT_SHELL_ESCAPE", payload = _L[228]}}} _L[486] = {tag = "LONG", payload = "--no-shell-escape"} _L[487] = {_L[486], {tag = "SIMPLE", payload = {tag = "OPT_SHELL_ESCAPE", payload = _L[228]}}} _L[488] = {tag = "LONG", payload = "-shell-restricted"} _L[489] = {_L[488], {tag = "SIMPLE", payload = {tag = "OPT_SHELL_ESCAPE", payload = _L[227]}}} _L[490] = {tag = "LONG", payload = "--shell-restricted"} _L[491] = {_L[490], {tag = "SIMPLE", payload = {tag = "OPT_SHELL_ESCAPE", payload = _L[227]}}} _L[492] = {tag = "LONG", payload = "-jobname"} _L[493] = {_L[492], {tag = "WITH_ARG", payload = _L[393]}} _L[494] = {tag = "LONG", payload = "--jobname"} _L[495] = {_L[494], {tag = "WITH_ARG", payload = _L[393]}} _L[496] = {tag = "LONG", payload = "-fmt"} _L[497] = {_L[496], {tag = "WITH_ARG", payload = _L[394]}} _L[498] = {tag = "LONG", payload = "--fmt"} _L[499] = {_L[498], {tag = "WITH_ARG", payload = _L[394]}} _L[500] = {tag = "LONG", payload = "-output-directory"} _L[501] = {_L[500], {tag = "WITH_ARG", payload = _L[395]}} _L[502] = {tag = "LONG", payload = "--output-directory"} _L[503] = {_L[502], {tag = "WITH_ARG", payload = _L[395]}} _L[504] = {tag = "LONG", payload = "-output-format"} _L[505] = {_L[504], {tag = "WITH_ARG", payload = _L[396]}} _L[506] = {tag = "LONG", payload = "--output-format"} _L[507] = {_L[506], {tag = "WITH_ARG", payload = _L[396]}} _L[508] = {tag = "LONG", payload = "--tex-option"} _L[509] = {_L[508], {tag = "WITH_ARG", payload = _L[397]}} _L[510] = {tag = "LONG", payload = "--tex-options"} _L[511] = {_L[510], {tag = "WITH_ARG", payload = _L[398]}} _L[512] = {tag = "LONG", payload = "--dvipdfmx-option"} _L[513] = {_L[512], {tag = "WITH_ARG", payload = _L[399]}} _L[514] = {tag = "LONG", payload = "--dvipdfmx-options"} _L[515] = {_L[514], {tag = "WITH_ARG", payload = _L[400]}} _L[516] = {tag = "LONG", payload = "--makeindex"} _L[517] = {_L[516], {tag = "WITH_ARG", payload = _L[401]}} _L[518] = {tag = "LONG", payload = "--bibtex"} _L[519] = {_L[518], {tag = "WITH_ARG", payload = _L[402]}} _L[520] = {tag = "LONG", payload = "--biber"} _L[521] = {_L[520], {tag = "WITH_OPTIONAL_ARG", payload = {action = _L[403], default = "biber"}}} _L[522] = {tag = "LONG", payload = "--makeglossaries"} _L[523] = {_L[522], {tag = "WITH_OPTIONAL_ARG", payload = {action = _L[404], default = "makeglossaries"}}} _L[524] = {tag = "LONG", payload = "--config-file"} _L[525] = _list({n = 60, _L[407], _L[409], _L[411], _L[413], _L[415], _L[417], _L[419], _L[421], _L[423], _L[425], _L[427], _L[429], _L[431], _L[433], _L[435], _L[437], _L[439], _L[441], _L[443], _L[445], _L[447], _L[449], _L[451], _L[453], _L[455], _L[457], _L[459], _L[461], _L[463], _L[465], _L[467], _L[469], _L[471], _L[473], _L[475], _L[477], _L[479], _L[481], _L[483], _L[485], _L[487], _L[489], _L[491], _L[493], _L[495], _L[497], _L[499], _L[501], _L[503], _L[505], _L[507], _L[509], _L[511], _L[513], _L[515], _L[517], _L[519], _L[521], _L[523], {_L[524], {tag = "WITH_ARG", payload = _L[405]}}}) _L[526] = function(command, recover) local status_or_signal, termination, success_or_recovered do _L[300](command) local tmp54, tmp55, tmp56 = tmp14(command) local success if tmp6(tmp54) == "number" then status_or_signal = tmp54 termination = NONE success = tmp54 == 0 else status_or_signal = tmp56 termination = {tag = "SOME", payload = tmp55} success = tmp54 end if success then success_or_recovered = true else if recover.tag == "SOME" then elseif recover.tag == "NONE" then success_or_recovered = false goto cont else _raise(_Match, "main.sml:150:54") end success_or_recovered = recover.payload(nil) end end ::cont:: if success_or_recovered then return nil end if termination.tag == "SOME" and termination.payload == "exit" then else goto else1 end _L[301]("Command exited abnormally: exit status " .. tmp5(status_or_signal)) _raise(_L[371], "main.sml:161:16") ::else1:: if termination.tag == "SOME" and termination.payload == "signal" then else goto else2 end _L[301]("Command exited abnormally: signal " .. tmp5(status_or_signal)) _raise(_L[371], "main.sml:161:16") ::else2:: _L[301]("Command exited abnormally: " .. tmp5(status_or_signal)) _raise(_L[371], "main.sml:161:16") end _L[527] = {tag = "NO_NEED_TO_RERUN"} _L[528] = {tag = "NO_PAGES_OF_OUTPUT"} _L[529] = function(engine_type, tmp54, tmp55, tmp56, inputfile, exp, exp1, tmp57, exp2, tmp58, exp3, exp4, tmp59, tmp60, tmp61, tmp62, tmp63, tmp64, tmp65, tmp66, tmp67, exp5, tmp68, tmp69, original_wd, output_extension, recorderfile, recorderfile2, source_date_epoch_info, tmp70, tmp71, tmp72, tmp73, tmp74, tmp75, tmp76, tmp77, tmp78, tmp79, tmp80, tmp81, tmp82) local tmp83 do local tmp84, tmp85 = 0, _L[203] ::cont1:: do local tmp86, exp6 do local iteration, auxstatus = tmp84, tmp85 tmp86 = _Int_add(iteration, 1) do local tmp87, pdfx, minted, filelist, epstopdf, bibtex_aux_hash, auxstatus1 do local tmp88 = tmp58 .. "." .. "aux" tmp87 = _L[210].join(tmp62, tmp88) local tmp89 = _L[218](recorderfile) do if tmp89 then else goto else2 end do local recorded, tmp90 do recorded = _L[360](recorderfile, tmp59, nil, _L[203]) local tmp91 = _L[237](engine_type, _L[235]) do if tmp91 then else tmp90 = false goto cont13 end tmp90 = _L[218](recorderfile2) end end ::cont13:: local recorded1 do if tmp90 then else recorded1 = recorded goto cont14 end do local fileList = recorded[1] recorded1 = _L[360](recorderfile2, tmp59, fileList, recorded[2]) end end ::cont14:: local filelist1, auxstatus2, minted1, epstopdf1, pdfx1, bibtex_aux_hash1 do local exp7 do local fileInfo = recorded1[1] exp7 = _L[359](fileInfo, recorded1[2]) end filelist1 = exp7[1] do local go = function(a) local abspath = a[1].abspath local kind = a[1].kind local auxstatus3 = a[2] local tmp91 = _L[218](abspath) if tmp91 then else return auxstatus3 end do local auxstatus4, status do local exp8 = _L[205](auxstatus3, abspath) do if exp8.tag == "NONE" then elseif exp8.tag == "SOME" then auxstatus4 = auxstatus3 status = exp8.payload goto cont else _raise(_Match, "reruncheck.sml:124:51") end do local tmp92 = {{md5sum = NONE, mtime = NONE, size = NONE}} local tmp93 = _L[204](auxstatus3, abspath, tmp92) auxstatus4 = tmp93 status = tmp92 end end end ::cont:: if kind == "INPUT" then else goto else1 end do if status[1].mtime.tag == "NONE" then else return auxstatus4 end do local s = status[1] local tmp92 = s.md5sum local tmp93 = s.size local tmp94 = _L[66](abspath) status[1] = {md5sum = tmp92, mtime = {tag = "SOME", payload = tmp94}, size = tmp93} return auxstatus4 end end ::else1:: if kind == "AUXILIARY" then elseif kind == "OUTPUT" then return auxstatus4 else _raise(_Match, "reruncheck.sml:129:24") end do local s do local x = status[1] do if x.mtime.tag == "NONE" then else s = x goto cont1 end do local tmp92 = x.md5sum local tmp93 = x.size local tmp94 = _L[66](abspath) s = {md5sum = tmp92, mtime = {tag = "SOME", payload = tmp94}, size = tmp93} end end end ::cont1:: local s1 do if s.size.tag == "NONE" then else s1 = s goto cont2 end do local tmp92 = s.md5sum local tmp93 = s.mtime local tmp94 = _L[67](abspath) s1 = {md5sum = tmp92, mtime = tmp93, size = {tag = "SOME", payload = tmp94}} end end ::cont2:: if s1.md5sum.tag == "NONE" then else status[1] = s1 return auxstatus4 end do local tmp92 = s1.mtime local tmp93 = s1.size local tmp94 do local ins = _L[151](abspath) local tmp95 = _L[153](ins) _L[152](ins) tmp94 = _L[191](tmp95) end status[1] = {md5sum = {tag = "SOME", payload = tmp94}, mtime = tmp92, size = tmp93} return auxstatus4 end end end end local tmp91 = _L[206](_EXCLAM) local tmp92 = foldl(go) local tmp93 = _L[206](ref) local tmp94 = tmp93(auxstatus) local tmp95 = tmp92(tmp94) local tmp96 = tmp95(filelist1) auxstatus2 = tmp91(tmp96) end local tmp91 = foldl(function(a) local path, epstopdf2, pdfx2, tmp92 do path = a[1].path local minted2 = a[2].minted epstopdf2 = a[2].epstopdf pdfx2 = a[2].pdfx do if minted2 then tmp92 = true goto cont end local tmp93 = isSuffix("minted/minted.sty") tmp92 = tmp93(path) end end ::cont:: local tmp93 do if epstopdf2 then tmp93 = true goto cont1 end local tmp94 = isSuffix("epstopdf.sty") tmp93 = tmp94(path) end ::cont1:: local tmp94 do if pdfx2 then tmp94 = true goto cont2 end local tmp95 = isSuffix("pdfx.sty") tmp94 = tmp95(path) end ::cont2:: return {epstopdf = tmp93, minted = tmp92, pdfx = tmp94} end) local tmp92 = tmp91({epstopdf = false, minted = false, pdfx = false}) local exp8 = tmp92(filelist1) minted1 = exp8.minted epstopdf1 = exp8.epstopdf pdfx1 = exp8.pdfx local tmp93 = exp.tag == "SOME" and exp.payload.tag == "BIBTEX" do if tmp93 then else bibtex_aux_hash1 = NONE goto cont15 end do local biblines do local tmp94 = _L[353](tmp87, tmp62, nil) biblines = revAppend(tmp94, nil) end local tmp94 = _L[191](table_concat(_VectorOrArray_fromList(biblines), "\n")) bibtex_aux_hash1 = {tag = "SOME", payload = tmp94} end end end ::cont15:: pdfx = pdfx1 minted = minted1 filelist = filelist1 epstopdf = epstopdf1 bibtex_aux_hash = bibtex_aux_hash1 auxstatus1 = auxstatus2 goto cont3 end ::else2:: if auxstatus[2].tag == "E" then pdfx = false minted = false filelist = nil epstopdf = false bibtex_aux_hash = NONE auxstatus1 = _L[203] goto cont3 end _L[301]("Recorder file was not generated during the execution!") _raise(_L[371], "main.sml:218:27") end end ::cont3:: do if source_date_epoch_info.tag == "NONE" then goto cont4 end if source_date_epoch_info.tag == "SOME" then else _raise(_Match, "main.sml:229:20") end do local r = source_date_epoch_info.payload local tmp88 = exp5.tag == "SOME" and exp5.payload.tag == "NOW" local should_set_source_date_epoch if tmp88 then should_set_source_date_epoch = true elseif exp5.tag == "SOME" and exp5.payload.tag == "RAW" then should_set_source_date_epoch = false elseif exp5.tag == "NONE" then should_set_source_date_epoch = pdfx or tmp66 else _raise(_Match, "main.sml:232:54") end if should_set_source_date_epoch then else goto cont4 end do local tmp89 do local tmp90 = foldl(function(a) if a[1].kind == "INPUT" then else return a[2] end do local abspath = a[1].abspath local acc = a[2] local exp7 = _L[205](auxstatus1, abspath) if exp7.tag == "SOME" then local mtime = exp7.payload.mtime if mtime.tag == "SOME" and acc.tag == "SOME" then if acc.payload < mtime.payload then return mtime else return acc end elseif mtime.tag == "NONE" then return acc elseif acc.tag == "NONE" then return mtime else _raise(_Match, "main.sml:240:68") end elseif exp7.tag == "NONE" then return acc else _raise(_Match, "main.sml:238:59") end end end) local tmp91 = tmp90(NONE) local input_time = tmp91(filelist) do if input_time.tag == "SOME" then elseif input_time.tag == "NONE" then tmp89 = r[1].time_since_epoch goto cont13 else _raise(_Match, "main.sml:253:37") end do local input_time1 = input_time.payload if r[1].time < input_time1 then else tmp89 = r[1].time_since_epoch goto cont13 end do local tmp92 = tmp5(tmp18()) local new_info = {time = input_time1, time_since_epoch = tmp92} if _ENV.CLUTTEX_VERBOSITY >= 1 then else r[1] = new_info tmp89 = tmp92 goto cont13 end _L[304]("Input file was modified; Updating SOURCE_DATE_EPOCH...") r[1] = new_info tmp89 = tmp92 end end end end ::cont13:: if _ENV.CLUTTEX_VERBOSITY >= 1 then else _L[221]("SOURCE_DATE_EPOCH", tmp89) goto cont4 end _L[304]("Setting SOURCE_DATE_EPOCH to " .. tmp89) _L[221]("SOURCE_DATE_EPOCH", tmp89) end end end ::cont4:: local tex_injection do local tex_injection1 if exp2.tag == "SOME" then tex_injection1 = "\\includeonly{" .. exp2.payload .. "}" elseif exp2.tag == "NONE" then tex_injection1 = "" else _raise(_Match, "main.sml:276:31") end local tmp88 tmp88 = minted or tmp65 do if tmp88 then else tex_injection = tex_injection1 goto cont5 end do do if not tmp65 then else goto cont13 end _L[303]("You may want to use --package-support=minted option.") end ::cont13:: local outdir if _L[220] then outdir = tmp21(tmp62, ".", function(a) local tmp89 = tmp19(a) if tmp89 == 92 then return string_char(47) else return string_char(tmp89) end end) else outdir = tmp62 end tex_injection = tex_injection1 .. "\\PassOptionsToPackage{outputdir=" .. outdir .. "}{minted}" end end end ::cont5:: local tex_injection1 do local tmp88 tmp88 = epstopdf or tmp64 do if tmp88 then else tex_injection1 = tex_injection goto cont6 end do do if not tmp64 then else goto cont13 end _L[303]("You may want to use --package-support=epstopdf option.") end ::cont13:: local outdir if _L[220] then outdir = tmp21(tmp62, ".", function(a) local tmp89 = tmp19(a) if tmp89 == 92 then return string_char(47) else return string_char(tmp89) end end) else outdir = tmp62 end local tmp89 = isSuffix("/") local tmp90 = tmp89(outdir) local outdir1 if tmp90 then outdir1 = outdir else outdir1 = outdir .. "/" end tex_injection1 = tex_injection .. "\\PassOptionsToPackage{outdir=" .. outdir1 .. "}{epstopdf}" end end end ::cont6:: local lightweight_mode, command do local tmp88 = _L[237](engine_type, _L[233]) local tmp89 do local escaped do local tmp90, tmp91 do local tmp92 = full(tmp21(inputfile, ".", function(a) local tmp93 = tmp19(a) if tmp93 == 92 then return "~\\\\" elseif tmp93 == 37 then return "~\\%" elseif tmp93 == 94 then return "~\\^" elseif tmp93 == 123 then return "~\\{" elseif tmp93 == 125 then return "~\\}" elseif tmp93 == 126 then return "~\\~" elseif tmp93 == 35 then return "~\\#" else return string_char(tmp93) end end)) tmp91, tmp90 = tmp92, nil end ::cont15:: do local acc, s do s, acc = tmp91, tmp90 local tmp92 = isEmpty(s) if tmp92 then else goto else2 end do local tmp93 = revAppend(acc, nil) escaped = concat1(tmp93) goto cont13 end end ::else2:: local a, d, tmp92, tmp93 do local tmp94 = splitl(function(c) return c ~= 32 end) local exp7 = tmp94(s) a = exp7[1] local b = exp7[2] local tmp95 = splitl(function(c) return c == 32 end) local exp8 = tmp95(b) local c = exp8[1] d = exp8[2] tmp92 = map(str) do local base, start, tmp96, tmp97 do base = c.base local length1 = c.length start = c.start tmp97, tmp96 = _Int_sub(_Int_add(start, length1), 1), nil end ::cont17:: do local i, acc1 = tmp97, tmp96 if i < start then tmp93 = acc1 goto cont16 end local tmp98 = _Int_sub(i, 1) local tmp99 = sub1({base, i}) tmp97 = tmp98 tmp96 = {tmp99, acc1} goto cont17 end end end ::cont16:: local tmp94 = tmp92(tmp93) local c_PRIME = full(table_concat(_VectorOrArray_fromList(tmp94), "~")) tmp91 = d tmp90 = {c_PRIME, {a, acc}} goto cont15 end end ::cont13:: local escaped1 do if tmp88 then else escaped1 = escaped goto cont14 end do local tmp90, tmp91 do local tmp92 = full(escaped) tmp91, tmp90 = tmp92, nil end ::cont15:: do local acc, s do s, acc = tmp91, tmp90 local tmp92 = isEmpty(s) if tmp92 then else goto else2 end do local tmp93 = revAppend(acc, nil) escaped1 = concat1(tmp93) goto cont14 end end ::else2:: local a, d, c_PRIME do local tmp92 = splitl(isAscii) local exp7 = tmp92(s) a = exp7[1] local b = exp7[2] local tmp93 = splitl(function(a1) return not (a1 <= 127) end) local exp8 = tmp93(b) local c = exp8[1] d = exp8[2] local tmp94 = isEmpty(c) do if tmp94 then c_PRIME = c goto cont16 end local tmp95 = string1(c) c_PRIME = full("\\detokenize{" .. tmp95 .. "}") end end ::cont16:: tmp91 = d tmp90 = {c_PRIME, {a, acc}} goto cont15 end end end ::cont14:: if inputfile == escaped1 then tmp89 = "\\input\"" .. inputfile .. "\"" else tmp89 = "\\begingroup\\escapechar-1\\let~\\string\\edef\\x{\"" .. escaped1 .. "\" }\\expandafter\\endgroup\\expandafter\\input\\x" end end local tmp90 = tex_injection1 .. tmp89 local tmp91 = tmp86 == 1 and tmp68 local tmp92, tmp93, tmp94, exp7, exp8, exp9, exp10, exp11, exp12, exp13, exp14, exp15, exp16 if tmp91 then if tmp55 then lightweight_mode = true exp16 = tmp82 exp15 = tmp81 exp14 = tmp80 exp13 = tmp79 exp12 = tmp78 exp11 = tmp77 exp10 = {tag = "SOME", payload = _L[222]} exp9 = tmp75 exp8 = tmp74 exp7 = tmp73 tmp94 = tmp72 tmp93 = tmp71 tmp92 = true else lightweight_mode = true exp16 = tmp82 exp15 = tmp81 exp14 = tmp80 exp13 = tmp79 exp12 = tmp78 exp11 = tmp77 exp10 = {tag = "SOME", payload = _L[222]} exp9 = tmp75 exp8 = tmp74 exp7 = tmp73 tmp94 = tmp72 tmp93 = tmp71 tmp92 = tmp70 end else lightweight_mode = false exp16 = tmp82 exp15 = tmp81 exp14 = tmp80 exp13 = tmp79 exp12 = tmp78 exp11 = tmp77 exp10 = tmp76 exp9 = tmp75 exp8 = tmp74 exp7 = tmp73 tmp94 = tmp72 tmp93 = tmp71 tmp92 = false end do local revCommand do local executable = getOpt(tmp93, tmp54) local revCommand1 = {"-recorder", {executable, nil}} local revCommand2 if exp8.tag == "NONE" then revCommand2 = revCommand1 elseif exp8.tag == "SOME" then revCommand2 = {"-fmt=" .. exp8.payload, revCommand1} else _raise(_Match, "tex-engine.sml:58:28") end local revCommand3 if not exp9 then revCommand3 = revCommand2 elseif exp9 then revCommand3 = {"-halt-on-error", revCommand2} else _raise(_Match, "tex-engine.sml:61:28") end if exp10.tag == "NONE" then revCommand = revCommand3 goto cont13 end if exp10.tag == "SOME" then local mode = exp10.payload local tmp95 if mode == "BATCHMODE" then tmp95 = "batchmode" elseif mode == "NONSTOPMODE" then tmp95 = "nonstopmode" elseif mode == "SCROLLMODE" then tmp95 = "scrollmode" elseif mode == "ERRORSTOPMODE" then tmp95 = "errorstopmode" else _raise(_Match, "types.sml:14:7") end revCommand = {"-interaction=" .. tmp95, revCommand3} else _raise(_Match, "tex-engine.sml:64:28") end end ::cont13:: local revCommand1 do local revCommand2 if not exp7 then revCommand2 = revCommand elseif exp7 then revCommand2 = {"-file-line-error", revCommand} else _raise(_Match, "tex-engine.sml:67:28") end do if exp16.tag == "NONE" then revCommand1 = revCommand2 goto cont14 end if exp16.tag == "SOME" then else _raise(_Match, "tex-engine.sml:70:28") end do local tmp95 = _L[208](exp16.payload) revCommand1 = {"-synctex=" .. tmp95, revCommand2} end end end ::cont14:: local revCommand2 do local revCommand3 if exp15.tag == "NONE" then revCommand3 = revCommand1 elseif exp15.tag == "SOME" and exp15.payload == "FORBIDDEN" then revCommand3 = {"-no-shell-escape", revCommand1} elseif exp15.tag == "SOME" and exp15.payload == "RESTRICTED" then revCommand3 = {"-shell-restricted", revCommand1} elseif exp15.tag == "SOME" and exp15.payload == "ALLOWED" then revCommand3 = {"-shell-escape", revCommand1} else _raise(_Match, "tex-engine.sml:73:28") end do if exp11.tag == "NONE" then revCommand2 = revCommand3 goto cont15 end if exp11.tag == "SOME" then else _raise(_Match, "tex-engine.sml:78:28") end do local tmp95 = _L[208](exp11.payload) revCommand2 = {"-jobname=" .. tmp95, revCommand3} end end end ::cont15:: local revCommand3 do if exp13.tag == "NONE" then revCommand3 = revCommand2 goto cont16 end if exp13.tag == "SOME" then else _raise(_Match, "tex-engine.sml:81:28") end do local tmp95 = _L[208](exp13.payload) revCommand3 = {"-output-directory=" .. tmp95, revCommand2} end end ::cont16:: local revCommand4 do if engine_type == "OTHER" then revCommand4 = revCommand3 goto cont17 end if engine_type == "PDFTEX" then local revCommand5 if tmp92 then revCommand5 = {"-draftmode", revCommand3} else revCommand5 = revCommand3 end if exp14 == "DVI" then revCommand4 = {"-output-format=dvi", revCommand5} goto cont17 elseif exp14 == "PDF" then revCommand4 = revCommand5 goto cont17 else _raise(_Match, "tex-engine.sml:90:45") end end if engine_type == "XETEX" then else goto else2 end do local tmp95 if tmp92 then tmp95 = true else tmp95 = _L[232](exp14, _L[231]) end if tmp95 then revCommand4 = {"-no-pdf", revCommand3} goto cont17 else revCommand4 = revCommand3 goto cont17 end end ::else2:: if engine_type == "LUATEX" then else _raise(_Match, "tex-engine.sml:84:28") end do local revCommand5 do if exp12.tag == "NONE" then revCommand5 = revCommand3 goto cont18 end if exp12.tag == "SOME" then else _raise(_Match, "tex-engine.sml:98:63") end do local tmp95 = _L[208](exp12.payload) revCommand5 = {"--lua=" .. tmp95, revCommand3} end end ::cont18:: local revCommand6 if tmp92 then revCommand6 = {"--draftmode", revCommand5} else revCommand6 = revCommand5 end if exp14 == "DVI" then revCommand4 = {"--output-format=dvi", revCommand6} elseif exp14 == "PDF" then revCommand4 = revCommand6 else _raise(_Match, "tex-engine.sml:105:45") end end end ::cont17:: local revCommand5 = revAppend(tmp94, revCommand4) local tmp95 = _L[208](tmp90) local tmp96 = revAppend({tmp95, revCommand5}, nil) command = table_concat(_VectorOrArray_fromList(tmp96), " ") end end local getExecLog, recorded, tmp88 do local tmp89 = {NONE} getExecLog = function() local x = tmp89[1] if x.tag == "NONE" then elseif x.tag == "SOME" then return x.payload else _raise(_Match, "main.sml:322:31") end do local tmp90 = tmp58 .. "." .. "log" local ins = _L[115](_L[210].join(tmp62, tmp90)) local log = _L[123](ins) _L[120](ins) tmp89[1] = {tag = "SOME", payload = log} return log end end local tmp90 = {false} _L[526](command, {tag = "SOME", payload = function(a) local execlog = getExecLog() local tmp91 = _L[210].join(tmp62, tmp58 .. "." .. "aux") local r do local recovered do local tmp92 = _L[49]("I can't write on file") local tmp93 = tmp92(execlog) if tmp93 then else recovered = false goto cont end do local exp7 = _L[352](tmp91, tmp62, _L[197]) local madeNewDirectory = exp7[1] local tmp94 tmp94 = madeNewDirectory and _ENV.CLUTTEX_VERBOSITY >= 1 if tmp94 then else recovered = madeNewDirectory goto cont end _L[304]("Created missing directories.") recovered = madeNewDirectory end end ::cont:: local tmp92 do local tmp93 = tmp(_L[229]) local tmp94 do local tmp95 = tmp93({tmp67, {tag = "SOME", payload = _L[228]}}) tmp94 = not tmp95 end if tmp94 then else tmp92 = false goto cont1 end do local tmp95 = tokens(function(c) return c == 10 end) local tmp96 = full(execlog) local lines = tmp95(tmp96) local tmp97 = foldl(function(a1) local line = a1[1] local run = a1[2] local tmp98 = map(string1) local tmp99 = tokens(isSpace) local tmp100 = tmp99(line) local exp7 = tmp98(tmp100) if exp7 ~= nil and (exp7[1] == "(epstopdf)" and (exp7[2] ~= nil and (exp7[2][1] == "Command:" and (exp7[2][2] ~= nil and (exp7[2][2][2] ~= nil and (exp7[2][2][2][2] ~= nil and exp7[2][2][2][2][2] == nil)))))) then else return run end do local tmp101, tmp102, tmp103 do local tmp104 = exp7[2][2][1] tmp101 = exp7[2][2][2][1] tmp102 = exp7[2][2][2][2][1] do if tmp104 == "") tmp103 = tmp107(tmp102) end end end end ::cont:: if tmp103 then else return run end do local outfile = extract(tmp101, 10, NONE) local infile = substring(tmp102, 0, _Int_sub(#tmp102, 1)) local infileAbs = _L[215]({tag = "SOME", payload = original_wd}, infile) local tmp104 = _L[218](infileAbs) if tmp104 then else return run end do local outfileAbs = _L[215]({tag = "SOME", payload = tmp62}, outfile) do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto cont1 end _L[304]("Running epstopdf on " .. infile .. ".") end ::cont1:: do local outdir = _L[212](outfileAbs) local tmp105 = _L[219](outdir) do if not tmp105 then else goto cont2 end do local tmp106, tmp107 = _L[217].mkdir_rec(outdir) if not tmp106 then else goto cont2 end do local tmp108 = _Error(tmp107) _raise(tmp108, "fs-util.sml:16:28") end end end end ::cont2:: local tmp105 = _L[208](outfileAbs) local tmp106 = "epstopdf --outfile=" .. tmp105 .. " " local tmp107 = _L[208](infileAbs) local tmp108 = tmp106 .. tmp107 _L[300](tmp108) tmp14(tmp108) return run end end end end) local tmp98 = tmp97(false) tmp92 = tmp98(lines) end end ::cont1:: local recovered1 recovered1 = tmp92 or recovered if recovered1 then tmp90[1] = true return true end local tmp93 = _L[49]("Package minted Error: Missing Pygments output; \\inputminted was") r = tmp93(execlog) end tmp90[1] = true return r end}) if tmp90[1] then exp6 = {tag = "SHOULD_RERUN", payload = _L[203]} goto cont2 end recorded = _L[360](recorderfile, tmp59, nil, _L[203]) local tmp91 = _L[237](engine_type, _L[235]) do if tmp91 then else tmp88 = false goto cont7 end tmp88 = _L[218](recorderfile2) end end ::cont7:: local recorded1 do if tmp88 then else recorded1 = recorded goto cont8 end do local fileList = recorded[1] recorded1 = _L[360](recorderfile2, tmp59, fileList, recorded[2]) end end ::cont8:: local filelist1, execlog do local exp7 do local fileInfo = recorded1[1] exp7 = _L[359](fileInfo, recorded1[2]) end filelist1 = exp7[1] execlog = getExecLog() do if exp1.tag == "NONE" then goto cont9 end if exp1.tag == "SOME" then else _raise(_Match, "main.sml:349:27") end do do local driver = exp1.payload local tmp89 = map(function(a) local path = a.path local kind = a.kind if kind == "INPUT" then return {kind = "input", path = path} elseif kind == "OUTPUT" then return {kind = "output", path = path} elseif kind == "AUXILIARY" then return {kind = "auxiliary", path = path} else _raise(_Match, "main.sml:351:141") end end) local tmp90 = tmp89(filelist1) do do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto cont14 end do if driver == "DVIPDFMX" then else goto else2 end _L[304]("checkdriver: expects dvipdfmx") goto cont14 ::else2:: if driver == "DVIPS" then else goto else3 end _L[304]("checkdriver: expects dvips") goto cont14 ::else3:: if driver == "DVISVGM" then else goto else4 end _L[304]("checkdriver: expects dvisvgm") goto cont14 ::else4:: if driver == "PDFTEX" then else goto else5 end _L[304]("checkdriver: expects pdftex") goto cont14 ::else5:: if driver == "XETEX" then else goto else6 end _L[304]("checkdriver: expects xetex") goto cont14 ::else6:: if driver == "LUATEX" then else _raise(_Match, "check-driver.sml:8:7") end _L[304]("checkdriver: expects luatex") end end ::cont14:: local loadedSet, graphics_driver do local tmp91 = foldl(function(a) local kind = a[1].kind local path = a[1].path local set = a[2] if kind == "input" then else return set end do local tmp92 = _L[211](path) return _L[198](set, tmp92) end end) local tmp92 = tmp91(_L[197]) loadedSet = tmp92(tmp90) local tmp93 = _L[199](loadedSet, "graphics.sty") local tmp94 if tmp93 then tmp94 = true else tmp94 = _L[199](loadedSet, "color.sty") end do if tmp94 then else graphics_driver = NONE goto cont15 end do local tmp95 = _L[199](loadedSet, "dvipdfmx.def") if tmp95 then graphics_driver = {tag = "SOME", payload = _L[311]} goto cont15 end local tmp96 = _L[199](loadedSet, "dvips.def") if tmp96 then graphics_driver = {tag = "SOME", payload = _L[312]} goto cont15 end local tmp97 = _L[199](loadedSet, "dvisvgm.def") if tmp97 then graphics_driver = {tag = "SOME", payload = _L[313]} goto cont15 end local tmp98 = _L[199](loadedSet, "pdftex.def") if tmp98 then graphics_driver = {tag = "SOME", payload = _L[314]} goto cont15 end local tmp99 = _L[199](loadedSet, "luatex.def") if tmp99 then graphics_driver = {tag = "SOME", payload = _L[316]} goto cont15 end local tmp100 = _L[199](loadedSet, "xetex.def") if tmp100 then graphics_driver = {tag = "SOME", payload = _L[315]} else graphics_driver = {tag = "SOME", payload = _L[317]} end end end end ::cont15:: local tmp91 do local tmp92 = _L[199](loadedSet, "expl3-code.tex") do if tmp92 then tmp91 = true goto cont16 end local tmp93 = _L[199](loadedSet, "expl3.sty") if tmp93 then tmp91 = true goto cont16 end local tmp94 = _L[199](loadedSet, "l3backend-dvips.def") if tmp94 then tmp91 = true goto cont16 end local tmp95 = _L[199](loadedSet, "l3backend-dvipdfmx.def") if tmp95 then tmp91 = true goto cont16 end local tmp96 = _L[199](loadedSet, "l3backend-xdvipdfmx.def") if tmp96 then tmp91 = true goto cont16 end local tmp97 = _L[199](loadedSet, "l3backend-pdfmode.def") if tmp97 then tmp91 = true goto cont16 end local tmp98 = _L[199](loadedSet, "l3backend-pdftex.def") if tmp98 then tmp91 = true goto cont16 end local tmp99 = _L[199](loadedSet, "l3backend-luatex.def") if tmp99 then tmp91 = true else tmp91 = _L[199](loadedSet, "l3backend-xetex.def") end end end ::cont16:: local expl3_driver do if tmp91 then else expl3_driver = NONE goto cont17 end do local tmp92 = _L[199](loadedSet, "l3backend-pdfmode.def") if tmp92 then expl3_driver = {tag = "SOME", payload = _L[319]} goto cont17 end local tmp93 = _L[199](loadedSet, "l3backend-dvisvgm.def") if tmp93 then expl3_driver = {tag = "SOME", payload = _L[320]} goto cont17 end local tmp94 = _L[199](loadedSet, "l3backend-xdvipdfmx.def") if tmp94 then expl3_driver = {tag = "SOME", payload = _L[321]} goto cont17 end local tmp95 = _L[199](loadedSet, "l3backend-dvipdfmx.def") if tmp95 then expl3_driver = {tag = "SOME", payload = _L[322]} goto cont17 end local tmp96 = _L[199](loadedSet, "l3backend-dvips.def") if tmp96 then expl3_driver = {tag = "SOME", payload = _L[323]} goto cont17 end local tmp97 = _L[199](loadedSet, "l3backend-pdftex.def") if tmp97 then expl3_driver = {tag = "SOME", payload = _L[324]} goto cont17 end local tmp98 = _L[199](loadedSet, "l3backend-luatex.def") if tmp98 then expl3_driver = {tag = "SOME", payload = _L[325]} goto cont17 end local tmp99 = _L[199](loadedSet, "l3backend-xetex.def") if tmp99 then expl3_driver = {tag = "SOME", payload = _L[326]} else expl3_driver = {tag = "SOME", payload = _L[327]} end end end ::cont17:: local hyperref_driver do local tmp92 = _L[199](loadedSet, "hyperref.sty") do if tmp92 then else hyperref_driver = NONE goto cont18 end do local tmp93 = _L[199](loadedSet, "hluatex.def") if tmp93 then hyperref_driver = {tag = "SOME", payload = _L[333]} goto cont18 end local tmp94 = _L[199](loadedSet, "hpdftex.def") if tmp94 then hyperref_driver = {tag = "SOME", payload = _L[332]} goto cont18 end local tmp95 = _L[199](loadedSet, "hxetex.def") if tmp95 then hyperref_driver = {tag = "SOME", payload = _L[334]} goto cont18 end local tmp96 = _L[199](loadedSet, "hdvipdfm.def") if tmp96 then hyperref_driver = {tag = "SOME", payload = _L[330]} goto cont18 end local tmp97 = _L[199](loadedSet, "hdvips.def") if tmp97 then hyperref_driver = {tag = "SOME", payload = _L[331]} else hyperref_driver = {tag = "SOME", payload = _L[335]} end end end end ::cont18:: local xypic_driver do local tmp92 = _L[199](loadedSet, "xy.tex") do if tmp92 then else xypic_driver = NONE goto cont19 end do local tmp93 = _L[199](loadedSet, "xypdf.tex") if tmp93 then xypic_driver = {tag = "SOME", payload = _L[337]} goto cont19 end local tmp94 = _L[199](loadedSet, "xydvips.tex") if tmp94 then xypic_driver = {tag = "SOME", payload = _L[338]} else xypic_driver = {tag = "SOME", payload = _L[339]} end end end end ::cont19:: do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto cont20 end do do local tmp92 if graphics_driver.tag == "NONE" then tmp92 = "not loaded" else if graphics_driver.tag == "SOME" then else _raise(_Match, "check-driver.sml:204:17") end tmp92 = _L[318](graphics_driver.payload) end _L[304]("checkdriver: graphics=" .. tmp92) local tmp93 if expl3_driver.tag == "NONE" then tmp93 = "not loaded" else if expl3_driver.tag == "SOME" then else _raise(_Match, "check-driver.sml:210:17") end tmp93 = _L[329](expl3_driver.payload) end _L[304]("checkdriver: expl3=" .. tmp93) local tmp94 if hyperref_driver.tag == "NONE" then tmp94 = "not loaded" else if hyperref_driver.tag == "SOME" then else _raise(_Match, "check-driver.sml:216:17") end tmp94 = _L[336](hyperref_driver.payload) end _L[304]("checkdriver: hyperref=" .. tmp94) if xypic_driver.tag == "NONE" then else goto else2 end _L[304]("checkdriver: xypic=not loaded") goto cont20 end ::else2:: if xypic_driver.tag == "SOME" then else _raise(_Match, "check-driver.sml:222:17") end do local d = xypic_driver.payload if d == "PDF" then else goto else3 end _L[304]("checkdriver: xypic=pdf") goto cont20 ::else3:: if d == "DVIPS" then else goto else4 end _L[304]("checkdriver: xypic=dvips") goto cont20 ::else4:: if d == "UNKNOWN" then else _raise(_Match, "check-driver.sml:67:9") end _L[304]("checkdriver: xypic=unknown") end end end ::cont20:: local expected_xypic, expected_hyperref, expected_expl3_old, expected_expl3_new do local expected_graphics if driver == "DVIPS" then local tmp92 = {tag = "SOME", payload = _L[331]} expected_xypic = {tag = "SOME", payload = _L[338]} expected_hyperref = tmp92 expected_graphics = _L[312] expected_expl3_old = _L[323] expected_expl3_new = _L[323] elseif driver == "DVIPDFMX" then local tmp92 = {tag = "SOME", payload = _L[330]} expected_xypic = {tag = "SOME", payload = _L[337]} expected_hyperref = tmp92 expected_graphics = _L[311] expected_expl3_old = _L[322] expected_expl3_new = _L[322] elseif driver == "DVISVGM" then expected_xypic = NONE expected_hyperref = NONE expected_graphics = _L[313] expected_expl3_old = _L[320] expected_expl3_new = _L[320] elseif driver == "XETEX" then local tmp92 = {tag = "SOME", payload = _L[334]} expected_xypic = {tag = "SOME", payload = _L[337]} expected_hyperref = tmp92 expected_graphics = _L[315] expected_expl3_old = _L[321] expected_expl3_new = _L[326] elseif driver == "PDFTEX" then local tmp92 = {tag = "SOME", payload = _L[332]} expected_xypic = {tag = "SOME", payload = _L[337]} expected_hyperref = tmp92 expected_graphics = _L[314] expected_expl3_old = _L[319] expected_expl3_new = _L[324] elseif driver == "LUATEX" then local tmp92 = {tag = "SOME", payload = _L[333]} expected_xypic = {tag = "SOME", payload = _L[337]} expected_hyperref = tmp92 expected_graphics = _L[316] expected_expl3_old = _L[319] expected_expl3_new = _L[325] else _raise(_Match, "check-driver.sml:72:7") end do if graphics_driver.tag == "NONE" then goto cont21 end if graphics_driver.tag == "SOME" then else _raise(_Match, "check-driver.sml:236:7") end do local d = graphics_driver.payload local tmp92 tmp92 = not (d == "DVIPDFMX" and expected_graphics == "DVIPDFMX") and (not (d == "DVIPS" and expected_graphics == "DVIPS") and (not (d == "DVISVGM" and expected_graphics == "DVISVGM") and (not (d == "PDFTEX" and expected_graphics == "PDFTEX") and (not (d == "XETEX" and expected_graphics == "XETEX") and (not (d == "LUATEX" and expected_graphics == "LUATEX") and (d ~= "UNKNOWN" or expected_graphics ~= "UNKNOWN")))))) if tmp92 then else goto cont21 end do _L[303]("The driver option for grahipcs(x)/color is missing or wrong.") local tmp93 = _L[318](expected_graphics) _L[303]("Consider setting '" .. tmp93 .. "' option.") end end end end ::cont21:: do if expl3_driver.tag == "NONE" then goto cont22 end if expl3_driver.tag == "SOME" then else _raise(_Match, "check-driver.sml:248:7") end do local tmp92 do local d = expl3_driver.payload local tmp93 do local tmp94 = _L[328](d, expected_expl3_old) tmp93 = not tmp94 end do if tmp93 then else tmp92 = false goto cont24 end do local tmp94 = _L[328](d, expected_expl3_new) tmp92 = not tmp94 end end end ::cont24:: if tmp92 then else goto cont22 end do _L[303]("The driver option for expl3 is missing or wrong.") local tmp93 = _L[329](expected_expl3_new) _L[303]("Consider setting 'driver=" .. tmp93 .. "' option when loading expl3.") local tmp94 = _L[328](expected_expl3_old, expected_expl3_new) if not tmp94 then else goto cont22 end do local tmp95 = _L[329](expected_expl3_old) _L[303]("You might need to instead set 'driver=" .. tmp95 .. "' if you are using an older version of expl3.") end end end end ::cont22:: do local tmp92 = hyperref_driver.tag == "SOME" and expected_hyperref.tag == "SOME" do if tmp92 then else goto cont23 end do local actual = hyperref_driver.payload local expected = expected_hyperref.payload local tmp93 tmp93 = not (actual == "DVIPDFMX" and expected == "DVIPDFMX") and (not (actual == "DVIPS" and expected == "DVIPS") and (not (actual == "PDFTEX" and expected == "PDFTEX") and (not (actual == "LUATEX" and expected == "LUATEX") and (not (actual == "XETEX" and expected == "XETEX") and (actual ~= "UNKNOWN" or expected ~= "UNKNOWN"))))) if tmp93 then else goto cont23 end do _L[303]("The driver option for hyperref is missing or wrong.") local tmp94 = _L[336](expected) _L[303]("Consider setting '" .. tmp94 .. "' option.") end end end end ::cont23:: if xypic_driver.tag == "SOME" and expected_xypic.tag == "SOME" then else goto cont9 end do local actual = xypic_driver.payload local expected = expected_xypic.payload local tmp92 tmp92 = not (actual == "PDF" and expected == "PDF") and (not (actual == "DVIPS" and expected == "DVIPS") and (actual ~= "UNKNOWN" or expected ~= "UNKNOWN")) if tmp92 then else goto cont9 end do _L[303]("The driver option for Xy-pic is missing or wrong.") if driver == "DVIPDFMX" then else if driver == "PDFTEX" then else if expected == "PDF" then else if expected == "DVIPS" then elseif expected == "UNKNOWN" then goto cont9 else _raise(_Match, "check-driver.sml:280:15") end _L[303]("Consider setting 'dvips' option.") goto cont13 end _L[303]("Consider setting 'pdf' package option or running \\xyoption{pdf}.") goto cont13 end _L[303]("Consider setting 'pdftex' option or running \\xyoption{pdf}.") goto cont13 end _L[303]("Consider setting 'dvipdfmx' option or running \\xyoption{pdf}.") end end end end ::cont13:: end end end ::cont9:: local filelist2 do if tmp59.tag == "NONE" then else goto else2 end if not tmp20(execlog, "No file [^\n]+%.ind%.") then filelist2 = filelist1 goto cont10 end _L[303]("You may want to use --makeindex option.") filelist2 = filelist1 goto cont10 ::else2:: if tmp59.tag == "SOME" then else _raise(_Match, "main.sml:354:33") end do local makeindex = tmp59.payload local tmp89 = foldl(function(a) local file = a[1] local filelist_acc = a[2] local tmp90 = _L[214](file.path) if tmp90 == "idx" then else return filelist_acc end do local tmp91 do local idxfileinfo = {abspath = file.abspath, kind = _L[357], path = file.path} tmp91 = _L[210].replaceext(file.abspath, "ind") local tmp92 = _L[361]({idxfileinfo, nil}, auxstatus1) local tmp93 if tmp92[1] then tmp93 = true else tmp93 = _L[362](auxstatus1, tmp91, file.abspath) end if tmp93 then else goto else1 end do local idx_dir = _L[212](file.abspath) local tmp94 = _L[208](idx_dir) local tmp95 = _L[211](tmp91) local tmp96 = _L[211](file.abspath) _L[526](table_concat({n = 7, "cd", tmp94, "&&", makeindex, "-o", tmp95, tmp96}, " "), NONE) return {{abspath = tmp91, kind = _L[357], path = tmp91}, filelist_acc} end end ::else1:: do local status, exn = _handle(function() local tmp92, tmp93 = _L[216].touch(tmp91) if not tmp92 then else return nil end do local tmp94 = _Error(tmp93) _raise(tmp94, "fs-util.sml:28:25") end end) if not status then if __exn_instanceof(exn, _Error_tag) then else _raise(exn, nil) end do _L[302]("Failed to touch " .. tmp91 .. " (" .. exn.payload .. ")") return filelist_acc end end end return filelist_acc end end) local tmp90 = tmp89(filelist1) filelist2 = tmp90(filelist1) end end ::cont10:: local filelist3 do if exp4.tag == "NONE" then else goto else2 end if not tmp20(execlog, "No file [^\n]+%.gls%.") then filelist3 = filelist2 goto cont11 end _L[303]("You may want to use --makeglossaries option.") filelist3 = filelist2 goto cont11 ::else2:: if exp4.tag == "SOME" then else _raise(_Match, "main.sml:390:33") end do local makeglossaries = exp4.payload local tmp89 = foldl(function(a) local file = a[1] local filelist_acc = a[2] local tmp90 = _L[214](file.path) if tmp90 == "glo" then else return filelist_acc end do local tmp91 do local glofileinfo = {abspath = file.abspath, kind = _L[357], path = file.path} tmp91 = _L[210].replaceext(file.abspath, "gls") local tmp92 = _L[361]({glofileinfo, nil}, auxstatus1) local tmp93 if tmp92[1] then tmp93 = true else tmp93 = _L[362](auxstatus1, tmp91, file.abspath) end if tmp93 then else goto else1 end do local tmp94 = _L[208](tmp62) local tmp95 = _L[211](file.path) local tmp96 = _L[213](tmp95) _L[526](table_concat({n = 4, makeglossaries, "-d", tmp94, tmp96}, " "), NONE) return {{abspath = tmp91, kind = _L[357], path = tmp91}, filelist_acc} end end ::else1:: do local status, exn = _handle(function() local tmp92, tmp93 = _L[216].touch(tmp91) if not tmp92 then else return nil end do local tmp94 = _Error(tmp93) _raise(tmp94, "fs-util.sml:28:25") end end) if not status then if __exn_instanceof(exn, _Error_tag) then else _raise(exn, nil) end do _L[302]("Failed to touch " .. tmp91 .. " (" .. exn.payload .. ")") return filelist_acc end end end return filelist_acc end end) local tmp90 = tmp89(filelist2) filelist3 = tmp90(filelist2) end end ::cont11:: local filelist4 do if exp.tag == "NONE" then else goto else2 end if not tmp20(execlog, "No file [^\n]+%.bbl%.") then filelist4 = filelist3 goto cont12 end _L[303]("You may want to use --bibtex or biber option.") filelist4 = filelist3 goto cont12 ::else2:: if exp.tag == "SOME" and exp.payload.tag == "BIBTEX" then else goto else3 end do local bibtex, bibtex_aux_hash2 do bibtex = exp.payload.payload local biblines2 do local tmp89 = _L[353](tmp87, tmp62, nil) biblines2 = revAppend(tmp89, nil) end local tmp89 = biblines2 == nil do if tmp89 then bibtex_aux_hash2 = NONE goto cont13 end local tmp90 = _L[191](table_concat(_VectorOrArray_fromList(biblines2), "\n")) bibtex_aux_hash2 = {tag = "SOME", payload = tmp90} end end ::cont13:: local tmp89, tmp90 do local tmp91 = tmp58 .. "." .. "bbl" tmp89 = _L[210].join(tmp62, tmp91) local tmp92 = tmp(function(a) local x = a[1] local y = a[2] return x[4] == y[4] and (x[3] == y[3] and (x[2] == y[2] and x[1] == y[1])) end) local tmp93 do local tmp94 = tmp92({bibtex_aux_hash, bibtex_aux_hash2}) tmp93 = not tmp94 end do if tmp93 then tmp90 = true goto cont14 end local tmp94 = _L[215](NONE, tmp87) tmp90 = _L[362](auxstatus1, tmp89, tmp94) end end ::cont14:: if tmp90 then else goto else4 end do local tmp91 = _L[208](tmp62) local tmp92 = _L[211](tmp87) _L[526](table_concat({n = 5, "cd", tmp91, "&&", bibtex, tmp92}, " "), NONE) filelist4 = filelist3 goto cont12 end ::else4:: do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto cont15 end _L[304]("No need to run BibTeX.") end ::cont15:: do local status, exn = _handle(function() local tmp91, tmp92 = _L[216].touch(tmp89) if not tmp91 then else return nil end do local tmp93 = _Error(tmp92) _raise(tmp93, "fs-util.sml:28:25") end end) if not status then if __exn_instanceof(exn, _Error_tag) then else _raise(exn, nil) end do local err = exn.payload _L[302]("Failed to touch " .. tmp89 .. " (" .. err .. ")") filelist4 = filelist3 goto cont12 end end end filelist4 = filelist3 goto cont12 end ::else3:: if exp.tag == "SOME" and exp.payload.tag == "BIBER" then else _raise(_Match, "main.sml:424:33") end do local biber = exp.payload.payload local tmp89 = foldl(function(a) local file = a[1] local filelist_acc = a[2] local tmp90 = _L[214](file.path) if tmp90 == "bcf" then else return filelist_acc end do local bcffileinfo = {abspath = file.abspath, kind = _L[357], path = file.path} local tmp91 = _L[210].replaceext(file.abspath, "bbl") local updated_dot_bib do local ins = _L[115](file.abspath) local tmp92 = false ::cont2:: do local a1 = tmp92 local exp7 = _L[114](ins) if exp7.tag == "NONE" then else goto else2 end _L[120](ins) updated_dot_bib = a1 goto cont ::else2:: if exp7.tag == "SOME" then else _raise(_Match, "main.sml:470:65") end do local tmp93 do local tmp94 = tmp22(exp7.payload, "(.*)") if not tmp94 then tmp92 = a1 goto cont2 end tmp93 = _L[210].join(original_wd, tmp94) local tmp95 = _L[218](tmp93) if tmp95 then else goto else3 end do local tmp96 = _L[215](NONE, tmp87) local tmp97 = _L[362](auxstatus1, tmp93, tmp96) local tmp98 = not tmp97 if tmp98 then else tmp92 = a1 or tmp98 goto cont2 end _L[304](tmp93 .. " is newer than aux") tmp92 = a1 or tmp98 goto cont2 end end ::else3:: _L[302](tmp93 .. " is not accessible") tmp92 = a1 goto cont2 end end end ::cont:: local tmp92 do if updated_dot_bib then tmp92 = true goto cont1 end local tmp93 = _L[361]({bcffileinfo, nil}, auxstatus1) if tmp93[1] then tmp92 = true else tmp92 = _L[362](auxstatus1, tmp91, file.abspath) end end ::cont1:: if tmp92 then else goto else1 end do local tmp93 = _L[208](tmp62) local tmp94 = _L[211](file.abspath) _L[526](table_concat({n = 4, biber, "--output-directory", tmp93, tmp94}, " "), NONE) return {{abspath = tmp91, kind = _L[357], path = tmp91}, filelist3} end ::else1:: do local status, exn = _handle(function() local tmp93, tmp94 = _L[216].touch(tmp91) if not tmp93 then else return nil end do local tmp95 = _Error(tmp94) _raise(tmp95, "fs-util.sml:28:25") end end) if not status then if __exn_instanceof(exn, _Error_tag) then else _raise(exn, nil) end do _L[302]("Failed to touch " .. tmp91 .. " (" .. exn.payload .. ")") return filelist_acc end end end return filelist_acc end end) local tmp90 = tmp89(filelist3) filelist4 = tmp90(filelist3) end end ::cont12:: local tmp89 = _L[49]("No pages of output.") local tmp90 = tmp89(execlog) if tmp90 then exp6 = _L[528] goto cont2 end local exp7 = _L[361](filelist4, auxstatus1) local should_rerun = exp7[1] local auxstatus2 = exp7[2] local tmp91 tmp91 = should_rerun or lightweight_mode if tmp91 then exp6 = {tag = "SHOULD_RERUN", payload = auxstatus2} else exp6 = _L[527] end end end ::cont2:: if exp6.tag == "NO_PAGES_OF_OUTPUT" then else goto else1 end _L[302]("No pages of output.") tmp83 = false goto cont ::else1:: if exp6.tag == "NO_NEED_TO_RERUN" then tmp83 = true goto cont end if exp6.tag == "SHOULD_RERUN" then else _raise(_Match, "main.sml:533:20") end do local auxstatus = exp6.payload if tmp86 >= tmp60 then else tmp84 = tmp86 tmp85 = auxstatus goto cont1 end _L[302]("LaTeX should be run once more.") tmp83 = true end end end ::cont:: if tmp83 then else return nil end do do local tmp84 = _L[232](tmp63, _L[231]) local tmp85 tmp85 = tmp84 or tmp56 do if tmp85 then else goto else1 end do local tmp86 = tmp58 .. "." .. output_extension local tmp87 = _L[210].join(tmp62, tmp86) local onCopyError if _L[220] then onCopyError = {tag = "SOME", payload = function(a) local output_format if tmp63 == "DVI" then output_format = "DVI" elseif tmp63 == "PDF" then output_format = "PDF" else _raise(_Match, "main.sml:551:85") end _L[301]("Failed to copy file. Some applications may be locking the " .. output_format .. " file.") return false end} else onCopyError = NONE end _L[526](_L[217].copy_command(tmp87, tmp61), onCopyError) if tmp57 == nil then goto cont1 end _L[302]("--dvipdfmx-option[s] are ignored.") goto cont1 end ::else1:: local tmp86 = tmp58 .. "." .. "dvi" local tmp87 = _L[210].join(tmp62, tmp86) local tmp88 = _L[208](tmp61) local tmp89 = _L[208](tmp87) local tmp90 = {tmp89, nil} local tmp91 do local tmp92 = revAppend(tmp57, nil) tmp91 = revAppend(tmp92, tmp90) end _L[526](table_concat(_VectorOrArray_fromList({"dvipdfmx", {"-o", {tmp88, tmp91}}}), " "), NONE) end end ::cont1:: do local tmp84 = _L[232](tmp63, _L[230]) do if tmp84 then else goto cont2 end do local tmp85 = getOpt(tmp69, "0") local tmp86 = tmp4(tmp85) local synctex_ext if tmp86 > 0 then synctex_ext = {tag = "SOME", payload = "synctex.gz"} elseif tmp86 < 0 then synctex_ext = {tag = "SOME", payload = "synctex"} else synctex_ext = NONE end if synctex_ext.tag == "SOME" then elseif synctex_ext.tag == "NONE" then goto cont2 else _raise(_Match, "main.sml:583:23") end do local ext = synctex_ext.payload local tmp87 = tmp58 .. "." .. ext local tmp88 = _L[210].join(tmp62, tmp87) local tmp89 = _L[210].replaceext(tmp61, ext) _L[526](_L[217].copy_command(tmp88, tmp89), NONE) end end end end ::cont2:: do if exp3.tag == "SOME" then elseif exp3.tag == "NONE" then goto cont3 else _raise(_Match, "main.sml:590:16") end do local make_depends, recorded, tmp84 do make_depends = exp3.payload recorded = _L[360](recorderfile, tmp59, nil, _L[203]) local tmp85 = _L[237](engine_type, _L[235]) do if tmp85 then else tmp84 = false goto cont4 end tmp84 = _L[218](recorderfile2) end end ::cont4:: local recorded1 do if tmp84 then else recorded1 = recorded goto cont5 end do local fileList = recorded[1] recorded1 = _L[360](recorderfile2, tmp59, fileList, recorded[2]) end end ::cont5:: local filelist, outs do local exp6 do local fileInfo = recorded1[1] exp6 = _L[359](fileInfo, recorded1[2]) end filelist = exp6[1] do local tmp85, tmp86 = tmp7(make_depends, "w") if tmp85 == nil then else local tmp87 = _L[113].mkOutstream outs = tmp87({tag = "LUA_WRITABLE", payload = {buffer_mode = {_L[16]}, name = make_depends, writable = tmp85}}) goto cont6 end do local tmp87 = _Fail(tmp86) _raise({tag = _L[9], payload = {cause = tmp87, ["function"] = "TextIO.openOut", name = make_depends}}, "text-io.sml:493:27") end end end ::cont6:: _L[124]({outs, tmp61 .. ":"}) local tmp85 = app1(function(a) if a.kind == "INPUT" then else return nil end do return _L[124]({outs, " " .. a.path}) end end) tmp85(filelist) _L[124]({outs, "\n"}) _L[121](outs) end end ::cont3:: if _ENV.CLUTTEX_VERBOSITY >= 1 then else return nil end do return _L[304]("Command exited successfully") end end end _L[530] = function(a, a1) local tmp54 = assert(a.new()) local tmp55 = app1(function(file) assert(tmp54:add(file)) return nil end) tmp55(a1) local tmp56 = assert(tmp54:next()) if _ENV.CLUTTEX_VERBOSITY >= 2 then else tmp54:close() return true end do local tmp57 = tmp56.action .. " " _L[304](tmp57 .. tmp56.path) tmp54:close() return true end end _L[531] = function(a) local tmp54 do local tmp55 = map(_L[208]) local tmp56 = tmp55(a) tmp54 = table_concat(_VectorOrArray_fromList({"fswatch", {"--one-event", {"--event=Updated", {"--", tmp56}}}}), " ") do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto cont end _L[300](tmp54) end end ::cont:: local tmp55 = assert(tmp8(tmp54, "r")) local tmp56 = tmp55:lines() ::cont1:: do local tmp57 = tmp56() if not tmp57 then tmp55:close() return false end local tmp58 = exists(function(path) return tmp57 == path end) local tmp59 = tmp58(a) if tmp59 then tmp55:close() return true else goto cont1 end end end _L[532] = function(a) local tmp54 do local tmp55 = map(_L[208]) local tmp56 = tmp55(a) tmp54 = table_concat(_VectorOrArray_fromList({"inotifywait", {"--event=modify", {"--event=attrib", {"--format=%w", {"--quiet", tmp56}}}}}), " ") do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto cont end _L[300](tmp54) end end ::cont:: local tmp55 = assert(tmp8(tmp54, "r")) local tmp56 = tmp55:lines() ::cont1:: do local tmp57 = tmp56() if not tmp57 then tmp55:close() return false end local tmp58 = exists(function(path) return tmp57 == path end) local tmp59 = tmp58(a) if tmp59 then tmp55:close() return true else goto cont1 end end end do do _L[534] = #_L[154] _L[533] = tabulate(_L[534], function(i) return _L[154][_Int_add(i, 1)] end) end do _L[536], _L[537] = _L[349], _L[533] ::cont18:: do local _L1 = {} _L1[1], _L1[2] = _L[536], _L[537] do if _L1[2] == nil then _L1[3] = NONE goto cont19 end _L1[4] = _L[525] ::cont20:: do local _L2 = {} _L2[1] = _L1[4] if _L2[1] == nil then _L1[3] = NONE goto cont19 end if _L2[1] ~= nil then else _raise(_Match, "handle-options.sml:63:41") end do _L2[2] = _L2[1][1] _L2[3] = _L2[1][2] do _L2[5] = _L2[2][1] _L2[6] = _L2[2][2] if _L1[2] == nil then _L2[4] = NONE goto cont21 end _L2[7] = _L2[5].tag == "SHORT" and _L2[6].tag == "SIMPLE" _L2[8] = _L2[7] and _L1[2] ~= nil if _L2[8] then _L2[9] = _L2[5].payload _L2[10] = _L2[6].payload _L2[11] = _L1[2][1] _L2[12] = _L1[2][2] if _L2[11] == _L2[9] then _L2[4] = {tag = "SOME", payload = {_L2[10], _L2[12]}} goto cont21 else _L2[4] = NONE goto cont21 end end _L2[13] = _L2[5].tag == "SHORT" and _L2[6].tag == "WITH_ARG" _L2[14] = _L2[13] and _L1[2] ~= nil if _L2[14] then else goto else33 end do _L2[15] = _L2[5].payload _L2[16] = _L2[6].payload _L2[17] = _L1[2][1] _L2[18] = _L1[2][2] if _L2[17] == _L2[15] then else goto else36 end do if _L2[18] == nil then else goto else37 end do _L2[19] = _Fail("argument missing after " .. _L2[15]) _raise(_L2[19], "handle-options.sml:21:21") end ::else37:: if _L2[18] ~= nil then else _raise(_Match, "handle-options.sml:20:11") end do _L2[20] = _L2[18][1] _L2[21] = _L2[18][2] _L2[22] = _L2[16](_L2[20]) _L2[4] = {tag = "SOME", payload = {_L2[22], _L2[21]}} goto cont21 end end ::else36:: _L2[23] = isPrefix(_L2[15]) _L2[24] = _L2[23](_L2[17]) if _L2[24] then else _L2[4] = NONE goto cont21 end do _L2[25] = extract(_L2[17], #_L2[15], NONE) _L2[26] = _L2[16](_L2[25]) _L2[4] = {tag = "SOME", payload = {_L2[26], _L2[18]}} goto cont21 end end ::else33:: _L2[27] = _L2[5].tag == "SHORT" and _L2[6].tag == "WITH_OPTIONAL_ARG" _L2[28] = _L2[27] and _L1[2] ~= nil if _L2[28] then else goto else34 end do _L2[29] = _L2[5].payload _L2[30] = _L2[6].payload.default _L2[31] = _L2[6].payload.action _L2[32] = _L1[2][1] _L2[33] = _L1[2][2] if _L2[32] == _L2[29] then else goto else36 end do _L2[34] = _L2[31](_L2[30]) _L2[4] = {tag = "SOME", payload = {_L2[34], _L2[33]}} goto cont21 end ::else36:: _L2[35] = isPrefix(_L2[29]) _L2[36] = _L2[35](_L2[32]) if _L2[36] then else _L2[4] = NONE goto cont21 end do _L2[37] = extract(_L2[32], #_L2[29], NONE) _L2[38] = _L2[31](_L2[37]) _L2[4] = {tag = "SOME", payload = {_L2[38], _L2[33]}} goto cont21 end end ::else34:: _L2[39] = _L2[5].tag == "LONG" and _L2[6].tag == "SIMPLE" _L2[40] = _L2[39] and _L1[2] ~= nil if _L2[40] then _L2[41] = _L2[5].payload _L2[42] = _L2[6].payload _L2[43] = _L1[2][1] _L2[44] = _L1[2][2] if _L2[43] == _L2[41] then _L2[4] = {tag = "SOME", payload = {_L2[42], _L2[44]}} goto cont21 else _L2[4] = NONE goto cont21 end end _L2[45] = _L2[5].tag == "LONG" and _L2[6].tag == "WITH_ARG" _L2[46] = _L2[45] and _L1[2] ~= nil if _L2[46] then else goto else35 end do _L2[47] = _L2[5].payload _L2[48] = _L2[6].payload _L2[49] = _L1[2][1] _L2[50] = _L1[2][2] if _L2[49] == _L2[47] then else goto else36 end do if _L2[50] == nil then else goto else37 end do _L2[51] = _Fail("argument missing after " .. _L2[47]) _raise(_L2[51], "handle-options.sml:45:21") end ::else37:: if _L2[50] ~= nil then else _raise(_Match, "handle-options.sml:44:11") end do _L2[52] = _L2[50][1] _L2[53] = _L2[50][2] _L2[54] = _L2[48](_L2[52]) _L2[4] = {tag = "SOME", payload = {_L2[54], _L2[53]}} goto cont21 end end ::else36:: _L2[55] = isPrefix(_L2[47] .. "=") _L2[56] = _L2[55](_L2[49]) if _L2[56] then else _L2[4] = NONE goto cont21 end do _L2[57] = extract(_L2[49], _Int_add(#_L2[47], 1), NONE) _L2[58] = _L2[48](_L2[57]) _L2[4] = {tag = "SOME", payload = {_L2[58], _L2[50]}} goto cont21 end end ::else35:: _L2[59] = _L2[5].tag == "LONG" and _L2[6].tag == "WITH_OPTIONAL_ARG" _L2[60] = _L2[59] and _L1[2] ~= nil if _L2[60] then else _raise(_Match, "handle-options.sml:13:5") end do _L2[61] = _L2[5].payload _L2[62] = _L2[6].payload.default _L2[63] = _L2[6].payload.action _L2[64] = _L1[2][1] _L2[65] = _L1[2][2] if _L2[64] == _L2[61] then else goto else36 end do _L2[66] = _L2[63](_L2[62]) _L2[4] = {tag = "SOME", payload = {_L2[66], _L2[65]}} goto cont21 end ::else36:: _L2[67] = isPrefix(_L2[61] .. "=") _L2[68] = _L2[67](_L2[64]) if _L2[68] then else _L2[4] = NONE goto cont21 end do _L2[69] = extract(_L2[64], _Int_add(#_L2[61], 1), NONE) _L2[70] = _L2[63](_L2[69]) _L2[4] = {tag = "SOME", payload = {_L2[70], _L2[65]}} end end end ::cont21:: if _L2[4].tag == "SOME" then _L1[3] = {tag = "SOME", payload = _L2[4].payload} elseif _L2[4].tag == "NONE" then _L1[4] = _L2[3] goto cont20 else _raise(_Match, "handle-options.sml:64:62") end end end end ::cont19:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_ENGINE" then else goto else2 end do _L1[5] = _L1[3].payload[1].payload _L1[6] = _L1[3].payload[2] _L1[7] = _L1[1].engine if _L1[7].tag == "NONE" then _L1[8] = _L1[1].bibtex_or_biber _L1[9] = _L1[1].change_directory _L1[10] = _L1[1].check_driver _L1[11] = _L1[1].color _L1[12] = _L1[1].config_file _L1[13] = _L1[1].dvipdfmx_extraoptions _L1[14] = _L1[1].engine_executable _L1[15] = _L1[1].file_line_error _L1[16] = _L1[1].fmt _L1[17] = _L1[1].fresh _L1[18] = _L1[1].halt_on_error _L1[19] = _L1[1].includeonly _L1[20] = _L1[1].interaction _L1[21] = _L1[1].jobname _L1[22] = _L1[1].make_depends _L1[23] = _L1[1].makeglossaries _L1[24] = _L1[1].makeindex _L1[25] = _L1[1].max_iterations _L1[26] = _L1[1].output _L1[27] = _L1[1].output_directory _L1[28] = _L1[1].output_format _L1[29] = _L1[1].package_support _L1[30] = _L1[1].print_output_directory _L1[31] = _L1[1].shell_escape _L1[32] = _L1[1].source_date_epoch _L1[33] = _L1[1].start_with_draft _L1[34] = _L1[1].synctex _L1[35] = _L1[1].tex_extraoptions _L1[36] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[8], change_directory = _L1[9], check_driver = _L1[10], color = _L1[11], config_file = _L1[12], dvipdfmx_extraoptions = _L1[13], engine = {tag = "SOME", payload = _L1[5]}, engine_executable = _L1[14], file_line_error = _L1[15], fmt = _L1[16], fresh = _L1[17], halt_on_error = _L1[18], includeonly = _L1[19], interaction = _L1[20], jobname = _L1[21], make_depends = _L1[22], makeglossaries = _L1[23], makeindex = _L1[24], max_iterations = _L1[25], output = _L1[26], output_directory = _L1[27], output_format = _L1[28], package_support = _L1[29], print_output_directory = _L1[30], shell_escape = _L1[31], source_date_epoch = _L1[32], start_with_draft = _L1[33], synctex = _L1[34], tex_extraoptions = _L1[35], watch = _L1[36]} _L[537] = _L1[6] goto cont18 end if _L1[7].tag == "SOME" then else _raise(_Match, "handle-options.sml:168:46") end _L[124]({_L[118], "multiple --engine options\n"}) tmp15(1, true) end ::else2:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_ENGINE_EXECUTABLE" then else goto else3 end do _L1[37] = _L1[3].payload[1].payload _L1[38] = _L1[3].payload[2] _L1[39] = _L1[1].engine_executable if _L1[39].tag == "NONE" then _L1[40] = _L1[1].bibtex_or_biber _L1[41] = _L1[1].change_directory _L1[42] = _L1[1].check_driver _L1[43] = _L1[1].color _L1[44] = _L1[1].config_file _L1[45] = _L1[1].dvipdfmx_extraoptions _L1[46] = _L1[1].engine _L1[47] = _L1[1].file_line_error _L1[48] = _L1[1].fmt _L1[49] = _L1[1].fresh _L1[50] = _L1[1].halt_on_error _L1[51] = _L1[1].includeonly _L1[52] = _L1[1].interaction _L1[53] = _L1[1].jobname _L1[54] = _L1[1].make_depends _L1[55] = _L1[1].makeglossaries _L1[56] = _L1[1].makeindex _L1[57] = _L1[1].max_iterations _L1[58] = _L1[1].output _L1[59] = _L1[1].output_directory _L1[60] = _L1[1].output_format _L1[61] = _L1[1].package_support _L1[62] = _L1[1].print_output_directory _L1[63] = _L1[1].shell_escape _L1[64] = _L1[1].source_date_epoch _L1[65] = _L1[1].start_with_draft _L1[66] = _L1[1].synctex _L1[67] = _L1[1].tex_extraoptions _L1[68] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[40], change_directory = _L1[41], check_driver = _L1[42], color = _L1[43], config_file = _L1[44], dvipdfmx_extraoptions = _L1[45], engine = _L1[46], engine_executable = {tag = "SOME", payload = _L1[37]}, file_line_error = _L1[47], fmt = _L1[48], fresh = _L1[49], halt_on_error = _L1[50], includeonly = _L1[51], interaction = _L1[52], jobname = _L1[53], make_depends = _L1[54], makeglossaries = _L1[55], makeindex = _L1[56], max_iterations = _L1[57], output = _L1[58], output_directory = _L1[59], output_format = _L1[60], package_support = _L1[61], print_output_directory = _L1[62], shell_escape = _L1[63], source_date_epoch = _L1[64], start_with_draft = _L1[65], synctex = _L1[66], tex_extraoptions = _L1[67], watch = _L1[68]} _L[537] = _L1[38] goto cont18 end if _L1[39].tag == "SOME" then else _raise(_Match, "handle-options.sml:172:61") end _L[124]({_L[118], "multiple --engine-executable options\n"}) tmp15(1, true) end ::else3:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_OUTPUT" then else goto else4 end do _L1[69] = _L1[3].payload[1].payload _L1[70] = _L1[3].payload[2] _L1[71] = _L1[1].output if _L1[71].tag == "NONE" then _L1[72] = _L1[1].bibtex_or_biber _L1[73] = _L1[1].change_directory _L1[74] = _L1[1].check_driver _L1[75] = _L1[1].color _L1[76] = _L1[1].config_file _L1[77] = _L1[1].dvipdfmx_extraoptions _L1[78] = _L1[1].engine _L1[79] = _L1[1].engine_executable _L1[80] = _L1[1].file_line_error _L1[81] = _L1[1].fmt _L1[82] = _L1[1].fresh _L1[83] = _L1[1].halt_on_error _L1[84] = _L1[1].includeonly _L1[85] = _L1[1].interaction _L1[86] = _L1[1].jobname _L1[87] = _L1[1].make_depends _L1[88] = _L1[1].makeglossaries _L1[89] = _L1[1].makeindex _L1[90] = _L1[1].max_iterations _L1[91] = _L1[1].output_directory _L1[92] = _L1[1].output_format _L1[93] = _L1[1].package_support _L1[94] = _L1[1].print_output_directory _L1[95] = _L1[1].shell_escape _L1[96] = _L1[1].source_date_epoch _L1[97] = _L1[1].start_with_draft _L1[98] = _L1[1].synctex _L1[99] = _L1[1].tex_extraoptions _L1[100] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[72], change_directory = _L1[73], check_driver = _L1[74], color = _L1[75], config_file = _L1[76], dvipdfmx_extraoptions = _L1[77], engine = _L1[78], engine_executable = _L1[79], file_line_error = _L1[80], fmt = _L1[81], fresh = _L1[82], halt_on_error = _L1[83], includeonly = _L1[84], interaction = _L1[85], jobname = _L1[86], make_depends = _L1[87], makeglossaries = _L1[88], makeindex = _L1[89], max_iterations = _L1[90], output = {tag = "SOME", payload = _L1[69]}, output_directory = _L1[91], output_format = _L1[92], package_support = _L1[93], print_output_directory = _L1[94], shell_escape = _L1[95], source_date_epoch = _L1[96], start_with_draft = _L1[97], synctex = _L1[98], tex_extraoptions = _L1[99], watch = _L1[100]} _L[537] = _L1[70] goto cont18 end if _L1[71].tag == "SOME" then else _raise(_Match, "handle-options.sml:176:46") end _L[124]({_L[118], "multiple --output options\n"}) tmp15(1, true) end ::else4:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_FRESH" then else goto else5 end do _L1[101] = _L1[3].payload[2] _L1[102] = _L1[1].fresh if not _L1[102] then _L1[103] = _L1[1].bibtex_or_biber _L1[104] = _L1[1].change_directory _L1[105] = _L1[1].check_driver _L1[106] = _L1[1].color _L1[107] = _L1[1].config_file _L1[108] = _L1[1].dvipdfmx_extraoptions _L1[109] = _L1[1].engine _L1[110] = _L1[1].engine_executable _L1[111] = _L1[1].file_line_error _L1[112] = _L1[1].fmt _L1[113] = _L1[1].halt_on_error _L1[114] = _L1[1].includeonly _L1[115] = _L1[1].interaction _L1[116] = _L1[1].jobname _L1[117] = _L1[1].make_depends _L1[118] = _L1[1].makeglossaries _L1[119] = _L1[1].makeindex _L1[120] = _L1[1].max_iterations _L1[121] = _L1[1].output _L1[122] = _L1[1].output_directory _L1[123] = _L1[1].output_format _L1[124] = _L1[1].package_support _L1[125] = _L1[1].print_output_directory _L1[126] = _L1[1].shell_escape _L1[127] = _L1[1].source_date_epoch _L1[128] = _L1[1].start_with_draft _L1[129] = _L1[1].synctex _L1[130] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[103], change_directory = _L1[104], check_driver = _L1[105], color = _L1[106], config_file = _L1[107], dvipdfmx_extraoptions = _L1[108], engine = _L1[109], engine_executable = _L1[110], file_line_error = _L1[111], fmt = _L1[112], fresh = true, halt_on_error = _L1[113], includeonly = _L1[114], interaction = _L1[115], jobname = _L1[116], make_depends = _L1[117], makeglossaries = _L1[118], makeindex = _L1[119], max_iterations = _L1[120], output = _L1[121], output_directory = _L1[122], output_format = _L1[123], package_support = _L1[124], print_output_directory = _L1[125], shell_escape = _L1[126], source_date_epoch = _L1[127], start_with_draft = _L1[128], synctex = _L1[129], tex_extraoptions = _L1[130], watch = _L1[1].watch} _L[537] = _L1[101] goto cont18 end if _L1[102] then else _raise(_Match, "handle-options.sml:180:38") end _L[124]({_L[118], "multiple --fresh options\n"}) tmp15(1, true) end ::else5:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_MAX_ITERATIONS" then else goto else6 end do _L1[131] = _L1[3].payload[1].payload _L1[132] = _L1[3].payload[2] _L1[133] = _L1[1].max_iterations if _L1[133].tag == "NONE" then else goto else33 end do do _L1[135] = scanString(function(a) return function(a1) local strm do local strm1 = _L[3](a, a1) local exp = _L[7](a, strm1) local isNegative = exp[1] strm = exp[2] if isNegative then else goto else1 end do local exp1 = a(strm) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:43:25") end do local c = exp1.payload[1] local strm_PRIME = exp1.payload[2] if 48 <= c and c <= 57 then else return NONE end do local tmp54, tmp55 do local tmp56 = _L[6](c) local tmp57 = _Int_negate(tmp56) tmp55, tmp54 = tmp57, strm_PRIME end ::cont:: do local x, strm2 = tmp55, tmp54 local exp2 = a(strm2) if exp2.tag == "SOME" then elseif exp2.tag == "NONE" then return {tag = "SOME", payload = {x, strm2}} else _raise(_Match, "scan-num.sml:37:35") end do local c1 = exp2.payload[1] local strm_PRIME1 = exp2.payload[2] if 48 <= c1 and c1 <= 57 then else return {tag = "SOME", payload = {x, strm2}} end do local tmp56 = _Int_mul(10, x) local tmp57 = _L[6](c1) tmp55 = _Int_sub(tmp56, tmp57) tmp54 = strm_PRIME1 goto cont end end end end end end end ::else1:: local exp = a(strm) if exp.tag == "SOME" then elseif exp.tag == "NONE" then return NONE else _raise(_Match, "scan-num.sml:29:25") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then else return NONE end do local tmp54, tmp55 do local tmp56 = _L[6](c) tmp55, tmp54 = tmp56, strm_PRIME end ::cont:: do local x, strm1 = tmp55, tmp54 local exp1 = a(strm1) if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then return {tag = "SOME", payload = {x, strm1}} else _raise(_Match, "scan-num.sml:23:35") end do local c1 = exp1.payload[1] local strm_PRIME1 = exp1.payload[2] if 48 <= c1 and c1 <= 57 then else return {tag = "SOME", payload = {x, strm1}} end do local tmp56 = _Int_mul(10, x) local tmp57 = _L[6](c1) tmp55 = _Int_add(tmp56, tmp57) tmp54 = strm_PRIME1 goto cont end end end end end end end) _L1[134] = _L1[135](_L1[131]) end if _L1[134].tag == "SOME" then _L1[136] = _L1[134].payload _L1[137] = _L1[1].bibtex_or_biber _L1[138] = _L1[1].change_directory _L1[139] = _L1[1].check_driver _L1[140] = _L1[1].color _L1[141] = _L1[1].config_file _L1[142] = _L1[1].dvipdfmx_extraoptions _L1[143] = _L1[1].engine _L1[144] = _L1[1].engine_executable _L1[145] = _L1[1].file_line_error _L1[146] = _L1[1].fmt _L1[147] = _L1[1].fresh _L1[148] = _L1[1].halt_on_error _L1[149] = _L1[1].includeonly _L1[150] = _L1[1].interaction _L1[151] = _L1[1].jobname _L1[152] = _L1[1].make_depends _L1[153] = _L1[1].makeglossaries _L1[154] = _L1[1].makeindex _L1[155] = _L1[1].output _L1[156] = _L1[1].output_directory _L1[157] = _L1[1].output_format _L1[158] = _L1[1].package_support _L1[159] = _L1[1].print_output_directory _L1[160] = _L1[1].shell_escape _L1[161] = _L1[1].source_date_epoch _L1[162] = _L1[1].start_with_draft _L1[163] = _L1[1].synctex _L1[164] = _L1[1].tex_extraoptions _L1[165] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[137], change_directory = _L1[138], check_driver = _L1[139], color = _L1[140], config_file = _L1[141], dvipdfmx_extraoptions = _L1[142], engine = _L1[143], engine_executable = _L1[144], file_line_error = _L1[145], fmt = _L1[146], fresh = _L1[147], halt_on_error = _L1[148], includeonly = _L1[149], interaction = _L1[150], jobname = _L1[151], make_depends = _L1[152], makeglossaries = _L1[153], makeindex = _L1[154], max_iterations = {tag = "SOME", payload = _L1[136]}, output = _L1[155], output_directory = _L1[156], output_format = _L1[157], package_support = _L1[158], print_output_directory = _L1[159], shell_escape = _L1[160], source_date_epoch = _L1[161], start_with_draft = _L1[162], synctex = _L1[163], tex_extraoptions = _L1[164], watch = _L1[165]} _L[537] = _L1[132] goto cont18 end if _L1[134].tag == "NONE" then else _raise(_Match, "handle-options.sml:185:62") end _L[124]({_L[118], "invalid value for --max-iterations option\n"}) tmp15(1, true) end ::else33:: if _L1[133].tag == "SOME" then else _raise(_Match, "handle-options.sml:184:49") end _L[124]({_L[118], "multiple --max-iterations options\n"}) tmp15(1, true) end ::else6:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_START_WITH_DRAFT" then else goto else7 end do _L1[166] = _L1[3].payload[2] _L1[167] = _L1[1].start_with_draft if not _L1[167] then _L1[168] = _L1[1].bibtex_or_biber _L1[169] = _L1[1].change_directory _L1[170] = _L1[1].check_driver _L1[171] = _L1[1].color _L1[172] = _L1[1].config_file _L1[173] = _L1[1].dvipdfmx_extraoptions _L1[174] = _L1[1].engine _L1[175] = _L1[1].engine_executable _L1[176] = _L1[1].file_line_error _L1[177] = _L1[1].fmt _L1[178] = _L1[1].fresh _L1[179] = _L1[1].halt_on_error _L1[180] = _L1[1].includeonly _L1[181] = _L1[1].interaction _L1[182] = _L1[1].jobname _L1[183] = _L1[1].make_depends _L1[184] = _L1[1].makeglossaries _L1[185] = _L1[1].makeindex _L1[186] = _L1[1].max_iterations _L1[187] = _L1[1].output _L1[188] = _L1[1].output_directory _L1[189] = _L1[1].output_format _L1[190] = _L1[1].package_support _L1[191] = _L1[1].print_output_directory _L1[192] = _L1[1].shell_escape _L1[193] = _L1[1].source_date_epoch _L1[194] = _L1[1].synctex _L1[195] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[168], change_directory = _L1[169], check_driver = _L1[170], color = _L1[171], config_file = _L1[172], dvipdfmx_extraoptions = _L1[173], engine = _L1[174], engine_executable = _L1[175], file_line_error = _L1[176], fmt = _L1[177], fresh = _L1[178], halt_on_error = _L1[179], includeonly = _L1[180], interaction = _L1[181], jobname = _L1[182], make_depends = _L1[183], makeglossaries = _L1[184], makeindex = _L1[185], max_iterations = _L1[186], output = _L1[187], output_directory = _L1[188], output_format = _L1[189], package_support = _L1[190], print_output_directory = _L1[191], shell_escape = _L1[192], source_date_epoch = _L1[193], start_with_draft = true, synctex = _L1[194], tex_extraoptions = _L1[195], watch = _L1[1].watch} _L[537] = _L1[166] goto cont18 end if _L1[167] then else _raise(_Match, "handle-options.sml:191:49") end _L[124]({_L[118], "multiple --start-with-draft options\n"}) tmp15(1, true) end ::else7:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_WATCH" then else goto else8 end do _L1[196] = _L1[3].payload[1].payload _L1[197] = _L1[3].payload[2] _L1[198] = _L1[1].watch if _L1[198].tag == "NONE" then else goto else33 end do if _L1[196] == "fswatch" then _L1[199] = {tag = "SOME", payload = _L[343]} elseif _L1[196] == "inotifywait" then _L1[199] = {tag = "SOME", payload = _L[344]} elseif _L1[196] == "auto" then _L1[199] = {tag = "SOME", payload = _L[345]} else _L1[199] = NONE end if _L1[199].tag == "SOME" then _L1[200] = _L1[199].payload _L1[201] = _L1[1].bibtex_or_biber _L1[202] = _L1[1].change_directory _L1[203] = _L1[1].check_driver _L1[204] = _L1[1].color _L1[205] = _L1[1].config_file _L1[206] = _L1[1].dvipdfmx_extraoptions _L1[207] = _L1[1].engine _L1[208] = _L1[1].engine_executable _L1[209] = _L1[1].file_line_error _L1[210] = _L1[1].fmt _L1[211] = _L1[1].fresh _L1[212] = _L1[1].halt_on_error _L1[213] = _L1[1].includeonly _L1[214] = _L1[1].interaction _L1[215] = _L1[1].jobname _L1[216] = _L1[1].make_depends _L1[217] = _L1[1].makeglossaries _L1[218] = _L1[1].makeindex _L1[219] = _L1[1].max_iterations _L1[220] = _L1[1].output _L1[221] = _L1[1].output_directory _L1[222] = _L1[1].output_format _L1[223] = _L1[1].package_support _L1[224] = _L1[1].print_output_directory _L1[225] = _L1[1].shell_escape _L1[226] = _L1[1].source_date_epoch _L1[227] = _L1[1].start_with_draft _L1[228] = _L1[1].synctex _L1[229] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[201], change_directory = _L1[202], check_driver = _L1[203], color = _L1[204], config_file = _L1[205], dvipdfmx_extraoptions = _L1[206], engine = _L1[207], engine_executable = _L1[208], file_line_error = _L1[209], fmt = _L1[210], fresh = _L1[211], halt_on_error = _L1[212], includeonly = _L1[213], interaction = _L1[214], jobname = _L1[215], make_depends = _L1[216], makeglossaries = _L1[217], makeindex = _L1[218], max_iterations = _L1[219], output = _L1[220], output_directory = _L1[221], output_format = _L1[222], package_support = _L1[223], print_output_directory = _L1[224], shell_escape = _L1[225], source_date_epoch = _L1[226], start_with_draft = _L1[227], synctex = _L1[228], tex_extraoptions = _L1[229], watch = {tag = "SOME", payload = _L1[200]}} _L[537] = _L1[197] goto cont18 end if _L1[199].tag == "NONE" then else _raise(_Match, "handle-options.sml:196:58") end _L[124]({_L[118], "invalid value for --watch option\n"}) tmp15(1, true) end ::else33:: if _L1[198].tag == "SOME" then else _raise(_Match, "handle-options.sml:195:45") end _L[124]({_L[118], "multiple --watch options\n"}) tmp15(1, true) end ::else8:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_HELP" then else goto else9 end _L[535] = _L[373]() goto cont5 ::else9:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_VERSION" then else goto else10 end _L[124]({_L[118], "cluttex v0.7.0\n"}) tmp15(0, true) ::else10:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_VERBOSE" then _L1[230] = _L1[3].payload[2] _ENV.CLUTTEX_VERBOSITY = _ENV.CLUTTEX_VERBOSITY + 1 _L[536] = _L1[1] _L[537] = _L1[230] goto cont18 end if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_COLOR" then else goto else11 end do _L1[231] = _L1[3].payload[1].payload _L1[232] = _L1[3].payload[2] _L1[233] = _L1[1].color if _L1[233].tag == "NONE" then else goto else33 end do if _L1[231] == "always" then _L1[234] = {tag = "SOME", payload = _L[276]} elseif _L1[231] == "auto" then _L1[234] = {tag = "SOME", payload = _L[277]} elseif _L1[231] == "never" then _L1[234] = {tag = "SOME", payload = _L[278]} else _L1[234] = NONE end if _L1[234].tag == "SOME" then else goto else34 end do _L1[235] = _L1[234].payload _L[280](_L1[235]) _L1[236] = _L1[1].bibtex_or_biber _L1[237] = _L1[1].change_directory _L1[238] = _L1[1].check_driver _L1[239] = _L1[1].config_file _L1[240] = _L1[1].dvipdfmx_extraoptions _L1[241] = _L1[1].engine _L1[242] = _L1[1].engine_executable _L1[243] = _L1[1].file_line_error _L1[244] = _L1[1].fmt _L1[245] = _L1[1].fresh _L1[246] = _L1[1].halt_on_error _L1[247] = _L1[1].includeonly _L1[248] = _L1[1].interaction _L1[249] = _L1[1].jobname _L1[250] = _L1[1].make_depends _L1[251] = _L1[1].makeglossaries _L1[252] = _L1[1].makeindex _L1[253] = _L1[1].max_iterations _L1[254] = _L1[1].output _L1[255] = _L1[1].output_directory _L1[256] = _L1[1].output_format _L1[257] = _L1[1].package_support _L1[258] = _L1[1].print_output_directory _L1[259] = _L1[1].shell_escape _L1[260] = _L1[1].source_date_epoch _L1[261] = _L1[1].start_with_draft _L1[262] = _L1[1].synctex _L1[263] = _L1[1].tex_extraoptions _L1[264] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[236], change_directory = _L1[237], check_driver = _L1[238], color = {tag = "SOME", payload = _L1[235]}, config_file = _L1[239], dvipdfmx_extraoptions = _L1[240], engine = _L1[241], engine_executable = _L1[242], file_line_error = _L1[243], fmt = _L1[244], fresh = _L1[245], halt_on_error = _L1[246], includeonly = _L1[247], interaction = _L1[248], jobname = _L1[249], make_depends = _L1[250], makeglossaries = _L1[251], makeindex = _L1[252], max_iterations = _L1[253], output = _L1[254], output_directory = _L1[255], output_format = _L1[256], package_support = _L1[257], print_output_directory = _L1[258], shell_escape = _L1[259], source_date_epoch = _L1[260], start_with_draft = _L1[261], synctex = _L1[262], tex_extraoptions = _L1[263], watch = _L1[264]} _L[537] = _L1[232] goto cont18 end ::else34:: if _L1[234].tag == "NONE" then else _raise(_Match, "handle-options.sml:208:56") end _L[124]({_L[118], "invalid value for --color option\n"}) tmp15(1, true) end ::else33:: if _L1[233].tag == "SOME" then else _raise(_Match, "handle-options.sml:207:43") end _L[124]({_L[118], "multiple --color options\n"}) tmp15(1, true) end ::else11:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_CHANGE_DIRECTORY" then else goto else12 end do _L1[265] = _L1[3].payload[1].payload _L1[266] = _L1[3].payload[2] _L1[267] = _L1[1].change_directory if _L1[267].tag == "NONE" then _L1[268] = _L1[1].bibtex_or_biber _L1[269] = _L1[1].check_driver _L1[270] = _L1[1].color _L1[271] = _L1[1].config_file _L1[272] = _L1[1].dvipdfmx_extraoptions _L1[273] = _L1[1].engine _L1[274] = _L1[1].engine_executable _L1[275] = _L1[1].file_line_error _L1[276] = _L1[1].fmt _L1[277] = _L1[1].fresh _L1[278] = _L1[1].halt_on_error _L1[279] = _L1[1].includeonly _L1[280] = _L1[1].interaction _L1[281] = _L1[1].jobname _L1[282] = _L1[1].make_depends _L1[283] = _L1[1].makeglossaries _L1[284] = _L1[1].makeindex _L1[285] = _L1[1].max_iterations _L1[286] = _L1[1].output _L1[287] = _L1[1].output_directory _L1[288] = _L1[1].output_format _L1[289] = _L1[1].package_support _L1[290] = _L1[1].print_output_directory _L1[291] = _L1[1].shell_escape _L1[292] = _L1[1].source_date_epoch _L1[293] = _L1[1].start_with_draft _L1[294] = _L1[1].synctex _L1[295] = _L1[1].tex_extraoptions _L1[296] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[268], change_directory = {tag = "SOME", payload = _L1[265]}, check_driver = _L1[269], color = _L1[270], config_file = _L1[271], dvipdfmx_extraoptions = _L1[272], engine = _L1[273], engine_executable = _L1[274], file_line_error = _L1[275], fmt = _L1[276], fresh = _L1[277], halt_on_error = _L1[278], includeonly = _L1[279], interaction = _L1[280], jobname = _L1[281], make_depends = _L1[282], makeglossaries = _L1[283], makeindex = _L1[284], max_iterations = _L1[285], output = _L1[286], output_directory = _L1[287], output_format = _L1[288], package_support = _L1[289], print_output_directory = _L1[290], shell_escape = _L1[291], source_date_epoch = _L1[292], start_with_draft = _L1[293], synctex = _L1[294], tex_extraoptions = _L1[295], watch = _L1[296]} _L[537] = _L1[266] goto cont18 end if _L1[267].tag == "SOME" then else _raise(_Match, "handle-options.sml:216:51") end _L[124]({_L[118], "multiple --change-directory options\n"}) tmp15(1, true) end ::else12:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_INCLUDEONLY" then else goto else13 end do _L1[297] = _L1[3].payload[1].payload _L1[298] = _L1[3].payload[2] _L1[299] = _L1[1].includeonly if _L1[299].tag == "NONE" then _L1[300] = _L1[1].bibtex_or_biber _L1[301] = _L1[1].change_directory _L1[302] = _L1[1].check_driver _L1[303] = _L1[1].color _L1[304] = _L1[1].config_file _L1[305] = _L1[1].dvipdfmx_extraoptions _L1[306] = _L1[1].engine _L1[307] = _L1[1].engine_executable _L1[308] = _L1[1].file_line_error _L1[309] = _L1[1].fmt _L1[310] = _L1[1].fresh _L1[311] = _L1[1].halt_on_error _L1[312] = _L1[1].interaction _L1[313] = _L1[1].jobname _L1[314] = _L1[1].make_depends _L1[315] = _L1[1].makeglossaries _L1[316] = _L1[1].makeindex _L1[317] = _L1[1].max_iterations _L1[318] = _L1[1].output _L1[319] = _L1[1].output_directory _L1[320] = _L1[1].output_format _L1[321] = _L1[1].package_support _L1[322] = _L1[1].print_output_directory _L1[323] = _L1[1].shell_escape _L1[324] = _L1[1].source_date_epoch _L1[325] = _L1[1].start_with_draft _L1[326] = _L1[1].synctex _L1[327] = _L1[1].tex_extraoptions _L1[328] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[300], change_directory = _L1[301], check_driver = _L1[302], color = _L1[303], config_file = _L1[304], dvipdfmx_extraoptions = _L1[305], engine = _L1[306], engine_executable = _L1[307], file_line_error = _L1[308], fmt = _L1[309], fresh = _L1[310], halt_on_error = _L1[311], includeonly = {tag = "SOME", payload = _L1[297]}, interaction = _L1[312], jobname = _L1[313], make_depends = _L1[314], makeglossaries = _L1[315], makeindex = _L1[316], max_iterations = _L1[317], output = _L1[318], output_directory = _L1[319], output_format = _L1[320], package_support = _L1[321], print_output_directory = _L1[322], shell_escape = _L1[323], source_date_epoch = _L1[324], start_with_draft = _L1[325], synctex = _L1[326], tex_extraoptions = _L1[327], watch = _L1[328]} _L[537] = _L1[298] goto cont18 end if _L1[299].tag == "SOME" then else _raise(_Match, "handle-options.sml:220:46") end _L[124]({_L[118], "multiple --includeonly options\n"}) tmp15(1, true) end ::else13:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_MAKE_DEPENDS" then else goto else14 end do _L1[329] = _L1[3].payload[1].payload _L1[330] = _L1[3].payload[2] _L1[331] = _L1[1].make_depends if _L1[331].tag == "NONE" then _L1[332] = _L1[1].bibtex_or_biber _L1[333] = _L1[1].change_directory _L1[334] = _L1[1].check_driver _L1[335] = _L1[1].color _L1[336] = _L1[1].config_file _L1[337] = _L1[1].dvipdfmx_extraoptions _L1[338] = _L1[1].engine _L1[339] = _L1[1].engine_executable _L1[340] = _L1[1].file_line_error _L1[341] = _L1[1].fmt _L1[342] = _L1[1].fresh _L1[343] = _L1[1].halt_on_error _L1[344] = _L1[1].includeonly _L1[345] = _L1[1].interaction _L1[346] = _L1[1].jobname _L1[347] = _L1[1].makeglossaries _L1[348] = _L1[1].makeindex _L1[349] = _L1[1].max_iterations _L1[350] = _L1[1].output _L1[351] = _L1[1].output_directory _L1[352] = _L1[1].output_format _L1[353] = _L1[1].package_support _L1[354] = _L1[1].print_output_directory _L1[355] = _L1[1].shell_escape _L1[356] = _L1[1].source_date_epoch _L1[357] = _L1[1].start_with_draft _L1[358] = _L1[1].synctex _L1[359] = _L1[1].tex_extraoptions _L1[360] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[332], change_directory = _L1[333], check_driver = _L1[334], color = _L1[335], config_file = _L1[336], dvipdfmx_extraoptions = _L1[337], engine = _L1[338], engine_executable = _L1[339], file_line_error = _L1[340], fmt = _L1[341], fresh = _L1[342], halt_on_error = _L1[343], includeonly = _L1[344], interaction = _L1[345], jobname = _L1[346], make_depends = {tag = "SOME", payload = _L1[329]}, makeglossaries = _L1[347], makeindex = _L1[348], max_iterations = _L1[349], output = _L1[350], output_directory = _L1[351], output_format = _L1[352], package_support = _L1[353], print_output_directory = _L1[354], shell_escape = _L1[355], source_date_epoch = _L1[356], start_with_draft = _L1[357], synctex = _L1[358], tex_extraoptions = _L1[359], watch = _L1[360]} _L[537] = _L1[330] goto cont18 end if _L1[331].tag == "SOME" then else _raise(_Match, "handle-options.sml:224:47") end _L[124]({_L[118], "multiple --make-depends options\n"}) tmp15(1, true) end ::else14:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_PRINT_OUTPUT_DIRECTORY" then else goto else15 end do _L1[361] = _L1[3].payload[2] _L1[362] = _L1[1].print_output_directory if not _L1[362] then _L1[363] = _L1[1].bibtex_or_biber _L1[364] = _L1[1].change_directory _L1[365] = _L1[1].check_driver _L1[366] = _L1[1].color _L1[367] = _L1[1].config_file _L1[368] = _L1[1].dvipdfmx_extraoptions _L1[369] = _L1[1].engine _L1[370] = _L1[1].engine_executable _L1[371] = _L1[1].file_line_error _L1[372] = _L1[1].fmt _L1[373] = _L1[1].fresh _L1[374] = _L1[1].halt_on_error _L1[375] = _L1[1].includeonly _L1[376] = _L1[1].interaction _L1[377] = _L1[1].jobname _L1[378] = _L1[1].make_depends _L1[379] = _L1[1].makeglossaries _L1[380] = _L1[1].makeindex _L1[381] = _L1[1].max_iterations _L1[382] = _L1[1].output _L1[383] = _L1[1].output_directory _L1[384] = _L1[1].output_format _L1[385] = _L1[1].package_support _L1[386] = _L1[1].shell_escape _L1[387] = _L1[1].source_date_epoch _L1[388] = _L1[1].start_with_draft _L1[389] = _L1[1].synctex _L1[390] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[363], change_directory = _L1[364], check_driver = _L1[365], color = _L1[366], config_file = _L1[367], dvipdfmx_extraoptions = _L1[368], engine = _L1[369], engine_executable = _L1[370], file_line_error = _L1[371], fmt = _L1[372], fresh = _L1[373], halt_on_error = _L1[374], includeonly = _L1[375], interaction = _L1[376], jobname = _L1[377], make_depends = _L1[378], makeglossaries = _L1[379], makeindex = _L1[380], max_iterations = _L1[381], output = _L1[382], output_directory = _L1[383], output_format = _L1[384], package_support = _L1[385], print_output_directory = true, shell_escape = _L1[386], source_date_epoch = _L1[387], start_with_draft = _L1[388], synctex = _L1[389], tex_extraoptions = _L1[390], watch = _L1[1].watch} _L[537] = _L1[361] goto cont18 end if _L1[362] then else _raise(_Match, "handle-options.sml:228:55") end _L[124]({_L[118], "multiple --print-output-directory options\n"}) tmp15(1, true) end ::else15:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_PACKAGE_SUPPORT" then else goto else16 end do _L1[391] = _L1[3].payload[1].payload _L1[392] = _L1[3].payload[2] do do _L1[395] = foldr(_COLON_COLON, nil) _L1[396] = #_L1[391] _L1[397] = _VectorOrArray_tabulate({_L1[396], function(i) return sub1({_L1[391], i}) end}) _L1[394] = _L1[395](_L1[397]) end _L1[398], _L1[399], _L1[400] = nil, nil, _L1[394] ::cont21:: do local _L2 = {} _L2[1], _L2[2], _L2[3] = _L1[398], _L1[399], _L1[400] if _L2[3] == nil then else goto else33 end do if _L2[2] == nil then else goto else34 end _L1[393] = revAppend(_L2[1], nil) goto cont20 ::else34:: _L2[4] = implodeRev(_L2[2]) _L1[393] = revAppend({_L2[4], _L2[1]}, nil) goto cont20 end ::else33:: if _L2[3] ~= nil then else _raise(_Match, "string-1.sml:73:26") end do _L2[5] = _L2[3][1] _L2[6] = _L2[3][2] if _L2[5] == 44 then _L2[7] = true else _L2[7] = isSpace(_L2[5]) end if _L2[7] then else _L1[398] = _L2[1] _L1[399] = {_L2[5], _L2[2]} _L1[400] = _L2[6] goto cont21 end do if _L2[2] == nil then _L1[398] = _L2[1] _L1[399] = nil _L1[400] = _L2[6] goto cont21 end _L2[8] = implodeRev(_L2[2]) _L1[398] = {_L2[8], _L2[1]} _L1[399] = nil _L1[400] = _L2[6] goto cont21 end end end end ::cont20:: _L1[401] = foldl(function(a) if a[1] == "minted" then local ps = a[2] return {epstopdf = ps.epstopdf, minted = true, pdfx = ps.pdfx} end if a[1] == "epstopdf" then local ps = a[2] return {epstopdf = true, minted = ps.minted, pdfx = ps.pdfx} end if a[1] == "pdfx" then local ps = a[2] return {epstopdf = ps.epstopdf, minted = ps.minted, pdfx = true} end local pkg = a[1] local ps = a[2] if _ENV.CLUTTEX_VERBOSITY >= 1 then else return ps end do _L[302]("ClutTeX provides no special support for '" .. pkg .. "'.") return ps end end) _L1[402] = _L1[401](_L1[1].package_support) _L1[403] = _L1[402](_L1[393]) _L1[404] = _L1[1].bibtex_or_biber _L1[405] = _L1[1].change_directory _L1[406] = _L1[1].check_driver _L1[407] = _L1[1].color _L1[408] = _L1[1].config_file _L1[409] = _L1[1].dvipdfmx_extraoptions _L1[410] = _L1[1].engine _L1[411] = _L1[1].engine_executable _L1[412] = _L1[1].file_line_error _L1[413] = _L1[1].fmt _L1[414] = _L1[1].fresh _L1[415] = _L1[1].halt_on_error _L1[416] = _L1[1].includeonly _L1[417] = _L1[1].interaction _L1[418] = _L1[1].jobname _L1[419] = _L1[1].make_depends _L1[420] = _L1[1].makeglossaries _L1[421] = _L1[1].makeindex _L1[422] = _L1[1].max_iterations _L1[423] = _L1[1].output _L1[424] = _L1[1].output_directory _L1[425] = _L1[1].output_format _L1[426] = _L1[1].print_output_directory _L1[427] = _L1[1].shell_escape _L1[428] = _L1[1].source_date_epoch _L1[429] = _L1[1].start_with_draft _L1[430] = _L1[1].synctex _L1[431] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[404], change_directory = _L1[405], check_driver = _L1[406], color = _L1[407], config_file = _L1[408], dvipdfmx_extraoptions = _L1[409], engine = _L1[410], engine_executable = _L1[411], file_line_error = _L1[412], fmt = _L1[413], fresh = _L1[414], halt_on_error = _L1[415], includeonly = _L1[416], interaction = _L1[417], jobname = _L1[418], make_depends = _L1[419], makeglossaries = _L1[420], makeindex = _L1[421], max_iterations = _L1[422], output = _L1[423], output_directory = _L1[424], output_format = _L1[425], package_support = _L1[403], print_output_directory = _L1[426], shell_escape = _L1[427], source_date_epoch = _L1[428], start_with_draft = _L1[429], synctex = _L1[430], tex_extraoptions = _L1[431], watch = _L1[1].watch} _L[537] = _L1[392] goto cont18 end ::else16:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_CHECK_DRIVER" then else goto else17 end do _L1[432] = _L1[3].payload[1].payload _L1[433] = _L1[3].payload[2] _L1[434] = _L1[1].check_driver if _L1[434].tag == "NONE" then else goto else33 end do if _L1[432] == "dvipdfmx" then _L1[435] = {tag = "SOME", payload = _L[340]} elseif _L1[432] == "dvips" then _L1[435] = {tag = "SOME", payload = _L[341]} elseif _L1[432] == "dvisvgm" then _L1[435] = {tag = "SOME", payload = _L[342]} else _L1[435] = NONE end if _L1[435].tag == "SOME" then _L1[436] = _L1[435].payload _L1[437] = _L1[1].bibtex_or_biber _L1[438] = _L1[1].change_directory _L1[439] = _L1[1].color _L1[440] = _L1[1].config_file _L1[441] = _L1[1].dvipdfmx_extraoptions _L1[442] = _L1[1].engine _L1[443] = _L1[1].engine_executable _L1[444] = _L1[1].file_line_error _L1[445] = _L1[1].fmt _L1[446] = _L1[1].fresh _L1[447] = _L1[1].halt_on_error _L1[448] = _L1[1].includeonly _L1[449] = _L1[1].interaction _L1[450] = _L1[1].jobname _L1[451] = _L1[1].make_depends _L1[452] = _L1[1].makeglossaries _L1[453] = _L1[1].makeindex _L1[454] = _L1[1].max_iterations _L1[455] = _L1[1].output _L1[456] = _L1[1].output_directory _L1[457] = _L1[1].output_format _L1[458] = _L1[1].package_support _L1[459] = _L1[1].print_output_directory _L1[460] = _L1[1].shell_escape _L1[461] = _L1[1].source_date_epoch _L1[462] = _L1[1].start_with_draft _L1[463] = _L1[1].synctex _L1[464] = _L1[1].tex_extraoptions _L1[465] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[437], change_directory = _L1[438], check_driver = {tag = "SOME", payload = _L1[436]}, color = _L1[439], config_file = _L1[440], dvipdfmx_extraoptions = _L1[441], engine = _L1[442], engine_executable = _L1[443], file_line_error = _L1[444], fmt = _L1[445], fresh = _L1[446], halt_on_error = _L1[447], includeonly = _L1[448], interaction = _L1[449], jobname = _L1[450], make_depends = _L1[451], makeglossaries = _L1[452], makeindex = _L1[453], max_iterations = _L1[454], output = _L1[455], output_directory = _L1[456], output_format = _L1[457], package_support = _L1[458], print_output_directory = _L1[459], shell_escape = _L1[460], source_date_epoch = _L1[461], start_with_draft = _L1[462], synctex = _L1[463], tex_extraoptions = _L1[464], watch = _L1[465]} _L[537] = _L1[433] goto cont18 end if _L1[435].tag == "NONE" then else _raise(_Match, "handle-options.sml:246:65") end _L[124]({_L[118], "invalid value for --check-driver option\n"}) tmp15(1, true) end ::else33:: if _L1[434].tag == "SOME" then else _raise(_Match, "handle-options.sml:245:52") end _L[124]({_L[118], "multiple --check-driver options\n"}) tmp15(1, true) end ::else17:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_SOURCE_DATE_EPOCH" then else goto else18 end do _L1[466] = _L1[3].payload[1].payload _L1[467] = _L1[3].payload[2] _L1[468] = _L1[1].source_date_epoch if _L1[468].tag == "NONE" then else goto else33 end do do if _L1[466] == "now" then _L1[469] = {tag = "SOME", payload = _L[347]} goto cont20 end do if #_L1[466] > 0 then else _L1[470] = false goto cont21 end do _L1[471] = tmp32(isDigit) _L1[470] = _L1[471](_L1[466]) end end ::cont21:: if _L1[470] then _L1[469] = {tag = "SOME", payload = {tag = "RAW", payload = _L1[466]}} else _L1[469] = NONE end end ::cont20:: if _L1[469].tag == "SOME" then _L1[472] = _L1[469].payload _L1[473] = _L1[1].bibtex_or_biber _L1[474] = _L1[1].change_directory _L1[475] = _L1[1].check_driver _L1[476] = _L1[1].color _L1[477] = _L1[1].config_file _L1[478] = _L1[1].dvipdfmx_extraoptions _L1[479] = _L1[1].engine _L1[480] = _L1[1].engine_executable _L1[481] = _L1[1].file_line_error _L1[482] = _L1[1].fmt _L1[483] = _L1[1].fresh _L1[484] = _L1[1].halt_on_error _L1[485] = _L1[1].includeonly _L1[486] = _L1[1].interaction _L1[487] = _L1[1].jobname _L1[488] = _L1[1].make_depends _L1[489] = _L1[1].makeglossaries _L1[490] = _L1[1].makeindex _L1[491] = _L1[1].max_iterations _L1[492] = _L1[1].output _L1[493] = _L1[1].output_directory _L1[494] = _L1[1].output_format _L1[495] = _L1[1].package_support _L1[496] = _L1[1].print_output_directory _L1[497] = _L1[1].shell_escape _L1[498] = _L1[1].start_with_draft _L1[499] = _L1[1].synctex _L1[500] = _L1[1].tex_extraoptions _L1[501] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[473], change_directory = _L1[474], check_driver = _L1[475], color = _L1[476], config_file = _L1[477], dvipdfmx_extraoptions = _L1[478], engine = _L1[479], engine_executable = _L1[480], file_line_error = _L1[481], fmt = _L1[482], fresh = _L1[483], halt_on_error = _L1[484], includeonly = _L1[485], interaction = _L1[486], jobname = _L1[487], make_depends = _L1[488], makeglossaries = _L1[489], makeindex = _L1[490], max_iterations = _L1[491], output = _L1[492], output_directory = _L1[493], output_format = _L1[494], package_support = _L1[495], print_output_directory = _L1[496], shell_escape = _L1[497], source_date_epoch = {tag = "SOME", payload = _L1[472]}, start_with_draft = _L1[498], synctex = _L1[499], tex_extraoptions = _L1[500], watch = _L1[501]} _L[537] = _L1[467] goto cont18 end if _L1[469].tag == "NONE" then else _raise(_Match, "handle-options.sml:253:68") end _L[124]({_L[118], "invalid value for --source-date-epoch option\n"}) tmp15(1, true) end ::else33:: if _L1[468].tag == "SOME" then else _raise(_Match, "handle-options.sml:252:55") end _L[124]({_L[118], "multiple --source-date-epoch options\n"}) tmp15(1, true) end ::else18:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_SYNCTEX" then else goto else19 end do _L1[502] = _L1[3].payload[1].payload _L1[503] = _L1[3].payload[2] _L1[504] = _L1[1].synctex if _L1[504].tag == "NONE" then _L1[505] = _L1[1].bibtex_or_biber _L1[506] = _L1[1].change_directory _L1[507] = _L1[1].check_driver _L1[508] = _L1[1].color _L1[509] = _L1[1].config_file _L1[510] = _L1[1].dvipdfmx_extraoptions _L1[511] = _L1[1].engine _L1[512] = _L1[1].engine_executable _L1[513] = _L1[1].file_line_error _L1[514] = _L1[1].fmt _L1[515] = _L1[1].fresh _L1[516] = _L1[1].halt_on_error _L1[517] = _L1[1].includeonly _L1[518] = _L1[1].interaction _L1[519] = _L1[1].jobname _L1[520] = _L1[1].make_depends _L1[521] = _L1[1].makeglossaries _L1[522] = _L1[1].makeindex _L1[523] = _L1[1].max_iterations _L1[524] = _L1[1].output _L1[525] = _L1[1].output_directory _L1[526] = _L1[1].output_format _L1[527] = _L1[1].package_support _L1[528] = _L1[1].print_output_directory _L1[529] = _L1[1].shell_escape _L1[530] = _L1[1].source_date_epoch _L1[531] = _L1[1].start_with_draft _L1[532] = _L1[1].tex_extraoptions _L1[533] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[505], change_directory = _L1[506], check_driver = _L1[507], color = _L1[508], config_file = _L1[509], dvipdfmx_extraoptions = _L1[510], engine = _L1[511], engine_executable = _L1[512], file_line_error = _L1[513], fmt = _L1[514], fresh = _L1[515], halt_on_error = _L1[516], includeonly = _L1[517], interaction = _L1[518], jobname = _L1[519], make_depends = _L1[520], makeglossaries = _L1[521], makeindex = _L1[522], max_iterations = _L1[523], output = _L1[524], output_directory = _L1[525], output_format = _L1[526], package_support = _L1[527], print_output_directory = _L1[528], shell_escape = _L1[529], source_date_epoch = _L1[530], start_with_draft = _L1[531], synctex = {tag = "SOME", payload = _L1[502]}, tex_extraoptions = _L1[532], watch = _L1[533]} _L[537] = _L1[503] goto cont18 end if _L1[504].tag == "SOME" then else _raise(_Match, "handle-options.sml:259:42") end _L[124]({_L[118], "multiple --synctex options\n"}) tmp15(1, true) end ::else19:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_FILE_LINE_ERROR" then _L1[534] = _L1[3].payload[1].payload _L1[535] = _L1[3].payload[2] _L1[536] = _L1[1].bibtex_or_biber _L1[537] = _L1[1].change_directory _L1[538] = _L1[1].check_driver _L1[539] = _L1[1].color _L1[540] = _L1[1].config_file _L1[541] = _L1[1].dvipdfmx_extraoptions _L1[542] = _L1[1].engine _L1[543] = _L1[1].engine_executable _L1[544] = _L1[1].fmt _L1[545] = _L1[1].fresh _L1[546] = _L1[1].halt_on_error _L1[547] = _L1[1].includeonly _L1[548] = _L1[1].interaction _L1[549] = _L1[1].jobname _L1[550] = _L1[1].make_depends _L1[551] = _L1[1].makeglossaries _L1[552] = _L1[1].makeindex _L1[553] = _L1[1].max_iterations _L1[554] = _L1[1].output _L1[555] = _L1[1].output_directory _L1[556] = _L1[1].output_format _L1[557] = _L1[1].package_support _L1[558] = _L1[1].print_output_directory _L1[559] = _L1[1].shell_escape _L1[560] = _L1[1].source_date_epoch _L1[561] = _L1[1].start_with_draft _L1[562] = _L1[1].synctex _L1[563] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[536], change_directory = _L1[537], check_driver = _L1[538], color = _L1[539], config_file = _L1[540], dvipdfmx_extraoptions = _L1[541], engine = _L1[542], engine_executable = _L1[543], file_line_error = _L1[534], fmt = _L1[544], fresh = _L1[545], halt_on_error = _L1[546], includeonly = _L1[547], interaction = _L1[548], jobname = _L1[549], make_depends = _L1[550], makeglossaries = _L1[551], makeindex = _L1[552], max_iterations = _L1[553], output = _L1[554], output_directory = _L1[555], output_format = _L1[556], package_support = _L1[557], print_output_directory = _L1[558], shell_escape = _L1[559], source_date_epoch = _L1[560], start_with_draft = _L1[561], synctex = _L1[562], tex_extraoptions = _L1[563], watch = _L1[1].watch} _L[537] = _L1[535] goto cont18 end if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_INTERACTION" then else goto else20 end do _L1[564] = _L1[3].payload[1].payload _L1[565] = _L1[3].payload[2] _L1[566] = _L1[1].interaction if _L1[566].tag == "NONE" then else goto else33 end do if _L1[564] == "batchmode" then _L1[567] = {tag = "SOME", payload = _L[222]} elseif _L1[564] == "nonstopmode" then _L1[567] = {tag = "SOME", payload = _L[223]} elseif _L1[564] == "scrollmode" then _L1[567] = {tag = "SOME", payload = _L[224]} elseif _L1[564] == "errorstopmode" then _L1[567] = {tag = "SOME", payload = _L[225]} else _L1[567] = NONE end if _L1[567].tag == "SOME" then _L1[568] = _L1[567].payload _L1[569] = _L1[1].bibtex_or_biber _L1[570] = _L1[1].change_directory _L1[571] = _L1[1].check_driver _L1[572] = _L1[1].color _L1[573] = _L1[1].config_file _L1[574] = _L1[1].dvipdfmx_extraoptions _L1[575] = _L1[1].engine _L1[576] = _L1[1].engine_executable _L1[577] = _L1[1].file_line_error _L1[578] = _L1[1].fmt _L1[579] = _L1[1].fresh _L1[580] = _L1[1].halt_on_error _L1[581] = _L1[1].includeonly _L1[582] = _L1[1].jobname _L1[583] = _L1[1].make_depends _L1[584] = _L1[1].makeglossaries _L1[585] = _L1[1].makeindex _L1[586] = _L1[1].max_iterations _L1[587] = _L1[1].output _L1[588] = _L1[1].output_directory _L1[589] = _L1[1].output_format _L1[590] = _L1[1].package_support _L1[591] = _L1[1].print_output_directory _L1[592] = _L1[1].shell_escape _L1[593] = _L1[1].source_date_epoch _L1[594] = _L1[1].start_with_draft _L1[595] = _L1[1].synctex _L1[596] = _L1[1].tex_extraoptions _L1[597] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[569], change_directory = _L1[570], check_driver = _L1[571], color = _L1[572], config_file = _L1[573], dvipdfmx_extraoptions = _L1[574], engine = _L1[575], engine_executable = _L1[576], file_line_error = _L1[577], fmt = _L1[578], fresh = _L1[579], halt_on_error = _L1[580], includeonly = _L1[581], interaction = {tag = "SOME", payload = _L1[568]}, jobname = _L1[582], make_depends = _L1[583], makeglossaries = _L1[584], makeindex = _L1[585], max_iterations = _L1[586], output = _L1[587], output_directory = _L1[588], output_format = _L1[589], package_support = _L1[590], print_output_directory = _L1[591], shell_escape = _L1[592], source_date_epoch = _L1[593], start_with_draft = _L1[594], synctex = _L1[595], tex_extraoptions = _L1[596], watch = _L1[597]} _L[537] = _L1[565] goto cont18 end if _L1[567].tag == "NONE" then else _raise(_Match, "handle-options.sml:265:59") end _L[124]({_L[118], "invalid argument for --interaction\n"}) tmp15(1, true) end ::else33:: if _L1[566].tag == "SOME" then else _raise(_Match, "handle-options.sml:264:46") end _L[124]({_L[118], "multiple --interaction options\n"}) tmp15(1, true) end ::else20:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_HALT_ON_ERROR" then _L1[598] = _L1[3].payload[1].payload _L1[599] = _L1[3].payload[2] _L1[600] = _L1[1].bibtex_or_biber _L1[601] = _L1[1].change_directory _L1[602] = _L1[1].check_driver _L1[603] = _L1[1].color _L1[604] = _L1[1].config_file _L1[605] = _L1[1].dvipdfmx_extraoptions _L1[606] = _L1[1].engine _L1[607] = _L1[1].engine_executable _L1[608] = _L1[1].file_line_error _L1[609] = _L1[1].fmt _L1[610] = _L1[1].fresh _L1[611] = _L1[1].includeonly _L1[612] = _L1[1].interaction _L1[613] = _L1[1].jobname _L1[614] = _L1[1].make_depends _L1[615] = _L1[1].makeglossaries _L1[616] = _L1[1].makeindex _L1[617] = _L1[1].max_iterations _L1[618] = _L1[1].output _L1[619] = _L1[1].output_directory _L1[620] = _L1[1].output_format _L1[621] = _L1[1].package_support _L1[622] = _L1[1].print_output_directory _L1[623] = _L1[1].shell_escape _L1[624] = _L1[1].source_date_epoch _L1[625] = _L1[1].start_with_draft _L1[626] = _L1[1].synctex _L1[627] = _L1[1].tex_extraoptions _L[536] = {bibtex_or_biber = _L1[600], change_directory = _L1[601], check_driver = _L1[602], color = _L1[603], config_file = _L1[604], dvipdfmx_extraoptions = _L1[605], engine = _L1[606], engine_executable = _L1[607], file_line_error = _L1[608], fmt = _L1[609], fresh = _L1[610], halt_on_error = _L1[598], includeonly = _L1[611], interaction = _L1[612], jobname = _L1[613], make_depends = _L1[614], makeglossaries = _L1[615], makeindex = _L1[616], max_iterations = _L1[617], output = _L1[618], output_directory = _L1[619], output_format = _L1[620], package_support = _L1[621], print_output_directory = _L1[622], shell_escape = _L1[623], source_date_epoch = _L1[624], start_with_draft = _L1[625], synctex = _L1[626], tex_extraoptions = _L1[627], watch = _L1[1].watch} _L[537] = _L1[599] goto cont18 end if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_SHELL_ESCAPE" then else goto else21 end do _L1[628] = _L1[3].payload[1].payload _L1[629] = _L1[3].payload[2] _L1[630] = _L1[1].shell_escape if _L1[630].tag == "NONE" then _L1[631] = _L1[1].bibtex_or_biber _L1[632] = _L1[1].change_directory _L1[633] = _L1[1].check_driver _L1[634] = _L1[1].color _L1[635] = _L1[1].config_file _L1[636] = _L1[1].dvipdfmx_extraoptions _L1[637] = _L1[1].engine _L1[638] = _L1[1].engine_executable _L1[639] = _L1[1].file_line_error _L1[640] = _L1[1].fmt _L1[641] = _L1[1].fresh _L1[642] = _L1[1].halt_on_error _L1[643] = _L1[1].includeonly _L1[644] = _L1[1].interaction _L1[645] = _L1[1].jobname _L1[646] = _L1[1].make_depends _L1[647] = _L1[1].makeglossaries _L1[648] = _L1[1].makeindex _L1[649] = _L1[1].max_iterations _L1[650] = _L1[1].output _L1[651] = _L1[1].output_directory _L1[652] = _L1[1].output_format _L1[653] = _L1[1].package_support _L1[654] = _L1[1].print_output_directory _L1[655] = _L1[1].source_date_epoch _L1[656] = _L1[1].start_with_draft _L1[657] = _L1[1].synctex _L1[658] = _L1[1].tex_extraoptions _L1[659] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[631], change_directory = _L1[632], check_driver = _L1[633], color = _L1[634], config_file = _L1[635], dvipdfmx_extraoptions = _L1[636], engine = _L1[637], engine_executable = _L1[638], file_line_error = _L1[639], fmt = _L1[640], fresh = _L1[641], halt_on_error = _L1[642], includeonly = _L1[643], interaction = _L1[644], jobname = _L1[645], make_depends = _L1[646], makeglossaries = _L1[647], makeindex = _L1[648], max_iterations = _L1[649], output = _L1[650], output_directory = _L1[651], output_format = _L1[652], package_support = _L1[653], print_output_directory = _L1[654], shell_escape = {tag = "SOME", payload = _L1[628]}, source_date_epoch = _L1[655], start_with_draft = _L1[656], synctex = _L1[657], tex_extraoptions = _L1[658], watch = _L1[659]} _L[537] = _L1[629] goto cont18 end if _L1[630].tag == "SOME" then else _raise(_Match, "handle-options.sml:272:48") end _L[124]({_L[118], "multiple --(no-)shell-escape / --shell-restricted options\n"}) tmp15(1, true) end ::else21:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_JOBNAME" then else goto else22 end do _L1[660] = _L1[3].payload[1].payload _L1[661] = _L1[3].payload[2] _L1[662] = _L1[1].jobname if _L1[662].tag == "NONE" then _L1[663] = _L1[1].bibtex_or_biber _L1[664] = _L1[1].change_directory _L1[665] = _L1[1].check_driver _L1[666] = _L1[1].color _L1[667] = _L1[1].config_file _L1[668] = _L1[1].dvipdfmx_extraoptions _L1[669] = _L1[1].engine _L1[670] = _L1[1].engine_executable _L1[671] = _L1[1].file_line_error _L1[672] = _L1[1].fmt _L1[673] = _L1[1].fresh _L1[674] = _L1[1].halt_on_error _L1[675] = _L1[1].includeonly _L1[676] = _L1[1].interaction _L1[677] = _L1[1].make_depends _L1[678] = _L1[1].makeglossaries _L1[679] = _L1[1].makeindex _L1[680] = _L1[1].max_iterations _L1[681] = _L1[1].output _L1[682] = _L1[1].output_directory _L1[683] = _L1[1].output_format _L1[684] = _L1[1].package_support _L1[685] = _L1[1].print_output_directory _L1[686] = _L1[1].shell_escape _L1[687] = _L1[1].source_date_epoch _L1[688] = _L1[1].start_with_draft _L1[689] = _L1[1].synctex _L1[690] = _L1[1].tex_extraoptions _L1[691] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[663], change_directory = _L1[664], check_driver = _L1[665], color = _L1[666], config_file = _L1[667], dvipdfmx_extraoptions = _L1[668], engine = _L1[669], engine_executable = _L1[670], file_line_error = _L1[671], fmt = _L1[672], fresh = _L1[673], halt_on_error = _L1[674], includeonly = _L1[675], interaction = _L1[676], jobname = {tag = "SOME", payload = _L1[660]}, make_depends = _L1[677], makeglossaries = _L1[678], makeindex = _L1[679], max_iterations = _L1[680], output = _L1[681], output_directory = _L1[682], output_format = _L1[683], package_support = _L1[684], print_output_directory = _L1[685], shell_escape = _L1[686], source_date_epoch = _L1[687], start_with_draft = _L1[688], synctex = _L1[689], tex_extraoptions = _L1[690], watch = _L1[691]} _L[537] = _L1[661] goto cont18 end if _L1[662].tag == "SOME" then else _raise(_Match, "handle-options.sml:276:42") end _L[124]({_L[118], "multiple --jobname options\n"}) tmp15(1, true) end ::else22:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_FMT" then else goto else23 end do _L1[692] = _L1[3].payload[1].payload _L1[693] = _L1[3].payload[2] _L1[694] = _L1[1].fmt if _L1[694].tag == "NONE" then _L1[695] = _L1[1].bibtex_or_biber _L1[696] = _L1[1].change_directory _L1[697] = _L1[1].check_driver _L1[698] = _L1[1].color _L1[699] = _L1[1].config_file _L1[700] = _L1[1].dvipdfmx_extraoptions _L1[701] = _L1[1].engine _L1[702] = _L1[1].engine_executable _L1[703] = _L1[1].file_line_error _L1[704] = _L1[1].fresh _L1[705] = _L1[1].halt_on_error _L1[706] = _L1[1].includeonly _L1[707] = _L1[1].interaction _L1[708] = _L1[1].jobname _L1[709] = _L1[1].make_depends _L1[710] = _L1[1].makeglossaries _L1[711] = _L1[1].makeindex _L1[712] = _L1[1].max_iterations _L1[713] = _L1[1].output _L1[714] = _L1[1].output_directory _L1[715] = _L1[1].output_format _L1[716] = _L1[1].package_support _L1[717] = _L1[1].print_output_directory _L1[718] = _L1[1].shell_escape _L1[719] = _L1[1].source_date_epoch _L1[720] = _L1[1].start_with_draft _L1[721] = _L1[1].synctex _L1[722] = _L1[1].tex_extraoptions _L1[723] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[695], change_directory = _L1[696], check_driver = _L1[697], color = _L1[698], config_file = _L1[699], dvipdfmx_extraoptions = _L1[700], engine = _L1[701], engine_executable = _L1[702], file_line_error = _L1[703], fmt = {tag = "SOME", payload = _L1[692]}, fresh = _L1[704], halt_on_error = _L1[705], includeonly = _L1[706], interaction = _L1[707], jobname = _L1[708], make_depends = _L1[709], makeglossaries = _L1[710], makeindex = _L1[711], max_iterations = _L1[712], output = _L1[713], output_directory = _L1[714], output_format = _L1[715], package_support = _L1[716], print_output_directory = _L1[717], shell_escape = _L1[718], source_date_epoch = _L1[719], start_with_draft = _L1[720], synctex = _L1[721], tex_extraoptions = _L1[722], watch = _L1[723]} _L[537] = _L1[693] goto cont18 end if _L1[694].tag == "SOME" then else _raise(_Match, "handle-options.sml:280:38") end _L[124]({_L[118], "multiple --fmt options\n"}) tmp15(1, true) end ::else23:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_OUTPUT_DIRECTORY" then else goto else24 end do _L1[724] = _L1[3].payload[1].payload _L1[725] = _L1[3].payload[2] _L1[726] = _L1[1].output_directory if _L1[726].tag == "NONE" then _L1[727] = _L1[1].bibtex_or_biber _L1[728] = _L1[1].change_directory _L1[729] = _L1[1].check_driver _L1[730] = _L1[1].color _L1[731] = _L1[1].config_file _L1[732] = _L1[1].dvipdfmx_extraoptions _L1[733] = _L1[1].engine _L1[734] = _L1[1].engine_executable _L1[735] = _L1[1].file_line_error _L1[736] = _L1[1].fmt _L1[737] = _L1[1].fresh _L1[738] = _L1[1].halt_on_error _L1[739] = _L1[1].includeonly _L1[740] = _L1[1].interaction _L1[741] = _L1[1].jobname _L1[742] = _L1[1].make_depends _L1[743] = _L1[1].makeglossaries _L1[744] = _L1[1].makeindex _L1[745] = _L1[1].max_iterations _L1[746] = _L1[1].output _L1[747] = _L1[1].output_format _L1[748] = _L1[1].package_support _L1[749] = _L1[1].print_output_directory _L1[750] = _L1[1].shell_escape _L1[751] = _L1[1].source_date_epoch _L1[752] = _L1[1].start_with_draft _L1[753] = _L1[1].synctex _L1[754] = _L1[1].tex_extraoptions _L1[755] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[727], change_directory = _L1[728], check_driver = _L1[729], color = _L1[730], config_file = _L1[731], dvipdfmx_extraoptions = _L1[732], engine = _L1[733], engine_executable = _L1[734], file_line_error = _L1[735], fmt = _L1[736], fresh = _L1[737], halt_on_error = _L1[738], includeonly = _L1[739], interaction = _L1[740], jobname = _L1[741], make_depends = _L1[742], makeglossaries = _L1[743], makeindex = _L1[744], max_iterations = _L1[745], output = _L1[746], output_directory = {tag = "SOME", payload = _L1[724]}, output_format = _L1[747], package_support = _L1[748], print_output_directory = _L1[749], shell_escape = _L1[750], source_date_epoch = _L1[751], start_with_draft = _L1[752], synctex = _L1[753], tex_extraoptions = _L1[754], watch = _L1[755]} _L[537] = _L1[725] goto cont18 end if _L1[726].tag == "SOME" then else _raise(_Match, "handle-options.sml:284:51") end _L[124]({_L[118], "multiple --output-directory options\n"}) tmp15(1, true) end ::else24:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_OUTPUT_FORMAT" then else goto else25 end do _L1[756] = _L1[3].payload[1].payload _L1[757] = _L1[3].payload[2] _L1[758] = _L1[1].output_format if _L1[758].tag == "NONE" then else goto else33 end do if _L1[756] == "pdf" then _L1[759] = {tag = "SOME", payload = _L[230]} elseif _L1[756] == "dvi" then _L1[759] = {tag = "SOME", payload = _L[231]} else _L1[759] = NONE end if _L1[759].tag == "SOME" then _L1[760] = _L1[759].payload _L1[761] = _L1[1].bibtex_or_biber _L1[762] = _L1[1].change_directory _L1[763] = _L1[1].check_driver _L1[764] = _L1[1].color _L1[765] = _L1[1].config_file _L1[766] = _L1[1].dvipdfmx_extraoptions _L1[767] = _L1[1].engine _L1[768] = _L1[1].engine_executable _L1[769] = _L1[1].file_line_error _L1[770] = _L1[1].fmt _L1[771] = _L1[1].fresh _L1[772] = _L1[1].halt_on_error _L1[773] = _L1[1].includeonly _L1[774] = _L1[1].interaction _L1[775] = _L1[1].jobname _L1[776] = _L1[1].make_depends _L1[777] = _L1[1].makeglossaries _L1[778] = _L1[1].makeindex _L1[779] = _L1[1].max_iterations _L1[780] = _L1[1].output _L1[781] = _L1[1].output_directory _L1[782] = _L1[1].package_support _L1[783] = _L1[1].print_output_directory _L1[784] = _L1[1].shell_escape _L1[785] = _L1[1].source_date_epoch _L1[786] = _L1[1].start_with_draft _L1[787] = _L1[1].synctex _L1[788] = _L1[1].tex_extraoptions _L1[789] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[761], change_directory = _L1[762], check_driver = _L1[763], color = _L1[764], config_file = _L1[765], dvipdfmx_extraoptions = _L1[766], engine = _L1[767], engine_executable = _L1[768], file_line_error = _L1[769], fmt = _L1[770], fresh = _L1[771], halt_on_error = _L1[772], includeonly = _L1[773], interaction = _L1[774], jobname = _L1[775], make_depends = _L1[776], makeglossaries = _L1[777], makeindex = _L1[778], max_iterations = _L1[779], output = _L1[780], output_directory = _L1[781], output_format = {tag = "SOME", payload = _L1[760]}, package_support = _L1[782], print_output_directory = _L1[783], shell_escape = _L1[784], source_date_epoch = _L1[785], start_with_draft = _L1[786], synctex = _L1[787], tex_extraoptions = _L1[788], watch = _L1[789]} _L[537] = _L1[757] goto cont18 end if _L1[759].tag == "NONE" then else _raise(_Match, "handle-options.sml:289:66") end _L[124]({_L[118], "invalid value for --output-format option\n"}) tmp15(1, true) end ::else33:: if _L1[758].tag == "SOME" then else _raise(_Match, "handle-options.sml:288:53") end _L[124]({_L[118], "multiple --output-format options\n"}) tmp15(1, true) end ::else25:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_TEX_OPTION" then else goto else26 end do _L1[790] = _L1[3].payload[1].payload _L1[791] = _L1[3].payload[2] _L1[792] = _L[208](_L1[790]) _L1[793] = _L1[1].bibtex_or_biber _L1[794] = _L1[1].change_directory _L1[795] = _L1[1].check_driver _L1[796] = _L1[1].color _L1[797] = _L1[1].config_file _L1[798] = _L1[1].dvipdfmx_extraoptions _L1[799] = _L1[1].engine _L1[800] = _L1[1].engine_executable _L1[801] = _L1[1].file_line_error _L1[802] = _L1[1].fmt _L1[803] = _L1[1].fresh _L1[804] = _L1[1].halt_on_error _L1[805] = _L1[1].includeonly _L1[806] = _L1[1].interaction _L1[807] = _L1[1].jobname _L1[808] = _L1[1].make_depends _L1[809] = _L1[1].makeglossaries _L1[810] = _L1[1].makeindex _L1[811] = _L1[1].max_iterations _L1[812] = _L1[1].output _L1[813] = _L1[1].output_directory _L1[814] = _L1[1].output_format _L1[815] = _L1[1].package_support _L1[816] = _L1[1].print_output_directory _L1[817] = _L1[1].shell_escape _L1[818] = _L1[1].source_date_epoch _L1[819] = _L1[1].start_with_draft _L1[820] = _L1[1].synctex _L1[821] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[793], change_directory = _L1[794], check_driver = _L1[795], color = _L1[796], config_file = _L1[797], dvipdfmx_extraoptions = _L1[798], engine = _L1[799], engine_executable = _L1[800], file_line_error = _L1[801], fmt = _L1[802], fresh = _L1[803], halt_on_error = _L1[804], includeonly = _L1[805], interaction = _L1[806], jobname = _L1[807], make_depends = _L1[808], makeglossaries = _L1[809], makeindex = _L1[810], max_iterations = _L1[811], output = _L1[812], output_directory = _L1[813], output_format = _L1[814], package_support = _L1[815], print_output_directory = _L1[816], shell_escape = _L1[817], source_date_epoch = _L1[818], start_with_draft = _L1[819], synctex = _L1[820], tex_extraoptions = {_L1[792], _L1[1].tex_extraoptions}, watch = _L1[821]} _L[537] = _L1[791] goto cont18 end ::else26:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_TEX_OPTIONS" then _L1[822] = _L1[3].payload[1].payload _L1[823] = _L1[3].payload[2] _L1[824] = _L1[1].bibtex_or_biber _L1[825] = _L1[1].change_directory _L1[826] = _L1[1].check_driver _L1[827] = _L1[1].color _L1[828] = _L1[1].config_file _L1[829] = _L1[1].dvipdfmx_extraoptions _L1[830] = _L1[1].engine _L1[831] = _L1[1].engine_executable _L1[832] = _L1[1].file_line_error _L1[833] = _L1[1].fmt _L1[834] = _L1[1].fresh _L1[835] = _L1[1].halt_on_error _L1[836] = _L1[1].includeonly _L1[837] = _L1[1].interaction _L1[838] = _L1[1].jobname _L1[839] = _L1[1].make_depends _L1[840] = _L1[1].makeglossaries _L1[841] = _L1[1].makeindex _L1[842] = _L1[1].max_iterations _L1[843] = _L1[1].output _L1[844] = _L1[1].output_directory _L1[845] = _L1[1].output_format _L1[846] = _L1[1].package_support _L1[847] = _L1[1].print_output_directory _L1[848] = _L1[1].shell_escape _L1[849] = _L1[1].source_date_epoch _L1[850] = _L1[1].start_with_draft _L1[851] = _L1[1].synctex _L1[852] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[824], change_directory = _L1[825], check_driver = _L1[826], color = _L1[827], config_file = _L1[828], dvipdfmx_extraoptions = _L1[829], engine = _L1[830], engine_executable = _L1[831], file_line_error = _L1[832], fmt = _L1[833], fresh = _L1[834], halt_on_error = _L1[835], includeonly = _L1[836], interaction = _L1[837], jobname = _L1[838], make_depends = _L1[839], makeglossaries = _L1[840], makeindex = _L1[841], max_iterations = _L1[842], output = _L1[843], output_directory = _L1[844], output_format = _L1[845], package_support = _L1[846], print_output_directory = _L1[847], shell_escape = _L1[848], source_date_epoch = _L1[849], start_with_draft = _L1[850], synctex = _L1[851], tex_extraoptions = {_L1[822], _L1[1].tex_extraoptions}, watch = _L1[852]} _L[537] = _L1[823] goto cont18 end if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_DVIPDFMX_OPTION" then else goto else27 end do _L1[853] = _L1[3].payload[1].payload _L1[854] = _L1[3].payload[2] _L1[855] = _L[208](_L1[853]) _L1[856] = _L1[1].bibtex_or_biber _L1[857] = _L1[1].change_directory _L1[858] = _L1[1].check_driver _L1[859] = _L1[1].color _L1[860] = _L1[1].config_file _L1[861] = _L1[1].engine _L1[862] = _L1[1].engine_executable _L1[863] = _L1[1].file_line_error _L1[864] = _L1[1].fmt _L1[865] = _L1[1].fresh _L1[866] = _L1[1].halt_on_error _L1[867] = _L1[1].includeonly _L1[868] = _L1[1].interaction _L1[869] = _L1[1].jobname _L1[870] = _L1[1].make_depends _L1[871] = _L1[1].makeglossaries _L1[872] = _L1[1].makeindex _L1[873] = _L1[1].max_iterations _L1[874] = _L1[1].output _L1[875] = _L1[1].output_directory _L1[876] = _L1[1].output_format _L1[877] = _L1[1].package_support _L1[878] = _L1[1].print_output_directory _L1[879] = _L1[1].shell_escape _L1[880] = _L1[1].source_date_epoch _L1[881] = _L1[1].start_with_draft _L1[882] = _L1[1].synctex _L1[883] = _L1[1].tex_extraoptions _L1[884] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[856], change_directory = _L1[857], check_driver = _L1[858], color = _L1[859], config_file = _L1[860], dvipdfmx_extraoptions = {_L1[855], _L1[1].dvipdfmx_extraoptions}, engine = _L1[861], engine_executable = _L1[862], file_line_error = _L1[863], fmt = _L1[864], fresh = _L1[865], halt_on_error = _L1[866], includeonly = _L1[867], interaction = _L1[868], jobname = _L1[869], make_depends = _L1[870], makeglossaries = _L1[871], makeindex = _L1[872], max_iterations = _L1[873], output = _L1[874], output_directory = _L1[875], output_format = _L1[876], package_support = _L1[877], print_output_directory = _L1[878], shell_escape = _L1[879], source_date_epoch = _L1[880], start_with_draft = _L1[881], synctex = _L1[882], tex_extraoptions = _L1[883], watch = _L1[884]} _L[537] = _L1[854] goto cont18 end ::else27:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_DVIPDFMX_OPTIONS" then _L1[885] = _L1[3].payload[1].payload _L1[886] = _L1[3].payload[2] _L1[887] = _L1[1].bibtex_or_biber _L1[888] = _L1[1].change_directory _L1[889] = _L1[1].check_driver _L1[890] = _L1[1].color _L1[891] = _L1[1].config_file _L1[892] = _L1[1].dvipdfmx_extraoptions _L1[893] = _L1[1].engine _L1[894] = _L1[1].engine_executable _L1[895] = _L1[1].file_line_error _L1[896] = _L1[1].fmt _L1[897] = _L1[1].fresh _L1[898] = _L1[1].halt_on_error _L1[899] = _L1[1].includeonly _L1[900] = _L1[1].interaction _L1[901] = _L1[1].jobname _L1[902] = _L1[1].make_depends _L1[903] = _L1[1].makeglossaries _L1[904] = _L1[1].makeindex _L1[905] = _L1[1].max_iterations _L1[906] = _L1[1].output _L1[907] = _L1[1].output_directory _L1[908] = _L1[1].output_format _L1[909] = _L1[1].package_support _L1[910] = _L1[1].print_output_directory _L1[911] = _L1[1].shell_escape _L1[912] = _L1[1].source_date_epoch _L1[913] = _L1[1].start_with_draft _L1[914] = _L1[1].synctex _L1[915] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[887], change_directory = _L1[888], check_driver = _L1[889], color = _L1[890], config_file = _L1[891], dvipdfmx_extraoptions = _L1[892], engine = _L1[893], engine_executable = _L1[894], file_line_error = _L1[895], fmt = _L1[896], fresh = _L1[897], halt_on_error = _L1[898], includeonly = _L1[899], interaction = _L1[900], jobname = _L1[901], make_depends = _L1[902], makeglossaries = _L1[903], makeindex = _L1[904], max_iterations = _L1[905], output = _L1[906], output_directory = _L1[907], output_format = _L1[908], package_support = _L1[909], print_output_directory = _L1[910], shell_escape = _L1[911], source_date_epoch = _L1[912], start_with_draft = _L1[913], synctex = _L1[914], tex_extraoptions = {_L1[885], _L1[1].dvipdfmx_extraoptions}, watch = _L1[915]} _L[537] = _L1[886] goto cont18 end if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_MAKEINDEX" then else goto else28 end do _L1[916] = _L1[3].payload[1].payload _L1[917] = _L1[3].payload[2] _L1[918] = _L1[1].makeindex if _L1[918].tag == "NONE" then _L1[919] = _L1[1].bibtex_or_biber _L1[920] = _L1[1].change_directory _L1[921] = _L1[1].check_driver _L1[922] = _L1[1].color _L1[923] = _L1[1].config_file _L1[924] = _L1[1].dvipdfmx_extraoptions _L1[925] = _L1[1].engine _L1[926] = _L1[1].engine_executable _L1[927] = _L1[1].file_line_error _L1[928] = _L1[1].fmt _L1[929] = _L1[1].fresh _L1[930] = _L1[1].halt_on_error _L1[931] = _L1[1].includeonly _L1[932] = _L1[1].interaction _L1[933] = _L1[1].jobname _L1[934] = _L1[1].make_depends _L1[935] = _L1[1].makeglossaries _L1[936] = _L1[1].max_iterations _L1[937] = _L1[1].output _L1[938] = _L1[1].output_directory _L1[939] = _L1[1].output_format _L1[940] = _L1[1].package_support _L1[941] = _L1[1].print_output_directory _L1[942] = _L1[1].shell_escape _L1[943] = _L1[1].source_date_epoch _L1[944] = _L1[1].start_with_draft _L1[945] = _L1[1].synctex _L1[946] = _L1[1].tex_extraoptions _L1[947] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[919], change_directory = _L1[920], check_driver = _L1[921], color = _L1[922], config_file = _L1[923], dvipdfmx_extraoptions = _L1[924], engine = _L1[925], engine_executable = _L1[926], file_line_error = _L1[927], fmt = _L1[928], fresh = _L1[929], halt_on_error = _L1[930], includeonly = _L1[931], interaction = _L1[932], jobname = _L1[933], make_depends = _L1[934], makeglossaries = _L1[935], makeindex = {tag = "SOME", payload = _L1[916]}, max_iterations = _L1[936], output = _L1[937], output_directory = _L1[938], output_format = _L1[939], package_support = _L1[940], print_output_directory = _L1[941], shell_escape = _L1[942], source_date_epoch = _L1[943], start_with_draft = _L1[944], synctex = _L1[945], tex_extraoptions = _L1[946], watch = _L1[947]} _L[537] = _L1[917] goto cont18 end if _L1[918].tag == "SOME" then else _raise(_Match, "handle-options.sml:303:44") end _L[124]({_L[118], "multiple --makeindex options\n"}) tmp15(1, true) end ::else28:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_BIBTEX" then else goto else29 end do _L1[948] = _L1[3].payload[1].payload _L1[949] = _L1[3].payload[2] _L1[950] = _L1[1].bibtex_or_biber if _L1[950].tag == "NONE" then _L1[951] = _L1[1].change_directory _L1[952] = _L1[1].check_driver _L1[953] = _L1[1].color _L1[954] = _L1[1].config_file _L1[955] = _L1[1].dvipdfmx_extraoptions _L1[956] = _L1[1].engine _L1[957] = _L1[1].engine_executable _L1[958] = _L1[1].file_line_error _L1[959] = _L1[1].fmt _L1[960] = _L1[1].fresh _L1[961] = _L1[1].halt_on_error _L1[962] = _L1[1].includeonly _L1[963] = _L1[1].interaction _L1[964] = _L1[1].jobname _L1[965] = _L1[1].make_depends _L1[966] = _L1[1].makeglossaries _L1[967] = _L1[1].makeindex _L1[968] = _L1[1].max_iterations _L1[969] = _L1[1].output _L1[970] = _L1[1].output_directory _L1[971] = _L1[1].output_format _L1[972] = _L1[1].package_support _L1[973] = _L1[1].print_output_directory _L1[974] = _L1[1].shell_escape _L1[975] = _L1[1].source_date_epoch _L1[976] = _L1[1].start_with_draft _L1[977] = _L1[1].synctex _L1[978] = _L1[1].tex_extraoptions _L1[979] = _L1[1].watch _L[536] = {bibtex_or_biber = {tag = "SOME", payload = {tag = "BIBTEX", payload = _L1[948]}}, change_directory = _L1[951], check_driver = _L1[952], color = _L1[953], config_file = _L1[954], dvipdfmx_extraoptions = _L1[955], engine = _L1[956], engine_executable = _L1[957], file_line_error = _L1[958], fmt = _L1[959], fresh = _L1[960], halt_on_error = _L1[961], includeonly = _L1[962], interaction = _L1[963], jobname = _L1[964], make_depends = _L1[965], makeglossaries = _L1[966], makeindex = _L1[967], max_iterations = _L1[968], output = _L1[969], output_directory = _L1[970], output_format = _L1[971], package_support = _L1[972], print_output_directory = _L1[973], shell_escape = _L1[974], source_date_epoch = _L1[975], start_with_draft = _L1[976], synctex = _L1[977], tex_extraoptions = _L1[978], watch = _L1[979]} _L[537] = _L1[949] goto cont18 end if _L1[950].tag == "SOME" then else _raise(_Match, "handle-options.sml:307:41") end _L[124]({_L[118], "multiple --bibtex / --biber options\n"}) tmp15(1, true) end ::else29:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_BIBER" then else goto else30 end do _L1[980] = _L1[3].payload[1].payload _L1[981] = _L1[3].payload[2] _L1[982] = _L1[1].bibtex_or_biber if _L1[982].tag == "NONE" then _L1[983] = _L1[1].change_directory _L1[984] = _L1[1].check_driver _L1[985] = _L1[1].color _L1[986] = _L1[1].config_file _L1[987] = _L1[1].dvipdfmx_extraoptions _L1[988] = _L1[1].engine _L1[989] = _L1[1].engine_executable _L1[990] = _L1[1].file_line_error _L1[991] = _L1[1].fmt _L1[992] = _L1[1].fresh _L1[993] = _L1[1].halt_on_error _L1[994] = _L1[1].includeonly _L1[995] = _L1[1].interaction _L1[996] = _L1[1].jobname _L1[997] = _L1[1].make_depends _L1[998] = _L1[1].makeglossaries _L1[999] = _L1[1].makeindex _L1[1000] = _L1[1].max_iterations _L1[1001] = _L1[1].output _L1[1002] = _L1[1].output_directory _L1[1003] = _L1[1].output_format _L1[1004] = _L1[1].package_support _L1[1005] = _L1[1].print_output_directory _L1[1006] = _L1[1].shell_escape _L1[1007] = _L1[1].source_date_epoch _L1[1008] = _L1[1].start_with_draft _L1[1009] = _L1[1].synctex _L1[1010] = _L1[1].tex_extraoptions _L1[1011] = _L1[1].watch _L[536] = {bibtex_or_biber = {tag = "SOME", payload = {tag = "BIBER", payload = _L1[980]}}, change_directory = _L1[983], check_driver = _L1[984], color = _L1[985], config_file = _L1[986], dvipdfmx_extraoptions = _L1[987], engine = _L1[988], engine_executable = _L1[989], file_line_error = _L1[990], fmt = _L1[991], fresh = _L1[992], halt_on_error = _L1[993], includeonly = _L1[994], interaction = _L1[995], jobname = _L1[996], make_depends = _L1[997], makeglossaries = _L1[998], makeindex = _L1[999], max_iterations = _L1[1000], output = _L1[1001], output_directory = _L1[1002], output_format = _L1[1003], package_support = _L1[1004], print_output_directory = _L1[1005], shell_escape = _L1[1006], source_date_epoch = _L1[1007], start_with_draft = _L1[1008], synctex = _L1[1009], tex_extraoptions = _L1[1010], watch = _L1[1011]} _L[537] = _L1[981] goto cont18 end if _L1[982].tag == "SOME" then else _raise(_Match, "handle-options.sml:311:40") end _L[124]({_L[118], "multiple --bibtex / --biber options\n"}) tmp15(1, true) end ::else30:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_MAKEGLOSSARIES" then else goto else31 end do _L1[1012] = _L1[3].payload[1].payload _L1[1013] = _L1[3].payload[2] _L1[1014] = _L1[1].makeglossaries if _L1[1014].tag == "NONE" then _L1[1015] = _L1[1].bibtex_or_biber _L1[1016] = _L1[1].change_directory _L1[1017] = _L1[1].check_driver _L1[1018] = _L1[1].color _L1[1019] = _L1[1].config_file _L1[1020] = _L1[1].dvipdfmx_extraoptions _L1[1021] = _L1[1].engine _L1[1022] = _L1[1].engine_executable _L1[1023] = _L1[1].file_line_error _L1[1024] = _L1[1].fmt _L1[1025] = _L1[1].fresh _L1[1026] = _L1[1].halt_on_error _L1[1027] = _L1[1].includeonly _L1[1028] = _L1[1].interaction _L1[1029] = _L1[1].jobname _L1[1030] = _L1[1].make_depends _L1[1031] = _L1[1].makeindex _L1[1032] = _L1[1].max_iterations _L1[1033] = _L1[1].output _L1[1034] = _L1[1].output_directory _L1[1035] = _L1[1].output_format _L1[1036] = _L1[1].package_support _L1[1037] = _L1[1].print_output_directory _L1[1038] = _L1[1].shell_escape _L1[1039] = _L1[1].source_date_epoch _L1[1040] = _L1[1].start_with_draft _L1[1041] = _L1[1].synctex _L1[1042] = _L1[1].tex_extraoptions _L1[1043] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[1015], change_directory = _L1[1016], check_driver = _L1[1017], color = _L1[1018], config_file = _L1[1019], dvipdfmx_extraoptions = _L1[1020], engine = _L1[1021], engine_executable = _L1[1022], file_line_error = _L1[1023], fmt = _L1[1024], fresh = _L1[1025], halt_on_error = _L1[1026], includeonly = _L1[1027], interaction = _L1[1028], jobname = _L1[1029], make_depends = _L1[1030], makeglossaries = {tag = "SOME", payload = _L1[1012]}, makeindex = _L1[1031], max_iterations = _L1[1032], output = _L1[1033], output_directory = _L1[1034], output_format = _L1[1035], package_support = _L1[1036], print_output_directory = _L1[1037], shell_escape = _L1[1038], source_date_epoch = _L1[1039], start_with_draft = _L1[1040], synctex = _L1[1041], tex_extraoptions = _L1[1042], watch = _L1[1043]} _L[537] = _L1[1013] goto cont18 end if _L1[1014].tag == "SOME" then else _raise(_Match, "handle-options.sml:315:49") end _L[124]({_L[118], "multiple --makeglossaries options\n"}) tmp15(1, true) end ::else31:: if _L1[3].tag == "SOME" and _L1[3].payload[1].tag == "OPT_CONFIG_FILE" then else goto else32 end do _L1[1044] = _L1[3].payload[1].payload _L1[1045] = _L1[3].payload[2] _L1[1046] = _L1[1].config_file if _L1[1046].tag == "NONE" then _L1[1047] = _L1[1].bibtex_or_biber _L1[1048] = _L1[1].change_directory _L1[1049] = _L1[1].check_driver _L1[1050] = _L1[1].color _L1[1051] = _L1[1].dvipdfmx_extraoptions _L1[1052] = _L1[1].engine _L1[1053] = _L1[1].engine_executable _L1[1054] = _L1[1].file_line_error _L1[1055] = _L1[1].fmt _L1[1056] = _L1[1].fresh _L1[1057] = _L1[1].halt_on_error _L1[1058] = _L1[1].includeonly _L1[1059] = _L1[1].interaction _L1[1060] = _L1[1].jobname _L1[1061] = _L1[1].make_depends _L1[1062] = _L1[1].makeglossaries _L1[1063] = _L1[1].makeindex _L1[1064] = _L1[1].max_iterations _L1[1065] = _L1[1].output _L1[1066] = _L1[1].output_directory _L1[1067] = _L1[1].output_format _L1[1068] = _L1[1].package_support _L1[1069] = _L1[1].print_output_directory _L1[1070] = _L1[1].shell_escape _L1[1071] = _L1[1].source_date_epoch _L1[1072] = _L1[1].start_with_draft _L1[1073] = _L1[1].synctex _L1[1074] = _L1[1].tex_extraoptions _L1[1075] = _L1[1].watch _L[536] = {bibtex_or_biber = _L1[1047], change_directory = _L1[1048], check_driver = _L1[1049], color = _L1[1050], config_file = {tag = "SOME", payload = _L1[1044]}, dvipdfmx_extraoptions = _L1[1051], engine = _L1[1052], engine_executable = _L1[1053], file_line_error = _L1[1054], fmt = _L1[1055], fresh = _L1[1056], halt_on_error = _L1[1057], includeonly = _L1[1058], interaction = _L1[1059], jobname = _L1[1060], make_depends = _L1[1061], makeglossaries = _L1[1062], makeindex = _L1[1063], max_iterations = _L1[1064], output = _L1[1065], output_directory = _L1[1066], output_format = _L1[1067], package_support = _L1[1068], print_output_directory = _L1[1069], shell_escape = _L1[1070], source_date_epoch = _L1[1071], start_with_draft = _L1[1072], synctex = _L1[1073], tex_extraoptions = _L1[1074], watch = _L1[1075]} _L[537] = _L1[1045] goto cont18 end if _L1[1046].tag == "SOME" then else _raise(_Match, "handle-options.sml:319:46") end _L[124]({_L[118], "multiple --config-file options\n"}) tmp15(1, true) end ::else32:: if _L1[3].tag == "NONE" then else _raise(_Match, "handle-options.sml:167:7") end do if _L1[2] ~= nil and _L1[2][1] == "--" then _L[535] = {_L1[1], _L1[2][2]} goto cont5 end if _L1[2] ~= nil then else if _L1[2] == nil then else _raise(_Match, "handle-options.sml:323:20") end _L[535] = _L[373]() goto cont5 end do _L1[1076] = _L1[2][1] _L1[1077] = isPrefix("-") _L1[1078] = _L1[1077](_L1[1076]) if _L1[1078] then else _L[535] = {_L1[1], _L1[2]} goto cont5 end _L[124]({_L[118], "Unrecognized option: " .. _L1[1076] .. ".\n" .. "\n"}) tmp15(1, true) end end end end ::cont5:: _L[538] = _L[535][1] _L[539] = _L[535][2] _L[540] = _L[538].config_file do if _L[540].tag == "SOME" then _L[542] = {tag = "SOME", payload = _L[540].payload} goto cont18 end if _L[540].tag == "NONE" then do _L[544] = tmp16("CLUTTEX_CONFIG_FILE") if _L[544] == nil then _L[543] = NONE else _L[543] = {tag = "SOME", payload = _L[544]} end end if _L[543].tag == "SOME" then _L[542] = {tag = "SOME", payload = _L[543].payload} goto cont18 end if _L[543].tag == "NONE" then if _L[220] then do _L[546] = tmp16("APPDATA") if _L[546] == nil then _L[545] = NONE else _L[545] = {tag = "SOME", payload = _L[546]} end end if _L[545].tag == "SOME" then _L[542] = {tag = "SOME", payload = _L[545].payload .. "\\cluttex\\config.toml"} goto cont18 elseif _L[545].tag == "NONE" then _L[542] = NONE goto cont18 else _raise(_Match, "main.sml:754:45") end end do _L[548] = tmp16("XDG_CONFIG_HOME") if _L[548] == nil then _L[547] = NONE else _L[547] = {tag = "SOME", payload = _L[548]} end end if _L[547].tag == "SOME" then _L[542] = {tag = "SOME", payload = _L[547].payload .. "/cluttex/config.toml"} goto cont18 end if _L[547].tag == "NONE" then do _L[550] = tmp16("HOME") if _L[550] == nil then _L[549] = NONE else _L[549] = {tag = "SOME", payload = _L[550]} end end if _L[549].tag == "SOME" then _L[542] = {tag = "SOME", payload = _L[549].payload .. "/.config/cluttex/config.toml"} elseif _L[549].tag == "NONE" then _L[542] = NONE else _raise(_Match, "main.sml:760:57") end else _raise(_Match, "main.sml:758:45") end else _raise(_Match, "main.sml:751:30") end else _raise(_Match, "main.sml:750:5") end ::cont18:: if _L[542].tag == "NONE" then _L[541] = _L[363] goto cont6 end if _L[542].tag == "SOME" then else _raise(_Match, "main.sml:764:32") end do _L[551] = _L[542].payload _L[552], _L[553] = _handle(function() local tmp54, tmp55, expect, skipWhiteSpace, skipWhiteSpaceAndGetc, skipUntilNewline, skipWhiteSpaceOrComment, skipWhiteSpaceOrCommentOrNewlineAndGetc, skipOptionalNewline, go, checkAllowedChar, go1, go2, readHexInt, readOctInt, readBinInt, readSigned, readUnsigned do local ins = _L[115](_L[551]) tmp54 = _L[122](ins) tmp55 = function(strm, state) local tmp56 = _L[94](strm) if state == "START" and tmp56.tag == "NONE" then return NONE end if tmp56.tag == "NONE" then _raise(_L[172], "validate_utf8.sml:67:22") end if tmp56.tag == "SOME" then local c = tmp56.payload[1] local strm1 = tmp56.payload[2] local tmp57 if state == "START" then if c < 128 then tmp57 = _L[173] goto cont end if c < 224 then if 194 <= c then tmp57 = _L[178] goto cont else _raise(_L[172], "validate_utf8.sml:30:55") end elseif c == 224 then tmp57 = _L[174] goto cont elseif c == 237 then tmp57 = _L[175] goto cont elseif c < 240 then tmp57 = _L[179] goto cont elseif c == 240 then tmp57 = _L[176] goto cont elseif c < 244 then tmp57 = _L[180] goto cont elseif c == 244 then tmp57 = _L[177] goto cont else _raise(_L[172], "validate_utf8.sml:44:11") end end if state == "TAIL_1" then if 128 <= c then if c < 192 then tmp57 = _L[173] goto cont else _raise(_L[172], "validate_utf8.sml:47:14") end else _raise(_L[172], "validate_utf8.sml:47:14") end end if state == "MID_1_OF_3_E0" then if 160 <= c then if c < 192 then tmp57 = _L[178] goto cont else _raise(_L[172], "validate_utf8.sml:50:14") end else _raise(_L[172], "validate_utf8.sml:50:14") end end if state == "MID_1_OF_3_ED" then if 128 <= c then if c < 160 then tmp57 = _L[178] goto cont else _raise(_L[172], "validate_utf8.sml:53:14") end else _raise(_L[172], "validate_utf8.sml:53:14") end end if state == "TAIL_2" then if 128 <= c then if c < 192 then tmp57 = _L[178] goto cont else _raise(_L[172], "validate_utf8.sml:56:14") end else _raise(_L[172], "validate_utf8.sml:56:14") end end if state == "MID_1_OF_4_F0" then if 144 <= c then if c < 192 then tmp57 = _L[179] goto cont else _raise(_L[172], "validate_utf8.sml:59:14") end else _raise(_L[172], "validate_utf8.sml:59:14") end end if state == "TAIL_3" then if 128 <= c then if c < 192 then tmp57 = _L[179] goto cont else _raise(_L[172], "validate_utf8.sml:62:14") end else _raise(_L[172], "validate_utf8.sml:62:14") end end if state == "MID_1_OF_4_F4" then if 128 <= c then if c < 144 then tmp57 = _L[179] else _raise(_L[172], "validate_utf8.sml:65:14") end else _raise(_L[172], "validate_utf8.sml:65:14") end else _raise(_Match, "validate_utf8.sml:26:7") end ::cont:: return {tag = "SOME", payload = {c, {strm1, tmp57}}} else _raise(_Match, "validate_utf8.sml:66:7") end end expect = function(c, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then else goto else1 end do local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = tmp56}}}, "parse_toml.sml:16:5") end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:28:9") end do local c_PRIME = exp.payload[1] local strm_PRIME = exp.payload[2] if c == c_PRIME then return strm_PRIME end local tmp56 = toString(c) local tmp57 = toString(c_PRIME) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp57, expected = tmp56}}}, "parse_toml.sml:19:5") end end skipWhiteSpace = function(a) local tmp56 = a ::cont:: do local a1 = tmp56 local exp do local strm = a1[1] exp = tmp55(strm, a1[2]) end if exp.tag == "NONE" then return a1 end if exp.tag == "SOME" then local c = exp.payload[1] local strm_PRIME = exp.payload[2] if c == 32 then tmp56 = strm_PRIME goto cont elseif c == 9 then tmp56 = strm_PRIME goto cont else return a1 end else _raise(_Match, "parse_toml.sml:34:9") end end end skipWhiteSpaceAndGetc = function(strm, state) local tmp56, tmp57 = strm, state ::cont:: do local strm1, state1 = tmp56, tmp57 local exp = tmp55(strm1, state1) if exp.tag == "SOME" and exp.payload[1] == 32 then local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] tmp56 = strm2 tmp57 = strm_PRIME[2] goto cont elseif exp.tag == "SOME" and exp.payload[1] == 9 then local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] tmp56 = strm2 tmp57 = strm_PRIME[2] goto cont else return exp end end end skipUntilNewline = function(a) local tmp56 = a ::cont:: do local exp do local a1 = tmp56 do local strm = a1[1] exp = tmp55(strm, a1[2]) end if exp.tag == "NONE" then return a1 end if exp.tag == "SOME" and exp.payload[1] == 10 then return exp.payload[2] end if exp.tag == "SOME" and exp.payload[1] == 13 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm = strm_PRIME[1] return expect(10, strm, strm_PRIME[2]) end end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:47:9") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp57 do if c <= 127 then else tmp57 = false goto cont1 end do local tmp58 = isPrint(c) tmp57 = not tmp58 end end ::cont1:: if tmp57 then else tmp56 = strm_PRIME goto cont end do local tmp58 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp58, expected = "printable character"}}}, "parse_toml.sml:19:5") end end end end skipWhiteSpaceOrComment = function(a) local tmp56 = a ::cont:: do local exp do local a1 = tmp56 do local strm = a1[1] exp = tmp55(strm, a1[2]) end if exp.tag == "NONE" then return a1 end if exp.tag == "SOME" and exp.payload[1] == 35 then else goto else1 end do return skipUntilNewline(exp.payload[2]) end end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 32 then tmp56 = exp.payload[2] goto cont end if exp.tag == "SOME" and exp.payload[1] == 9 then tmp56 = exp.payload[2] goto cont end if exp.tag == "SOME" and exp.payload[1] == 13 then else goto else2 end do local strm_PRIME = exp.payload[2] local strm = strm_PRIME[1] return expect(10, strm, strm_PRIME[2]) end ::else2:: if exp.tag == "SOME" and exp.payload[1] == 10 then return exp.payload[2] end if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:56:9") end do local tmp57 = toString(exp.payload[1]) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp57, expected = "whitespace or comment"}}}, "parse_toml.sml:19:5") end end end skipWhiteSpaceOrCommentOrNewlineAndGetc = function(a) local tmp56 = a ::cont:: do local a1 = tmp56 local exp do local strm = a1[1] exp = tmp55(strm, a1[2]) end if exp.tag == "SOME" and exp.payload[1] == 35 then elseif exp.tag == "SOME" and exp.payload[1] == 32 then tmp56 = exp.payload[2] goto cont elseif exp.tag == "SOME" and exp.payload[1] == 9 then tmp56 = exp.payload[2] goto cont else if exp.tag == "SOME" and exp.payload[1] == 13 then elseif exp.tag == "SOME" and exp.payload[1] == 10 then tmp56 = exp.payload[2] goto cont else return exp end do local strm_PRIME = exp.payload[2] local strm = strm_PRIME[1] tmp56 = expect(10, strm, strm_PRIME[2]) goto cont end end tmp56 = skipUntilNewline(exp.payload[2]) goto cont end end skipOptionalNewline = function(a) local exp do local strm = a[1] exp = tmp55(strm, a[2]) end if exp.tag == "SOME" and exp.payload[1] == 10 then return exp.payload[2] else if exp.tag == "SOME" and exp.payload[1] == 13 then else return a end do local strm_PRIME = exp.payload[2] local strm = strm_PRIME[1] return expect(10, strm, strm_PRIME[2]) end end end local skipWhiteSpaceOrNewline = function(a) local tmp56 = a ::cont:: do local a1 = tmp56 local exp do local strm = a1[1] exp = tmp55(strm, a1[2]) end if exp.tag == "NONE" then return a1 end if exp.tag == "SOME" and exp.payload[1] == 13 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm = strm_PRIME[1] tmp56 = expect(10, strm, strm_PRIME[2]) goto cont end ::else1:: if exp.tag == "SOME" then local c = exp.payload[1] local strm_PRIME = exp.payload[2] if c == 32 then tmp56 = strm_PRIME goto cont elseif c == 9 then tmp56 = strm_PRIME goto cont elseif c == 10 then tmp56 = strm_PRIME goto cont else return a1 end else _raise(_Match, "parse_toml.sml:83:9") end end end local readHexDigit = function(strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "hexadecimal digit"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:93:9") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then return {_Int_sub(c, 48), strm_PRIME} end if 65 <= c and c <= 70 then return {_Int_sub(c, 55), strm_PRIME} end if 97 <= c and c <= 102 then return {_Int_sub(c, 87), strm_PRIME} end local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "hexadecimal digit"}}}, "parse_toml.sml:19:5") end end local readFourHexDigit = function(strm, state) local exp = readHexDigit(strm, state) local c3 = exp[1] local strm1 = exp[2] local exp1 do local strm2 = strm1[1] exp1 = readHexDigit(strm2, strm1[2]) end local c2 = exp1[1] local strm2 = exp1[2] local exp2 do local strm3 = strm2[1] exp2 = readHexDigit(strm3, strm2[2]) end local c1 = exp2[1] local strm3 = exp2[2] local exp3 do local strm4 = strm3[1] exp3 = readHexDigit(strm4, strm3[2]) end local c0 = exp3[1] local strm4 = exp3[2] return {_Int_add(_Int_mul(_Int_add(_Int_mul(_Int_add(_Int_mul(c3, 16), c2), 16), c1), 16), c0), strm4} end go = function(accum, strm, state) local tmp56, tmp57, tmp58 = accum, strm, state ::cont:: do local accum1, exp do local strm1, state1 accum1, strm1, state1 = tmp56, tmp57, tmp58 exp = tmp55(strm1, state1) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing quote"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 34 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp59 = implodeRev(accum1) return {tmp59, strm_PRIME} end end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 92 then else goto else2 end do local exp1 do local strm_PRIME = exp.payload[2] do local strm1 = strm_PRIME[1] exp1 = tmp55(strm1, strm_PRIME[2]) end if exp1.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "escape sequence"}}}, "parse_toml.sml:16:5") end if exp1.tag == "SOME" and exp1.payload[1] == 34 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {34, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 92 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {92, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 98 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {8, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 102 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {12, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 110 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {10, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 114 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {13, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 116 then local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {9, accum1} local strm1 = strm_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME[2] goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 117 then else goto else3 end do local strm_PRIME_PRIME = exp1.payload[2] local exp2 do local strm1 = strm_PRIME_PRIME[1] exp2 = readFourHexDigit(strm1, strm_PRIME_PRIME[2]) end local i = exp2[1] local strm_PRIME_PRIME_PRIME = exp2[2] local tmp59 = _L[187](i, accum1) local strm1 = strm_PRIME_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME_PRIME[2] goto cont end end ::else3:: if exp1.tag == "SOME" and exp1.payload[1] == 85 then else goto else4 end do local strm_PRIME_PRIME = exp1.payload[2] local exp2 do local strm1 = strm_PRIME_PRIME[1] exp2 = readFourHexDigit(strm1, strm_PRIME_PRIME[2]) end local hi = exp2[1] local strm_PRIME_PRIME_PRIME = exp2[2] local exp3 do local strm1 = strm_PRIME_PRIME_PRIME[1] exp3 = readFourHexDigit(strm1, strm_PRIME_PRIME_PRIME[2]) end local lo = exp3[1] local strm_PRIME_PRIME_PRIME_PRIME = exp3[2] if hi > 16 then _raise({tag = _L[186], payload = _L[182]}, "parse_toml.sml:139:24") end local tmp59 = _L[187](_Int_add(_Int_mul(hi, 65536), lo), accum1) local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = strm_PRIME_PRIME_PRIME_PRIME[2] goto cont end ::else4:: if exp1.tag == "SOME" then else _raise(_Match, "parse_toml.sml:120:16") end do local tmp59 = toString(exp1.payload[1]) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp59, expected = "escape sequence"}}}, "parse_toml.sml:19:5") end end ::else2:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:116:11") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp59 = c < 32 and c ~= 9 local tmp60 tmp60 = tmp59 or c == 127 if tmp60 then else local tmp61 = {c, accum1} local strm1 = strm_PRIME[1] tmp56 = tmp61 tmp57 = strm1 tmp58 = strm_PRIME[2] goto cont end do local tmp61 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp61, expected = "printable character"}}}, "parse_toml.sml:19:5") end end end end checkAllowedChar = function(a) local tmp56 = a < 32 and (a ~= 9 and a ~= 10) local tmp57 tmp57 = tmp56 or a == 127 if tmp57 then else return a end do local tmp58 = toString(a) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp58, expected = "printable character"}}}, "parse_toml.sml:19:5") end end local function escape(accum, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "escape sequence"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 34 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp56 = {34, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 92 then else goto else2 end do local strm_PRIME = exp.payload[2] local tmp56 = {92, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else2:: if exp.tag == "SOME" and exp.payload[1] == 98 then else goto else3 end do local strm_PRIME = exp.payload[2] local tmp56 = {8, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else3:: if exp.tag == "SOME" and exp.payload[1] == 102 then else goto else4 end do local strm_PRIME = exp.payload[2] local tmp56 = {12, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else4:: if exp.tag == "SOME" and exp.payload[1] == 110 then else goto else5 end do local strm_PRIME = exp.payload[2] local tmp56 = {10, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else5:: if exp.tag == "SOME" and exp.payload[1] == 114 then else goto else6 end do local strm_PRIME = exp.payload[2] local tmp56 = {13, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else6:: if exp.tag == "SOME" and exp.payload[1] == 116 then else goto else7 end do local strm_PRIME = exp.payload[2] local tmp56 = {9, accum} local strm1 = strm_PRIME[1] return go1(tmp56, strm1, strm_PRIME[2]) end ::else7:: if exp.tag == "SOME" and exp.payload[1] == 117 then else goto else8 end do local strm_PRIME = exp.payload[2] local exp1 do local strm1 = strm_PRIME[1] exp1 = readFourHexDigit(strm1, strm_PRIME[2]) end local i = exp1[1] local strm_PRIME_PRIME = exp1[2] local tmp56 = _L[187](i, accum) local strm1 = strm_PRIME_PRIME[1] return go1(tmp56, strm1, strm_PRIME_PRIME[2]) end ::else8:: if exp.tag == "SOME" and exp.payload[1] == 85 then else goto else9 end do local strm_PRIME = exp.payload[2] local exp1 do local strm1 = strm_PRIME[1] exp1 = readFourHexDigit(strm1, strm_PRIME[2]) end local hi = exp1[1] local strm_PRIME_PRIME = exp1[2] local exp2 do local strm1 = strm_PRIME_PRIME[1] exp2 = readFourHexDigit(strm1, strm_PRIME_PRIME[2]) end local lo = exp2[1] local strm_PRIME_PRIME_PRIME = exp2[2] local tmp56 = _L[187](_Int_add(_Int_mul(hi, 65536), lo), accum) local strm1 = strm_PRIME_PRIME_PRIME[1] return go1(tmp56, strm1, strm_PRIME_PRIME_PRIME[2]) end ::else9:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:204:11") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if c == 32 or c == 9 then else goto else10 end do local exp1 do local strm1 = strm_PRIME[1] exp1 = skipWhiteSpaceAndGetc(strm1, strm_PRIME[2]) end if exp1.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "newline"}}}, "parse_toml.sml:16:5") end if exp1.tag == "SOME" and exp1.payload[1] == 10 then else goto else13 end do local tmp56 = skipWhiteSpaceOrNewline(exp1.payload[2]) local strm1 = tmp56[1] return go1(accum, strm1, tmp56[2]) end ::else13:: if exp1.tag == "SOME" and exp1.payload[1] == 13 then else goto else14 end do local strm_PRIME_PRIME = exp1.payload[2] local tmp56 do local strm1 = strm_PRIME_PRIME[1] tmp56 = expect(10, strm1, strm_PRIME_PRIME[2]) end local tmp57 = skipWhiteSpaceOrNewline(tmp56) local strm1 = tmp57[1] return go1(accum, strm1, tmp57[2]) end ::else14:: if exp1.tag == "SOME" then else _raise(_Match, "parse_toml.sml:229:17") end do local tmp56 = toString(exp1.payload[1]) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "newline"}}}, "parse_toml.sml:19:5") end end ::else10:: if c == 13 then else goto else11 end do local tmp56 do local strm1 = strm_PRIME[1] tmp56 = expect(10, strm1, strm_PRIME[2]) end local tmp57 = skipWhiteSpaceOrNewline(tmp56) local strm1 = tmp57[1] return go1(accum, strm1, tmp57[2]) end ::else11:: if c == 10 then else goto else12 end do local tmp56 = skipWhiteSpaceOrNewline(strm_PRIME) local strm1 = tmp56[1] return go1(accum, strm1, tmp56[2]) end ::else12:: local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "escape sequence"}}}, "parse_toml.sml:19:5") end end go1 = function(accum, strm, state) local tmp56, tmp57, tmp58 = accum, strm, state ::cont:: do local accum1, exp do local strm1, state1 accum1, strm1, state1 = tmp56, tmp57, tmp58 exp = tmp55(strm1, state1) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing triple quote"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 92 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] return escape(accum1, strm2, strm_PRIME[2]) end end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 34 then else goto else2 end do local exp1 do local strm_PRIME = exp.payload[2] do local strm1 = strm_PRIME[1] exp1 = tmp55(strm1, strm_PRIME[2]) end if exp1.tag == "SOME" and exp1.payload[1] == 34 then else goto else4 end do local exp2 do local strm_PRIME_PRIME = exp1.payload[2] do local strm1 = strm_PRIME_PRIME[1] exp2 = tmp55(strm1, strm_PRIME_PRIME[2]) end if exp2.tag == "SOME" and exp2.payload[1] == 34 then else goto else7 end do local strm_PRIME_PRIME_PRIME do strm_PRIME_PRIME_PRIME = exp2.payload[2] local exp3 do local strm1 = strm_PRIME_PRIME_PRIME[1] exp3 = tmp55(strm1, strm_PRIME_PRIME_PRIME[2]) end if exp3.tag == "SOME" and exp3.payload[1] == 34 then else goto else10 end do local strm_PRIME_PRIME_PRIME_PRIME do strm_PRIME_PRIME_PRIME_PRIME = exp3.payload[2] local exp4 do local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] exp4 = tmp55(strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end if exp4.tag == "SOME" and exp4.payload[1] == 34 then else goto else11 end do local strm_PRIME_PRIME_PRIME_PRIME_PRIME = exp4.payload[2] local tmp59 = implodeRev({34, {34, accum1}}) return {tmp59, strm_PRIME_PRIME_PRIME_PRIME_PRIME} end end ::else11:: local tmp59 = implodeRev({34, accum1}) return {tmp59, strm_PRIME_PRIME_PRIME_PRIME} end end ::else10:: local tmp59 = implodeRev(accum1) return {tmp59, strm_PRIME_PRIME_PRIME} end end ::else7:: if exp2.tag == "SOME" and exp2.payload[1] == 92 then else goto else8 end do local strm_PRIME_PRIME_PRIME = exp2.payload[2] local tmp59 = {34, {34, accum1}} local strm1 = strm_PRIME_PRIME_PRIME[1] return escape(tmp59, strm1, strm_PRIME_PRIME_PRIME[2]) end ::else8:: if exp2.tag == "SOME" and exp2.payload[1] == 13 then else goto else9 end do local strm_PRIME_PRIME_PRIME = exp2.payload[2] local tmp59 = {10, {13, {34, {34, accum1}}}} local tmp60 do local strm1 = strm_PRIME_PRIME_PRIME[1] tmp60 = expect(10, strm1, strm_PRIME_PRIME_PRIME[2]) end local strm1 = tmp60[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = tmp60[2] goto cont end ::else9:: if exp2.tag == "SOME" then elseif exp2.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing triple quote"}}}, "parse_toml.sml:16:5") else _raise(_Match, "parse_toml.sml:170:21") end do local c = exp2.payload[1] local strm_PRIME_PRIME_PRIME = exp2.payload[2] local tmp59 = checkAllowedChar(c) local tmp60 = {tmp59, {34, {34, accum1}}} local strm1 = strm_PRIME_PRIME_PRIME[1] tmp56 = tmp60 tmp57 = strm1 tmp58 = strm_PRIME_PRIME_PRIME[2] goto cont end end end ::else4:: if exp1.tag == "SOME" and exp1.payload[1] == 92 then else goto else5 end do local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {34, accum1} local strm1 = strm_PRIME_PRIME[1] return escape(tmp59, strm1, strm_PRIME_PRIME[2]) end ::else5:: if exp1.tag == "SOME" and exp1.payload[1] == 13 then else goto else6 end do local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = {10, {13, {34, accum1}}} local tmp60 do local strm1 = strm_PRIME_PRIME[1] tmp60 = expect(10, strm1, strm_PRIME_PRIME[2]) end local strm1 = tmp60[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = tmp60[2] goto cont end ::else6:: if exp1.tag == "SOME" then elseif exp1.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing triple quote"}}}, "parse_toml.sml:16:5") else _raise(_Match, "parse_toml.sml:168:16") end do local c = exp1.payload[1] local strm_PRIME_PRIME_PRIME = exp1.payload[2] local tmp59 = checkAllowedChar(c) local tmp60 = {tmp59, {34, accum1}} local strm1 = strm_PRIME_PRIME_PRIME[1] tmp56 = tmp60 tmp57 = strm1 tmp58 = strm_PRIME_PRIME_PRIME[2] goto cont end end ::else2:: if exp.tag == "SOME" and exp.payload[1] == 13 then else goto else3 end do local strm_PRIME = exp.payload[2] local tmp59 = {10, {13, accum1}} local tmp60 do local strm1 = strm_PRIME[1] tmp60 = expect(10, strm1, strm_PRIME[2]) end local strm1 = tmp60[1] tmp56 = tmp59 tmp57 = strm1 tmp58 = tmp60[2] goto cont end ::else3:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:164:11") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp59 = checkAllowedChar(c) local tmp60 = {tmp59, accum1} local strm1 = strm_PRIME[1] tmp56 = tmp60 tmp57 = strm1 tmp58 = strm_PRIME[2] goto cont end end end go2 = function(accum, strm, state) local tmp56, tmp57, tmp58 = accum, strm, state ::cont:: do local accum1, exp do local strm1, state1 accum1, strm1, state1 = tmp56, tmp57, tmp58 exp = tmp55(strm1, state1) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing quote"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 39 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp59 = implodeRev(accum1) return {tmp59, strm_PRIME} end end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:248:11") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] local tmp59 = c < 32 and c ~= 9 local tmp60 tmp60 = tmp59 or c == 127 if tmp60 then else local tmp61 = {c, accum1} local strm1 = strm_PRIME[1] tmp56 = tmp61 tmp57 = strm1 tmp58 = strm_PRIME[2] goto cont end do local tmp61 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp61, expected = "printable character"}}}, "parse_toml.sml:19:5") end end end end local function readHexIntUnderscore(accum, strm) local tmp56, tmp57 = accum, strm ::cont:: do local accum1, strm1 = tmp56, tmp57 local exp do local strm2 = strm1[1] exp = tmp55(strm2, strm1[2]) end if exp.tag == "NONE" then return {accum1, strm1} end if exp.tag == "SOME" and exp.payload[1] == 95 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] return readHexInt(accum1, strm2, strm_PRIME[2]) end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:324:9") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then else goto else2 end do local tmp58 = _L[22](16) local tmp59 = mul(accum1, tmp58) local tmp60 = _L[22](_Int_sub(c, 48)) local tmp61 = add(tmp59, tmp60) tmp56 = tmp61 tmp57 = strm_PRIME goto cont end ::else2:: if 65 <= c and c <= 70 then else goto else3 end do local tmp58 = _L[22](16) local tmp59 = mul(accum1, tmp58) local tmp60 = _L[22](_Int_sub(c, 55)) local tmp61 = add(tmp59, tmp60) tmp56 = tmp61 tmp57 = strm_PRIME goto cont end ::else3:: if 97 <= c and c <= 102 then else return {accum1, strm1} end do local tmp58 = _L[22](16) local tmp59 = mul(accum1, tmp58) local tmp60 = _L[22](_Int_sub(c, 87)) local tmp61 = add(tmp59, tmp60) tmp56 = tmp61 tmp57 = strm_PRIME goto cont end end end end readHexInt = function(accum, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "hexadecimal digit"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:292:9") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then else goto else1 end do local tmp56 = _L[22](16) local tmp57 = mul(accum, tmp56) local tmp58 = _L[22](_Int_sub(c, 48)) local tmp59 = add(tmp57, tmp58) return readHexIntUnderscore(tmp59, strm_PRIME) end ::else1:: if 65 <= c and c <= 70 then else goto else2 end do local tmp56 = _L[22](16) local tmp57 = mul(accum, tmp56) local tmp58 = _L[22](_Int_sub(c, 55)) local tmp59 = add(tmp57, tmp58) return readHexIntUnderscore(tmp59, strm_PRIME) end ::else2:: if 97 <= c and c <= 102 then else goto else3 end do local tmp56 = _L[22](16) local tmp57 = mul(accum, tmp56) local tmp58 = _L[22](_Int_sub(c, 87)) local tmp59 = add(tmp57, tmp58) return readHexIntUnderscore(tmp59, strm_PRIME) end ::else3:: local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "hexadecimal digit"}}}, "parse_toml.sml:19:5") end end local function readOctIntUnderscore(accum, strm) local tmp56, tmp57 = accum, strm ::cont:: do local accum1, strm1 = tmp56, tmp57 local exp do local strm2 = strm1[1] exp = tmp55(strm2, strm1[2]) end if exp.tag == "NONE" then return {accum1, strm1} end if exp.tag == "SOME" and exp.payload[1] == 95 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] return readOctInt(accum1, strm2, strm_PRIME[2]) end ::else1:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:376:9") end do local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 55 then else return {accum1, strm1} end do local tmp58 = _L[22](8) local tmp59 = mul(accum1, tmp58) local tmp60 = _L[22](_Int_sub(c, 48)) local tmp61 = add(tmp59, tmp60) tmp56 = tmp61 tmp57 = strm_PRIME goto cont end end end end readOctInt = function(accum, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "octal digit"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:362:9") end do local c do c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 55 then else goto else1 end do local tmp56 = _L[22](8) local tmp57 = mul(accum, tmp56) local tmp58 = _L[22](_Int_sub(c, 48)) local tmp59 = add(tmp57, tmp58) return readOctIntUnderscore(tmp59, strm_PRIME) end end ::else1:: local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "octal digit"}}}, "parse_toml.sml:19:5") end end local function readBinIntUnderscore(accum, strm) local tmp56, tmp57 = accum, strm ::cont:: do local accum1, strm1 = tmp56, tmp57 local exp do local strm2 = strm1[1] exp = tmp55(strm2, strm1[2]) end if exp.tag == "NONE" then return {accum1, strm1} end if exp.tag == "SOME" and exp.payload[1] == 95 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] return readBinInt(accum1, strm2, strm_PRIME[2]) end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 48 then else goto else2 end do local strm_PRIME = exp.payload[2] local tmp58 = _L[22](2) local tmp59 = mul(accum1, tmp58) tmp56 = tmp59 tmp57 = strm_PRIME goto cont end ::else2:: if exp.tag == "SOME" and exp.payload[1] == 49 then elseif exp.tag == "SOME" then return {accum1, strm1} else _raise(_Match, "parse_toml.sml:409:9") end do local strm_PRIME = exp.payload[2] local tmp58 = _L[22](2) local tmp59 = mul(accum1, tmp58) local tmp60 = _L[22](1) local tmp61 = add(tmp59, tmp60) tmp56 = tmp61 tmp57 = strm_PRIME goto cont end end end readBinInt = function(accum, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "binary digit"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 48 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp56 = _L[22](2) local tmp57 = mul(accum, tmp56) return readBinIntUnderscore(tmp57, strm_PRIME) end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 49 then else goto else2 end do local strm_PRIME = exp.payload[2] local tmp56 = _L[22](2) local tmp57 = mul(accum, tmp56) local tmp58 = _L[22](1) local tmp59 = add(tmp57, tmp58) return readBinIntUnderscore(tmp59, strm_PRIME) end ::else2:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:394:9") end do local tmp56 = toString(exp.payload[1]) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "binary digit"}}}, "parse_toml.sml:19:5") end end local readDecIntUnderscore, readDecInt readDecIntUnderscore = function(accum, hadUnderscore, strm) local tmp56, tmp57, tmp58 = accum, hadUnderscore, strm ::cont:: do local accum1, hadUnderscore1, strm1 = tmp56, tmp57, tmp58 local exp do local strm2 = strm1[1] exp = tmp55(strm2, strm1[2]) end if exp.tag == "NONE" then return {accum1, hadUnderscore1, strm1} end if exp.tag == "SOME" and exp.payload[1] == 95 then else goto else1 end do local strm_PRIME = exp.payload[2] local strm2 = strm_PRIME[1] return readDecInt(accum1, true, strm2, strm_PRIME[2]) end ::else1:: if exp.tag == "SOME" then local c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then tmp56 = {c, accum1} tmp57 = hadUnderscore1 tmp58 = strm_PRIME goto cont else return {accum1, hadUnderscore1, strm1} end else _raise(_Match, "parse_toml.sml:436:9") end end end readDecInt = function(accum, hadUnderscore, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "digit"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:428:9") end do local c do c = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c and c <= 57 then else goto else1 end do return readDecIntUnderscore({c, accum}, hadUnderscore, strm_PRIME) end end ::else1:: local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "digit"}}}, "parse_toml.sml:19:5") end end local readExpPart = function(accum_PRIME, e, strm, state) local exp do local exp1 = tmp55(strm, state) do if exp1.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "exponent part"}}}, "parse_toml.sml:16:5") end if exp1.tag == "SOME" and exp1.payload[1] == 43 then else goto else1 end do local strm_PRIME_PRIME_PRIME = exp1.payload[2] local tmp56 = {43, {e, accum_PRIME}} local strm1 = strm_PRIME_PRIME_PRIME[1] exp = readDecInt(tmp56, false, strm1, strm_PRIME_PRIME_PRIME[2]) goto cont end ::else1:: if exp1.tag == "SOME" and exp1.payload[1] == 45 then else goto else2 end do local strm_PRIME_PRIME_PRIME = exp1.payload[2] local tmp56 = {45, {e, accum_PRIME}} local strm1 = strm_PRIME_PRIME_PRIME[1] exp = readDecInt(tmp56, false, strm1, strm_PRIME_PRIME_PRIME[2]) goto cont end ::else2:: if exp1.tag == "SOME" then else _raise(_Match, "parse_toml.sml:448:13") end do local c do c = exp1.payload[1] local strm_PRIME_PRIME_PRIME = exp1.payload[2] if 48 <= c and c <= 57 then else goto else3 end exp = readDecIntUnderscore({c, {e, accum_PRIME}}, false, strm_PRIME_PRIME_PRIME) goto cont end ::else3:: local tmp56 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "digit or sign (+/-)"}}}, "parse_toml.sml:19:5") end end end ::cont:: local accum_PRIME_PRIME = exp[1] local strm_PRIME_PRIME_PRIME = exp[3] local tmp56 = implodeRev(accum_PRIME_PRIME) local tmp57 = _L[188](tmp56) return {tmp57, strm_PRIME_PRIME_PRIME} end readSigned = function(sign, d0, strm) local accum, strm_PRIME, checkPrefixZero, exp do local exp1 = readDecIntUnderscore({d0, {sign, nil}}, false, strm) accum = exp1[1] strm_PRIME = exp1[3] checkPrefixZero = function() if accum ~= nil and (accum[2] ~= nil and accum[2][2] == nil) then return nil elseif d0 == 48 then _raise({tag = _L[186], payload = _L[181]}, "parse_toml.sml:470:38") else return nil end end do local strm1 = strm_PRIME[1] exp = tmp55(strm1, strm_PRIME[2]) end if exp.tag == "SOME" and exp.payload[1] == 46 then else goto else1 end do local accum_PRIME, strm_PRIME_PRIME_PRIME, exp2 do local strm_PRIME_PRIME = exp.payload[2] checkPrefixZero() local tmp56 = {46, accum} local exp3 do local strm1 = strm_PRIME_PRIME[1] exp3 = readDecInt(tmp56, false, strm1, strm_PRIME_PRIME[2]) end accum_PRIME = exp3[1] strm_PRIME_PRIME_PRIME = exp3[3] do local strm1 = strm_PRIME_PRIME_PRIME[1] exp2 = tmp55(strm1, strm_PRIME_PRIME_PRIME[2]) end if exp2.tag == "SOME" and exp2.payload[1] == 101 then else goto else4 end do local strm_PRIME_PRIME_PRIME_PRIME = exp2.payload[2] local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readExpPart(accum_PRIME, 101, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end end ::else4:: if exp2.tag == "SOME" and exp2.payload[1] == 69 then else goto else5 end do local strm_PRIME_PRIME_PRIME_PRIME = exp2.payload[2] local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readExpPart(accum_PRIME, 69, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end ::else5:: local tmp56 = implodeRev(accum_PRIME) local tmp57 = _L[188](tmp56) return {tmp57, strm_PRIME_PRIME_PRIME} end end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 101 then else goto else2 end do local strm_PRIME_PRIME = exp.payload[2] checkPrefixZero() local strm1 = strm_PRIME_PRIME[1] return readExpPart(accum, 101, strm1, strm_PRIME_PRIME[2]) end ::else2:: if exp.tag == "SOME" and exp.payload[1] == 69 then else goto else3 end do local strm_PRIME_PRIME = exp.payload[2] checkPrefixZero() local strm1 = strm_PRIME_PRIME[1] return readExpPart(accum, 69, strm1, strm_PRIME_PRIME[2]) end ::else3:: checkPrefixZero() local tmp56 = implodeRev(accum) local tmp57 do local tmp58 = scanString(function(a) return scan(DEC, a) end) tmp57 = tmp58(tmp56) end if tmp57.tag == "SOME" then return {{tag = "INTEGER", payload = tmp57.payload}, strm_PRIME} elseif tmp57.tag == "NONE" then _raise(Option, "option.sml:24:18") else _raise(_Match, "option.sml:23:5") end end local readTwoDigit = function(accum, strm, state) local exp = tmp55(strm, state) if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "digit"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:502:9") end do local c0 do c0 = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c0 and c0 <= 57 then else goto else1 end do local exp1 do local strm1 = strm_PRIME[1] exp1 = tmp55(strm1, strm_PRIME[2]) end if exp1.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "digit"}}}, "parse_toml.sml:16:5") end if exp1.tag == "SOME" then else _raise(_Match, "parse_toml.sml:506:15") end do local c1 = exp1.payload[1] local strm_PRIME_PRIME = exp1.payload[2] if 48 <= c1 and c1 <= 57 then local tmp56 = {c1, {c0, accum}} local tmp57 = _Int_mul(_Int_sub(c0, 48), 10) return {tmp56, _Int_add(tmp57, _Int_sub(c1, 48)), strm_PRIME_PRIME} end local tmp56 = toString(c1) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "digit"}}}, "parse_toml.sml:19:5") end end end ::else1:: local tmp56 = toString(c0) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "digit"}}}, "parse_toml.sml:19:5") end end local readMinSec = function(accum, strm, state) local exp = readTwoDigit(accum, strm, state) local accum_PRIME = exp[1] local min = exp[2] local strm_PRIME = exp[3] local strm_PRIME_PRIME do local strm1 = strm_PRIME[1] strm_PRIME_PRIME = expect(58, strm1, strm_PRIME[2]) end local tmp56 = {58, accum_PRIME} local exp1 do local strm1 = strm_PRIME_PRIME[1] exp1 = readTwoDigit(tmp56, strm1, strm_PRIME_PRIME[2]) end local accum_PRIME_PRIME = exp1[1] local sec = exp1[2] local strm_PRIME_PRIME_PRIME = exp1[3] local tmp57 = min < 60 and sec <= 60 if tmp57 then else _raise({tag = _L[186], payload = _L[184]}, "parse_toml.sml:535:18") end local exp2 do local strm1 = strm_PRIME_PRIME_PRIME[1] exp2 = tmp55(strm1, strm_PRIME_PRIME_PRIME[2]) end if exp2.tag == "SOME" and exp2.payload[1] == 46 then else return {accum_PRIME_PRIME, strm_PRIME_PRIME_PRIME} end do local tmp58, tmp59 do local strm_PRIME_PRIME_PRIME_PRIME = exp2.payload[2] tmp59, tmp58 = {46, accum_PRIME_PRIME}, strm_PRIME_PRIME_PRIME_PRIME end ::cont:: do local accum1, strm1 = tmp59, tmp58 local exp3 do local strm2 = strm1[1] exp3 = tmp55(strm2, strm1[2]) end if exp3.tag == "NONE" then return {accum1, strm1} end if exp3.tag == "SOME" then local c = exp3.payload[1] local strm_PRIME1 = exp3.payload[2] if 48 <= c and c <= 57 then tmp59 = {c, accum1} tmp58 = strm_PRIME1 goto cont else return {accum1, strm1} end else _raise(_Match, "parse_toml.sml:520:11") end end end end local readTimePart = function(accum, strm, state) local accum_PRIME_PRIME, strm_PRIME_PRIME, exp do local exp1 = readTwoDigit(accum, strm, state) local accum_PRIME = exp1[1] local hour = exp1[2] local strm_PRIME = exp1[3] if hour < 24 then else _raise({tag = _L[186], payload = _L[184]}, "parse_toml.sml:545:46") end local tmp56 = {58, accum_PRIME} local tmp57 do local strm1 = strm_PRIME[1] tmp57 = expect(58, strm1, strm_PRIME[2]) end local exp2 do local strm1 = tmp57[1] exp2 = readMinSec(tmp56, strm1, tmp57[2]) end accum_PRIME_PRIME = exp2[1] strm_PRIME_PRIME = exp2[2] do local strm1 = strm_PRIME_PRIME[1] exp = tmp55(strm1, strm_PRIME_PRIME[2]) end if exp.tag == "SOME" and exp.payload[1] == 90 then else goto else1 end do local strm_PRIME_PRIME_PRIME = exp.payload[2] local tmp58 = implodeRev({90, accum_PRIME_PRIME}) return {{tag = "DATETIME", payload = tmp58}, strm_PRIME_PRIME_PRIME} end end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 122 then else goto else2 end do local strm_PRIME_PRIME_PRIME = exp.payload[2] local tmp56 = implodeRev({122, accum_PRIME_PRIME}) return {{tag = "DATETIME", payload = tmp56}, strm_PRIME_PRIME_PRIME} end ::else2:: if exp.tag == "SOME" and exp.payload[1] == 43 then else goto else3 end do local strm_PRIME_PRIME_PRIME = exp.payload[2] local tmp56 = {43, accum_PRIME_PRIME} local exp1 do local strm1 = strm_PRIME_PRIME_PRIME[1] exp1 = readTwoDigit(tmp56, strm1, strm_PRIME_PRIME_PRIME[2]) end local accum_PRIME_PRIME_PRIME = exp1[1] local offsetHour = exp1[2] local strm_PRIME_PRIME_PRIME_PRIME = exp1[3] local strm_PRIME_PRIME_PRIME_PRIME_PRIME do local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] strm_PRIME_PRIME_PRIME_PRIME_PRIME = expect(58, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end local tmp57 = {58, accum_PRIME_PRIME_PRIME} local exp2 do local strm1 = strm_PRIME_PRIME_PRIME_PRIME_PRIME[1] exp2 = readTwoDigit(tmp57, strm1, strm_PRIME_PRIME_PRIME_PRIME_PRIME[2]) end local accum_PRIME_PRIME_PRIME_PRIME = exp2[1] local offsetMin = exp2[2] local strm_PRIME_PRIME_PRIME_PRIME_PRIME_PRIME = exp2[3] if offsetHour < 24 and offsetMin < 60 then else _raise({tag = _L[186], payload = _L[184]}, "parse_toml.sml:567:24") end do local tmp58 = implodeRev(accum_PRIME_PRIME_PRIME_PRIME) return {{tag = "DATETIME", payload = tmp58}, strm_PRIME_PRIME_PRIME_PRIME_PRIME_PRIME} end end ::else3:: if exp.tag == "SOME" and exp.payload[1] == 45 then else goto else4 end do local strm_PRIME_PRIME_PRIME = exp.payload[2] local tmp56 = {45, accum_PRIME_PRIME} local exp1 do local strm1 = strm_PRIME_PRIME_PRIME[1] exp1 = readTwoDigit(tmp56, strm1, strm_PRIME_PRIME_PRIME[2]) end local accum_PRIME_PRIME_PRIME = exp1[1] local offsetHour = exp1[2] local strm_PRIME_PRIME_PRIME_PRIME = exp1[3] local strm_PRIME_PRIME_PRIME_PRIME_PRIME do local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] strm_PRIME_PRIME_PRIME_PRIME_PRIME = expect(58, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end local tmp57 = {58, accum_PRIME_PRIME_PRIME} local exp2 do local strm1 = strm_PRIME_PRIME_PRIME_PRIME_PRIME[1] exp2 = readTwoDigit(tmp57, strm1, strm_PRIME_PRIME_PRIME_PRIME_PRIME[2]) end local accum_PRIME_PRIME_PRIME_PRIME = exp2[1] local offsetMin = exp2[2] local strm_PRIME_PRIME_PRIME_PRIME_PRIME_PRIME = exp2[3] if offsetHour < 24 and offsetMin < 60 then else _raise({tag = _L[186], payload = _L[184]}, "parse_toml.sml:580:24") end do local tmp58 = implodeRev(accum_PRIME_PRIME_PRIME_PRIME) return {{tag = "DATETIME", payload = tmp58}, strm_PRIME_PRIME_PRIME_PRIME_PRIME_PRIME} end end ::else4:: local tmp56 = implodeRev(accum_PRIME_PRIME) return {{tag = "LOCAL_DATETIME", payload = tmp56}, strm_PRIME_PRIME} end readUnsigned = function(d0, strm) local revDigits, hadUnderscore, strm_PRIME, checkPrefixZero, tmp56 do local exp = readDecIntUnderscore({d0, nil}, false, strm) revDigits = exp[1] hadUnderscore = exp[2] strm_PRIME = exp[3] checkPrefixZero = function() if revDigits ~= nil and revDigits[2] == nil then return nil elseif d0 == 48 then _raise({tag = _L[186], payload = _L[181]}, "parse_toml.sml:637:38") else return nil end end do local strm1 = strm_PRIME[1] tmp56 = tmp55(strm1, strm_PRIME[2]) end local tmp57 = revDigits ~= nil and (revDigits[2] ~= nil and (revDigits[2][2] ~= nil and (revDigits[2][2][2] ~= nil and revDigits[2][2][2][2] == nil))) local tmp58 tmp58 = tmp57 and (not hadUnderscore and (tmp56.tag == "SOME" and tmp56.payload[1] == 45)) if tmp58 then else goto else1 end do local tmp59, accum_PRIME, month, strm_PRIME_PRIME do local tmp60 = revDigits[1] local tmp61 = revDigits[2][1] local tmp62 = revDigits[2][2][1] local strm_PRIME_PRIME1 = tmp56.payload[2] local tmp63 = _Int_mul(_Int_sub(d0, 48), 10) local tmp64 = _Int_mul(_Int_add(tmp63, _Int_sub(tmp62, 48)), 10) local tmp65 = _Int_mul(_Int_add(tmp64, _Int_sub(tmp61, 48)), 10) tmp59 = _Int_add(tmp65, _Int_sub(tmp60, 48)) local tmp66 = {45, revDigits} local exp1 do local strm1 = strm_PRIME_PRIME1[1] exp1 = readTwoDigit(tmp66, strm1, strm_PRIME_PRIME1[2]) end accum_PRIME = exp1[1] month = exp1[2] local strm_PRIME1 = exp1[3] do local strm1 = strm_PRIME1[1] strm_PRIME_PRIME = expect(45, strm1, strm_PRIME1[2]) end end local accum_PRIME_PRIME, strm_PRIME_PRIME_PRIME, tmp60 do local exp1 do local strm1 = strm_PRIME_PRIME[1] exp1 = readTwoDigit(accum_PRIME, strm1, strm_PRIME_PRIME[2]) end accum_PRIME_PRIME = exp1[1] local mday = exp1[2] strm_PRIME_PRIME_PRIME = exp1[3] do if month == 1 then tmp60 = 1 <= mday and mday <= 31 goto cont end if month == 2 and mday == 29 then elseif month == 2 then tmp60 = 1 <= mday and mday <= 28 goto cont elseif month == 3 then tmp60 = 1 <= mday and mday <= 31 goto cont elseif month == 4 then tmp60 = 1 <= mday and mday <= 30 goto cont elseif month == 5 then tmp60 = 1 <= mday and mday <= 31 goto cont elseif month == 6 then tmp60 = 1 <= mday and mday <= 30 goto cont elseif month == 7 then tmp60 = 1 <= mday and mday <= 31 goto cont elseif month == 8 then tmp60 = 1 <= mday and mday <= 31 goto cont elseif month == 9 then tmp60 = 1 <= mday and mday <= 30 goto cont elseif month == 10 then tmp60 = 1 <= mday and mday <= 31 goto cont elseif month == 11 then tmp60 = 1 <= mday and mday <= 30 goto cont else tmp60 = month == 12 and (1 <= mday and mday <= 31) goto cont end do local tmp61 = rem(tmp59, 4) if tmp61 == 0 then else tmp60 = false goto cont end do local tmp62 = rem(tmp59, 100) if tmp62 ~= 0 then tmp60 = true goto cont end local tmp63 = rem(tmp59, 400) tmp60 = tmp63 == 0 end end end end ::cont:: if tmp60 then else _raise({tag = _L[186], payload = _L[183]}, "parse_toml.sml:599:18") end local exp1 do local strm1 = strm_PRIME_PRIME_PRIME[1] exp1 = tmp55(strm1, strm_PRIME_PRIME_PRIME[2]) end if exp1.tag == "SOME" and exp1.payload[1] == 84 then else goto else6 end do local strm_PRIME_PRIME_PRIME_PRIME = exp1.payload[2] local tmp61 = {84, accum_PRIME_PRIME} local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readTimePart(tmp61, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end ::else6:: if exp1.tag == "SOME" and exp1.payload[1] == 116 then else goto else7 end do local strm_PRIME_PRIME_PRIME_PRIME = exp1.payload[2] local tmp61 = {84, accum_PRIME_PRIME} local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readTimePart(tmp61, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end ::else7:: if exp1.tag == "SOME" and exp1.payload[1] == 32 then else goto else8 end do do local strm_PRIME_PRIME_PRIME_PRIME = exp1.payload[2] local exp2 do local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] exp2 = tmp55(strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end if exp2.tag == "SOME" then else goto else9 end do do local c = exp2.payload[1] if 48 <= c and c <= 57 then else goto else10 end do local tmp61 = {84, accum_PRIME_PRIME} local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readTimePart(tmp61, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end end ::else10:: local tmp61 = implodeRev(accum_PRIME_PRIME) return {{tag = "DATE", payload = tmp61}, strm_PRIME_PRIME_PRIME} end end ::else9:: local tmp61 = implodeRev(accum_PRIME_PRIME) return {{tag = "DATE", payload = tmp61}, strm_PRIME_PRIME_PRIME} end ::else8:: local tmp61 = implodeRev(accum_PRIME_PRIME) return {{tag = "DATE", payload = tmp61}, strm_PRIME_PRIME_PRIME} end end ::else1:: do local tmp57 = revDigits ~= nil and (revDigits[2] ~= nil and revDigits[2][2] == nil) local tmp58 tmp58 = tmp57 and (not hadUnderscore and (tmp56.tag == "SOME" and tmp56.payload[1] == 58)) if tmp58 then else goto else2 end do local tmp59 = revDigits[1] local tmp60 = revDigits[2][1] local strm_PRIME_PRIME = tmp56.payload[2] local tmp61 = _Int_mul(_Int_sub(tmp60, 48), 10) if _Int_add(tmp61, _Int_sub(tmp59, 48)) < 24 then else _raise({tag = _L[186], payload = _L[184]}, "parse_toml.sml:652:45") end local tmp62 = {58, revDigits} local exp do local strm1 = strm_PRIME_PRIME[1] exp = readMinSec(tmp62, strm1, strm_PRIME_PRIME[2]) end local accum = exp[1] local strm_PRIME_PRIME_PRIME = exp[2] local tmp63 = implodeRev(accum) return {{tag = "TIME", payload = tmp63}, strm_PRIME_PRIME_PRIME} end end ::else2:: if tmp56.tag == "SOME" and tmp56.payload[1] == 46 then else goto else3 end do local accum, strm_PRIME_PRIME_PRIME, exp do local strm_PRIME_PRIME = tmp56.payload[2] checkPrefixZero() local tmp57 = {46, revDigits} local exp1 do local strm1 = strm_PRIME_PRIME[1] exp1 = readDecInt(tmp57, false, strm1, strm_PRIME_PRIME[2]) end accum = exp1[1] strm_PRIME_PRIME_PRIME = exp1[3] do local strm1 = strm_PRIME_PRIME_PRIME[1] exp = tmp55(strm1, strm_PRIME_PRIME_PRIME[2]) end if exp.tag == "SOME" and exp.payload[1] == 101 then else goto else6 end do local strm_PRIME_PRIME_PRIME_PRIME = exp.payload[2] local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readExpPart(accum, 101, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end end ::else6:: if exp.tag == "SOME" and exp.payload[1] == 69 then else goto else7 end do local strm_PRIME_PRIME_PRIME_PRIME = exp.payload[2] local strm1 = strm_PRIME_PRIME_PRIME_PRIME[1] return readExpPart(accum, 69, strm1, strm_PRIME_PRIME_PRIME_PRIME[2]) end ::else7:: local tmp57 = implodeRev(accum) local tmp58 = _L[188](tmp57) return {tmp58, strm_PRIME_PRIME_PRIME} end ::else3:: if tmp56.tag == "SOME" and tmp56.payload[1] == 101 then else goto else4 end do local strm_PRIME_PRIME = tmp56.payload[2] checkPrefixZero() local strm1 = strm_PRIME_PRIME[1] return readExpPart(revDigits, 101, strm1, strm_PRIME_PRIME[2]) end ::else4:: if tmp56.tag == "SOME" and tmp56.payload[1] == 69 then else goto else5 end do local strm_PRIME_PRIME = tmp56.payload[2] checkPrefixZero() local strm1 = strm_PRIME_PRIME[1] return readExpPart(revDigits, 69, strm1, strm_PRIME_PRIME[2]) end ::else5:: checkPrefixZero() local tmp57 = implodeRev(revDigits) local tmp58 do local tmp59 = scanString(function(a) return scan(DEC, a) end) tmp58 = tmp59(tmp57) end if tmp58.tag == "SOME" then return {{tag = "INTEGER", payload = tmp58.payload}, strm_PRIME} elseif tmp58.tag == "NONE" then _raise(Option, "option.sml:24:18") else _raise(_Match, "option.sml:23:5") end end end local readKey, IMPLICIT_HEADER, finalizeTable, readKeyval, insertKeyval, insertTable do local isValidUnquotedKey = function(a) local tmp56 do local tmp57 if 65 <= a and a <= 90 then tmp56 = true goto cont else tmp57 = 97 <= a and a <= 122 end tmp56 = tmp57 or 48 <= a and a <= 57 end ::cont:: return tmp56 or (a == 45 or a == 95) end local readSimpleKey = function(a) if a.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "key"}}}, "parse_toml.sml:16:5") end if a.tag == "SOME" and a.payload[1] == 34 then else goto else1 end do local strm = a.payload[2] local strm1 = strm[1] return go(nil, strm1, strm[2]) end ::else1:: if a.tag == "SOME" and a.payload[1] == 39 then else goto else2 end do local strm = a.payload[2] local strm1 = strm[1] return go2(nil, strm1, strm[2]) end ::else2:: if a.tag == "SOME" then else _raise(_Match, "parse_toml.sml:688:11") end do local c0 do c0 = a.payload[1] local strm = a.payload[2] local tmp56 = isValidUnquotedKey(c0) if tmp56 then else goto else3 end do local tmp57, tmp58 = {c0, nil}, strm ::cont:: do local accum, strm_PRIME = tmp57, tmp58 local exp do local strm1 = strm_PRIME[1] exp = tmp55(strm1, strm_PRIME[2]) end if exp.tag == "NONE" then else goto else4 end do local tmp59 = implodeRev(accum) return {tmp59, strm_PRIME} end ::else4:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:694:17") end do local c = exp.payload[1] local strm_PRIME_PRIME = exp.payload[2] local tmp59 = isValidUnquotedKey(c) if tmp59 then tmp57 = {c, accum} tmp58 = strm_PRIME_PRIME goto cont end local tmp60 = implodeRev(accum) return {tmp60, strm_PRIME} end end end end ::else3:: local tmp56 = toString(c0) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp56, expected = "quote, alphanum, '-', or '_'"}}}, "parse_toml.sml:19:5") end end readKey = function(a) local tmp56, tmp57 do local exp = readSimpleKey(a) local k0 = exp[1] local strm = exp[2] local tmp58 = {k0, nil} local tmp59 = skipWhiteSpace(strm) tmp57, tmp56 = tmp58, tmp59 end ::cont:: do local strm, accum do accum, strm = tmp57, tmp56 local exp do local strm1 = strm[1] exp = tmp55(strm1, strm[2]) end if exp.tag == "SOME" and exp.payload[1] == 46 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp58 do local strm1 = strm_PRIME[1] tmp58 = skipWhiteSpaceAndGetc(strm1, strm_PRIME[2]) end local exp1 = readSimpleKey(tmp58) local k = exp1[1] local strm_PRIME_PRIME = exp1[2] local tmp59 = {k, accum} local tmp60 = skipWhiteSpace(strm_PRIME_PRIME) tmp57 = tmp59 tmp56 = tmp60 goto cont end end ::else1:: local tmp58 = revAppend(accum, nil) return {tmp58, strm} end end local EXACT_HEADER = "EXACT_HEADER" IMPLICIT_HEADER = "IMPLICIT_HEADER" local IMPLICIT_KEYVAL = "IMPLICIT_KEYVAL" local finalize, finalizeValue finalize = function(a) local tmp56 = finalizeTable(a) return {tag = "TABLE", payload = tmp56} end finalizeValue = function(a) if a.tag == "LEAF" then return a.payload end if a.tag == "PARTIAL_TABLE" then else goto else1 end do return finalize(a.payload[2]) end ::else1:: if a.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:733:11") end do local last = a.payload[1] local xs = a.payload[2] local tmp56 = map(finalize) local tmp57 = tmp56(xs) local tmp58 = finalize(last) local tmp59 = revAppend(tmp57, {tmp58, nil}) return {tag = "ARRAY", payload = tmp59} end end finalizeTable = function(a) local tmp56 = map(function(a1) local key = a1[1] local tmp57 = finalizeValue(a1[2]) return {key, tmp57} end) return tmp56(a) end local function insert(revPath, pt, tmp56, v) if tmp56 ~= nil and tmp56[2] == nil then else goto else1 end do local tmp57 do tmp57 = tmp56[1] local tmp58 = exists(function(a) return tmp57 == a[1] end) local tmp59 = tmp58(pt) if tmp59 then else goto else2 end do local tmp60 = revAppend(revPath, tmp56) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp60}}, "parse_toml.sml:22:5") end end ::else2:: local tmp58 = {{tmp57, {tag = "LEAF", payload = v}}, nil} local tmp59 = revAppend(pt, nil) return revAppend(tmp59, tmp58) end ::else1:: if tmp56 ~= nil then elseif tmp56 == nil then _raise(_Match, "parse_toml.sml:781:34") else _raise(_Match, "parse_toml.sml:741:11") end do local tmp57 = tmp56[1] local tmp58 = tmp56[2] local tmp59, tmp60 = nil, pt ::cont:: do local accum, tmp61 = tmp59, tmp60 if tmp61 == nil then else goto else2 end do local tmp62 = insert({tmp57, revPath}, nil, tmp58, v) return revAppend(accum, {{tmp57, {tag = "PARTIAL_TABLE", payload = {IMPLICIT_KEYVAL, tmp62}}}, nil}) end ::else2:: if tmp61 ~= nil then else _raise(_Match, "parse_toml.sml:748:19") end do local tmp62 = tmp61[1] local key_PRIME = tmp61[1][1] local pv = tmp61[1][2] local tmp63 = tmp61[2] if tmp57 == key_PRIME then else tmp59 = {tmp62, accum} tmp60 = tmp63 goto cont end do if pv.tag == "LEAF" then else goto else3 end do local tmp64 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp64}}, "parse_toml.sml:22:5") end ::else3:: if pv.tag == "PARTIAL_TABLE" and pv.payload[1] == "EXACT_HEADER" then else goto else4 end do local tmp64 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp64}}, "parse_toml.sml:22:5") end ::else4:: if pv.tag == "PARTIAL_TABLE" then else goto else5 end do local definedBy = pv.payload[1] local pt_PRIME = pv.payload[2] local tmp64 = insert({tmp57, revPath}, pt_PRIME, tmp58, v) return revAppend(accum, {{key_PRIME, {tag = "PARTIAL_TABLE", payload = {definedBy, tmp64}}}, tmp63}) end ::else5:: if pv.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:760:23") end do local tmp64 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp64}}, "parse_toml.sml:22:5") end end end end end end local readInlineTable, readArray, readValue readKeyval = function(revPath, r) local exp = readKey(r) local key = exp[1] local strm_PRIME = exp[2] local tmp56 = revAppend(key, revPath) local tmp57 do local strm = strm_PRIME[1] tmp57 = expect(61, strm, strm_PRIME[2]) end local tmp58 do local strm = tmp57[1] tmp58 = skipWhiteSpaceAndGetc(strm, tmp57[2]) end local exp1 = readValue(tmp56, tmp58) local v = exp1[1] return {key, v, exp1[2]} end readInlineTable = function(revPath, accum, r) local tmp56, tmp57, tmp58 = revPath, accum, r ::cont:: do local accum_PRIME, exp do local revPath1, accum1, r1 = tmp56, tmp57, tmp58 local exp1 = readKeyval(revPath1, r1) local key = exp1[1] local v = exp1[2] local strm = exp1[3] accum_PRIME = insert(revPath1, accum1, key, v) do local strm1 = strm[1] exp = skipWhiteSpaceAndGetc(strm1, strm[2]) end if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "',' or '}'"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 44 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp59 do local strm1 = strm_PRIME[1] tmp59 = skipWhiteSpaceAndGetc(strm1, strm_PRIME[2]) end tmp56 = revPath1 tmp57 = accum_PRIME tmp58 = tmp59 goto cont end end ::else1:: if exp.tag == "SOME" and exp.payload[1] == 125 then else goto else2 end do local strm_PRIME = exp.payload[2] local tmp59 = finalize(accum_PRIME) return {tmp59, strm_PRIME} end ::else2:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:922:11") end do local tmp59 = toString(exp.payload[1]) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp59, expected = "',' or '}'"}}}, "parse_toml.sml:19:5") end end end readArray = function(revPath, accum, strm) local tmp56, tmp57, tmp58 = revPath, accum, strm ::cont:: do local accum1, revPath1, exp do local strm1 revPath1, accum1, strm1 = tmp56, tmp57, tmp58 exp = skipWhiteSpaceOrCommentOrNewlineAndGetc(strm1) if exp.tag == "SOME" and exp.payload[1] == 93 then else goto else1 end do local strm_PRIME = exp.payload[2] local tmp59 = revAppend(accum1, nil) return {{tag = "ARRAY", payload = tmp59}, strm_PRIME} end end ::else1:: local exp1 do local exp2 = readValue(revPath1, exp) local v = exp2[1] exp1 = skipWhiteSpaceOrCommentOrNewlineAndGetc(exp2[2]) if exp1.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "',' or ']'"}}}, "parse_toml.sml:16:5") end if exp1.tag == "SOME" and exp1.payload[1] == 44 then local strm_PRIME_PRIME = exp1.payload[2] tmp56 = revPath1 tmp57 = {v, accum1} tmp58 = strm_PRIME_PRIME goto cont end if exp1.tag == "SOME" and exp1.payload[1] == 93 then else goto else2 end do local strm_PRIME_PRIME = exp1.payload[2] local tmp59 = revAppend({v, accum1}, nil) return {{tag = "ARRAY", payload = tmp59}, strm_PRIME_PRIME} end end ::else2:: if exp1.tag == "SOME" then else _raise(_Match, "parse_toml.sml:910:16") end do local tmp59 = toString(exp1.payload[1]) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp59, expected = "',' or ']'"}}}, "parse_toml.sml:19:5") end end end readValue = function(revPath, tmp56) if tmp56.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "value"}}}, "parse_toml.sml:16:5") end if tmp56.tag == "SOME" then else _raise(_Match, "parse_toml.sml:788:11") end do local c = tmp56.payload[1] local strm = tmp56.payload[2] if c == 34 then else goto else1 end do do local exp do local strm1 = strm[1] exp = tmp55(strm1, strm[2]) end if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing quote"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 34 then else goto else13 end do local strm_PRIME = exp.payload[2] local exp1 do local strm1 = strm_PRIME[1] exp1 = tmp55(strm1, strm_PRIME[2]) end if exp1.tag == "SOME" and exp1.payload[1] == 34 then else return {{tag = "STRING", payload = ""}, strm_PRIME} end do local tmp57 = skipOptionalNewline(exp1.payload[2]) local exp2 do local strm1 = tmp57[1] exp2 = go1(nil, strm1, tmp57[2]) end local s = exp2[1] local strm_PRIME_PRIME_PRIME = exp2[2] return {{tag = "STRING", payload = s}, strm_PRIME_PRIME_PRIME} end end end ::else13:: local exp do local strm1 = strm[1] exp = go(nil, strm1, strm[2]) end local s = exp[1] local strm_PRIME = exp[2] return {{tag = "STRING", payload = s}, strm_PRIME} end ::else1:: if c == 39 then else goto else2 end do do local exp do local strm1 = strm[1] exp = tmp55(strm1, strm[2]) end if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing quote"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 39 then else goto else13 end do local strm_PRIME = exp.payload[2] local exp1 do local strm1 = strm_PRIME[1] exp1 = tmp55(strm1, strm_PRIME[2]) end if exp1.tag == "SOME" and exp1.payload[1] == 39 then else return {{tag = "STRING", payload = ""}, strm_PRIME} end do local strm_PRIME_PRIME_PRIME, s do local tmp57 = skipOptionalNewline(exp1.payload[2]) do local tmp58, tmp59, tmp60 do local strm1 = tmp57[1] tmp58 = nil tmp59 = strm1 tmp60 = tmp57[2] end ::cont1:: do local accum, exp2 do local strm1, state accum, strm1, state = tmp58, tmp59, tmp60 exp2 = tmp55(strm1, state) if exp2.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing triple quote"}}}, "parse_toml.sml:16:5") end if exp2.tag == "SOME" and exp2.payload[1] == 39 then else goto else14 end do local exp3 do local strm_PRIME1 = exp2.payload[2] do local strm2 = strm_PRIME1[1] exp3 = tmp55(strm2, strm_PRIME1[2]) end if exp3.tag == "SOME" and exp3.payload[1] == 39 then else goto else15 end do local exp4 do local strm_PRIME_PRIME = exp3.payload[2] do local strm2 = strm_PRIME_PRIME[1] exp4 = tmp55(strm2, strm_PRIME_PRIME[2]) end if exp4.tag == "SOME" and exp4.payload[1] == 39 then else goto else16 end do local strm_PRIME_PRIME_PRIME1 do strm_PRIME_PRIME_PRIME1 = exp4.payload[2] local exp5 do local strm2 = strm_PRIME_PRIME_PRIME1[1] exp5 = tmp55(strm2, strm_PRIME_PRIME_PRIME1[2]) end if exp5.tag == "SOME" and exp5.payload[1] == 39 then else goto else17 end do local strm_PRIME_PRIME_PRIME_PRIME do strm_PRIME_PRIME_PRIME_PRIME = exp5.payload[2] local exp6 do local strm2 = strm_PRIME_PRIME_PRIME_PRIME[1] exp6 = tmp55(strm2, strm_PRIME_PRIME_PRIME_PRIME[2]) end if exp6.tag == "SOME" and exp6.payload[1] == 39 then else goto else18 end do local strm_PRIME_PRIME_PRIME_PRIME_PRIME = exp6.payload[2] local tmp61 = implodeRev({39, {39, accum}}) strm_PRIME_PRIME_PRIME = strm_PRIME_PRIME_PRIME_PRIME_PRIME s = tmp61 goto cont end end ::else18:: local tmp61 = implodeRev({39, accum}) strm_PRIME_PRIME_PRIME = strm_PRIME_PRIME_PRIME_PRIME s = tmp61 goto cont end end ::else17:: local tmp61 = implodeRev(accum) strm_PRIME_PRIME_PRIME = strm_PRIME_PRIME_PRIME1 s = tmp61 goto cont end end ::else16:: if exp4.tag == "SOME" then elseif exp4.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing triple quote"}}}, "parse_toml.sml:16:5") else _raise(_Match, "parse_toml.sml:267:21") end do local c1 = exp4.payload[1] local strm_PRIME_PRIME_PRIME1 = exp4.payload[2] local tmp61 = checkAllowedChar(c1) local tmp62 = {tmp61, {39, {39, accum}}} local strm2 = strm_PRIME_PRIME_PRIME1[1] tmp58 = tmp62 tmp59 = strm2 tmp60 = strm_PRIME_PRIME_PRIME1[2] goto cont1 end end end ::else15:: if exp3.tag == "SOME" then elseif exp3.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "closing triple quote"}}}, "parse_toml.sml:16:5") else _raise(_Match, "parse_toml.sml:265:16") end do local c1 = exp3.payload[1] local strm_PRIME_PRIME = exp3.payload[2] local tmp61 = checkAllowedChar(c1) local tmp62 = {tmp61, {39, accum}} local strm2 = strm_PRIME_PRIME[1] tmp58 = tmp62 tmp59 = strm2 tmp60 = strm_PRIME_PRIME[2] goto cont1 end end end ::else14:: if exp2.tag == "SOME" then else _raise(_Match, "parse_toml.sml:262:11") end do local c1 = exp2.payload[1] local strm_PRIME1 = exp2.payload[2] local tmp61 = checkAllowedChar(c1) local tmp62 = {tmp61, accum} local strm1 = strm_PRIME1[1] tmp58 = tmp62 tmp59 = strm1 tmp60 = strm_PRIME1[2] goto cont1 end end end end ::cont:: return {{tag = "STRING", payload = s}, strm_PRIME_PRIME_PRIME} end end end ::else13:: local exp do local strm1 = strm[1] exp = go2(nil, strm1, strm[2]) end local s = exp[1] local strm_PRIME = exp[2] return {{tag = "STRING", payload = s}, strm_PRIME} end ::else2:: if c == 91 then else goto else3 end do return readArray({"[]", revPath}, nil, strm) end ::else3:: if c == 123 then else goto else4 end do local exp do local strm1 = strm[1] exp = skipWhiteSpaceAndGetc(strm1, strm[2]) end if exp.tag == "SOME" and exp.payload[1] == 125 then local strm_PRIME = exp.payload[2] return {{tag = "TABLE", payload = nil}, strm_PRIME} else return readInlineTable(revPath, nil, exp) end end ::else4:: if c == 116 then else goto else5 end do local tmp57 = {tag = "BOOL", payload = true} local tmp58 do local strm1 = strm[1] tmp58 = expect(114, strm1, strm[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(117, strm1, tmp58[2]) end local tmp60 do local strm1 = tmp59[1] tmp60 = expect(101, strm1, tmp59[2]) end return {tmp57, tmp60} end ::else5:: if c == 102 then else goto else6 end do local tmp57 = {tag = "BOOL", payload = false} local tmp58 do local strm1 = strm[1] tmp58 = expect(97, strm1, strm[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(108, strm1, tmp58[2]) end local tmp60 do local strm1 = tmp59[1] tmp60 = expect(115, strm1, tmp59[2]) end local tmp61 do local strm1 = tmp60[1] tmp61 = expect(101, strm1, tmp60[2]) end return {tmp57, tmp61} end ::else6:: if c == 105 then else goto else7 end do local tmp57 = _L[188]("inf") local tmp58 do local strm1 = strm[1] tmp58 = expect(110, strm1, strm[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(102, strm1, tmp58[2]) end return {tmp57, tmp59} end ::else7:: if c == 110 then else goto else8 end do local tmp57 = _L[188]("nan") local tmp58 do local strm1 = strm[1] tmp58 = expect(97, strm1, strm[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(110, strm1, tmp58[2]) end return {tmp57, tmp59} end ::else8:: if c == 43 then else goto else9 end do local exp do local strm1 = strm[1] exp = tmp55(strm1, strm[2]) end if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "digit or 'inf' or 'nan'"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 105 then else goto else13 end do local strm_PRIME = exp.payload[2] local tmp57 = _L[188]("+inf") local tmp58 do local strm1 = strm_PRIME[1] tmp58 = expect(110, strm1, strm_PRIME[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(102, strm1, tmp58[2]) end return {tmp57, tmp59} end ::else13:: if exp.tag == "SOME" and exp.payload[1] == 110 then else goto else14 end do local strm_PRIME = exp.payload[2] local tmp57 = _L[188]("+nan") local tmp58 do local strm1 = strm_PRIME[1] tmp58 = expect(97, strm1, strm_PRIME[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(110, strm1, tmp58[2]) end return {tmp57, tmp59} end ::else14:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:845:18") end do local c_PRIME do c_PRIME = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c_PRIME and c_PRIME <= 57 then else goto else15 end do return readSigned(43, c_PRIME, strm_PRIME) end end ::else15:: local tmp57 = toString(c_PRIME) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp57, expected = "digit or 'inf' or 'nan'"}}}, "parse_toml.sml:19:5") end end ::else9:: if c == 45 then else goto else10 end do local exp do local strm1 = strm[1] exp = tmp55(strm1, strm[2]) end if exp.tag == "NONE" then _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = "end of input", expected = "digit or 'inf' or 'nan'"}}}, "parse_toml.sml:16:5") end if exp.tag == "SOME" and exp.payload[1] == 105 then else goto else13 end do local strm_PRIME = exp.payload[2] local tmp57 = _L[188]("-inf") local tmp58 do local strm1 = strm_PRIME[1] tmp58 = expect(110, strm1, strm_PRIME[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(102, strm1, tmp58[2]) end return {tmp57, tmp59} end ::else13:: if exp.tag == "SOME" and exp.payload[1] == 110 then else goto else14 end do local strm_PRIME = exp.payload[2] local tmp57 = _L[188]("-nan") local tmp58 do local strm1 = strm_PRIME[1] tmp58 = expect(97, strm1, strm_PRIME[2]) end local tmp59 do local strm1 = tmp58[1] tmp59 = expect(110, strm1, tmp58[2]) end return {tmp57, tmp59} end ::else14:: if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:857:18") end do local c_PRIME do c_PRIME = exp.payload[1] local strm_PRIME = exp.payload[2] if 48 <= c_PRIME and c_PRIME <= 57 then else goto else15 end do return readSigned(45, c_PRIME, strm_PRIME) end end ::else15:: local tmp57 = toString(c_PRIME) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp57, expected = "digit or 'inf' or 'nan'"}}}, "parse_toml.sml:19:5") end end ::else10:: if c == 48 then else goto else11 end do local exp do local strm1 = strm[1] exp = tmp55(strm1, strm[2]) end if exp.tag == "NONE" then else goto else13 end do local tmp57 = _L[22](0) return {{tag = "INTEGER", payload = tmp57}, strm} end ::else13:: if exp.tag == "SOME" and exp.payload[1] == 120 then else goto else14 end do local strm_PRIME = exp.payload[2] local tmp57 = _L[22](0) local exp1 do local strm1 = strm_PRIME[1] exp1 = readHexInt(tmp57, strm1, strm_PRIME[2]) end local x = exp1[1] local strm_PRIME_PRIME = exp1[2] return {{tag = "INTEGER", payload = x}, strm_PRIME_PRIME} end ::else14:: if exp.tag == "SOME" and exp.payload[1] == 111 then else goto else15 end do local strm_PRIME = exp.payload[2] local tmp57 = _L[22](0) local exp1 do local strm1 = strm_PRIME[1] exp1 = readOctInt(tmp57, strm1, strm_PRIME[2]) end local x = exp1[1] local strm_PRIME_PRIME = exp1[2] return {{tag = "INTEGER", payload = x}, strm_PRIME_PRIME} end ::else15:: if exp.tag == "SOME" and exp.payload[1] == 98 then else if exp.tag == "SOME" then else _raise(_Match, "parse_toml.sml:869:18") end do return readUnsigned(48, strm) end end do local strm_PRIME = exp.payload[2] local tmp57 = _L[22](0) local exp1 do local strm1 = strm_PRIME[1] exp1 = readBinInt(tmp57, strm1, strm_PRIME[2]) end local x = exp1[1] local strm_PRIME_PRIME = exp1[2] return {{tag = "INTEGER", payload = x}, strm_PRIME_PRIME} end end ::else11:: if 48 <= c and c <= 57 then else goto else12 end do return readUnsigned(c, strm) end ::else12:: local tmp57 = toString(c) _raise({tag = _L[186], payload = {tag = "UNEXPECTED", payload = {encountered = tmp57, expected = "value"}}}, "parse_toml.sml:19:5") end end insertKeyval = function(revPath, pt, tmp56, keys, v) if tmp56 == nil then else goto else1 end do return insert(revPath, pt, keys, v) end ::else1:: if tmp56 ~= nil then else _raise(_Match, "parse_toml.sml:972:11") end do local tmp57 = tmp56[1] local tmp58 = tmp56[2] local tmp59, tmp60 = nil, pt ::cont:: do local accum, tmp61 = tmp59, tmp60 if tmp61 == nil then else goto else2 end do local tmp62 = insertKeyval({tmp57, revPath}, nil, tmp58, keys, v) return revAppend(accum, {{tmp57, {tag = "PARTIAL_TABLE", payload = {IMPLICIT_HEADER, tmp62}}}, nil}) end ::else2:: if tmp61 ~= nil then else _raise(_Match, "parse_toml.sml:976:19") end do local tmp62 = tmp61[1] local key = tmp61[1][1] local pv = tmp61[1][2] local tmp63 = tmp61[2] if tmp57 == key then else tmp59 = {tmp62, accum} tmp60 = tmp63 goto cont end do local updated do if pv.tag == "LEAF" then else goto else3 end do local tmp64 = revAppend(revPath, {key, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp64}}, "parse_toml.sml:22:5") end ::else3:: if pv.tag == "PARTIAL_TABLE" then else goto else4 end do local definedBy = pv.payload[1] local pt_PRIME = pv.payload[2] local tmp64 = insertKeyval({tmp57, revPath}, pt_PRIME, tmp58, keys, v) updated = {tag = "PARTIAL_TABLE", payload = {definedBy, tmp64}} goto cont1 end ::else4:: if pv.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:988:27") end do local last = pv.payload[1] local rest = pv.payload[2] local tmp64 = insertKeyval({tmp57, revPath}, last, tmp58, keys, v) updated = {tag = "PARTIAL_ARRAY", payload = {tmp64, rest}} end end ::cont1:: return revAppend(accum, {{key, updated}, tmp63}) end end end end end insertTable = function(revPath, pt, tmp56) if tmp56 ~= nil and tmp56[2] == nil then else goto else1 end do local tmp57 = tmp56[1] local tmp58, tmp59 = nil, pt ::cont:: do local accum, tmp60 = tmp58, tmp59 if tmp60 == nil then else goto else2 end do return revAppend(accum, {{tmp57, {tag = "PARTIAL_TABLE", payload = {EXACT_HEADER, nil}}}, nil}) end ::else2:: if tmp60 ~= nil then else _raise(_Match, "parse_toml.sml:1010:19") end do local tmp61 = tmp60[1] local key_PRIME = tmp60[1][1] local pv = tmp60[1][2] local tmp62 = tmp60[2] if tmp57 == key_PRIME then else tmp58 = {tmp61, accum} tmp59 = tmp62 goto cont end do if pv.tag == "LEAF" then else goto else3 end do local tmp63 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp63}}, "parse_toml.sml:22:5") end ::else3:: if pv.tag == "PARTIAL_TABLE" and pv.payload[1] == "IMPLICIT_HEADER" then else goto else4 end do return revAppend(accum, {{key_PRIME, {tag = "PARTIAL_TABLE", payload = {EXACT_HEADER, pv.payload[2]}}}, tmp62}) end ::else4:: if pv.tag == "PARTIAL_TABLE" then else goto else5 end do local tmp63 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp63}}, "parse_toml.sml:22:5") end ::else5:: if pv.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:1017:23") end do local tmp63 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp63}}, "parse_toml.sml:22:5") end end end end end ::else1:: if tmp56 ~= nil then elseif tmp56 == nil then _raise(_Match, "parse_toml.sml:1069:36") else _raise(_Match, "parse_toml.sml:1008:11") end do local tmp57 = tmp56[1] local tmp58 = tmp56[2] local tmp59, tmp60 = nil, pt ::cont:: do local accum, tmp61 = tmp59, tmp60 if tmp61 == nil then else goto else2 end do local tmp62 = insertTable({tmp57, revPath}, nil, tmp58) return revAppend(accum, {{tmp57, {tag = "PARTIAL_TABLE", payload = {IMPLICIT_HEADER, tmp62}}}, nil}) end ::else2:: if tmp61 ~= nil then else _raise(_Match, "parse_toml.sml:1036:19") end do local tmp62 = tmp61[1] local key_PRIME = tmp61[1][1] local pv = tmp61[1][2] local tmp63 = tmp61[2] if tmp57 == key_PRIME then else tmp59 = {tmp62, accum} tmp60 = tmp63 goto cont end do local updated do if pv.tag == "LEAF" then else goto else3 end do local tmp64 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp64}}, "parse_toml.sml:22:5") end ::else3:: if pv.tag == "PARTIAL_TABLE" then else goto else4 end do local definedBy = pv.payload[1] local pt_PRIME = pv.payload[2] local tmp64 = insertTable({tmp57, revPath}, pt_PRIME, tmp58) updated = {tag = "PARTIAL_TABLE", payload = {definedBy, tmp64}} goto cont1 end ::else4:: if pv.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:1050:27") end do local last = pv.payload[1] local rest = pv.payload[2] local tmp64 = insertTable({tmp57, revPath}, last, tmp58) updated = {tag = "PARTIAL_ARRAY", payload = {tmp64, rest}} end end ::cont1:: return revAppend(accum, {{key_PRIME, updated}, tmp63}) end end end end end end local table do local function insertArrayTable(revPath, pt, tmp56) if tmp56 ~= nil and tmp56[2] == nil then else goto else1 end do local tmp57 = tmp56[1] local tmp58, tmp59 = nil, pt ::cont:: do local accum, tmp60 = tmp58, tmp59 if tmp60 == nil then else goto else2 end do return revAppend(accum, {{tmp57, {tag = "PARTIAL_ARRAY", payload = {nil, nil}}}, nil}) end ::else2:: if tmp60 ~= nil then else _raise(_Match, "parse_toml.sml:1072:19") end do local tmp61 = tmp60[1] local key_PRIME = tmp60[1][1] local pv = tmp60[1][2] local tmp62 = tmp60[2] if tmp57 == key_PRIME then else tmp58 = {tmp61, accum} tmp59 = tmp62 goto cont end do if pv.tag == "LEAF" then else goto else3 end do local tmp63 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp63}}, "parse_toml.sml:22:5") end ::else3:: if pv.tag == "PARTIAL_TABLE" then else if pv.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:1079:23") end do local last = pv.payload[1] return revAppend(accum, {{tmp57, {tag = "PARTIAL_ARRAY", payload = {nil, {last, pv.payload[2]}}}}, tmp62}) end end do local tmp63 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp63}}, "parse_toml.sml:22:5") end end end end end ::else1:: if tmp56 ~= nil then elseif tmp56 == nil then _raise(_Match, "parse_toml.sml:1130:41") else _raise(_Match, "parse_toml.sml:1070:11") end do local tmp57 = tmp56[1] local tmp58 = tmp56[2] local tmp59, tmp60 = nil, pt ::cont:: do local accum, tmp61 = tmp59, tmp60 if tmp61 == nil then else goto else2 end do local tmp62 = insertArrayTable({tmp57, revPath}, nil, tmp58) return revAppend(accum, {{tmp57, {tag = "PARTIAL_TABLE", payload = {IMPLICIT_HEADER, tmp62}}}, nil}) end ::else2:: if tmp61 ~= nil then else _raise(_Match, "parse_toml.sml:1095:19") end do local tmp62 = tmp61[1] local key_PRIME = tmp61[1][1] local pv = tmp61[1][2] local tmp63 = tmp61[2] if tmp57 == key_PRIME then else tmp59 = {tmp62, accum} tmp60 = tmp63 goto cont end do local updated do if pv.tag == "LEAF" then else goto else3 end do local tmp64 = revAppend(revPath, {tmp57, nil}) _raise({tag = _L[186], payload = {tag = "DUPLICATE_KEY", payload = tmp64}}, "parse_toml.sml:22:5") end ::else3:: if pv.tag == "PARTIAL_TABLE" then else goto else4 end do local definedBy = pv.payload[1] local pt_PRIME = pv.payload[2] local tmp64 = insertArrayTable({tmp57, revPath}, pt_PRIME, tmp58) updated = {tag = "PARTIAL_TABLE", payload = {definedBy, tmp64}} goto cont1 end ::else4:: if pv.tag == "PARTIAL_ARRAY" then else _raise(_Match, "parse_toml.sml:1109:27") end do local last = pv.payload[1] local rest = pv.payload[2] local tmp64 = insertArrayTable({tmp57, revPath}, last, tmp58) updated = {tag = "PARTIAL_ARRAY", payload = {tmp64, rest}} end end ::cont1:: return revAppend(accum, {{tmp57, updated}, tmp63}) end end end end end do local tmp56, tmp57, tmp58, tmp59, tmp60 = nil, nil, nil, tmp54, _L[173] ::cont1:: do local prefix, revPath, accum, exp do local strm, state accum, revPath, prefix, strm, state = tmp56, tmp57, tmp58, tmp59, tmp60 do local tmp61, tmp62, tmp63 = revPath, strm, state ::cont3:: do local revPath1, exp1 do local strm1, state1 revPath1, strm1, state1 = tmp61, tmp62, tmp63 exp1 = skipWhiteSpaceAndGetc(strm1, state1) if exp1.tag == "NONE" then exp = NONE goto cont2 end if exp1.tag == "SOME" and exp1.payload[1] == 10 then local strm_PRIME = exp1.payload[2] local strm2 = strm_PRIME[1] tmp61 = revPath1 tmp62 = strm2 tmp63 = strm_PRIME[2] goto cont3 end if exp1.tag == "SOME" and exp1.payload[1] == 13 then else goto else4 end do local strm_PRIME = exp1.payload[2] local tmp64 do local strm2 = strm_PRIME[1] tmp64 = expect(10, strm2, strm_PRIME[2]) end local strm2 = tmp64[1] tmp61 = revPath1 tmp62 = strm2 tmp63 = tmp64[2] goto cont3 end end ::else4:: if exp1.tag == "SOME" and exp1.payload[1] == 35 then else goto else5 end do local tmp64 = skipUntilNewline(exp1.payload[2]) local strm1 = tmp64[1] tmp61 = revPath1 tmp62 = strm1 tmp63 = tmp64[2] goto cont3 end ::else5:: if exp1.tag == "SOME" and exp1.payload[1] == 91 then else goto else6 end do local strm_PRIME do strm_PRIME = exp1.payload[2] local exp2 do local strm1 = strm_PRIME[1] exp2 = tmp55(strm1, strm_PRIME[2]) end if exp2.tag == "SOME" and exp2.payload[1] == 91 then else goto else7 end do local strm_PRIME_PRIME = exp2.payload[2] local tmp64 do local strm1 = strm_PRIME_PRIME[1] tmp64 = skipWhiteSpaceAndGetc(strm1, strm_PRIME_PRIME[2]) end local exp3 = readKey(tmp64) local key = exp3[1] local strm_PRIME_PRIME_PRIME = exp3[2] local tmp65 do local strm1 = strm_PRIME_PRIME_PRIME[1] tmp65 = expect(93, strm1, strm_PRIME_PRIME_PRIME[2]) end local strm_PRIME_PRIME_PRIME_PRIME do local strm1 = tmp65[1] strm_PRIME_PRIME_PRIME_PRIME = expect(93, strm1, tmp65[2]) end local tmp66 = {tag = "ARRAY_TABLE", payload = key} local tmp67 = skipWhiteSpaceOrComment(strm_PRIME_PRIME_PRIME_PRIME) exp = {tag = "SOME", payload = {tmp66, tmp67}} goto cont2 end end ::else7:: local tmp64 do local strm1 = strm_PRIME[1] tmp64 = skipWhiteSpaceAndGetc(strm1, strm_PRIME[2]) end local exp2 = readKey(tmp64) local key = exp2[1] local strm_PRIME_PRIME = exp2[2] local strm_PRIME_PRIME_PRIME do local strm1 = strm_PRIME_PRIME[1] strm_PRIME_PRIME_PRIME = expect(93, strm1, strm_PRIME_PRIME[2]) end local tmp65 = {tag = "STD_TABLE", payload = key} local tmp66 = skipWhiteSpaceOrComment(strm_PRIME_PRIME_PRIME) exp = {tag = "SOME", payload = {tmp65, tmp66}} goto cont2 end ::else6:: local exp2 = readKeyval(revPath1, exp1) local key = exp2[1] local v = exp2[2] local strm_PRIME = exp2[3] local tmp64 = {tag = "KEYVAL", payload = {key, v}} local tmp65 = skipWhiteSpaceOrComment(strm_PRIME) exp = {tag = "SOME", payload = {tmp64, tmp65}} end end end ::cont2:: if exp.tag == "NONE" then else goto else1 end table = finalizeTable(accum) goto cont ::else1:: if exp.tag == "SOME" and exp.payload[1].tag == "ARRAY_TABLE" then else goto else2 end do local key = exp.payload[1].payload local strm_PRIME = exp.payload[2] local tmp61 = insertArrayTable(nil, accum, key) local tmp62 = revAppend(key, nil) local tmp63 = {"[]", tmp62} local strm = strm_PRIME[1] tmp56 = tmp61 tmp57 = tmp63 tmp58 = key tmp59 = strm tmp60 = strm_PRIME[2] goto cont1 end ::else2:: if exp.tag == "SOME" and exp.payload[1].tag == "STD_TABLE" then else goto else3 end do local key = exp.payload[1].payload local strm_PRIME = exp.payload[2] local tmp61 = insertTable(nil, accum, key) local tmp62 = revAppend(key, nil) local strm = strm_PRIME[1] tmp56 = tmp61 tmp57 = tmp62 tmp58 = key tmp59 = strm tmp60 = strm_PRIME[2] goto cont1 end ::else3:: if exp.tag == "SOME" and exp.payload[1].tag == "KEYVAL" then else _raise(_Match, "parse_toml.sml:1132:9") end do local key = exp.payload[1].payload[1] local v = exp.payload[1].payload[2] local strm_PRIME = exp.payload[2] local tmp61 = insertKeyval(nil, accum, prefix, key, v) local strm = strm_PRIME[1] tmp56 = tmp61 tmp57 = revPath tmp58 = prefix tmp59 = strm tmp60 = strm_PRIME[2] goto cont1 end end end end ::cont:: local tmp56, color, tmp57, tmp58, tmp59, tmp60 do local tmp61 = _L[364](table, "temporary-directory") tmp56 = _L[366](tmp61, function(a) if a.tag == "STRING" then return {tag = "SOME", payload = a.payload} end _L[302]("Config entry temporary-directory should be a string.") return NONE end) local tmp62 = _L[364](table, "color") color = _L[366](tmp62, function(a) if a.tag == "TABLE" then return {tag = "SOME", payload = a.payload} end _L[302]("Config entry color should be a table.") return NONE end) local tmp63 = _L[365](color, "type") local tmp64 = _L[369]("color.type") tmp57 = _L[366](tmp63, tmp64) local tmp65 = _L[365](color, "execute") local tmp66 = _L[369]("color.execute") tmp58 = _L[366](tmp65, tmp66) local tmp67 = _L[365](color, "error") local tmp68 = _L[369]("color.error") tmp59 = _L[366](tmp67, tmp68) local tmp69 = _L[365](color, "warning") local tmp70 = _L[369]("color.warning") tmp60 = _L[366](tmp69, tmp70) end local tmp61 = _L[365](color, "diagnostic") local tmp62 = _L[369]("color.diagnostic") local tmp63 = _L[366](tmp61, tmp62) local tmp64 = _L[365](color, "information") local tmp65 = _L[369]("color.information") local tmp66 = _L[366](tmp64, tmp65) return {color = {diagnostic = tmp63, error = tmp59, execute = tmp58, information = tmp66, type_ = tmp57, warning = tmp60}, temporary_directory = tmp56} end) if not _L[552] then if __exn_instanceof(_L[553], _L[9]) then _L[541] = _L[363] goto cont6 end if __exn_instanceof(_L[553], _L[171]) then else goto else2 end _L[301]("Config file " .. _L[551] .. " is not UTF-8 encoded.") _L[541] = _L[363] goto cont6 ::else2:: if __exn_instanceof(_L[553], _L[186]) then else _raise(_L[553], nil) end do _L[554] = _L[553].payload _L[555] = "Config file " .. _L[551] .. " is not a valid TOML file: " do if _L[554].tag == "UNEXPECTED" then _L[557] = _L[554].payload.encountered _L[558] = _L[554].payload.expected _L[556] = "unexpected " .. _L[557] .. ", expected " .. _L[558] goto cont19 end if _L[554].tag == "PREFIX_ZERO" then _L[556] = "prefix 0 is disallowed" goto cont19 end if _L[554].tag == "INVALID_UNICODE_SCALAR" then _L[556] = "invalid Unicode scalar" goto cont19 end if _L[554].tag == "INVALID_DATE" then _L[556] = "invalid date" goto cont19 end if _L[554].tag == "INVALID_TIME" then _L[556] = "invalid time" goto cont19 end if _L[554].tag == "DUPLICATE_KEY" then else _raise(_Match, "error.sml:24:9") end do _L[559] = _L[554].payload _L[560] = map(_L[185]) _L[561] = _L[560](_L[559]) _L[556] = "duplicate key at " .. table_concat(_VectorOrArray_fromList(_L[561]), ".") end end ::cont19:: _L[301](_L[555] .. _L[556]) _L[541] = _L[363] end else _L[541] = _L[553] end end end ::cont6:: _L[562] = app(_L[294]) _L[562](_L[541].color.type_) _L[563] = app(_L[295]) _L[563](_L[541].color.execute) _L[564] = app(_L[296]) _L[564](_L[541].color.error) _L[565] = app(_L[297]) _L[565](_L[541].color.warning) _L[566] = app(_L[298]) _L[566](_L[541].color.diagnostic) _L[567] = app(_L[299]) _L[567](_L[541].color.information) _L[568] = _L[538].watch do if _L[538].color.tag == "NONE" then else goto cont7 end _L[280](_L[277]) end ::cont7:: do if _L[539] == nil then else goto else2 end _L[569] = _L[373]() goto cont8 ::else2:: if _L[539] ~= nil and _L[539][2] == nil then _L[569] = _L[539][1] goto cont8 end _L[301]("Multiple input files are not supported.") tmp15(1, true) end ::cont8:: _L[570] = _L[538].engine do if _L[570].tag == "SOME" then else goto else2 end do _L[577] = _L[570].payload _L[578] = _L[254](_L[577]) if _L[578].tag == "SOME" then _L[579] = _L[578].payload _L[580] = _L[579].dvi_extension _L[581] = _L[579].engine_type _L[582] = _L[579].executable _L[583] = _L[579].name _L[584] = _L[579].supports_draftmode _L[576] = _L[579].supports_pdf_generation _L[575] = _L[584] _L[574] = _L[583] _L[573] = _L[582] _L[572] = _L[581] _L[571] = _L[580] goto cont9 end if _L[578].tag == "NONE" then else _raise(_Match, "main.sml:793:50") end _L[301]("Unknown engine name '" .. _L[577] .. "'.") tmp15(1, true) end ::else2:: if _L[570].tag == "NONE" then else _raise(_Match, "main.sml:792:32") end do do _L[586] = _L[154][0] if _L[586] == nil then else _L[585] = _L[586] goto cont18 end do _L[587] = _Fail("CommandLine.name: arg is not available") _raise(_L[587], "command-line.sml:10:45") end end ::cont18:: _L[588] = _L[211](_L[585]) _L[589] = _L[213](_L[588]) _L[590] = isPrefix("cl") _L[591] = _L[590](_L[589]) do if _L[591] then else _L[592] = false goto cont19 end do _L[593] = tmp32(isAlphaNum) _L[592] = _L[593](_L[589]) end end ::cont19:: if _L[592] then else goto else3 end do _L[594] = extract(_L[589], 2, NONE) _L[595] = _L[254](_L[594]) if _L[595].tag == "NONE" then elseif _L[595].tag == "SOME" then _L[596] = _L[595].payload _L[597] = _L[596].dvi_extension _L[598] = _L[596].engine_type _L[599] = _L[596].executable _L[600] = _L[596].name _L[601] = _L[596].supports_draftmode _L[576] = _L[596].supports_pdf_generation _L[575] = _L[601] _L[574] = _L[600] _L[573] = _L[599] _L[572] = _L[598] _L[571] = _L[597] goto cont9 else _raise(_Match, "main.sml:806:51") end _L[301]("Engine not specified.") tmp15(1, true) end ::else3:: _L[301]("Engine not specified.") tmp15(1, true) end end ::cont9:: _L[602] = getOpt(_L[538].output_format, _L[230]) do if _L[602] == "PDF" then else goto else2 end do _L[604] = _L[538].check_driver do if _L[604].tag == "NONE" then goto cont18 end if _L[604].tag == "SOME" then else _raise(_Match, "main.sml:815:44") end _L[301]("--check-driver can only be used when the output format is DVI.") tmp15(1, true) end ::cont18:: if _L[576] then else _L[603] = {tag = "SOME", payload = _L[305]} goto cont10 end do _L[605] = _L[237](_L[572], _L[235]) if _L[605] then _L[603] = {tag = "SOME", payload = _L[310]} goto cont10 end _L[606] = _L[237](_L[572], _L[234]) if _L[606] then _L[603] = {tag = "SOME", payload = _L[309]} goto cont10 end _L[607] = _L[237](_L[572], _L[233]) if _L[607] then _L[603] = {tag = "SOME", payload = _L[308]} goto cont10 end _L[302]("Unknown engine: " .. _L[574]) _L[302]("Driver check will not work.") _L[603] = NONE goto cont10 end end ::else2:: if _L[602] == "DVI" then _L[608] = _L[538].check_driver if _L[608].tag == "SOME" and _L[608].payload == "DVIPDFMX" then _L[603] = {tag = "SOME", payload = _L[305]} elseif _L[608].tag == "SOME" and _L[608].payload == "DVIPS" then _L[603] = {tag = "SOME", payload = _L[306]} elseif _L[608].tag == "SOME" and _L[608].payload == "DVISVGM" then _L[603] = {tag = "SOME", payload = _L[307]} elseif _L[608].tag == "NONE" then _L[603] = NONE else _raise(_Match, "main.sml:837:42") end else _raise(_Match, "main.sml:813:38") end end ::cont10:: _L[609] = _L[538].jobname do if _L[609].tag == "SOME" then _L[612] = _L[609].payload _L[611] = _L[612] _L[610] = _L[612] goto cont11 end if _L[609].tag == "NONE" then else _raise(_Match, "main.sml:842:55") end do _L[613] = _L[213](_L[569]) _L[614] = _L[211](_L[613]) _L[611] = _L[614] _L[610] = tmp21(_L[614], ".", function(a) local tmp54 = tmp19(a) if tmp54 == 32 then return "_" end local tmp55 = isSpace(tmp54) local tmp56 tmp56 = tmp55 or (tmp54 == 34 or (tmp54 == 36 or (tmp54 == 37 or (tmp54 == 38 or (tmp54 == 39 or (tmp54 == 40 or (tmp54 == 41 or (tmp54 == 59 or (tmp54 == 60 or (tmp54 == 62 or (tmp54 == 92 or (tmp54 == 94 or (tmp54 == 96 or tmp54 == 124))))))))))))) if tmp56 then local tmp57 = tmp54 local s if tmp57 >= 0 then s = string_format("%X", tmp57) else s = string_format("~%X", - tmp57) end if tmp57 <= 15 then return "_0" .. s else return "_" .. s end else return string_char(tmp54) end end) end end ::cont11:: if _L[602] == "DVI" then _L[615] = _L[571] elseif _L[602] == "PDF" then _L[615] = "pdf" else _raise(_Match, "main.sml:847:42") end _L[616] = _L[538].output if _L[616].tag == "NONE" then _L[617] = _L[611] .. "." .. _L[615] elseif _L[616].tag == "SOME" then _L[617] = _L[616].payload else _raise(_Match, "main.sml:850:49") end _L[618] = _L[538].output_directory do if _L[618].tag == "SOME" then else goto else2 end do _L[620] = _L[618].payload if _L[538].fresh then else _L[619] = _L[620] goto cont12 end _L[301]("--fresh and --output-directory cannot be used together.") tmp15(1, true) end ::else2:: if _L[618].tag == "NONE" then else _raise(_Match, "main.sml:854:25") end do _L[621] = _L[215](NONE, _L[569]) _L[622] = _L[541].temporary_directory _L[623] = getOpt(_L[538].engine_executable, _L[573]) do do _L[626] = _L[191](table_concat({n = 3, _L[621], _L[610], _L[623]}, "\x00")) _L[627] = _L[626][1] _L[628] = _L[626][2] _L[629] = _L[626][3] _L[625] = _L[193](_L[627], _L[628], _L[629], _L[626][4]) end do if _L[622].tag == "SOME" then _L[630] = _L[622].payload goto cont18 end if _L[622].tag == "NONE" then else _raise(_Match, "main.sml:34:24") end do _L[631] = _L[372]({"TMPDIR", {"TMP", {"TEMP", nil}}}) if _L[631].tag == "SOME" then _L[630] = _L[631].payload goto cont18 end if _L[631].tag == "NONE" then else _raise(_Match, "main.sml:36:36") end do _L[632] = _L[372]({"HOME", {"USERPROFILE", nil}}) if _L[632].tag == "SOME" then else goto else4 end _L[630] = _L[77]({dir = _L[632].payload, file = ".latex-build-temp"}) goto cont18 ::else4:: if _L[632].tag == "NONE" then else _raise(_Match, "main.sml:38:48") end do _L[633] = _Fail("environment variable 'TMPDIR' not set!") _raise(_L[633], "main.sml:40:60") end end end end ::cont18:: _L[624] = _L[77]({dir = _L[630], file = "cluttex-" .. _L[625]}) end _L[634] = _L[219](_L[624]) if not _L[634] then else goto else3 end do _L[635], _L[636] = _L[217].mkdir_rec(_L[624]) if not _L[635] then else _L[619] = _L[624] goto cont12 end do _L[637] = _Error(_L[636]) _raise(_L[637], "fs-util.sml:16:28") end end ::else3:: if _L[538].fresh then else _L[619] = _L[624] goto cont12 end do if _ENV.CLUTTEX_VERBOSITY >= 1 then else goto else4 end do _L[304]("Cleaning '" .. _L[624] .. "'...") _L[638], _L[639] = _L[217].remove_rec(_L[624]) if not _L[638] then else goto else6 end do _L[640] = _Error(_L[639]) _raise(_L[640], "fs-util.sml:22:29") end ::else6:: _L[65](_L[624]) _L[619] = _L[624] goto cont12 end ::else4:: _L[641], _L[642] = _L[217].remove_rec(_L[624]) if not _L[641] then else goto else5 end do _L[643] = _Error(_L[642]) _raise(_L[643], "fs-util.sml:22:29") end ::else5:: _L[65](_L[624]) _L[619] = _L[624] end end end ::cont12:: do if _L[538].print_output_directory then else goto cont13 end do _L[644] = _L[619] .. "\n" _L[645] = _L[113].getOutstream(_L[116]) if _L[645].tag == "LUA_WRITABLE" then else goto else2 end do _L[646] = _L[645].payload.writable _L[101](_L[646], _L[645].payload.name, _L[644]) _L[646]:flush() tmp15(0, true) end ::else2:: if _L[645].tag == "PRIM_WRITER" then else _raise(_Match, "text-io.sml:392:9") end do _L[647] = _L[645].payload.writer.name _L[648] = _L[645].payload.writer.writeVec _L[649] = _L[645].payload.buffer _L[650] = revAppend({_L[644], _L[649][1]}, nil) _L[651] = table_concat(_VectorOrArray_fromList(_L[650])) if _L[648].tag == "SOME" then elseif _L[648].tag == "NONE" then _raise({tag = _L[9], payload = {cause = _L[10], ["function"] = "output", name = _L[647]}}, "text-io.sml:397:26") else _raise(_Match, "text-io.sml:395:14") end do _L[652] = _L[648].payload _L[653] = tmp28(_L[651]) _L[652](_L[653]) _L[649][1] = nil tmp15(0, true) end end end end ::cont13:: if _L[220] then _L[654] = ";" else _L[654] = ":" end _L[655] = _L[64](nil) _L[656] = getOpt(_L[538].change_directory, false) do if _L[656] then else _L[659] = {tag = "SOME", payload = _L[619]} _L[658] = _L[619] _L[657] = _L[617] goto cont14 end do do _L[661] = tmp16("TEXINPUTS") if _L[661] == nil then _L[660] = NONE else _L[660] = {tag = "SOME", payload = _L[661]} end end _L[662] = getOpt(_L[660], "") do _L[664] = tmp16("LUAINPUTS") if _L[664] == nil then _L[663] = NONE else _L[663] = {tag = "SOME", payload = _L[664]} end end _L[665] = getOpt(_L[663], "") _L[63](_L[619]) _L[221]("TEXINPUTS", _L[655] .. _L[654] .. _L[662]) _L[221]("LUAINPUTS", _L[655] .. _L[654] .. _L[665]) _L[666] = _L[215]({tag = "SOME", payload = _L[655]}, _L[617]) _L[659] = NONE _L[658] = "." _L[657] = _L[666] end end ::cont14:: _L[667] = _L[538].bibtex_or_biber do if _L[667].tag == "SOME" then elseif _L[667].tag == "NONE" then _L[668] = _L[657] goto cont15 else _raise(_Match, "main.sml:902:32") end do do _L[670] = tmp16("BIBINPUTS") if _L[670] == nil then _L[669] = NONE else _L[669] = {tag = "SOME", payload = _L[670]} end end _L[671] = getOpt(_L[669], "") _L[221]("BIBINPUTS", _L[655] .. _L[654] .. _L[671]) _L[668] = _L[215]({tag = "SOME", payload = _L[655]}, _L[617]) end end ::cont15:: do _L[673] = tmp16("max_print_line") if _L[673] == nil then _L[672] = NONE else _L[672] = {tag = "SOME", payload = _L[673]} end end if _L[672].tag == "NONE" then _L[221]("max_print_line", "16384") elseif _L[672].tag == "SOME" then else _raise(_Match, "main.sml:919:28") end _L[674] = _L[610] .. "." .. "fls" _L[675] = _L[210].join(_L[658], _L[674]) _L[676] = _L[610] .. "." .. "cluttex-fls" _L[677] = _L[210].join(_L[658], _L[676]) if _L[602] == "DVI" then _L[678] = _L[231] goto cont16 end if _L[602] == "PDF" then if _L[576] then _L[678] = _L[230] else _L[678] = _L[231] end else _raise(_Match, "main.sml:928:43") end ::cont16:: _L[679] = _L[237](_L[572], _L[235]) if _L[679] then _L[681] = _L[610] .. "." .. "cluttexinit.lua" _L[682] = _L[210].join(_L[658], _L[681]) _L[683] = _L[538].file_line_error _L[684] = {file_line_error = _L[683], halt_on_error = _L[538].halt_on_error, jobname = _L[610], output_directory = _L[658]} _L[354].create_initialization_script(_L[682], _L[684]) _L[680] = {tag = "SOME", payload = _L[682]} else _L[680] = NONE end _L[685] = _L[538].source_date_epoch _L[686] = _L[685].tag == "SOME" and _L[685].payload.tag == "RAW" do if _L[686] then _L[221]("SOURCE_DATE_EPOCH", _L[685].payload.payload) _L[687] = NONE goto cont17 end _L[688] = tmp(_L[348]) _L[689] = _L[538].source_date_epoch _L[690] = _L[688]({_L[689], {tag = "SOME", payload = _L[347]}}) do if _L[690] then _L[691] = true goto cont18 end _L[692] = tmp(eq) _L[693] = tmp16("SOURCE_DATE_EPOCH") if _L[693] == nil then else _L[691] = _L[692]({{tag = "SOME", payload = _L[693]}, NONE}) goto cont18 end _L[691] = _L[692]({NONE, NONE}) end ::cont18:: if _L[691] then else _L[687] = NONE goto cont17 end do _L[694] = tmp5(tmp18()) _L[695] = _L[53](tmp18()) _L[687] = {tag = "SOME", payload = {{time = _L[695], time_since_epoch = _L[694]}}} end end ::cont17:: _L[696] = _L[538].engine_executable _L[697] = getOpt(_L[538].interaction, _L[223]) _L[698] = {tag = "SOME", payload = _L[697]} _L[699] = _L[538].file_line_error _L[700] = _L[538].halt_on_error _L[701] = _L[538].synctex _L[702] = _L[538].shell_escape _L[703] = {tag = "SOME", payload = _L[610]} _L[704] = _L[538].fmt _L[705] = _L[538].tex_extraoptions _L[706] = getOpt(_L[538].max_iterations, 4) _L[707] = _L[538].start_with_draft getOpt(_L[538].change_directory, false) _L[708] = _L[538].includeonly _L[709] = _L[538].make_depends _L[710] = _L[538].package_support _L[711] = _L[538].source_date_epoch _L[712] = _L[538].synctex getOpt(_L[538].interaction, _L[223]) _L[713] = _L[538].shell_escape _L[714] = _L[538].dvipdfmx_extraoptions _L[715] = _L[538].makeindex _L[716] = _L[538].bibtex_or_biber _L[717] = _L[538].makeglossaries if _L[568].tag == "NONE" then else goto else1 end do _L[718], _L[719] = _handle(function() local tmp54 = _L[710].epstopdf local tmp55 = _L[710].minted return _L[529](_L[572], _L[573], _L[575], _L[576], _L[569], _L[716], _L[603], _L[714], _L[708], _L[610], _L[709], _L[717], _L[715], _L[706], _L[668], _L[658], _L[602], tmp54, tmp55, _L[710].pdfx, _L[713], _L[711], _L[707], _L[712], _L[655], _L[615], _L[675], _L[677], _L[687], false, _L[696], _L[705], _L[699], _L[704], _L[700], _L[698], _L[703], _L[680], _L[659], _L[678], _L[702], _L[701]) end) if not _L[718] then if __exn_instanceof(_L[719], _L[370]) then tmp15(1, true) else _raise(_L[719], nil) end else goto cont4 end end ::else1:: if _L[568].tag == "SOME" then else _raise(_Match, "main.sml:1009:18") end do _L[720] = _L[568].payload do if _L[220] then else _L[721] = NONE goto cont18 end do _L[722], _L[723] = pcall(tmp3, "texrunner.fswatcher_windows") if not _L[722] then else _L[721] = {tag = "SOME", payload = _L[723]} goto cont18 end do if _ENV.CLUTTEX_VERBOSITY >= 1 then else _L[721] = NONE goto cont18 end _L[302]("Failed to load texrunner.fswatcher_windows: " .. _L[723]) _L[721] = NONE end end end ::cont18:: do if _L[721].tag == "SOME" then else goto else2 end do _L[725] = _L[721].payload if _ENV.CLUTTEX_VERBOSITY >= 2 then else _L[724] = function(a) return _L[530](_L[725], a) end goto cont19 end _L[304]("Using built-in filesystem watcher for Windows") _L[724] = function(a) return _L[530](_L[725], a) end goto cont19 end ::else2:: if _L[721].tag == "NONE" then else _raise(_Match, "main.sml:689:25") end do _L[726] = _L[209]("fswatch") do if _L[726] then else _L[727] = false goto cont23 end do _L[728] = _L[346](_L[720], _L[345]) if _L[728] then _L[727] = true else _L[727] = _L[346](_L[720], _L[345]) end end end ::cont23:: if _L[727] then else goto else3 end do if _ENV.CLUTTEX_VERBOSITY >= 2 then else _L[724] = _L[531] goto cont19 end _L[304]("Using `fswatch' command") _L[724] = _L[531] goto cont19 end ::else3:: _L[729] = _L[209]("inotifywait") do if _L[729] then else _L[730] = false goto cont24 end do _L[731] = _L[346](_L[720], _L[345]) if _L[731] then _L[730] = true else _L[730] = _L[346](_L[720], _L[344]) end end end ::cont24:: if _L[730] then else goto else4 end do if _ENV.CLUTTEX_VERBOSITY >= 2 then else _L[724] = _L[532] goto cont19 end _L[304]("Using `inotifywait' command") _L[724] = _L[532] goto cont19 end ::else4:: if _L[720] == "AUTO" then else goto else5 end _L[301]("Could not watch files because neither `fswatch' nor `inotifywait' was installed.") _L[304]("See ClutTeX's manual for details.") tmp15(1, true) ::else5:: if _L[720] == "FSWATCH" then else goto else6 end _L[301]("Could not watch files because your selected engine `fswatch' was not installed.") _L[304]("See ClutTeX's manual for details.") tmp15(1, true) ::else6:: if _L[720] == "INOTIFYWAIT" then else _raise(_Match, "main.sml:712:43") end _L[301]("Could not watch files because your selected engine `inotifywait' was not installed.") _L[304]("See ClutTeX's manual for details.") tmp15(1, true) end end ::cont19:: do _L[732], _L[733] = _handle(function() do local tmp54 = _L[710].epstopdf local tmp55 = _L[710].minted _L[529](_L[572], _L[573], _L[575], _L[576], _L[569], _L[716], _L[603], _L[714], _L[708], _L[610], _L[709], _L[717], _L[715], _L[706], _L[668], _L[658], _L[602], tmp54, tmp55, _L[710].pdfx, _L[713], _L[711], _L[707], _L[712], _L[655], _L[615], _L[675], _L[677], _L[687], false, _L[696], _L[705], _L[699], _L[704], _L[700], _L[698], _L[703], _L[680], _L[659], _L[678], _L[702], _L[701]) end return nil end) if not _L[732] then if __exn_instanceof(_L[733], _L[370]) then else _raise(_L[733], nil) end end end _L[734] = _L[360](_L[675], _L[715], nil, _L[203]) _L[735] = _L[237](_L[572], _L[235]) do if _L[735] then else _L[736] = false goto cont20 end _L[736] = _L[218](_L[677]) end ::cont20:: do if _L[736] then else _L[737] = _L[734] goto cont21 end do _L[738] = _L[734][1] _L[737] = _L[360](_L[677], _L[715], _L[738], _L[734][2]) end end ::cont21:: do _L[740] = _L[737][1] _L[739] = _L[359](_L[740], _L[737][2]) end _L[741] = _L[739][1] _L[742] = mapPartial1(function(a) if a.kind == "INPUT" then return {tag = "SOME", payload = a.abspath} else return NONE end end) _L[743] = _L[742](_L[741]) _L[744] = _L[743] ::cont22:: do local _L1 = {} _L1[1] = _L[744] _L1[2] = _L[724](_L1[1]) if _L1[2] then else return end do do _L1[4], _L1[5] = _handle(function() do local tmp54 = _L[710].epstopdf local tmp55 = _L[710].minted _L[529](_L[572], _L[573], _L[575], _L[576], _L[569], _L[716], _L[603], _L[714], _L[708], _L[610], _L[709], _L[717], _L[715], _L[706], _L[668], _L[658], _L[602], tmp54, tmp55, _L[710].pdfx, _L[713], _L[711], _L[707], _L[712], _L[655], _L[615], _L[675], _L[677], _L[687], false, _L[696], _L[705], _L[699], _L[704], _L[700], _L[698], _L[703], _L[680], _L[659], _L[678], _L[702], _L[701]) end return true end) if not _L1[4] then if __exn_instanceof(_L1[5], _L[370]) then _L1[3] = false else _raise(_L1[5], nil) end else _L1[3] = _L1[5] end end if _L1[3] then else _L[744] = _L1[1] goto cont22 end do _L1[6] = _L[360](_L[675], _L[715], nil, _L[203]) _L1[7] = _L[237](_L[572], _L[235]) do if _L1[7] then else _L1[8] = false goto cont23 end _L1[8] = _L[218](_L[677]) end ::cont23:: do if _L1[8] then else _L1[9] = _L1[6] goto cont24 end do _L1[10] = _L1[6][1] _L1[9] = _L[360](_L[677], _L[715], _L1[10], _L1[6][2]) end end ::cont24:: do _L1[12] = _L1[9][1] _L1[11] = _L[359](_L1[12], _L1[9][2]) end _L1[13] = _L1[11][1] _L1[14] = mapPartial1(function(a) if a.kind == "INPUT" then return {tag = "SOME", payload = a.abspath} else return NONE end end) _L[744] = _L1[14](_L1[13]) goto cont22 end end end end end ::cont4::