ReaderMacro.java :  » Scripting » Kawa » gnu » kawa » lispexpr » Java Open Source

Java Open Source » Scripting » Kawa 
Kawa » gnu » kawa » lispexpr » ReaderMacro.java
// Copyright (c) 2001  Per M.A. Bothner
// This is free software;  for terms and warranty disclaimer see ./COPYING.

package gnu.kawa.lispexpr;
import gnu.mapping.*;
import gnu.text.*;

/** Wrapper for user-supplied reader macro procedure. */

public class ReaderMacro extends ReaderMisc
{
  Procedure procedure;

  public ReaderMacro(Procedure procedure, boolean nonTerminating)
  {
    super(nonTerminating ? ReadTable.NON_TERMINATING_MACRO
    : ReadTable.TERMINATING_MACRO);
    this.procedure = procedure;
  }

  public ReaderMacro(Procedure procedure)
  {
    super(ReadTable.TERMINATING_MACRO);
    this.procedure = procedure;
  }

  public boolean isNonTerminating()
  {
    return kind == ReadTable.NON_TERMINATING_MACRO;
  }

  public Procedure getProcedure()
  {
    return procedure;
  }

  public Object read (Lexer in, int ch, int count)
    throws java.io.IOException, SyntaxException
  {
    // java.io.Reader reader = in;
    java.io.Reader reader = in.getPort();
    try
      {
  return procedure.apply2(reader, Char.make(ch));
      }
    catch (java.io.IOException ex)
      {
  throw ex;
      }
    catch (gnu.text.SyntaxException ex)
      {
  throw ex;
      }
    catch (Throwable ex)
      {
  in.fatal("reader macro '"+procedure+"' threw: "+ex);
  return null;  // Never executed.
      }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.