Changeset 10117


Ignore:
Timestamp:
10/15/05 20:08:49 (16 years ago)
Author:
piso
Message:

Work in progress (tested).

File:
1 edited

Legend:

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

    r9934 r10117  
    33 *
    44 * Copyright (C) 2002-2005 Peter Graves
    5  * $Id: Primitives.java,v 1.828 2005-08-28 19:25:23 piso Exp $
     5 * $Id: Primitives.java,v 1.829 2005-10-15 20:08:49 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    712712            throws ConditionThrowable
    713713        {
    714             outSynonymOf(second)._writeString(first.writeToString());
     714            final Stream out;
     715            try {
     716                if (second == T)
     717                    out = (Stream) _TERMINAL_IO_.symbolValue();
     718                else if (second == NIL)
     719                    out = (Stream) _STANDARD_OUTPUT_.symbolValue();
     720                else
     721                    out = (Stream) second;
     722            }
     723            catch (ClassCastException e) {
     724                return signalTypeError(second, Symbol.STREAM);
     725            }
     726            out._writeString(first.writeToString());
    715727            return first;
    716728        }
     
    36883700    };
    36893701
    3690     // ### %write-string
    3691     // write-string string output-stream start end => string
     3702    // ### %write-string string output-stream start end => string
    36923703    private static final Primitive _WRITE_STRING =
    36933704        new Primitive("%write-string", PACKAGE_SYS, false,
     
    36983709            throws ConditionThrowable
    36993710        {
    3700             AbstractString s;
     3711            final AbstractString s;
    37013712            try {
    37023713                s = (AbstractString) first;
    37033714            }
    37043715            catch (ClassCastException e) {
    3705                 return signal(new TypeError(first, Symbol.STRING));
     3716                return signalTypeError(first, Symbol.STRING);
    37063717            }
    37073718            char[] chars = s.chars();
    3708             Stream out = outSynonymOf(second);
    3709             int start = Fixnum.getValue(third);
    3710             int end;
     3719            final Stream out;
     3720            try {
     3721                if (second == T)
     3722                    out = (Stream) _TERMINAL_IO_.symbolValue();
     3723                else if (second == NIL)
     3724                    out = (Stream) _STANDARD_OUTPUT_.symbolValue();
     3725                else
     3726                    out = (Stream) second;
     3727            }
     3728            catch (ClassCastException e) {
     3729                return signalTypeError(second, Symbol.STREAM);
     3730            }
     3731            final int start;
     3732            try {
     3733                start = ((Fixnum)third).value;
     3734            }
     3735            catch (ClassCastException e) {
     3736                return signalTypeError(third, Symbol.FIXNUM);
     3737            }
     3738            final int end;
    37113739            if (fourth == NIL)
    37123740                end = chars.length;
    3713             else
    3714                 end = Fixnum.getValue(fourth);
     3741            else {
     3742                try {
     3743                    end = ((Fixnum)fourth).value;
     3744                }
     3745                catch (ClassCastException e) {
     3746                    return signalTypeError(fourth, Symbol.FIXNUM);
     3747                }
     3748            }
    37153749            checkBounds(start, end, chars.length);
    37163750            out._writeChars(chars, start, end);
     
    37423776        throws ConditionThrowable
    37433777    {
    3744         Stream out = null;
    3745         if (arg == T)
    3746             out = checkCharacterOutputStream(_TERMINAL_IO_.symbolValue());
    3747         else if (arg == NIL)
    3748             out = checkCharacterOutputStream(_STANDARD_OUTPUT_.symbolValue());
    3749         else if (arg instanceof Stream) {
    3750             Stream stream = (Stream) arg;
    3751             if (stream instanceof TwoWayStream)
    3752                 out = ((TwoWayStream)arg).getOutputStream();
    3753             else if (stream.isOutputStream())
    3754                 out = stream;
    3755         } else
    3756             return signal(new TypeError(arg, Symbol.STREAM));
    3757         if (out == null)
    3758             signal(new TypeError("The value " + arg.writeToString() +
    3759                                  " is not an output stream."));
     3778        final Stream out;
     3779        try {
     3780            if (arg == T)
     3781                out = (Stream) _TERMINAL_IO_.symbolValue();
     3782            else if (arg == NIL)
     3783                out = (Stream) _STANDARD_OUTPUT_.symbolValue();
     3784            else
     3785                out = (Stream) arg;
     3786        }
     3787        catch (ClassCastException e) {
     3788            return signalTypeError(arg, Symbol.STREAM);
     3789        }
    37603790        return out.finishOutput();
    37613791    }
Note: See TracChangeset for help on using the changeset viewer.