org.jboss.byteman.rule.compiler.StackHeights Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of byteman Show documentation
Show all versions of byteman Show documentation
The Byteman agent jar contains the implementation of the Byteman java agent, including
the bytecode transformer, rule parser, type checker and execution engine and the agent
listener.
/*
* JBoss, Home of Professional Open Source
* Copyright 2009-10 Red Hat and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*
* @authors Andrew Dinn
*/package org.jboss.byteman.rule.compiler;
import org.jboss.byteman.rule.exception.CompileException;
/**
* container to track either the current or the maximum local variable count and stack height
* while generating compiled code for a rule
*/
public class StackHeights
{
/**
* number of stack slots
*/
public int stackCount;
/**
* number of local variable slots
*/
public int localCount;
/**
* create withinitial counts 0
*/
public StackHeights()
{
stackCount = localCount = 0;
}
/**
* create a copy with the same counts as the original
* @param toCopy the StackHeights instance to copy
*/
public StackHeights(StackHeights toCopy)
{
stackCount = toCopy.stackCount;
localCount = toCopy.localCount;
}
/**
* increment the stack count and return this to allow chaining
* @param increment the amount ot add to stackCount (can be negative)
* @return this
* @throws CompileException if the stack count goes negative
*/
public StackHeights addStackCount(int increment) throws CompileException
{
stackCount += increment;
if (stackCount < 0) {
throw new CompileException("StackHeights.addStackCount : negative count for stack slots!");
}
return this;
}
/**
* increment the local count and return this to allow chaining
* @param increment the amount ot add to localCount (can be negative)
* @return this
* @throws CompileException if the local count goes negative
*/
public StackHeights addLocalCount(int increment) throws CompileException
{
localCount += increment;
if (localCount < 0) {
throw new CompileException("StackHeights.addLocalCount : negative count for local variable slots!");
}
return this;
}
};
© 2015 - 2025 Weber Informatics LLC | Privacy Policy