From 69b6f47b7391652e847842d0aa8025fa55ebd5e4 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Fri, 26 Feb 2010 11:23:15 +0000 Subject: [PATCH] make open remember original file. --- C/iopreds.c | 6 +++--- pl/boot.yap | 4 ++-- pl/consult.yap | 4 ++-- pl/yio.yap | 18 +++++++++--------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/C/iopreds.c b/C/iopreds.c index 50f3fd33c..11dab9074 100755 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -2365,12 +2365,12 @@ p_open (void) if (open_mode == AtomCsult) { if (!find_csult_file (Yap_FileNameBuf, Yap_FileNameBuf2, st, io_mode)) - return (PlIOError (EXISTENCE_ERROR_SOURCE_SINK, ARG1, "open/3")); + return (PlIOError (EXISTENCE_ERROR_SOURCE_SINK, ARG6, "open/3")); strncpy (Yap_FileNameBuf, Yap_FileNameBuf2, YAP_FILENAME_MAX); } else { if (errno == ENOENT) - return (PlIOError(EXISTENCE_ERROR_SOURCE_SINK,ARG1,"open/3")); + return (PlIOError(EXISTENCE_ERROR_SOURCE_SINK,ARG6,"open/3")); else return (PlIOError(PERMISSION_ERROR_OPEN_SOURCE_SINK,file_name,"open/3")); } @@ -6291,7 +6291,7 @@ Yap_InitIOPreds(void) Yap_InitCPred ("$get_byte", 2, p_get_byte, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$access", 1, p_access, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("exists_directory", 1, p_exists_directory, SafePredFlag|SyncPredFlag); - Yap_InitCPred ("$open", 5, p_open, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("$open", 6, p_open, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$file_expansion", 2, p_file_expansion, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$open_null_stream", 1, p_open_null_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$open_pipe_stream", 2, p_open_pipe_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); diff --git a/pl/boot.yap b/pl/boot.yap index db9db8137..0ef157d70 100755 --- a/pl/boot.yap +++ b/pl/boot.yap @@ -1001,7 +1001,7 @@ break :- nb_setval('$lf_verbose', OldSilent). bootstrap(F) :- - '$open'(F,'$csult',Stream,0,0), + '$open'(F, '$csult', Stream, 0, 0, F), '$current_stream'(File,_,Stream), '$start_consult'(consult, File, LC), file_directory_name(File, Dir), @@ -1084,7 +1084,7 @@ access_file(F,Mode) :- set_value(fileerrors,0), system:true_file_name(F, F1), ( - '$open'(F1,Mode,S,0,1) + '$open'(F1, Mode, S, 0, 1, F) -> '$close'(S), set_value(fileerrors,V) diff --git a/pl/consult.yap b/pl/consult.yap index 1769a51d6..43c47ff6c 100644 --- a/pl/consult.yap +++ b/pl/consult.yap @@ -129,7 +129,7 @@ load_files(Files,Opts) :- '$do_lf'(Mod, user_input, InfLevel, CompilationMode,Imports,SkipUnixComments,CompMode,Reconsult,UseModule). '$lf'(X, Mod, Call, InfLevel,_,Changed,CompilationMode,Imports,_,Enc,SkipUnixComments,CompMode,Reconsult,UseModule) :- '$find_in_path'(X, Y, Call), - '$open'(Y, '$csult', Stream, 0, Enc), !, + '$open'(Y, '$csult', Stream, 0, Enc, X), !, '$set_changed_lfmode'(Changed), '$start_lf'(X, Mod, Stream, InfLevel, CompilationMode, Imports, Changed,SkipUnixComments,CompMode,Reconsult,UseModule), '$close'(Stream). @@ -396,7 +396,7 @@ use_module(M,F,Is) :- '$current_module'(Mod), H0 is heapused, '$cputime'(T0,_), '$default_encoding'(Encoding), - ( '$open'(Y,'$csult',Stream,0,Encoding), !, + ( '$open'(Y, '$csult', Stream, 0, Encoding, X), !, print_message(Verbosity, loading(including, Y)), '$loop'(Stream,Status), '$close'(Stream) ; diff --git a/pl/yio.yap b/pl/yio.yap index e6836643d..7791fef85 100644 --- a/pl/yio.yap +++ b/pl/yio.yap @@ -27,7 +27,7 @@ open(File0,Mode,Stream) :- '$default_encoding'(Encoding), '$default_expand'(Expansion), '$expand_filename'(Expansion, File0, File), - '$open'(File,Mode,Stream,16,Encoding). + '$open'(File, Mode, Stream, 16, Encoding, File0). /* meaning of flags for '$write' is 1 quote illegal atoms @@ -63,7 +63,7 @@ open(F,T,S,Opts) :- '$check_io_opts'(Opts,open(F,T,S,Opts)), '$process_open_opts'(Opts, 0, N, Aliases, E, BOM, Expand), '$expand_filename'(Expand, F, NF), - '$open2'(NF, T, S, N, E), + '$open2'(NF, T, S, N, E, F), '$process_bom'(S, BOM), '$process_open_aliases'(Aliases,S). @@ -71,14 +71,14 @@ open(F,T,S,Opts) :- '$expand_filename'(true, F, NF) :- system:true_file_name(F, NF). -'$open2'(Source,M,T,N,_) :- var(Source), !, +'$open2'(Source,M,T,N,_,_) :- var(Source), !, '$do_error'(instantiation_error,open(Source,M,T,N)). -'$open2'(Source,M,T,N,_) :- var(M), !, +'$open2'(Source,M,T,N,_,_) :- var(M), !, '$do_error'(instantiation_error,open(Source,M,T,N)). -'$open2'(Source,M,T,N,_) :- nonvar(T), !, +'$open2'(Source,M,T,N,_,_) :- nonvar(T), !, '$do_error'(type_error(variable,T),open(Source,M,T,N)). -'$open2'(File,Mode,Stream,N,Encoding) :- - '$open'(File,Mode,Stream,N,Encoding). +'$open2'(File, Mode, Stream, N, Encoding, F0) :- + '$open'(File, Mode, Stream, N, Encoding, F0). '$process_bom'(S, BOM) :- var(BOM), !, ( '$has_bom'(S) -> BOM = true ; BOM = false ). @@ -151,8 +151,8 @@ open(F,T,S,Opts) :- '$valid_reperrorhandler'(prolog, 512). '$valid_reperrorhandler'(xml, 1024). -'$valid_expand'(true, true), -'$valid_expand'(false, false), +'$valid_expand'(true, true). +'$valid_expand'(false, false). /* check whether a list of options is valid */ '$check_io_opts'(V,G) :- var(V), !,