1 package org.apache.bcel.verifier.statics;
2
3 /* ====================================================================
4 * The Apache Software License, Version 1.1
5 *
6 * Copyright (c) 2001 The Apache Software Foundation. All rights
7 * reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 *
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in
18 * the documentation and/or other materials provided with the
19 * distribution.
20 *
21 * 3. The end-user documentation included with the redistribution,
22 * if any, must include the following acknowledgment:
23 * "This product includes software developed by the
24 * Apache Software Foundation (http://www.apache.org/)."
25 * Alternately, this acknowledgment may appear in the software itself,
26 * if and wherever such third-party acknowledgments normally appear.
27 *
28 * 4. The names "Apache" and "Apache Software Foundation" and
29 * "Apache BCEL" must not be used to endorse or promote products
30 * derived from this software without prior written permission. For
31 * written permission, please contact apache@apache.org.
32 *
33 * 5. Products derived from this software may not be called "Apache",
34 * "Apache BCEL", nor may "Apache" appear in their name, without
35 * prior written permission of the Apache Software Foundation.
36 *
37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
48 * SUCH DAMAGE.
49 * ====================================================================
50 *
51 * This software consists of voluntary contributions made by many
52 * individuals on behalf of the Apache Software Foundation. For more
53 * information on the Apache Software Foundation, please see
54 * <http://www.apache.org/>.
55 */
56
57 import org.apache.bcel.generic.Type;
58 import org.apache.bcel.verifier.exc.*;
59
60 /***
61 * A utility class holding the information about
62 * the names and the types of the local variables in
63 * a given method.
64 *
65 * @version $Id: LocalVariablesInfo.java,v 1.2 2002/06/13 09:32:50 enver Exp $
66 * @author <A HREF="http://www.inf.fu-berlin.de/~ehaase"/>Enver Haase</A>
67 */
68 public class LocalVariablesInfo{
69
70 /*** The information about the local variables is stored here. */
71 private LocalVariableInfo[] localVariableInfos;
72
73 /*** The constructor. */
74 LocalVariablesInfo(int max_locals){
75 localVariableInfos = new LocalVariableInfo[max_locals];
76 for (int i=0; i<max_locals; i++){
77 localVariableInfos[i] = new LocalVariableInfo();
78 }
79 }
80
81 /*** Returns the LocalVariableInfo for the given slot. */
82 public LocalVariableInfo getLocalVariableInfo(int slot){
83 if (slot < 0 || slot >= localVariableInfos.length){
84 throw new AssertionViolatedException("Slot number for local variable information out of range.");
85 }
86 return localVariableInfos[slot];
87 }
88
89 /***
90 * Adds information about the local variable in slot 'slot'. Automatically
91 * adds information for slot+1 if 't' is Type.LONG or Type.DOUBLE.
92 * @throws LocalVariableInfoInconsistentException if the new information conflicts
93 * with already gathered information.
94 */
95 public void add(int slot, String name, int startpc, int length, Type t) throws LocalVariableInfoInconsistentException{
96 // The add operation on LocalVariableInfo may throw the '...Inconsistent...' exception, we don't throw it explicitely here.
97
98 if (slot < 0 || slot >= localVariableInfos.length){
99 throw new AssertionViolatedException("Slot number for local variable information out of range.");
100 }
101
102 localVariableInfos[slot].add(name, startpc, length, t);
103 if (t == Type.LONG) localVariableInfos[slot+1].add(name, startpc, length, LONG_Upper.theInstance());
104 if (t == Type.DOUBLE) localVariableInfos[slot+1].add(name, startpc, length, DOUBLE_Upper.theInstance());
105 }
106 }
This page was automatically generated by Maven