


## read-eval-print-loops-g.pkg
# Compiled by:
# src/lib/compiler/core.sublib# Here we define the backend interactive-compilation
# facility exported to the front end.
#
# Our generic is invoked (only) by
#
# src/lib/compiler/toplevel/compiler/mythryl-compiler-g.pkg#
# Our generic argument is generated by read_eval_print_loop_g in
#
# src/lib/compiler/toplevel/interact/read-eval-print-loop-g.pkg#
### "Every society honors its live conformists
### and its dead troublemakers."
###
### -- Mignon McLaughlin
stipulate
package cps = compiler_state; # compiler_state is from src/lib/compiler/toplevel/interact/compiler-state.pkg package ctl = global_controls; # global_controls is from src/lib/compiler/toplevel/main/global-controls.pkg package cts = compiler_mapstack_set; # compiler_mapstack_set is from src/lib/compiler/toplevel/compiler-state/compiler-mapstack-set.pkg package err = error_message; # error_message is from src/lib/compiler/front/basics/errormsg/error-message.pkg package iox = io_exceptions; # io_exceptions is from src/lib/std/src/io/io-exceptions.pkg package pl = property_list; # property_list is from src/lib/src/property-list.pkg package wnx = winix; # winix is from src/lib/std/winix.pkg package xns = exceptions; # exceptions is from src/lib/std/exceptions.pkgherein
# This generic is invoked from:
#
# src/lib/compiler/toplevel/compiler/mythryl-compiler-g.pkg #
# which constructs the 'rpl' arg via an
# invocation of read_eval_print_loop_g: # read_eval_print_loop_g is from src/lib/compiler/toplevel/interact/read-eval-print-loop-g.pkg #
generic package read_eval_print_loops_g (
#
rpl: Read_Eval_Print_Loop # Read_Eval_Print_Loop is from src/lib/compiler/toplevel/interact/read-eval-print-loop.api )
: (weak) Read_Eval_Print_Loops # Read_Eval_Print_Loops is from src/lib/compiler/toplevel/interact/read-eval-print-loops.api {
exception CONTROL_C_SIGNAL
=
rpl::CONTROL_C_SIGNAL;
Compiler_Mapstack_Set_Jar
=
cps::Compiler_Mapstack_Set_Jar;
fun read_eval_print_from_script script_name # 'script_name' can be "<stdin>" or the filename of the script.
=
{ rpl::read_eval_print_from_script script_name; # rpl::read_eval_print_from_script is from src/lib/compiler/toplevel/interact/read-eval-print-loop-g.pkg #
wnx::process::exit wnx::process::success;
};
fun read_eval_print_from_user ()
=
{ rpl::read_eval_print_from_user ();
#
wnx::process::exit wnx::process::success;
};
with_error_handling
=
rpl::with_error_handling;
fun read_eval_print_from_file filename
=
{ apply
ctl::print::say
["[including ", filename, "]\n"];
rpl::read_eval_print_from_stream
(
filename,
file::open_for_read filename
except
e as iox::IO _
=
{ apply ctl::print::say [ "[include failed: ",
xns::exception_message e,
"]\n"
];
raise exception err::COMPILE_ERROR;
}
);
};
# file is from src/lib/std/src/posix/file.pkg fun read_eval_print_from_stream stream
=
rpl::read_eval_print_from_stream
("<Input_Stream>", stream);
fun evaluate_stream (stream, base_dictionary)
=
{ r = REF cts::null_compiler_mapstack_set;
baselevel_pkg_etc_defs_jar
=
{ set_mapstack_set => fn _ = raise exception FAIL "evaluate_stream: base.set",
get_mapstack_set => fn () = base_dictionary
};
top_level_pkg_etc_defs_jar
=
{ set_mapstack_set => fn e = r := e,
get_mapstack_set => fn () = *r
};
property_list = pl::make_property_list ();
compiler_state
=
{ top_level_pkg_etc_defs_jar,
baselevel_pkg_etc_defs_jar,
property_list
};
cps::run_thunk_in_compiler_state
(
fn ()
=
{ rpl::read_eval_print_from_stream ("<Input_Stream>", stream);
*r;
},
compiler_state
);
};
stipulate
include fate; # fate is from src/lib/std/src/nj/fate.pkg herein
my redump_heap_fate: Ref( Fate( String ) )
=
REF (call_with_current_fate
(fn return_fate
=
{ call_with_current_fate
(fn fate = resume_fate return_fate fate);
raise exception FAIL "redump_heap_fate init";
}
) );
end;
}; # generic package read_eval_print_loops_g
end;
## COPYRIGHT (c) 1996 Bell Laboratories.
## Subsequent changes by Jeff Prothero Copyright (c) 2010-2012,
## released under Gnu Public Licence version 3.


