Changeset 4552


Ignore:
Timestamp:
10/27/03 19:02:28 (18 years ago)
Author:
piso
Message:

SETQ: symbol macro support.

File:
1 edited

Legend:

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

    r4551 r4552  
    33 *
    44 * Copyright (C) 2003 Peter Graves
    5  * $Id: SpecialOperators.java,v 1.8 2003-10-27 17:57:41 piso Exp $
     5 * $Id: SpecialOperators.java,v 1.9 2003-10-27 19:02:28 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    136136                        if (obj instanceof Cons && obj.length() == 2) {
    137137                            bind(checkSymbol(obj.car()),
    138                                  new SymbolMacro(eval(obj.cadr(), evalEnv, thread)),
     138//                                  new SymbolMacro(eval(obj.cadr(), evalEnv, thread)),
     139                                 new SymbolMacro(obj.cadr()),
    139140                                 ext);
    140141                        } else
     
    344345                    binding = env.getBinding(symbol);
    345346                }
    346                 if (binding != null)
    347                     binding.value = value;
    348                 else
    349                     symbol.setSymbolValue(value);
     347                if (binding != null) {
     348                    if (binding.value instanceof SymbolMacro) {
     349                        LispObject expansion =
     350                            ((SymbolMacro)binding.value).getExpansion();
     351                        LispObject form = list3(Symbol.SETF, expansion, value);
     352                        eval(form, env, thread);
     353                    } else
     354                        binding.value = value;
     355                } else {
     356                    if (symbol.getSymbolValue() instanceof SymbolMacro) {
     357                        LispObject expansion =
     358                            ((SymbolMacro)symbol.getSymbolValue()).getExpansion();
     359                        LispObject form = list3(Symbol.SETF, expansion, value);
     360                        eval(form, env, thread);
     361                    } else
     362                        symbol.setSymbolValue(value);
     363                }
    350364                args = args.cdr();
    351365            }
Note: See TracChangeset for help on using the changeset viewer.