parent
							
								
									8f93c9dfc6
								
							
						
					
					
						commit
						a9b0f7879b
					
				| 
						 | 
					@ -94,17 +94,6 @@ static value_t fl_intern(value_t *args, u_int32_t nargs)
 | 
				
			||||||
    return symbol(cvalue_data(args[0]));
 | 
					    return symbol(cvalue_data(args[0]));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static value_t fl_setconstant(value_t *args, u_int32_t nargs)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    argcount("set-constant!", nargs, 2);
 | 
					 | 
				
			||||||
    symbol_t *sym = tosymbol(args[0], "set-constant!");
 | 
					 | 
				
			||||||
    if (isconstant(args[0]) || sym->binding != UNBOUND)
 | 
					 | 
				
			||||||
        lerror(ArgError, "set-constant!: cannot redefine %s",
 | 
					 | 
				
			||||||
               symbol_name(args[0]));
 | 
					 | 
				
			||||||
    setc(args[0], args[1]);
 | 
					 | 
				
			||||||
    return args[1];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
extern value_t LAMBDA;
 | 
					extern value_t LAMBDA;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static value_t fl_setsyntax(value_t *args, u_int32_t nargs)
 | 
					static value_t fl_setsyntax(value_t *args, u_int32_t nargs)
 | 
				
			||||||
| 
						 | 
					@ -137,46 +126,28 @@ static value_t fl_symbolsyntax(value_t *args, u_int32_t nargs)
 | 
				
			||||||
    return sym->syntax;
 | 
					    return sym->syntax;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void syntax_env_assoc_list(symbol_t *root, value_t *pv)
 | 
					static void global_env_list(symbol_t *root, value_t *pv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    while (root != NULL) {
 | 
					    while (root != NULL) {
 | 
				
			||||||
        if (root->syntax && root->syntax != TAG_CONST &&
 | 
					        if (root->name[0] != ':' &&
 | 
				
			||||||
            !isspecial(root->syntax)) {
 | 
					            (root->binding != UNBOUND ||
 | 
				
			||||||
            PUSH(fl_cons(tagptr(root,TAG_SYM), root->syntax));
 | 
					             (root->syntax && root->syntax != TAG_CONST &&
 | 
				
			||||||
            *pv = fl_cons(POP(), *pv);
 | 
					              !isspecial(root->syntax)))) {
 | 
				
			||||||
 | 
					            *pv = fl_cons(tagptr(root,TAG_SYM), *pv);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        syntax_env_assoc_list(root->left, pv);
 | 
					        global_env_list(root->left, pv);
 | 
				
			||||||
        root = root->right;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
static void global_env_assoc_list(symbol_t *root, value_t *pv)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    while (root != NULL) {
 | 
					 | 
				
			||||||
        if (root->binding != UNBOUND) {
 | 
					 | 
				
			||||||
            PUSH(fl_cons(tagptr(root,TAG_SYM), root->binding));
 | 
					 | 
				
			||||||
            *pv = fl_cons(POP(), *pv);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        global_env_assoc_list(root->left, pv);
 | 
					 | 
				
			||||||
        root = root->right;
 | 
					        root = root->right;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern symbol_t *symtab;
 | 
					extern symbol_t *symtab;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static value_t fl_syntax_env(value_t *args, u_int32_t nargs)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    (void)args;
 | 
					 | 
				
			||||||
    argcount("syntax-environment", nargs, 0);
 | 
					 | 
				
			||||||
    PUSH(NIL);
 | 
					 | 
				
			||||||
    syntax_env_assoc_list(symtab, &Stack[SP-1]);
 | 
					 | 
				
			||||||
    return POP();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
value_t fl_global_env(value_t *args, u_int32_t nargs)
 | 
					value_t fl_global_env(value_t *args, u_int32_t nargs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    (void)args;
 | 
					    (void)args;
 | 
				
			||||||
    argcount("environment", nargs, 0);
 | 
					    argcount("environment", nargs, 0);
 | 
				
			||||||
    PUSH(NIL);
 | 
					    PUSH(NIL);
 | 
				
			||||||
    global_env_assoc_list(symtab, &Stack[SP-1]);
 | 
					    global_env_list(symtab, &Stack[SP-1]);
 | 
				
			||||||
    return POP();
 | 
					    return POP();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -234,16 +205,7 @@ static value_t fl_fixnum(value_t *args, u_int32_t nargs)
 | 
				
			||||||
        cprim_t *cp = (cprim_t*)ptr(args[0]);
 | 
					        cprim_t *cp = (cprim_t*)ptr(args[0]);
 | 
				
			||||||
        return fixnum(conv_to_long(cp_data(cp), cp_numtype(cp)));
 | 
					        return fixnum(conv_to_long(cp_data(cp), cp_numtype(cp)));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    else if (isstring(args[0])) {
 | 
					    type_error("fixnum", "number", args[0]);
 | 
				
			||||||
        cvalue_t *cv = (cvalue_t*)ptr(args[0]);
 | 
					 | 
				
			||||||
        char *pend;
 | 
					 | 
				
			||||||
        errno = 0;
 | 
					 | 
				
			||||||
        long i = strtol(cv_data(cv), &pend, 0);
 | 
					 | 
				
			||||||
        if (*pend != '\0' || errno!=0)
 | 
					 | 
				
			||||||
            lerror(ArgError, "fixnum: invalid string");
 | 
					 | 
				
			||||||
        return fixnum(i);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    lerror(ArgError, "fixnum: cannot convert argument");
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static value_t fl_truncate(value_t *args, u_int32_t nargs)
 | 
					static value_t fl_truncate(value_t *args, u_int32_t nargs)
 | 
				
			||||||
| 
						 | 
					@ -405,10 +367,8 @@ extern void table_init();
 | 
				
			||||||
extern void iostream_init();
 | 
					extern void iostream_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static builtinspec_t builtin_info[] = {
 | 
					static builtinspec_t builtin_info[] = {
 | 
				
			||||||
    { "set-constant!", fl_setconstant },
 | 
					 | 
				
			||||||
    { "set-syntax!", fl_setsyntax },
 | 
					    { "set-syntax!", fl_setsyntax },
 | 
				
			||||||
    { "symbol-syntax", fl_symbolsyntax },
 | 
					    { "symbol-syntax", fl_symbolsyntax },
 | 
				
			||||||
    { "syntax-environment", fl_syntax_env },
 | 
					 | 
				
			||||||
    { "environment", fl_global_env },
 | 
					    { "environment", fl_global_env },
 | 
				
			||||||
    { "constant?", fl_constantp },
 | 
					    { "constant?", fl_constantp },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1522,6 +1522,8 @@ static void lisp_init(void)
 | 
				
			||||||
    for (; i < F_TRUE; i++) {
 | 
					    for (; i < F_TRUE; i++) {
 | 
				
			||||||
        setc(symbol(builtin_names[i]), builtin(i));
 | 
					        setc(symbol(builtin_names[i]), builtin(i));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    setc(symbol("eq"), builtin(F_EQ));
 | 
				
			||||||
 | 
					    setc(symbol("equal"), builtin(F_EQUAL));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef LINUX
 | 
					#ifdef LINUX
 | 
				
			||||||
    set(symbol("*os-name*"), symbol("linux"));
 | 
					    set(symbol("*os-name*"), symbol("linux"));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,11 @@
 | 
				
			||||||
macroexpand
 | 
					macroexpand
 | 
				
			||||||
append
 | 
					append
 | 
				
			||||||
bq-process
 | 
					bq-process
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(define (syntax-environment)
 | 
				
			||||||
 | 
					  (map (lambda (s) (cons s (symbol-syntax s)))
 | 
				
			||||||
 | 
					       (filter symbol-syntax (environment))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(syntax-environment)
 | 
					(syntax-environment)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(symbol-syntax 'try)
 | 
					(symbol-syntax 'try)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,11 +3,6 @@
 | 
				
			||||||
; by Jeff Bezanson (C) 2009
 | 
					; by Jeff Bezanson (C) 2009
 | 
				
			||||||
; Distributed under the BSD License
 | 
					; Distributed under the BSD License
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(if (not (bound? 'eq))
 | 
					 | 
				
			||||||
    (begin
 | 
					 | 
				
			||||||
      (set-constant! 'eq       eq?)
 | 
					 | 
				
			||||||
      (set-constant! 'equal    equal?)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; convert a sequence of body statements to a single expression.
 | 
					; convert a sequence of body statements to a single expression.
 | 
				
			||||||
; this allows define, defun, defmacro, let, etc. to contain multiple
 | 
					; this allows define, defun, defmacro, let, etc. to contain multiple
 | 
				
			||||||
; body expressions as in Common Lisp.
 | 
					; body expressions as in Common Lisp.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -119,6 +119,11 @@ value_t fl_table_put(value_t *args, uint32_t nargs)
 | 
				
			||||||
    return args[0];
 | 
					    return args[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void key_error(char *fname, value_t key)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    lerror(list2(KeyError, key), "%s: key not found", fname);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// (get table key [default])
 | 
					// (get table key [default])
 | 
				
			||||||
value_t fl_table_get(value_t *args, uint32_t nargs)
 | 
					value_t fl_table_get(value_t *args, uint32_t nargs)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -129,7 +134,7 @@ value_t fl_table_get(value_t *args, uint32_t nargs)
 | 
				
			||||||
    if (v == (value_t)HT_NOTFOUND) {
 | 
					    if (v == (value_t)HT_NOTFOUND) {
 | 
				
			||||||
        if (nargs == 3)
 | 
					        if (nargs == 3)
 | 
				
			||||||
            return args[2];
 | 
					            return args[2];
 | 
				
			||||||
        lerror(KeyError, "get: key not found");
 | 
					        key_error("get", args[1]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return v;
 | 
					    return v;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -148,7 +153,7 @@ value_t fl_table_del(value_t *args, uint32_t nargs)
 | 
				
			||||||
    argcount("del!", nargs, 2);
 | 
					    argcount("del!", nargs, 2);
 | 
				
			||||||
    htable_t *h = totable(args[0], "del!");
 | 
					    htable_t *h = totable(args[0], "del!");
 | 
				
			||||||
    if (!equalhash_remove(h, (void*)args[1]))
 | 
					    if (!equalhash_remove(h, (void*)args[1]))
 | 
				
			||||||
        lerror(KeyError, "del!: key not found");
 | 
					        key_error("del!", args[1]);
 | 
				
			||||||
    return args[0];
 | 
					    return args[0];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue