Changeset 8357


Ignore:
Timestamp:
01/13/05 19:44:51 (17 years ago)
Author:
piso
Message:

describe()

Location:
trunk/j/src/org/armedbear/lisp
Files:
2 edited

Legend:

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

    r8285 r8357  
    22 * LispObject.java
    33 *
    4  * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: LispObject.java,v 1.114 2004-12-23 12:28:51 piso Exp $
     4 * Copyright (C) 2002-2005 Peter Graves
     5 * $Id: LispObject.java,v 1.115 2005-01-13 19:44:23 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    3939    }
    4040
     41    public String describe() throws ConditionThrowable
     42    {
     43        StringBuffer sb = new StringBuffer(writeToString());
     44        sb.append(" is an object of type ");
     45        sb.append(typeOf().writeToString());
     46        sb.append('.');
     47        return sb.toString();
     48    }
     49
    4150    public LispObject getDescription() throws ConditionThrowable
    4251    {
  • trunk/j/src/org/armedbear/lisp/Symbol.java

    r8248 r8357  
    22 * Symbol.java
    33 *
    4  * Copyright (C) 2002-2004 Peter Graves
    5  * $Id: Symbol.java,v 1.166 2004-12-16 15:06:23 piso Exp $
     4 * Copyright (C) 2002-2005 Peter Graves
     5 * $Id: Symbol.java,v 1.167 2005-01-13 19:44:51 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    259259    }
    260260
     261    public String describe() throws ConditionThrowable
     262    {
     263        StringBuffer sb = new StringBuffer(writeToString());
     264        sb.append(" is an ");
     265        if (pkg == NIL)
     266            sb.append("uninterned");
     267        else if (((Package)pkg).findExternalSymbol(getName()) == this)
     268            sb.append("external");
     269        else
     270            sb.append("internal");
     271        sb.append(" symbol");
     272        if (pkg != NIL) {
     273            sb.append(" in the ");
     274            sb.append(pkg.getName());
     275            sb.append(" package");
     276        }
     277        sb.append(".\n");
     278        LispObject value = getSymbolValue();
     279        if (isSpecialVariable()) {
     280            sb.append("It is a ");
     281            sb.append(isConstant() ? "constant" : "special variable");
     282            sb.append("; ");
     283            if (value != null) {
     284                sb.append("its value is ");
     285                sb.append(value.writeToString());
     286            } else
     287                sb.append("it is unbound");
     288            sb.append(".\n");
     289        } else if (value != null) {
     290            sb.append("It is an undefined variable; its value is ");
     291            sb.append(value.writeToString());
     292            sb.append(".\n");
     293        }
     294        LispObject function = getSymbolFunction();
     295        if (function != null) {
     296            sb.append("Its function binding is ");
     297            sb.append(function.writeToString());
     298            sb.append(".\n");
     299            if (function instanceof Function) {
     300                LispObject arglist = ((Function)function).getArglist();
     301                if (arglist != null) {
     302                    LispThread thread = LispThread.currentThread();
     303                    Binding lastSpecialBinding = thread.lastSpecialBinding;
     304                    thread.bindSpecial(_PRINT_ESCAPE_, NIL);
     305                    sb.append("Function argument list:\n  ");
     306                    if (arglist instanceof AbstractString)
     307                        sb.append(arglist.getStringValue());
     308                    else
     309                        sb.append(arglist.writeToString());
     310                    sb.append('\n');
     311                    thread.lastSpecialBinding = lastSpecialBinding;
     312                }
     313            }
     314            LispObject documentation = getFunctionDocumentation();
     315            if (documentation instanceof AbstractString) {
     316                sb.append("Function documentation:\n  ");
     317                sb.append(documentation.getStringValue());
     318                sb.append('\n');
     319            }
     320        }
     321        LispObject plist = getPropertyList();
     322        if (plist != NIL) {
     323            sb.append("Its property list has these indicator/value pairs:\n");
     324            LispObject[] array = plist.copyToArray();
     325            for (int i = 0; i < array.length; i += 2) {
     326                sb.append("  ");
     327                sb.append(array[i].writeToString());
     328                sb.append(' ');
     329                sb.append(array[i+1].writeToString());
     330                sb.append('\n');
     331            }
     332        }
     333        return sb.toString();
     334    }
     335
    261336    public LispObject getDescription() throws ConditionThrowable
    262337    {
Note: See TracChangeset for help on using the changeset viewer.