Changeset 4163


Ignore:
Timestamp:
10/01/03 21:29:45 (19 years ago)
Author:
piso
Message:

%DEFUN: work in progress.

File:
1 edited

Legend:

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

    r4158 r4163  
    33 *
    44 * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: Primitives.java,v 1.455 2003-10-01 14:28:33 piso Exp $
     5 * $Id: Primitives.java,v 1.456 2003-10-01 21:29:45 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    12421242            throws ConditionThrowable
    12431243        {
    1244             Symbol symbol = checkSymbol(first);
    1245             if (symbol.getSymbolFunction() instanceof SpecialOperator) {
    1246                 String message =
    1247                     symbol.getName() + " is a special operator and may not be redefined";
    1248                 throw new ConditionThrowable(new ProgramError(message));
    1249             }
    1250             LispObject arglist = checkList(second);
    1251             LispObject body = checkList(third);
    1252             if (body.car() instanceof LispString && body.cdr() != NIL) {
    1253                 // Documentation.
    1254                 symbol.setFunctionDocumentation(body.car());
    1255                 body = body.cdr();
    1256             }
    1257             body = new Cons(symbol, body);
    1258             body = new Cons(Symbol.BLOCK, body);
    1259             body = new Cons(body, NIL);
    1260             Closure closure = new Closure(symbol.getName(), arglist, body,
    1261                                           new Environment());
    1262             closure.setArglist(arglist);
    1263             symbol.setSymbolFunction(closure);
    1264             return symbol;
     1244            if (first instanceof Symbol) {
     1245                Symbol symbol = checkSymbol(first);
     1246                if (symbol.getSymbolFunction() instanceof SpecialOperator) {
     1247                    String message =
     1248                        symbol.getName() + " is a special operator and may not be redefined";
     1249                    throw new ConditionThrowable(new ProgramError(message));
     1250                }
     1251                LispObject arglist = checkList(second);
     1252                LispObject body = checkList(third);
     1253                if (body.car() instanceof LispString && body.cdr() != NIL) {
     1254                    // Documentation.
     1255                    symbol.setFunctionDocumentation(body.car());
     1256                    body = body.cdr();
     1257                }
     1258                body = new Cons(symbol, body);
     1259                body = new Cons(Symbol.BLOCK, body);
     1260                body = new Cons(body, NIL);
     1261                Closure closure = new Closure(symbol.getName(), arglist, body,
     1262                                              new Environment());
     1263                closure.setArglist(arglist);
     1264                symbol.setSymbolFunction(closure);
     1265                return symbol;
     1266            }
     1267            if (first instanceof Cons && first.car() == Symbol.SETF) {
     1268                Symbol symbol = checkSymbol(first.cadr());
     1269//                 if (symbol.getSymbolFunction() instanceof SpecialOperator) {
     1270//                     String message =
     1271//                         symbol.getName() + " is a special operator and may not be redefined";
     1272//                     throw new ConditionThrowable(new ProgramError(message));
     1273//                 }
     1274                LispObject arglist = checkList(second);
     1275                LispObject body = checkList(third);
     1276                if (body.car() instanceof LispString && body.cdr() != NIL) {
     1277                    // Documentation.
     1278//                     symbol.setFunctionDocumentation(body.car());
     1279                    body = body.cdr();
     1280                }
     1281                body = new Cons(symbol, body);
     1282                body = new Cons(Symbol.BLOCK, body);
     1283                body = new Cons(body, NIL);
     1284                Closure closure = new Closure(arglist, body, new Environment());
     1285                closure.setArglist(arglist);
     1286//                 symbol.setSymbolFunction(closure);
     1287                put(symbol, PACKAGE_SYS.intern("SETF-FUNCTION"), closure);
     1288                return symbol;
     1289            }
     1290            throw new ConditionThrowable(new TypeError(first, "valid function name"));
    12651291        }
    12661292    };
Note: See TracChangeset for help on using the changeset viewer.