Changeset 15360


Ignore:
Timestamp:
08/06/20 16:03:10 (3 years ago)
Author:
Mark Evenson
Message:

Serialization of top-level, named functions.

Location:
trunk/abcl
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/build.xml

    r15331 r15360  
    10601060        <arg value="org.armedbear.lisp.SeekableStringWriterTest"/>
    10611061        <arg value="org.armedbear.lisp.UtilitiesTest"/>
     1062        <arg value="org.armedbear.lisp.serialization.SerializationTest"/>
    10621063    <!-- currently hangs(!) the running process
    10631064        <arg value="org.armedbear.lisp.util.HttpHeadTest"/>
  • trunk/abcl/src/org/armedbear/lisp/Function.java

    r14957 r15360  
    3434package org.armedbear.lisp;
    3535
     36import java.io.NotSerializableException;
     37import java.io.Serializable;
     38
    3639import static org.armedbear.lisp.Lisp.*;
    3740
    38 public abstract class Function extends Operator
    39 {
     41public abstract class Function extends Operator implements Serializable {
    4042    private LispObject propertyList = NIL;
    4143    private int callCount;
     
    386388        ++hotCount;
    387389    }
     390
     391    //Serialization
     392    public static class SerializedNamedFunction implements Serializable {
     393        private final Symbol name;
     394        public SerializedNamedFunction(Symbol name) {
     395            this.name = name;
     396        }
     397
     398        public Object readResolve() {
     399            return name.getSymbolFunctionOrDie();
     400        }
     401    }
     402
     403    public Object writeReplace() throws NotSerializableException {
     404        LispObject lambdaName = getLambdaName();
     405        if(lambdaName instanceof Symbol && lambdaName.getSymbolFunction() == this) {
     406            return new SerializedNamedFunction((Symbol) lambdaName);
     407        } else {
     408            throw new NotSerializableException(getClass().getName());
     409        }
     410    }
    388411}
  • trunk/abcl/src/org/armedbear/lisp/Pathname.java

    r15038 r15360  
    3535import static org.armedbear.lisp.Lisp.*;
    3636
    37 import java.io.File;
    38 import java.io.IOException;
    39 import java.io.InputStream;
    40 import java.io.FileInputStream;
     37import java.io.*;
    4138import java.net.MalformedURLException;
    4239import java.net.URI;
     
    5148import java.util.zip.ZipInputStream;
    5249
    53 public class Pathname extends LispObject {
     50public class Pathname extends LispObject implements Serializable {
    5451
    5552    /** The path component separator used by internally generated
Note: See TracChangeset for help on using the changeset viewer.