* Made (planet "path") work like (planet path), except that the former
can have an extension (so it's more like the (lib ...) form now.) (Note: I assume that the one-before-last argument in return ok_path_string(a, 0, 0, 1, 1) is what makes it not reject a suffix) * Documented the new form * Made the `-p' flag get a new-style planet path, and have it work the same as `-l' (not constructing an `eval') * BTW, renamed `mzcmd_REQUIRE' to `mzcmd_REQUIRE_FILE', and changed "missing file after" error message in `-l' to "missing library name after" svn: r9171
This commit is contained in:
parent
5ae133c211
commit
5efae47be8
|
@ -24,8 +24,8 @@
|
||||||
(make-request (pkg-spec->full-pkg-spec pkg-spec stx)
|
(make-request (pkg-spec->full-pkg-spec pkg-spec stx)
|
||||||
file-name
|
file-name
|
||||||
path)]
|
path)]
|
||||||
[((? symbol? s))
|
[((? (lambda (x) (or (symbol? x) (string? x))) s))
|
||||||
(let ([str (symbol->string s)])
|
(let ([str (if (symbol? s) (symbol->string s) s)])
|
||||||
(define (yell msg) (λ (str) (raise-syntax-error #f (format msg str) stx)))
|
(define (yell msg) (λ (str) (raise-syntax-error #f (format msg str) stx)))
|
||||||
(try-parsing str
|
(try-parsing str
|
||||||
([owner (get-next-slash #:on-error (yell "Illegal syntax; expected an owner, received ~e"))]
|
([owner (get-next-slash #:on-error (yell "Illegal syntax; expected an owner, received ~e"))]
|
||||||
|
|
|
@ -111,7 +111,7 @@ The @scheme[id] encodes several pieces of information separated by a
|
||||||
version information, and an optional path to a specific library with
|
version information, and an optional path to a specific library with
|
||||||
the package. Like @scheme[id] as shorthand for a @scheme[lib] path, a
|
the package. Like @scheme[id] as shorthand for a @scheme[lib] path, a
|
||||||
@filepath{.ss} suffix is added automatically, and @schemeidfont{/main}
|
@filepath{.ss} suffix is added automatically, and @schemeidfont{/main}
|
||||||
is used as the path if none is supplied.
|
is used as the path if no sub-path element is supplied.
|
||||||
|
|
||||||
@examples[
|
@examples[
|
||||||
(eval:alts
|
(eval:alts
|
||||||
|
@ -126,6 +126,15 @@ is used as the path if none is supplied.
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
@specsubform[#:literals (planet)
|
||||||
|
(planet package-string)]{
|
||||||
|
|
||||||
|
Like the symbol form of a @scheme[planet], but using a string instead
|
||||||
|
of an identifier. Also, the @scheme[package-string] can end with a
|
||||||
|
file suffix, in case the relevant suffix is not @filepath{.ss}.
|
||||||
|
}
|
||||||
|
|
||||||
@; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
@; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@specsubform/subs[#:literals (planet = + -)
|
@specsubform/subs[#:literals (planet = + -)
|
||||||
(planet rel-string (user-string pkg-string vers ...))
|
(planet rel-string (user-string pkg-string vers ...))
|
||||||
|
|
|
@ -126,32 +126,6 @@ static char *protect_quote_backslash(const char *file)
|
||||||
return (char *)file;
|
return (char *)file;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *make_require_planet(const char *file, const char *file_sfx,
|
|
||||||
const char *user,
|
|
||||||
const char *pkg, char *pkg_sfx)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
|
|
||||||
pkg = protect_quote_backslash(pkg);
|
|
||||||
user = protect_quote_backslash(user);
|
|
||||||
|
|
||||||
s = (char *)malloc(strlen(file)
|
|
||||||
+ strlen(file_sfx)
|
|
||||||
+ strlen(user)
|
|
||||||
+ strlen(pkg)
|
|
||||||
+ strlen(pkg_sfx) + 46);
|
|
||||||
strcpy(s, "(require (planet \"");
|
|
||||||
strcat(s, file);
|
|
||||||
strcat(s, file_sfx);
|
|
||||||
strcat(s, "\" (\"");
|
|
||||||
strcat(s, user);
|
|
||||||
strcat(s, "\" \"");
|
|
||||||
strcat(s, pkg);
|
|
||||||
strcat(s, pkg_sfx);
|
|
||||||
strcat(s, "\")))");
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *make_embedded_load(const char *start, const char *end)
|
static char *make_embedded_load(const char *start, const char *end)
|
||||||
{
|
{
|
||||||
char *s;
|
char *s;
|
||||||
|
@ -171,9 +145,10 @@ static char *make_embedded_load(const char *start, const char *end)
|
||||||
#define mzcmd_EVAL 0
|
#define mzcmd_EVAL 0
|
||||||
#define mzcmd_LOAD 1
|
#define mzcmd_LOAD 1
|
||||||
#define mzcmd_MAIN 2
|
#define mzcmd_MAIN 2
|
||||||
#define mzcmd_REQUIRE 3
|
#define mzcmd_REQUIRE_FILE 3
|
||||||
#define mzcmd_REQUIRE_LIB 4
|
#define mzcmd_REQUIRE_LIB 4
|
||||||
#define mzcmd_EMBEDDED 5
|
#define mzcmd_REQUIRE_PLANET 5
|
||||||
|
#define mzcmd_EMBEDDED 6
|
||||||
|
|
||||||
/* To avoid having to create a specific mark procedure for
|
/* To avoid having to create a specific mark procedure for
|
||||||
prcise GC, split argument information into purely atomic
|
prcise GC, split argument information into purely atomic
|
||||||
|
@ -250,8 +225,9 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} else if ((fa->eval_kind[i] == mzcmd_EVAL)
|
} else if ((fa->eval_kind[i] == mzcmd_EVAL)
|
||||||
|| (fa->eval_kind[i] == mzcmd_REQUIRE)
|
|| (fa->eval_kind[i] == mzcmd_REQUIRE_FILE)
|
||||||
|| (fa->eval_kind[i] == mzcmd_REQUIRE_LIB)
|
|| (fa->eval_kind[i] == mzcmd_REQUIRE_LIB)
|
||||||
|
|| (fa->eval_kind[i] == mzcmd_REQUIRE_PLANET)
|
||||||
|| (fa->eval_kind[i] == mzcmd_EMBEDDED)) {
|
|| (fa->eval_kind[i] == mzcmd_EMBEDDED)) {
|
||||||
Scheme_Thread * volatile p;
|
Scheme_Thread * volatile p;
|
||||||
p = scheme_get_current_thread();
|
p = scheme_get_current_thread();
|
||||||
|
@ -272,16 +248,18 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl)
|
||||||
scheme_apply(eload, 3, a);
|
scheme_apply(eload, 3, a);
|
||||||
} else {
|
} else {
|
||||||
Scheme_Object *a[1], *nsreq;
|
Scheme_Object *a[1], *nsreq;
|
||||||
|
char *name;
|
||||||
nsreq = scheme_builtin_value("namespace-require");
|
nsreq = scheme_builtin_value("namespace-require");
|
||||||
if (fa->eval_kind[i] == mzcmd_REQUIRE_LIB) {
|
if (fa->eval_kind[i] == mzcmd_REQUIRE_LIB) {
|
||||||
a[0] = scheme_make_pair(scheme_intern_symbol("lib"),
|
name = "lib";
|
||||||
scheme_make_pair(scheme_make_utf8_string(fa->evals_and_loads[i]),
|
} else if (fa->eval_kind[i] == mzcmd_REQUIRE_PLANET) {
|
||||||
scheme_make_null()));
|
name = "planet";
|
||||||
} else {
|
} else {
|
||||||
a[0] = scheme_make_pair(scheme_intern_symbol("file"),
|
name = "file";
|
||||||
scheme_make_pair(scheme_make_utf8_string(fa->evals_and_loads[i]),
|
|
||||||
scheme_make_null()));
|
|
||||||
}
|
}
|
||||||
|
a[0] = scheme_make_pair(scheme_intern_symbol(name),
|
||||||
|
scheme_make_pair(scheme_make_utf8_string(fa->evals_and_loads[i]),
|
||||||
|
scheme_make_null()));
|
||||||
scheme_apply(nsreq, 1, a);
|
scheme_apply(nsreq, 1, a);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -795,13 +773,13 @@ static int run_from_cmd_line(int argc, char *_argv[],
|
||||||
argv++;
|
argv++;
|
||||||
--argc;
|
--argc;
|
||||||
evals_and_loads[num_enl] = argv[0];
|
evals_and_loads[num_enl] = argv[0];
|
||||||
eval_kind[num_enl++] = mzcmd_REQUIRE;
|
eval_kind[num_enl++] = mzcmd_REQUIRE_FILE;
|
||||||
if (!init_ns)
|
if (!init_ns)
|
||||||
no_init_ns = 1;
|
no_init_ns = 1;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
if (argc < 2) {
|
if (argc < 2) {
|
||||||
PRINTF("%s: missing file after %s switch\n",
|
PRINTF("%s: missing library name after %s switch\n",
|
||||||
prog, real_switch);
|
prog, real_switch);
|
||||||
goto show_need_help;
|
goto show_need_help;
|
||||||
}
|
}
|
||||||
|
@ -813,24 +791,15 @@ static int run_from_cmd_line(int argc, char *_argv[],
|
||||||
no_init_ns = 1;
|
no_init_ns = 1;
|
||||||
break;
|
break;
|
||||||
case 'p':
|
case 'p':
|
||||||
if (argc < 4) {
|
if (argc < 2) {
|
||||||
PRINTF("%s: missing %s after %s switch\n",
|
PRINTF("%s: missing package name after %s switch\n",
|
||||||
prog,
|
prog, real_switch);
|
||||||
((argc > 2)
|
|
||||||
? "package"
|
|
||||||
: ((argc > 1)
|
|
||||||
? "user and package"
|
|
||||||
: "file, user, and package")),
|
|
||||||
real_switch);
|
|
||||||
goto show_need_help;
|
goto show_need_help;
|
||||||
}
|
}
|
||||||
argv++;
|
argv++;
|
||||||
--argc;
|
--argc;
|
||||||
se = make_require_planet(argv[0], "", argv[1], argv[2], "");
|
evals_and_loads[num_enl] = argv[0];
|
||||||
evals_and_loads[num_enl] = se;
|
eval_kind[num_enl++] = mzcmd_REQUIRE_PLANET;
|
||||||
argv += 2;
|
|
||||||
argc -= 2;
|
|
||||||
eval_kind[num_enl++] = mzcmd_EVAL;
|
|
||||||
if (!init_ns)
|
if (!init_ns)
|
||||||
no_init_ns = 1;
|
no_init_ns = 1;
|
||||||
break;
|
break;
|
||||||
|
@ -940,7 +909,7 @@ static int run_from_cmd_line(int argc, char *_argv[],
|
||||||
no_more_switches = 1;
|
no_more_switches = 1;
|
||||||
sprog = argv[0];
|
sprog = argv[0];
|
||||||
evals_and_loads[num_enl] = argv[0];
|
evals_and_loads[num_enl] = argv[0];
|
||||||
eval_kind[num_enl++] = mzcmd_REQUIRE;
|
eval_kind[num_enl++] = mzcmd_REQUIRE_FILE;
|
||||||
argv++;
|
argv++;
|
||||||
--argc;
|
--argc;
|
||||||
}
|
}
|
||||||
|
@ -1094,7 +1063,7 @@ static int run_from_cmd_line(int argc, char *_argv[],
|
||||||
" -f <file>, --load <file> : Like -e '(load \"<file>\")' without printing\n"
|
" -f <file>, --load <file> : Like -e '(load \"<file>\")' without printing\n"
|
||||||
" -t <file>, --require <file> : Like -e '(require (file \"<file>\"))'\n"
|
" -t <file>, --require <file> : Like -e '(require (file \"<file>\"))'\n"
|
||||||
" -l <path>, --lib <path> : Like -e '(require (lib \"<path>\"))'\n"
|
" -l <path>, --lib <path> : Like -e '(require (lib \"<path>\"))'\n"
|
||||||
" -p <fl> <u> <pkg> : Like -e '(require (planet \"<fl>\" (\"<u>\" \"<pkg>\"))'\n"
|
" -p <package> : Like -e '(require (planet \"<package>\")'\n"
|
||||||
" -r <file>, --script <file> : Same as -f <file> -N <file> --\n"
|
" -r <file>, --script <file> : Same as -f <file> -N <file> --\n"
|
||||||
" -u <file>, --require-script <file> : Same as -t <file> -N <file> --\n"
|
" -u <file>, --require-script <file> : Same as -t <file> -N <file> --\n"
|
||||||
" -k <n> <m> : Load executable-embedded code from file offset <n> to <m>\n"
|
" -k <n> <m> : Load executable-embedded code from file offset <n> to <m>\n"
|
||||||
|
|
|
@ -1880,7 +1880,7 @@ int scheme_is_module_path(Scheme_Object *obj)
|
||||||
len = scheme_proper_list_length(obj);
|
len = scheme_proper_list_length(obj);
|
||||||
|
|
||||||
if (len == 2) {
|
if (len == 2) {
|
||||||
/* Symbolic shorthand? */
|
/* Symbolic or string shorthand? */
|
||||||
obj = SCHEME_CDR(obj);
|
obj = SCHEME_CDR(obj);
|
||||||
a = SCHEME_CAR(obj);
|
a = SCHEME_CAR(obj);
|
||||||
if (SCHEME_SYMBOLP(a)) {
|
if (SCHEME_SYMBOLP(a)) {
|
||||||
|
@ -1888,6 +1888,8 @@ int scheme_is_module_path(Scheme_Object *obj)
|
||||||
SCHEME_SYMSTR_OFFSET(a),
|
SCHEME_SYMSTR_OFFSET(a),
|
||||||
SCHEME_SYM_LEN(a));
|
SCHEME_SYM_LEN(a));
|
||||||
return ok_path_string(obj, 0, 0, 0, 1);
|
return ok_path_string(obj, 0, 0, 0, 1);
|
||||||
|
} else if (SCHEME_CHAR_STRINGP(a)) {
|
||||||
|
return ok_path_string(a, 0, 0, 1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user