# HG changeset patch # User wenzelm # Date 1243772107 -7200 # Node ID 3fd52453ae8141fa42a768d2545cfb75e46a38ac # Parent 7015fee8c3e8d724a480bfb5ad00133d8f5d6e02 discontinued support for Poly/ML 4.x versions; diff -r 7015fee8c3e8 -r 3fd52453ae81 Admin/CHECKLIST --- a/Admin/CHECKLIST Sat May 30 22:37:38 2009 +0200 +++ b/Admin/CHECKLIST Sun May 31 14:15:07 2009 +0200 @@ -1,8 +1,9 @@ Checklist for official releases =============================== -- test mosml, polyml-5.2, polyml-5.1, polyml-5.0, polyml-4.1.3, polyml-4.1.4, polyml-4.2.0, - sparc-solaris, x86-solaris; +- test mosml, polyml-5.2, polyml-5.1, polyml-5.0; + +- test sparc-solaris, x86-solaris; - test ProofGeneral; diff -r 7015fee8c3e8 -r 3fd52453ae81 Admin/isatest/settings/at-poly-4.1.3 --- a/Admin/isatest/settings/at-poly-4.1.3 Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -# -*- shell-script -*- - - POLYML_HOME="/home/polyml/polyml-4.1.3" - ML_SYSTEM="polyml-4.1.3" - ML_PLATFORM="x86-linux" - ML_HOME="$POLYML_HOME/$ML_PLATFORM" - ML_OPTIONS="-h 30000" - -ISABELLE_HOME_USER=~/isabelle-at-poly-4.1.3 - -# Where to look for isabelle tools (multiple dirs separated by ':'). -ISABELLE_TOOLS="$ISABELLE_HOME/lib/Tools" - -# Location for temporary files (should be on a local file system). -ISABELLE_TMP_PREFIX="/tmp/isabelle-$USER" - - -# Heap input locations. ML system identifier is included in lookup. -ISABELLE_PATH="$ISABELLE_HOME_USER/heaps:$ISABELLE_HOME/heaps" - -# Heap output location. ML system identifier is appended automatically later on. -ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps" -ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info" - -ISABELLE_USEDIR_OPTIONS="-i true -d pdf -v true" - -HOL_USEDIR_OPTIONS="-p 2" diff -r 7015fee8c3e8 -r 3fd52453ae81 Admin/isatest/settings/at-poly-e --- a/Admin/isatest/settings/at-poly-e Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -# -*- shell-script -*- - - POLYML_HOME="/home/polyml/polyml-4.2.0" - ML_SYSTEM="polyml-4.2.0" - ML_PLATFORM="x86-linux" - ML_HOME="$POLYML_HOME/$ML_PLATFORM" - ML_OPTIONS="-h 30000" - -ISABELLE_HOME_USER=~/isabelle-at-poly-e - -# Where to look for isabelle tools (multiple dirs separated by ':'). -ISABELLE_TOOLS="$ISABELLE_HOME/lib/Tools" - -# Location for temporary files (should be on a local file system). -ISABELLE_TMP_PREFIX="/tmp/isabelle-$USER" - - -# Heap input locations. ML system identifier is included in lookup. -ISABELLE_PATH="$ISABELLE_HOME_USER/heaps:$ISABELLE_HOME/heaps" - -# Heap output location. ML system identifier is appended automatically later on. -ISABELLE_OUTPUT="$ISABELLE_HOME_USER/heaps" -ISABELLE_BROWSER_INFO="$ISABELLE_HOME_USER/browser_info" - -ISABELLE_USEDIR_OPTIONS="-i true -d pdf -v true" - -HOL_USEDIR_OPTIONS="-p 2" diff -r 7015fee8c3e8 -r 3fd52453ae81 NEWS --- a/NEWS Sat May 30 22:37:38 2009 +0200 +++ b/NEWS Sun May 31 14:15:07 2009 +0200 @@ -33,6 +33,11 @@ Attrib/Method.setup introduced in Isabelle2009. +*** System *** + +* Discontinued support for Poly/ML 4.x versions. + + New in Isabelle2009 (April 2009) -------------------------------- diff -r 7015fee8c3e8 -r 3fd52453ae81 etc/settings --- a/etc/settings Sat May 30 22:37:38 2009 +0200 +++ b/etc/settings Sun May 31 14:15:07 2009 +0200 @@ -15,7 +15,7 @@ # not invent new ML system names unless you know what you are doing. # Only one of the sections below should be activated. -# Poly/ML 4.x/5.x (automated settings) +# Poly/ML 5.x (automated settings) POLY_HOME="$(type -p poly)"; [ -n "$POLY_HOME" ] && POLY_HOME="$(dirname "$POLY_HOME")" ML_PLATFORM=$("$ISABELLE_HOME/lib/scripts/polyml-platform") ML_HOME=$(choosefrom \ @@ -41,12 +41,6 @@ #ML_SYSTEM=polyml-5.1 #ML_OPTIONS="-H 1000" -# Poly/ML 4.2.0 -#ML_PLATFORM=x86-linux -#ML_HOME=/usr/local/polyml/x86-linux -#ML_SYSTEM=polyml-4.2.0 -#ML_OPTIONS="-H 80" - # Standard ML of New Jersey (slow!) #ML_SYSTEM=smlnj-110 #ML_HOME="/usr/local/smlnj/bin" diff -r 7015fee8c3e8 -r 3fd52453ae81 lib/scripts/run-polyml-4.1.3 --- a/lib/scripts/run-polyml-4.1.3 Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -#!/usr/bin/env bash -# -# Author: Markus Wenzel, TU Muenchen -# -# Poly/ML 4.x startup script. - -export -n INFILE OUTFILE COPYDB COMPRESS MLTEXT TERMINATE NOWRITE - - -## diagnostics - -function fail_out() -{ - echo "Unable to create output heap file: \"$OUTFILE\"" >&2 - exit 2 -} - -function check_file() -{ - if [ ! -f "$1" ]; then - echo "Unable to locate $1" >&2 - echo "Please check your ML system settings!" >&2 - exit 2 - fi -} - - -## Poly/ML executable and database - -ML_DBASE_PREFIX="" - -POLY="$ML_HOME/poly" -check_file "$POLY" - -if [ -z "$ML_DBASE" ]; then - if [ ! -e "$ML_HOME/ML_dbase" -a "$(basename "$ML_HOME")" = bin ]; then - ML_DBASE_HOME="$(cd "$ML_HOME"; cd "$(pwd -P)"; cd ../lib/poly; pwd)" - else - ML_DBASE_HOME="$ML_HOME" - fi - if [ -z "$COPYDB" ]; then - ML_DBASE_PREFIX="$ML_DBASE_HOME/" - ML_DBASE="ML_dbase" - else - ML_DBASE="$ML_DBASE_HOME/ML_dbase" - fi - export POLYPATH="$ML_DBASE_HOME" -else - export POLYPATH="$(dirname "$ML_DBASE")" -fi - -DISCGARB_OPTIONS="-d -c" - -EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;" - - -## prepare databases - -if [ -z "$INFILE" ]; then - check_file "$ML_DBASE_PREFIX$ML_DBASE" - INFILE="$ML_DBASE" - MLTEXT="val use = PolyML.use; $EXIT $MLTEXT" - DISCGARB_OPTIONS="$DISCGARB_OPTIONS -S max" -else - COPYDB=true -fi - -if [ -z "$OUTFILE" ]; then - DB="$INFILE" - ML_OPTIONS="-r $ML_OPTIONS" -elif [ "$INFILE" -ef "$OUTFILE" ]; then - DB="$INFILE" -elif [ -n "$COPYDB" ]; then - [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } - cp "$INFILE" "$OUTFILE" || fail_out - chmod +w "$OUTFILE" || fail_out - DB="$OUTFILE" -else - [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } - echo "PolyML.make_database \"$OUTFILE\"; PolyML.quit();" | "$POLY" -r "$INFILE" - [ -f "$OUTFILE" ] || fail_out - DB="$OUTFILE" -fi - - -## run it! - -if [ -z "$TERMINATE" ]; then - FEEDER_OPTS="" -else - FEEDER_OPTS="-q" -fi - -DB_INFO="$(ls -l "$DB" 2>/dev/null)" - -"$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" $FEEDER_OPTS | { - read FPID; "$POLY" $ML_OPTIONS "$DB"; - RC="$?"; kill -HUP "$FPID"; exit "$RC"; } -RC="$?" - -NEW_DB_INFO="$(ls -l "$DB" 2>/dev/null)" -[ -n "$OUTFILE" -a -n "$COMPRESS" -a "$DB_INFO" != "$NEW_DB_INFO" ] && \ - "$POLY" $DISCGARB_OPTIONS "$OUTFILE" -[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE" - -exit "$RC" diff -r 7015fee8c3e8 -r 3fd52453ae81 lib/scripts/run-polyml-4.1.4 --- a/lib/scripts/run-polyml-4.1.4 Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -#!/usr/bin/env bash -# -# Author: Markus Wenzel, TU Muenchen -# -# Poly/ML 4.x startup script. - -export -n INFILE OUTFILE COPYDB COMPRESS MLTEXT TERMINATE NOWRITE - - -## diagnostics - -function fail_out() -{ - echo "Unable to create output heap file: \"$OUTFILE\"" >&2 - exit 2 -} - -function check_file() -{ - if [ ! -f "$1" ]; then - echo "Unable to locate $1" >&2 - echo "Please check your ML system settings!" >&2 - exit 2 - fi -} - - -## Poly/ML executable and database - -ML_DBASE_PREFIX="" - -POLY="$ML_HOME/poly" -check_file "$POLY" - -if [ -z "$ML_DBASE" ]; then - if [ ! -e "$ML_HOME/ML_dbase" -a "$(basename "$ML_HOME")" = bin ]; then - ML_DBASE_HOME="$(cd "$ML_HOME"; cd "$(pwd -P)"; cd ../lib/poly; pwd)" - else - ML_DBASE_HOME="$ML_HOME" - fi - if [ -z "$COPYDB" ]; then - ML_DBASE_PREFIX="$ML_DBASE_HOME/" - ML_DBASE="ML_dbase" - else - ML_DBASE="$ML_DBASE_HOME/ML_dbase" - fi - export POLYPATH="$ML_DBASE_HOME" -else - export POLYPATH="$(dirname "$ML_DBASE")" -fi - -DISCGARB_OPTIONS="-d -c" - -EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;" - - -## prepare databases - -if [ -z "$INFILE" ]; then - check_file "$ML_DBASE_PREFIX$ML_DBASE" - INFILE="$ML_DBASE" - MLTEXT="val use = PolyML.use; $EXIT $MLTEXT" - DISCGARB_OPTIONS="$DISCGARB_OPTIONS -S max" -else - COPYDB=true -fi - -if [ -z "$OUTFILE" ]; then - DB="$INFILE" - ML_OPTIONS="-r $ML_OPTIONS" -elif [ "$INFILE" -ef "$OUTFILE" ]; then - DB="$INFILE" -elif [ -n "$COPYDB" ]; then - [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } - cp "$INFILE" "$OUTFILE" || fail_out - chmod +w "$OUTFILE" || fail_out - DB="$OUTFILE" -else - [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } - echo "PolyML.make_database \"$OUTFILE\"; PolyML.quit();" | "$POLY" -r "$INFILE" - [ -f "$OUTFILE" ] || fail_out - DB="$OUTFILE" -fi - - -## run it! - -if [ -z "$TERMINATE" ]; then - FEEDER_OPTS="" -else - FEEDER_OPTS="-q" -fi - -DB_INFO="$(ls -l "$DB" 2>/dev/null)" - -"$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" $FEEDER_OPTS | { - read FPID; "$POLY" $ML_OPTIONS "$DB"; - RC="$?"; kill -HUP "$FPID"; exit "$RC"; } -RC="$?" - -NEW_DB_INFO="$(ls -l "$DB" 2>/dev/null)" -[ -n "$OUTFILE" -a -n "$COMPRESS" -a "$DB_INFO" != "$NEW_DB_INFO" ] && \ - "$POLY" $DISCGARB_OPTIONS "$OUTFILE" -[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE" - -exit "$RC" diff -r 7015fee8c3e8 -r 3fd52453ae81 lib/scripts/run-polyml-4.2.0 --- a/lib/scripts/run-polyml-4.2.0 Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -#!/usr/bin/env bash -# -# Author: Markus Wenzel, TU Muenchen -# -# Poly/ML 4.x startup script. - -export -n INFILE OUTFILE COPYDB COMPRESS MLTEXT TERMINATE NOWRITE - - -## diagnostics - -function fail_out() -{ - echo "Unable to create output heap file: \"$OUTFILE\"" >&2 - exit 2 -} - -function check_file() -{ - if [ ! -f "$1" ]; then - echo "Unable to locate $1" >&2 - echo "Please check your ML system settings!" >&2 - exit 2 - fi -} - - -## Poly/ML executable and database - -ML_DBASE_PREFIX="" - -POLY="$ML_HOME/poly" -check_file "$POLY" - -if [ -z "$ML_DBASE" ]; then - if [ ! -e "$ML_HOME/ML_dbase" -a "$(basename "$ML_HOME")" = bin ]; then - ML_DBASE_HOME="$(cd "$ML_HOME"; cd "$(pwd -P)"; cd ../lib/poly; pwd)" - else - ML_DBASE_HOME="$ML_HOME" - fi - if [ -z "$COPYDB" ]; then - ML_DBASE_PREFIX="$ML_DBASE_HOME/" - ML_DBASE="ML_dbase" - else - ML_DBASE="$ML_DBASE_HOME/ML_dbase" - fi - export POLYPATH="$ML_DBASE_HOME" -else - export POLYPATH="$(dirname "$ML_DBASE")" -fi - -DISCGARB_OPTIONS="-d -c" - -EXIT="fun exit 0 = (OS.Process.exit OS.Process.success): unit | exit _ = OS.Process.exit OS.Process.failure;" - - -## prepare databases - -if [ -z "$INFILE" ]; then - check_file "$ML_DBASE_PREFIX$ML_DBASE" - INFILE="$ML_DBASE" - MLTEXT="val use = PolyML.use; $EXIT $MLTEXT" - DISCGARB_OPTIONS="$DISCGARB_OPTIONS -S max" -else - COPYDB=true -fi - -if [ -z "$OUTFILE" ]; then - DB="$INFILE" - ML_OPTIONS="-r $ML_OPTIONS" -elif [ "$INFILE" -ef "$OUTFILE" ]; then - DB="$INFILE" -elif [ -n "$COPYDB" ]; then - [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } - cp "$INFILE" "$OUTFILE" || fail_out - chmod +w "$OUTFILE" || fail_out - DB="$OUTFILE" -else - [ -f "$OUTFILE" ] && { rm -f "$OUTFILE" || fail_out; } - echo "PolyML.make_database \"$OUTFILE\"; PolyML.quit();" | "$POLY" -r "$INFILE" - [ -f "$OUTFILE" ] || fail_out - DB="$OUTFILE" -fi - - -## run it! - -if [ -z "$TERMINATE" ]; then - FEEDER_OPTS="" -else - FEEDER_OPTS="-q" -fi - -DB_INFO="$(ls -l "$DB" 2>/dev/null)" - -"$ISABELLE_HOME/lib/scripts/feeder" -p -h "$MLTEXT" $FEEDER_OPTS | { - read FPID; "$POLY" $ML_OPTIONS "$DB"; - RC="$?"; kill -HUP "$FPID"; exit "$RC"; } -RC="$?" - -NEW_DB_INFO="$(ls -l "$DB" 2>/dev/null)" -[ -n "$OUTFILE" -a -n "$COMPRESS" -a "$DB_INFO" != "$NEW_DB_INFO" ] && \ - "$POLY" $DISCGARB_OPTIONS "$OUTFILE" -[ -n "$OUTFILE" -a -f "$OUTFILE" -a -n "$NOWRITE" ] && chmod -w "$OUTFILE" - -exit "$RC" diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/IsaMakefile --- a/src/Pure/IsaMakefile Sat May 30 22:37:38 2009 +0200 +++ b/src/Pure/IsaMakefile Sun May 31 14:15:07 2009 +0200 @@ -22,11 +22,9 @@ BOOTSTRAP_FILES = ML-Systems/exn.ML ML-Systems/ml_name_space.ML \ ML-Systems/ml_pretty.ML ML-Systems/mosml.ML \ ML-Systems/multithreading.ML ML-Systems/multithreading_polyml.ML \ - ML-Systems/overloading_smlnj.ML ML-Systems/polyml-4.1.3.ML \ - ML-Systems/polyml-4.1.4.ML ML-Systems/polyml-4.2.0.ML \ - ML-Systems/polyml-5.0.ML ML-Systems/polyml-5.1.ML \ - ML-Systems/polyml-experimental.ML ML-Systems/polyml.ML \ - ML-Systems/polyml_common.ML ML-Systems/polyml_old_compiler4.ML \ + ML-Systems/overloading_smlnj.ML ML-Systems/polyml-5.0.ML \ + ML-Systems/polyml-5.1.ML ML-Systems/polyml-experimental.ML \ + ML-Systems/polyml.ML ML-Systems/polyml_common.ML \ ML-Systems/polyml_old_compiler5.ML ML-Systems/polyml_pp.ML \ ML-Systems/proper_int.ML ML-Systems/smlnj.ML \ ML-Systems/system_shell.ML ML-Systems/thread_dummy.ML \ diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/ML-Systems/polyml-4.1.3.ML --- a/src/Pure/ML-Systems/polyml-4.1.3.ML Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -(* Title: Pure/ML-Systems/polyml-4.1.3.ML - -Compatibility wrapper for Poly/ML 4.1.3. -*) - -use "ML-Systems/polyml_old_basis.ML"; -use "ML-Systems/universal.ML"; -use "ML-Systems/thread_dummy.ML"; -use "ML-Systems/ml_name_space.ML"; -use "ML-Systems/polyml_common.ML"; -use "ML-Systems/polyml_old_compiler4.ML"; -use "ML-Systems/polyml_pp.ML"; - -val pointer_eq = Address.wordEq; - diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/ML-Systems/polyml-4.1.4.ML --- a/src/Pure/ML-Systems/polyml-4.1.4.ML Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -(* Title: Pure/ML-Systems/polyml-4.1.4.ML - -Compatibility wrapper for Poly/ML 4.1.4. -*) - -use "ML-Systems/polyml_old_basis.ML"; -use "ML-Systems/universal.ML"; -use "ML-Systems/thread_dummy.ML"; -use "ML-Systems/ml_name_space.ML"; -use "ML-Systems/polyml_common.ML"; -use "ML-Systems/polyml_old_compiler4.ML"; -use "ML-Systems/polyml_pp.ML"; - -val pointer_eq = Address.wordEq; - diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/ML-Systems/polyml-4.2.0.ML --- a/src/Pure/ML-Systems/polyml-4.2.0.ML Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -(* Title: Pure/ML-Systems/polyml-4.2.0.ML - -Compatibility wrapper for Poly/ML 4.2.0. -*) - -use "ML-Systems/universal.ML"; -use "ML-Systems/thread_dummy.ML"; -use "ML-Systems/ml_name_space.ML"; -use "ML-Systems/polyml_common.ML"; -use "ML-Systems/polyml_old_compiler4.ML"; -use "ML-Systems/polyml_pp.ML"; - -val pointer_eq = Address.wordEq; - diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/ML-Systems/polyml_common.ML --- a/src/Pure/ML-Systems/polyml_common.ML Sat May 30 22:37:38 2009 +0200 +++ b/src/Pure/ML-Systems/polyml_common.ML Sun May 31 14:15:07 2009 +0200 @@ -1,6 +1,6 @@ (* Title: Pure/ML-Systems/polyml_common.ML -Compatibility file for Poly/ML -- common part for 4.x and 5.x. +Compatibility file for Poly/ML -- common part for 5.x. *) exception Interrupt = SML90.Interrupt; diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/ML-Systems/polyml_old_basis.ML --- a/src/Pure/ML-Systems/polyml_old_basis.ML Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -(* Title: Pure/ML-Systems/polyml_old_basis.ML - -Fixes for the old SML basis library (before Poly/ML 4.2.0). -*) - -structure String = -struct - fun isSuffix s1 s2 = - let val n1 = size s1 and n2 = size s2 - in if n1 = n2 then s1 = s2 else n1 <= n2 andalso String.substring (s2, n2 - n1, n1) = s1 end; - fun isSubstring s1 s2 = - String.isPrefix s1 s2 orelse - size s1 < size s2 andalso isSubstring s1 (String.extract (s2, 1, NONE)); - open String; -end; - -structure Substring = -struct - open Substring; - val full = all; -end; - -structure TextIO = -struct - open TextIO; - fun inputLine is = - let val s = TextIO.inputLine is - in if s = "" then NONE else SOME s end; -end; diff -r 7015fee8c3e8 -r 3fd52453ae81 src/Pure/ML-Systems/polyml_old_compiler4.ML --- a/src/Pure/ML-Systems/polyml_old_compiler4.ML Sat May 30 22:37:38 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -(* Title: Pure/ML-Systems/polyml_old_compiler4.ML - -Runtime compilation -- for old PolyML.compiler (version 4.x). -*) - -fun use_text ({tune_source, print, error, ...}: use_context) (line: int, name) verbose txt = - let - val in_buffer = ref (explode (tune_source txt)); - val out_buffer = ref ([]: string list); - fun output () = implode (rev (case ! out_buffer of "\n" :: cs => cs | cs => cs)); - - fun get () = - (case ! in_buffer of - [] => "" - | c :: cs => (in_buffer := cs; c)); - fun put s = out_buffer := s :: ! out_buffer; - - fun exec () = - (case ! in_buffer of - [] => () - | _ => (PolyML.compiler (get, put) (); exec ())); - in - exec () handle exn => - (error ((if name = "" then "" else "Error in " ^ name ^ "\n") ^ output ()); raise exn); - if verbose then print (output ()) else () - end; - -fun use_file context verbose name = - let - val instream = TextIO.openIn name; - val txt = Exn.release (Exn.capture TextIO.inputAll instream before TextIO.closeIn instream); - in use_text context (1, name) verbose txt end;