/******************************************************************************* * Copyright (c) 2002 - 2006 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.dataflow.IFDS; import com.ibm.wala.util.intset.IntSet; /** * Special case: if supportsMerge(), then the problem is not really IFDS anymore. (TODO: rename it?). Instead, we perform a merge * operation before propagating at every program point. This way, we can implement standard interprocedural dataflow and ESP-style * property simulation, and various other things. */ public interface IMergeFunction { /** * @param x set of factoid numbers that previously have been established to hold at a program point * @param j a new factoid number which has been discovered to hold at a program point * @return the factoid number z which should actually be propagated, based on a merge of the new fact j into the old state * represented by x. return -1 if no fact should be propagated. */ int merge(IntSet x, int j); }