Package erjang.beam

Source Code of erjang.beam.BuiltInFunction

/**
* This file is part of Erjang - A JVM-based Erlang VM
*
* Copyright (c) 2009 by Trifork
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/


package erjang.beam;

import java.lang.reflect.Modifier;

import kilim.Pausable;

import org.objectweb.asm.Type;
import org.objectweb.asm.commons.Method;

/**
*
*/
public class BuiltInFunction {
  public final Type owner;
  public final java.lang.reflect.Method javaMethod;
  public final Method method;
  public final boolean isVirtual;
  public final boolean isPausable;
 
  /* (non-Javadoc)
   * @see java.lang.Object#toString()
   */
  @Override
  public String toString() {
    return method.toString();
  }
 
  @Override
  public int hashCode() {
    return toString().hashCode();
  }
 
  /**
   * @param m
   */
  public BuiltInFunction(java.lang.reflect.Method m) {
    this.javaMethod = m;
    this.owner = Type.getType(m.getDeclaringClass());
    this.method = new Method(m.getName(),
          Type.getType(m.getReturnType()),
          Type.getArgumentTypes(m));
    isVirtual = !Modifier.isStatic(m.getModifiers());
    boolean p = false;
    for (Class<?> c : m.getExceptionTypes()) {
      if (Pausable.class.equals(c)) {
        p = true;
        break;
      }
    }
    isPausable = p;
  }

  /**
   * @return
   */
  public Type[] getArgumentTypes() {
    return method.getArgumentTypes();
  }

  /**
   * @return
   */
  public String getName() {
    return method.getName();
  }

  /**
   * @return
   */
  public String getDescriptor() {
    return method.getDescriptor();
  }

  /**
   * @return
   */
  public Type getReturnType() {
    return method.getReturnType();
  }

  public Type getOwner() {
    return owner;
  }
 
  /**
   * @return
   */
  public boolean isVirtual() {
    return isVirtual;
  }

  public boolean isPausable() {
    return isPausable;
  }

 
}
TOP

Related Classes of erjang.beam.BuiltInFunction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.