Changeset 9957


Ignore:
Timestamp:
09/12/05 01:14:18 (16 years ago)
Author:
piso
Message:

EXT:SET-FLOATING-POINT-MODES
EXT:GET-FLOATING-POINT-MODES

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

Legend:

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

    r9946 r9957  
    33 *
    44 * Copyright (C) 2003-2005 Peter Graves
    5  * $Id: Autoload.java,v 1.239 2005-09-08 16:10:50 piso Exp $
     5 * $Id: Autoload.java,v 1.240 2005-09-12 01:14:18 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    458458        autoload(PACKAGE_EXT, "file-directory-p", "probe_file", true);
    459459        autoload(PACKAGE_EXT, "gc", "gc", true);
     460        autoload(PACKAGE_EXT, "get-floating-point-modes", "FloatFunctions", true);
    460461        autoload(PACKAGE_EXT, "get-mutex", "Mutex", true);
    461462        autoload(PACKAGE_EXT, "mailbox-empty-p", "Mailbox", true);
     
    470471        autoload(PACKAGE_EXT, "probe-directory", "probe_file", true);
    471472        autoload(PACKAGE_EXT, "release-mutex", "Mutex", true);
     473        autoload(PACKAGE_EXT, "set-floating-point-modes", "FloatFunctions", true);
    472474        autoload(PACKAGE_EXT, "simple-string-fill", "StringFunctions");
    473475        autoload(PACKAGE_EXT, "simple-string-search", "StringFunctions");
  • trunk/j/src/org/armedbear/lisp/FloatFunctions.java

    r9905 r9957  
    33 *
    44 * Copyright (C) 2003-2005 Peter Graves
    5  * $Id: FloatFunctions.java,v 1.7 2005-08-23 20:51:24 piso Exp $
     5 * $Id: FloatFunctions.java,v 1.8 2005-09-12 01:13:40 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    2424public final class FloatFunctions extends Lisp
    2525{
     26    // ### set-floating-point-modes &key traps => <no values>
     27    private static final Primitive SET_FLOATING_POINT_MODES =
     28        new Primitive("set-floating-point-modes", PACKAGE_EXT, true,
     29                      "&key traps")
     30    {
     31        public LispObject execute(LispObject[] args) throws ConditionThrowable
     32        {
     33            if (args.length % 2 != 0)
     34                signal(new ProgramError("Odd number of keyword arguments."));
     35            for (int i = 0; i < args.length; i += 2) {
     36                LispObject key = checkSymbol(args[i]);
     37                LispObject value = args[i+1];
     38                if (key == Keyword.TRAPS) {
     39                    boolean trap_overflow  = false;
     40                    boolean trap_underflow = false;
     41                    while (value != NIL) {
     42                        LispObject car = value.car();
     43                        if (car == Keyword.OVERFLOW)
     44                            trap_overflow = true;
     45                        else if (car == Keyword.UNDERFLOW)
     46                            trap_underflow = true;
     47                        else
     48                            signal(new LispError("Unsupported floating point trap: " +
     49                                                 car.writeToString()));
     50                        value = value.cdr();
     51                    }
     52                    TRAP_OVERFLOW  = trap_overflow;
     53                    TRAP_UNDERFLOW = trap_underflow;
     54                } else
     55                    signal(new LispError("Unrecognized keyword: " + key.writeToString()));
     56            }
     57            return LispThread.currentThread().nothing();
     58        }
     59    };
     60
     61    // ### get-floating-point-modes => modes
     62    private static final Primitive GET_FLOATING_POINT_MODES =
     63        new Primitive("get-floating-point-modes", PACKAGE_EXT, true, "")
     64    {
     65        public LispObject execute() throws ConditionThrowable
     66        {
     67            LispObject traps = NIL;
     68            if (TRAP_UNDERFLOW)
     69                traps = traps.push(Keyword.UNDERFLOW);
     70            if (TRAP_OVERFLOW)
     71                traps = traps.push(Keyword.OVERFLOW);
     72            return list2(Keyword.TRAPS, traps);
     73        }
     74    };
     75
    2676    // ### integer-decode-float
    2777    // integer-decode-float float => significand, exponent, integer-sign
Note: See TracChangeset for help on using the changeset viewer.