Changeset 4760


Ignore:
Timestamp:
11/15/03 00:50:13 (18 years ago)
Author:
piso
Message:

GENSYM

File:
1 edited

Legend:

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

    r4759 r4760  
    33 *
    44 * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: Primitives.java,v 1.496 2003-11-15 00:26:12 piso Exp $
     5 * $Id: Primitives.java,v 1.497 2003-11-15 00:50:13 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    23882388
    23892389    // ### gensym
    2390     private static final Primitive GENSYM = new Primitive("gensym") {
    2391         public LispObject execute(LispObject[] args) throws ConditionThrowable
    2392         {
    2393             if (args.length > 1)
    2394                 throw new ConditionThrowable(new WrongNumberOfArgumentsException(this));
     2390    private static final Primitive GENSYM = new Primitive("gensym")
     2391    {
     2392        public LispObject execute() throws ConditionThrowable
     2393        {
     2394            return gensym("G");
     2395        }
     2396        public LispObject execute(LispObject arg) throws ConditionThrowable
     2397        {
    23952398            String prefix = "G";
    2396             if (args.length == 1) {
    2397                 LispObject arg = args[0];
    2398                 if (arg instanceof Fixnum) {
    2399                     int n = ((Fixnum)arg).getValue();
    2400                     if (n < 0)
    2401                         throw new ConditionThrowable(new TypeError(arg,
    2402                                                                    "non-negative integer"));
    2403                     StringBuffer sb = new StringBuffer(prefix);
    2404                     sb.append(n);
    2405                     return new Symbol(sb.toString());
    2406                 }
    2407                 if (arg instanceof Bignum) {
    2408                     BigInteger n = ((Bignum)arg).getValue();
    2409                     if (n.signum() < 0)
    2410                         throw new ConditionThrowable(new TypeError(arg,
    2411                                                                    "non-negative integer"));
    2412                     StringBuffer sb = new StringBuffer(prefix);
    2413                     sb.append(n.toString());
    2414                     return new Symbol(sb.toString());
    2415                 }
    2416                 if (arg instanceof LispString)
    2417                     prefix = ((LispString)arg).getValue();
    2418                 else
    2419                     throw new ConditionThrowable(new TypeError(arg, "string or non-negative integer"));
    2420             }
     2399            if (arg instanceof Fixnum) {
     2400                int n = ((Fixnum)arg).getValue();
     2401                if (n < 0)
     2402                    throw new ConditionThrowable(new TypeError(arg,
     2403                                                               "non-negative integer"));
     2404                StringBuffer sb = new StringBuffer(prefix);
     2405                sb.append(n);
     2406                return new Symbol(sb.toString());
     2407            }
     2408            if (arg instanceof Bignum) {
     2409                BigInteger n = ((Bignum)arg).getValue();
     2410                if (n.signum() < 0)
     2411                    throw new ConditionThrowable(new TypeError(arg,
     2412                                                               "non-negative integer"));
     2413                StringBuffer sb = new StringBuffer(prefix);
     2414                sb.append(n.toString());
     2415                return new Symbol(sb.toString());
     2416            }
     2417            if (arg instanceof LispString)
     2418                prefix = ((LispString)arg).getValue();
     2419            else
     2420                throw new ConditionThrowable(new TypeError(arg, "string or non-negative integer"));
    24212421            return gensym(prefix);
    24222422        }
    24232423    };
    24242424
    2425     private static final Symbol gensym() throws ConditionThrowable
    2426     {
    2427         return gensym("G");
    2428     }
    2429 
    24302425    private static final Symbol gensym(String prefix) throws ConditionThrowable
    24312426    {
    2432         LispObject oldValue;
    24332427        LispThread thread = LispThread.currentThread();
    24342428        Environment dynEnv = thread.getDynamicEnvironment();
    24352429        Binding binding =
    24362430            (dynEnv == null) ? null : dynEnv.getBinding(_GENSYM_COUNTER_);
     2431        LispObject oldValue;
    24372432        if (binding != null) {
    24382433            oldValue = binding.value;
Note: See TracChangeset for help on using the changeset viewer.