- supplying <init-files> for --r6rs-script or --script now raises an
error (as suggested by Derick Eddington). - The -h or [-b <bootfile>] options must now come first, so, the rest of the command-line arguments are not scanned: only the first one or two. The docs (in ikarus -h) already suggested the correct invocation arguments, so, this conforms to the previously documented behavior.
This commit is contained in:
parent
c464e8ebce
commit
8cd9d6ef16
|
@ -115,12 +115,19 @@
|
|||
[else
|
||||
(let-values ([(f* script script-type a*) (f (cdr args))])
|
||||
(values (cons (car args) f*) script script-type a*))]))])
|
||||
(define (assert-null files who)
|
||||
(unless (null? files)
|
||||
(apply die 'ikarus
|
||||
(format "load files not allowed for ~a" who)
|
||||
files)))
|
||||
(cond
|
||||
[(eq? script-type 'r6rs-script)
|
||||
(assert-null files "--r6rs-script")
|
||||
(command-line-arguments (cons script args))
|
||||
(load-r6rs-top-level script 'run)
|
||||
(exit 0)]
|
||||
[(eq? script-type 'compile)
|
||||
(assert-null files "--compile-dependencies")
|
||||
(command-line-arguments (cons script args))
|
||||
(load-r6rs-top-level script 'compile)
|
||||
(exit 0)]
|
||||
|
|
|
@ -1 +1 @@
|
|||
1635
|
||||
1636
|
||||
|
|
69
src/ikarus.c
69
src/ikarus.c
|
@ -53,70 +53,21 @@ Options for running ikarus scheme:\n\
|
|||
fprintf(stderr, helpstring, BOOTFILE);
|
||||
}
|
||||
|
||||
|
||||
/* get_option
|
||||
|
||||
takes pointers to argc and argv and looks for the first
|
||||
option matching opt. If one exists, it removes it from the argv
|
||||
list, updates argc, and returns a pointer to the option value.
|
||||
returns null if option is not found.
|
||||
*/
|
||||
char*
|
||||
get_option(char* opt, int argc, char** argv){
|
||||
int i;
|
||||
for(i=1; i<argc; i++){
|
||||
if(strcmp(opt, argv[i]) == 0){
|
||||
if((i+1) < argc){
|
||||
char* rv = argv[i+1];
|
||||
int j;
|
||||
for(j=i+2; j<argc; j++, i++){
|
||||
argv[i] = argv[j];
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
else {
|
||||
fprintf(stderr,
|
||||
"ikarus error: option %s requires a value, none provided\n",
|
||||
opt);
|
||||
ikarus_usage_short();
|
||||
exit(-1);
|
||||
}
|
||||
}
|
||||
else if(strcmp("--", argv[i]) == 0){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
get_option0(char* opt, int argc, char** argv){
|
||||
int i;
|
||||
for(i=1; i<argc; i++){
|
||||
if(strcmp(opt, argv[i]) == 0){
|
||||
int j;
|
||||
for(j=i+1; j<argc; j++, i++){
|
||||
argv[i] = argv[j];
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
else if(strcmp("--", argv[i]) == 0){
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int argc, char** argv){
|
||||
if(get_option0("-h", argc, argv)){
|
||||
char* boot_file = BOOTFILE;
|
||||
if (((argc >= 2) && (strcmp(argv[1], "-h") == 0)) ||
|
||||
((argc == 2) && (strcmp(argv[1], "-b") == 0))) {
|
||||
ikarus_usage();
|
||||
exit(0);
|
||||
}
|
||||
char* boot_file = get_option("-b", argc, argv);
|
||||
if(boot_file){
|
||||
|
||||
if ((argc >= 3) && (strcmp(argv[1], "-b") == 0)){
|
||||
boot_file = argv[2];
|
||||
int i;
|
||||
for(i=3; i<=argc; i++){
|
||||
argv[i-2] = argv[i];
|
||||
}
|
||||
argc -= 2;
|
||||
} else {
|
||||
boot_file = BOOTFILE;
|
||||
}
|
||||
return ikarus_main(argc, argv, boot_file);
|
||||
}
|
||||
|
|
|
@ -49,7 +49,6 @@ int main(int argc, char** argv){
|
|||
char** args = calloc(sizeof(char*), argc+1);
|
||||
args[0] = argv[0];
|
||||
args[1] = "--r6rs-script";
|
||||
args[2] = argv[1];
|
||||
int i;
|
||||
for(i=1; i<argc; i++){
|
||||
args[i+1] = argv[i];
|
||||
|
|
Loading…
Reference in New Issue