mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-06-21 21:36:38 +02:00
Adding "-x module" option for alternate languages which currently just does an import-only.
This commit is contained in:
parent
bd4a8f7488
commit
370d990df5
1 changed files with 16 additions and 9 deletions
25
main.c
25
main.c
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
#define sexp_import_prefix "(import ("
|
#define sexp_import_prefix "(import ("
|
||||||
#define sexp_import_suffix "))"
|
#define sexp_import_suffix "))"
|
||||||
|
#define sexp_environment_prefix "(environment '("
|
||||||
|
#define sexp_environment_suffix "))"
|
||||||
|
|
||||||
#define sexp_version_string "chibi-scheme "sexp_version" \""sexp_release_name"\" "
|
#define sexp_version_string "chibi-scheme "sexp_version" \""sexp_release_name"\" "
|
||||||
|
|
||||||
|
@ -253,16 +255,16 @@ static void do_init_context (sexp* ctx, sexp* env, sexp_uint_t heap_size,
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
void run_main (int argc, char **argv) {
|
void run_main (int argc, char **argv) {
|
||||||
char *arg, *impmod, *p;
|
char *arg, *impmod, *p, *prefix, *suffix;
|
||||||
sexp out=SEXP_FALSE, env=NULL, ctx=NULL;
|
sexp out=SEXP_FALSE, env=NULL, ctx=NULL;
|
||||||
sexp_sint_t i, j, len, quit=0, print=0, init_loaded=0, fold_case=SEXP_DEFAULT_FOLD_CASE_SYMS;
|
sexp_sint_t i, j, c, len, quit=0, print=0, init_loaded=0, fold_case=SEXP_DEFAULT_FOLD_CASE_SYMS;
|
||||||
sexp_uint_t heap_size=0, heap_max_size=SEXP_MAXIMUM_HEAP_SIZE;
|
sexp_uint_t heap_size=0, heap_max_size=SEXP_MAXIMUM_HEAP_SIZE;
|
||||||
sexp_gc_var2(tmp, args);
|
sexp_gc_var2(tmp, args);
|
||||||
args = SEXP_NULL;
|
args = SEXP_NULL;
|
||||||
|
|
||||||
/* parse options */
|
/* parse options */
|
||||||
for (i=1; i < argc && argv[i][0] == '-'; i++) {
|
for (i=1; i < argc && argv[i][0] == '-'; i++) {
|
||||||
switch (argv[i][1]) {
|
switch ((c=argv[i][1])) {
|
||||||
case 'e':
|
case 'e':
|
||||||
case 'p':
|
case 'p':
|
||||||
load_init();
|
load_init();
|
||||||
|
@ -284,20 +286,25 @@ void run_main (int argc, char **argv) {
|
||||||
check_nonull_arg('l', arg);
|
check_nonull_arg('l', arg);
|
||||||
check_exception(ctx, sexp_load_module_file(ctx, arg, env));
|
check_exception(ctx, sexp_load_module_file(ctx, arg, env));
|
||||||
break;
|
break;
|
||||||
|
case 'x':
|
||||||
|
prefix = sexp_environment_prefix;
|
||||||
|
suffix = sexp_environment_suffix;
|
||||||
case 'm':
|
case 'm':
|
||||||
|
if (c != 'x') {prefix = sexp_import_prefix; suffix = sexp_import_suffix;}
|
||||||
load_init();
|
load_init();
|
||||||
arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
|
arg = ((argv[i][2] == '\0') ? argv[++i] : argv[i]+2);
|
||||||
check_nonull_arg('m', arg);
|
check_nonull_arg(c, arg);
|
||||||
len = strlen(arg)+strlen(sexp_import_prefix)+strlen(sexp_import_suffix);
|
len = strlen(arg)+strlen(prefix)+strlen(suffix);
|
||||||
impmod = (char*) malloc(len+1);
|
impmod = (char*) malloc(len+1);
|
||||||
strcpy(impmod, sexp_import_prefix);
|
strcpy(impmod, prefix);
|
||||||
strcpy(impmod+strlen(sexp_import_prefix), arg);
|
strcpy(impmod+strlen(prefix), arg);
|
||||||
strcpy(impmod+len-+strlen(sexp_import_suffix), sexp_import_suffix);
|
strcpy(impmod+len-+strlen(suffix), suffix);
|
||||||
impmod[len] = '\0';
|
impmod[len] = '\0';
|
||||||
for (p=impmod; *p; p++)
|
for (p=impmod; *p; p++)
|
||||||
if (*p == '.') *p=' ';
|
if (*p == '.') *p=' ';
|
||||||
check_exception(ctx, sexp_eval_string(ctx, impmod, -1, env));
|
tmp = check_exception(ctx, sexp_eval_string(ctx, impmod, -1, (c=='x' ? sexp_global(ctx, SEXP_G_META_ENV) : env)));
|
||||||
free(impmod);
|
free(impmod);
|
||||||
|
if (c == 'x') sexp_context_env(ctx) = env = tmp;
|
||||||
break;
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
init_context();
|
init_context();
|
||||||
|
|
Loading…
Add table
Reference in a new issue