diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-07-21 06:55:45 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-07-21 06:55:45 -0700 |
commit | 16ea370778dcd9943fb11767992aebf6263acfd4 (patch) | |
tree | 02f66ea406e46eb7571a27ab6a4b3510d24fe05f /stream.c | |
parent | 5613a3b0d42a89d061df18cd9ae4e1008696572c (diff) | |
download | txr-16ea370778dcd9943fb11767992aebf6263acfd4.tar.gz txr-16ea370778dcd9943fb11767992aebf6263acfd4.tar.bz2 txr-16ea370778dcd9943fb11767992aebf6263acfd4.zip |
compat: fix glaringly broken init-time handling.
We are doing numerous compat_ver checks in various init
functions, to enact alternative symbol registrations. Only
problem is, compat_ver is always zero during initialization;
it is not set until the -C option is processed in txr_main.
Registrations must be fixed up after initialization;
that's what the compat_fixup mechanism is for.
This is an long-standing problem which affects compatibility
operation going back over 150 versions.
* arith.c (arith_init): Move compat logic to
arith_compat_fixup.
(arith_compat_fixup): New function.
* arith.h (arith_compat_fixup): Declared.
* eval.c (eval_init): Move compat logic to eval_compat_fixup.
* ffi.c (ffi_init): Move compat logic to ffi_compat_fixup.
(ffi_compat_fixup): New function.
* ffi.h (ffi_compat_fixup): Declared.
* regex.c (regex_init): Move compat logic to
regex_compat_fixup.
(regex_compat_fixup): New function.
* regex.h (regex_compat_fixup): Declared.
* stream.c (stream_init): Move compat logic to
stream_compat_fixup.
(stream_compat_fixup): New function.
* stream.h (stream_compat_fixup): Declared.
* struct.c (struct_init): Move compat logic to
struct_compat_fixup.
(struct_compat_fixup): New function.
* struct.h (stream_compat_fixup): Declared.
* lib.c (compat_fixup): Call arith_compat_fixup,
ffi_compat_fixup, regex_compat_fixup, stream_compat_fixup and
struct_compat_fixup.
Diffstat (limited to 'stream.c')
-rw-r--r-- | stream.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -5521,9 +5521,7 @@ void stream_init(void) reg_fun(intern(lit("open-files"), user_package), func_n3o(open_files, 1)); reg_fun(intern(lit("open-files*"), user_package), func_n3o(open_files_star, 1)); reg_fun(intern(lit("portable-abs-path-p"), user_package), func_n1(portable_abs_path_p)); - reg_fun(intern(lit("abs-path-p"), user_package), - func_n1(if3(opt_compat && opt_compat <= 258, - portable_abs_path_p, abs_path_p))); + reg_fun(intern(lit("abs-path-p"), user_package), func_n1(abs_path_p)); reg_fun(intern(lit("pure-rel-path-p"), user_package), func_n1(pure_rel_path_p)); reg_fun(intern(lit("base-name"), user_package), func_n2o(base_name, 1)); reg_fun(intern(lit("dir-name"), user_package), func_n1(dir_name)); @@ -5604,3 +5602,10 @@ void stream_init(void) } #endif } + +void stream_compat_fixup(int compat_ver) +{ + if (compat_ver <= 258) + reg_fun(intern(lit("abs-path-p"), user_package), + func_n1(portable_abs_path_p)); +} |