Changeset 4410


Ignore:
Timestamp:
10/16/03 14:33:01 (18 years ago)
Author:
piso
Message:

Work in progress.

File:
1 edited

Legend:

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

    r4051 r4410  
    33 *
    44 * Copyright (C) 2002-2003 Peter Graves
    5  * $Id: Load.java,v 1.21 2003-09-25 15:37:08 piso Exp $
     5 * $Id: Load.java,v 1.22 2003-10-16 14:33:01 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    3131public final class Load extends Lisp
    3232{
    33     // ### *modules*
    34     private static final Symbol _MODULES_ =
    35         exportSpecial("*MODULES*", PACKAGE_CL, NIL);
    36 
    37     // ### *load-verbose*
    38     private static final Symbol _LOAD_VERBOSE_ =
    39         exportSpecial("*LOAD-VERBOSE*", PACKAGE_CL, T);
    40 
    41     // ### *load-print*
    42     private static final Symbol _LOAD_PRINT_ =
    43         exportSpecial("*LOAD-PRINT*", PACKAGE_CL, NIL);
    44 
    45     // ### *load-truename*
    46     private static final Symbol _LOAD_TRUENAME_ =
    47         exportSpecial("*LOAD-TRUENAME*", PACKAGE_CL, NIL);
    48 
    49     // ### *load-depth*
    50     // internal symbol
    51     private static final Symbol _LOAD_DEPTH_ =
    52         internSpecial("*LOAD-DEPTH*", PACKAGE_SYS, new Fixnum(0));
    53 
    54     /*package*/ static final LispObject load(String filename)
     33    public static final LispObject load(String filename)
    5534        throws ConditionThrowable
    5635    {
     
    6039    }
    6140
    62     private static final LispObject load(final String filename,
     41    public static final LispObject load(final String filename,
    6342                                         boolean verbose, boolean print)
    6443        throws ConditionThrowable
     
    11089            throw new ConditionThrowable(new LispError(e.getMessage()));
    11190        }
    112         LispObject result = loadFileFromStream(truename, in, verbose, print);
     91        LispObject result =
     92            loadFileFromStream(truename, in, verbose, print, false);
    11393        try {
    11494            in.close();
     
    120100    }
    121101
    122     /*package*/ static final LispObject _load(final String filename,
    123                                               boolean verbose, boolean print)
     102    public static final LispObject _load(String filename)
     103        throws ConditionThrowable
     104    {
     105        return _load(filename,
     106                     _LOAD_VERBOSE_.symbolValueNoThrow() != NIL,
     107                     _LOAD_PRINT_.symbolValueNoThrow() != NIL,
     108                     false);
     109    }
     110
     111    public static final LispObject _load(String filename, boolean auto)
     112        throws ConditionThrowable
     113    {
     114        boolean verbose;
     115        if (auto)
     116            verbose = _AUTOLOAD_VERBOSE_.symbolValueNoThrow() != NIL;
     117        else
     118            verbose = _LOAD_VERBOSE_.symbolValueNoThrow() != NIL;
     119        return _load(filename,
     120                     verbose,
     121                     _LOAD_PRINT_.symbolValueNoThrow() != NIL,
     122                     auto);
     123    }
     124
     125    public static final LispObject _load(final String filename,
     126                                         boolean verbose, boolean print,
     127                                         boolean auto)
    124128        throws ConditionThrowable
    125129    {
     
    150154        if (in != null) {
    151155            LispObject result =
    152                 loadFileFromStream(truename, in, verbose, print);
     156                loadFileFromStream(truename, in, verbose, print, auto);
    153157            try {
    154158                in.close();
     
    165169                                                       InputStream in,
    166170                                                       boolean verbose,
    167                                                        boolean print)
     171                                                       boolean print,
     172                                                       boolean auto)
    168173        throws ConditionThrowable
    169174    {
     
    174179        int loadDepth = Fixnum.getInt(_LOAD_DEPTH_.symbolValue());
    175180        thread.bindSpecial(_LOAD_DEPTH_, new Fixnum(++loadDepth));
    176         StringBuffer sb = new StringBuffer();
    177         for (long i = 0; i < loadDepth; i++)
    178             sb.append(';');
    179         String semicolons = sb.toString();
     181        final String prefix = getLoadVerbosePrefix(loadDepth);
    180182        try {
    181183            thread.bindSpecial(_LOAD_TRUENAME_, new LispString(truename));
     
    183185                CharacterOutputStream out = getStandardOutput();
    184186                out.freshLine();
    185                 out.writeString(semicolons);
    186                 out.writeLine(" Loading " + truename + " ...");
     187                out.writeString(prefix);
     188                out.writeString(auto ? " Autoloading " : " Loading ");
     189                out.writeString(truename);
     190                out.writeLine(" ...");
    187191                out.flushOutput();
    188             }
    189             LispObject result = loadStream(in, print);
    190             if (verbose) {
     192                LispObject result = loadStream(in, print);
    191193                long elapsed = System.currentTimeMillis() - start;
    192                 CharacterOutputStream out = getStandardOutput();
    193194                out.freshLine();
    194                 out.writeString(semicolons);
    195                 out.writeString(" Loaded ");
     195                out.writeString(prefix);
     196                out.writeString(auto ? " Autoloaded " : " Loaded ");
    196197                out.writeString(truename);
    197198                out.writeString(" (");
     
    199200                out.writeLine(" seconds)");
    200201                out.flushOutput();
    201             }
    202             return result;
     202                return result;
     203            } else
     204                return loadStream(in, print);
    203205        }
    204206        finally {
    205207            thread.setDynamicEnvironment(oldDynEnv);
    206208        }
     209    }
     210
     211    public static String getLoadVerbosePrefix(int loadDepth)
     212    {
     213        StringBuffer sb = new StringBuffer(";");
     214        for (int i = loadDepth - 1; i-- > 0;)
     215            sb.append(' ');
     216        return sb.toString();
    207217    }
    208218
     
    295305
    296306    // ### %load
    297     // FIXME This function should not be exported from COMMON-LISP!
    298307    public static final Primitive1 _LOAD =
    299         new Primitive1("%load", PACKAGE_SYS, false) {
     308        new Primitive1("%load", PACKAGE_SYS, false)
     309    {
    300310        public LispObject execute(LispObject arg) throws ConditionThrowable
    301311        {
    302312            return _load(LispString.getValue(arg),
    303313                         _LOAD_VERBOSE_.symbolValueNoThrow() != NIL,
    304                          _LOAD_PRINT_.symbolValueNoThrow() != NIL);
     314                         _LOAD_PRINT_.symbolValueNoThrow() != NIL,
     315                         false);
    305316        }
    306317    };
Note: See TracChangeset for help on using the changeset viewer.