From dd2814953c4c47b864180c877fafb4fae31f8d80 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 15 Nov 2011 23:27:58 -0800 Subject: [PATCH] making command-line a parameter, and importing it and exit into (scheme process-context) --- lib/scheme/process-context.sld | 2 +- main.c | 6 ++---- opcodes.c | 1 + 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/scheme/process-context.sld b/lib/scheme/process-context.sld index 7fc5fba8..99711700 100644 --- a/lib/scheme/process-context.sld +++ b/lib/scheme/process-context.sld @@ -1,5 +1,5 @@ (define-library (scheme process-context) - (import (scheme) (srfi 98)) + (import (scheme) (srfi 98) (only (chibi process) exit)) (export get-environment-variable get-environment-variables command-line exit)) diff --git a/main.c b/main.c index 33d9ddfe..dca60d0d 100644 --- a/main.c +++ b/main.c @@ -4,8 +4,7 @@ #include "chibi/eval.h" -#define sexp_argv_symbol "*command-line-arguments*" -#define sexp_argv_proc "(define (command-line-arguments) "sexp_argv_symbol")" +#define sexp_argv_symbol "command-line" #define sexp_import_prefix "(import (" #define sexp_import_suffix "))" @@ -397,8 +396,7 @@ void run_main (int argc, char **argv) { args = sexp_cons(ctx, tmp=sexp_c_string(ctx,argv[j],-1), args); else args = sexp_cons(ctx, tmp=sexp_c_string(ctx,argv[0],-1), args); - sexp_env_define(ctx, env, sexp_intern(ctx, sexp_argv_symbol, -1), args); - sexp_eval_string(ctx, sexp_argv_proc, -1, env); + sexp_set_parameter(ctx, env, sexp_intern(ctx, sexp_argv_symbol, -1), args); if (i < argc) { /* script usage */ sexp_context_tracep(ctx) = 1; check_exception(ctx, sexp_load(ctx, tmp=sexp_c_string(ctx, argv[i], -1), env)); diff --git a/opcodes.c b/opcodes.c index 8b57217a..10d9971e 100644 --- a/opcodes.c +++ b/opcodes.c @@ -25,6 +25,7 @@ _PARAM("current-output-port", _I(SEXP_OPORT)), _PARAM("current-error-port", _I(SEXP_OPORT)), _PARAM("current-exception-handler", _I(SEXP_PROCEDURE)), _PARAM("interaction-environment", _I(SEXP_ENV)), +_PARAM("command-line", SEXP_NULL), _OP(SEXP_OPC_GETTER, SEXP_OP_CAR, 1, 0, _I(SEXP_OBJECT), _I(SEXP_PAIR), SEXP_FALSE, SEXP_FALSE, 0, "car", 0, NULL), _OP(SEXP_OPC_SETTER, SEXP_OP_SET_CAR, 2, 0, SEXP_VOID, _I(SEXP_PAIR), _I(SEXP_OBJECT), SEXP_FALSE, 0, "set-car!", 0, NULL), _OP(SEXP_OPC_GETTER, SEXP_OP_CDR, 1, 0, _I(SEXP_OBJECT), _I(SEXP_PAIR), SEXP_FALSE, SEXP_FALSE, 0, "cdr", 0, NULL),