mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-18 17:50:29 +02:00
(sym_at, sym_atat, sym_main, all_symbols): New.
(scm_compile_shell_switches): Use them to recognize and convert 1.4 "-e" syntax.
This commit is contained in:
parent
488afc5219
commit
39e707a130
1 changed files with 37 additions and 1 deletions
|
@ -399,6 +399,9 @@ SCM_SYMBOL (sym_use_srfis, "use-srfis");
|
||||||
SCM_SYMBOL (sym_load_path, "%load-path");
|
SCM_SYMBOL (sym_load_path, "%load-path");
|
||||||
SCM_SYMBOL (sym_set_x, "set!");
|
SCM_SYMBOL (sym_set_x, "set!");
|
||||||
SCM_SYMBOL (sym_cons, "cons");
|
SCM_SYMBOL (sym_cons, "cons");
|
||||||
|
SCM_SYMBOL (sym_at, "@");
|
||||||
|
SCM_SYMBOL (sym_atat, "@@");
|
||||||
|
SCM_SYMBOL (sym_main, "main");
|
||||||
|
|
||||||
/* Given an array of command-line switches, return a Scheme expression
|
/* Given an array of command-line switches, return a Scheme expression
|
||||||
to carry out the actions specified by the switches.
|
to carry out the actions specified by the switches.
|
||||||
|
@ -411,6 +414,18 @@ SCM_SYMBOL (sym_cons, "cons");
|
||||||
|
|
||||||
static char guile[] = "guile";
|
static char guile[] = "guile";
|
||||||
|
|
||||||
|
static int
|
||||||
|
all_symbols (SCM list)
|
||||||
|
{
|
||||||
|
while (scm_is_pair (list))
|
||||||
|
{
|
||||||
|
if (!scm_is_symbol (SCM_CAR (list)))
|
||||||
|
return 0;
|
||||||
|
list = SCM_CDR (list);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
SCM
|
SCM
|
||||||
scm_compile_shell_switches (int argc, char **argv)
|
scm_compile_shell_switches (int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -517,9 +532,30 @@ scm_compile_shell_switches (int argc, char **argv)
|
||||||
else if (! strcmp (argv[i], "-e")) /* entry point */
|
else if (! strcmp (argv[i], "-e")) /* entry point */
|
||||||
{
|
{
|
||||||
if (++i < argc)
|
if (++i < argc)
|
||||||
entry_point = scm_c_read_string (argv[i]);
|
{
|
||||||
|
SCM port
|
||||||
|
= scm_open_input_string (scm_from_locale_string (argv[i]));
|
||||||
|
SCM arg1 = scm_read (port);
|
||||||
|
SCM arg2 = scm_read (port);
|
||||||
|
|
||||||
|
/* Recognize syntax of certain versions of Guile 1.4 and
|
||||||
|
transform to (@ MODULE-NAME FUNC).
|
||||||
|
*/
|
||||||
|
if (scm_is_false (scm_eof_object_p (arg2)))
|
||||||
|
entry_point = scm_list_3 (sym_at, arg1, arg2);
|
||||||
|
else if (scm_is_pair (arg1)
|
||||||
|
&& !(scm_is_eq (SCM_CAR (arg1), sym_at)
|
||||||
|
|| scm_is_eq (SCM_CAR (arg1), sym_atat))
|
||||||
|
&& all_symbols (arg1))
|
||||||
|
entry_point = scm_list_3 (sym_at, arg1, sym_main);
|
||||||
|
else
|
||||||
|
entry_point = arg1;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
scm_shell_usage (1, "missing argument to `-e' switch");
|
scm_shell_usage (1, "missing argument to `-e' switch");
|
||||||
|
|
||||||
|
scm_display (entry_point, SCM_UNDEFINED);
|
||||||
|
scm_newline (SCM_UNDEFINED);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (! strcmp (argv[i], "-ds")) /* do script here */
|
else if (! strcmp (argv[i], "-ds")) /* do script here */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue