/* * Copyright (C) 2013 Nastaran Shafiei and Franck van Breugel * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You can find a copy of the GNU General Public License at * <http://www.gnu.org/licenses/>. */ package gov.nasa.jpf.vm; import cmu.utils.RuntimeConstants; import nhandler.peerGen.PeerClassGen; /** * This is a subclass of NativeMethodInfo which makes executeNative() delegate * the execution of the method to the JVM level. * * @author Nastaran Shafiei * @author Franck van Breugel */ public class DelegatedMethodInfo extends HandledMethodInfo { public DelegatedMethodInfo (MethodInfo mi) { super(mi); } @Override protected boolean isUnsatisfiedLinkError (MJIEnv env){ if(mth == null){ if (RuntimeConstants.debug) { System.out.println(printInfo()); } PeerClassGen peerCreator = PeerClassGen.getPeerCreator(this.getClassInfo(), env); mth = peerCreator.createMethod(this); Class<?> peerClass = peerCreator.getPeer(); this.peer = NativePeer.getInstance(peerClass, NativePeer.class); this.peer.initialize(peerClass, this.ci, true); //this.peer = new NativePeer(peerCreator.getPeer(), this.ci); assert (this.peer != null && mth != null); } return false; } @Override protected String printInfo() { return("* DELEGATING -> " + this.ci.getName() + "." + this.name); } }