Changeset 4831


Ignore:
Timestamp:
11/19/03 02:39:17 (18 years ago)
Author:
piso
Message:

processDeclarations()
declareSpecial()
isDeclaredSpecial()
toString()

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/j/src/org/armedbear/lisp/Environment.java

    r4826 r4831  
    33 *
    44 * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: Environment.java,v 1.7 2003-11-18 14:11:19 piso Exp $
     5 * $Id: Environment.java,v 1.8 2003-11-19 02:39:17 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    112112    }
    113113
     114    // Returns body with declarations removed.
     115    public LispObject processDeclarations(LispObject body)
     116        throws ConditionThrowable
     117    {
     118        while (body != NIL) {
     119            LispObject obj = body.car();
     120            if (obj instanceof Cons && obj.car() == Symbol.DECLARE) {
     121                LispObject decls = obj.cdr();
     122                while (decls != NIL) {
     123                    LispObject decl = decls.car();
     124                    if (decl instanceof Cons && decl.car() == Symbol.SPECIAL) {
     125                        LispObject vars = decl.cdr();
     126                        while (vars != NIL) {
     127                            Symbol var = checkSymbol(vars.car());
     128                            declareSpecial(var);
     129                            vars = vars.cdr();
     130                        }
     131                    }
     132                    decls = decls.cdr();
     133                }
     134                body = body.cdr();
     135            } else
     136                break;
     137        }
     138        return body;
     139    }
     140
     141    public void declareSpecial(Symbol var)
     142    {
     143            vars = new Binding(var, null, vars);
     144            vars.specialp = true;
     145    }
     146
     147    public boolean isDeclaredSpecial(Symbol var)
     148    {
     149        Binding binding = getBinding(var);
     150        return binding != null ? binding.specialp : false;
     151    }
     152
    114153    public String toString()
    115154    {
    116         StringBuffer sb = new StringBuffer();
    117         sb.append("#<ENVIRONMENT");
    118         Binding binding = vars;
    119         while (binding != null) {
    120             sb.append(' ');
    121             sb.append(binding.symbol.getName());
    122             sb.append(" = ");
    123             sb.append(binding.value);
    124             binding = binding.next;
    125             if (binding != null)
    126                 sb.append(",");
    127         }
    128         sb.append(">");
    129         return sb.toString();
     155        return unreadableString("ENVIRONMENT");
    130156    }
    131157}
Note: See TracChangeset for help on using the changeset viewer.