OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libjava/] [classpath/] [tools/] [external/] [asm/] [org/] [objectweb/] [asm/] [tree/] [analysis/] [Interpreter.java] - Blame information for rev 779

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 779 jeremybenn
/***
2
 * ASM: a very small and fast Java bytecode manipulation framework
3
 * Copyright (c) 2000-2005 INRIA, France Telecom
4
 * All rights reserved.
5
 *
6
 * Redistribution and use in source and binary forms, with or without
7
 * modification, are permitted provided that the following conditions
8
 * are met:
9
 * 1. Redistributions of source code must retain the above copyright
10
 *    notice, this list of conditions and the following disclaimer.
11
 * 2. Redistributions in binary form must reproduce the above copyright
12
 *    notice, this list of conditions and the following disclaimer in the
13
 *    documentation and/or other materials provided with the distribution.
14
 * 3. Neither the name of the copyright holders nor the names of its
15
 *    contributors may be used to endorse or promote products derived from
16
 *    this software without specific prior written permission.
17
 *
18
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
28
 * THE POSSIBILITY OF SUCH DAMAGE.
29
 */
30
package org.objectweb.asm.tree.analysis;
31
 
32
import java.util.List;
33
 
34
import org.objectweb.asm.Type;
35
import org.objectweb.asm.tree.AbstractInsnNode;
36
 
37
/**
38
 * A semantic bytecode interpreter. More precisely, this interpreter only
39
 * manages the computation of values from other values: it does not manage the
40
 * transfer of values to or from the stack, and to or from the local variables.
41
 * This separation allows a generic bytecode {@link Analyzer} to work with
42
 * various semantic interpreters, without needing to duplicate the code to
43
 * simulate the transfer of values.
44
 *
45
 * @author Eric Bruneton
46
 */
47
public interface Interpreter {
48
 
49
    /**
50
     * Creates a new value that represents the given type.
51
     *
52
     * Called for method parameters (including <code>this</code>),
53
     * exception handler variable and with <code>null</code> type
54
     * for variables reserved by long and double types.
55
     *
56
     * @param type a primitive or reference type, or <tt>null</tt> to
57
     *        represent an uninitialized value.
58
     * @return a value that represents the given type. The size of the returned
59
     *         value must be equal to the size of the given type.
60
     */
61
    Value newValue(Type type);
62
 
63
    /**
64
     * Interprets a bytecode instruction without arguments. This method is
65
     * called for the following opcodes:
66
     *
67
     * ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4,
68
     * ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0,
69
     * DCONST_1, BIPUSH, SIPUSH, LDC, JSR, GETSTATIC, NEW
70
     *
71
     * @param insn the bytecode instruction to be interpreted.
72
     * @return the result of the interpretation of the given instruction.
73
     * @throws AnalyzerException if an error occured during the interpretation.
74
     */
75
    Value newOperation(AbstractInsnNode insn) throws AnalyzerException;
76
 
77
    /**
78
     * Interprets a bytecode instruction that moves a value on the stack or to
79
     * or from local variables. This method is called for the following opcodes:
80
     *
81
     * ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE,
82
     * ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP
83
     *
84
     * @param insn the bytecode instruction to be interpreted.
85
     * @param value the value that must be moved by the instruction.
86
     * @return the result of the interpretation of the given instruction. The
87
     *         returned value must be <tt>equal</tt> to the given value.
88
     * @throws AnalyzerException if an error occured during the interpretation.
89
     */
90
    Value copyOperation(AbstractInsnNode insn, Value value)
91
            throws AnalyzerException;
92
 
93
    /**
94
     * Interprets a bytecode instruction with a single argument. This method is
95
     * called for the following opcodes:
96
     *
97
     * INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L,
98
     * F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE,
99
     * TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN,
100
     * PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST,
101
     * INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL
102
     *
103
     * @param insn the bytecode instruction to be interpreted.
104
     * @param value the argument of the instruction to be interpreted.
105
     * @return the result of the interpretation of the given instruction.
106
     * @throws AnalyzerException if an error occured during the interpretation.
107
     */
108
    Value unaryOperation(AbstractInsnNode insn, Value value)
109
            throws AnalyzerException;
110
 
111
    /**
112
     * Interprets a bytecode instruction with two arguments. This method is
113
     * called for the following opcodes:
114
     *
115
     * IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD,
116
     * LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV,
117
     * LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR,
118
     * LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL,
119
     * DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE,
120
     * IF_ACMPEQ, IF_ACMPNE, PUTFIELD
121
     *
122
     * @param insn the bytecode instruction to be interpreted.
123
     * @param value1 the first argument of the instruction to be interpreted.
124
     * @param value2 the second argument of the instruction to be interpreted.
125
     * @return the result of the interpretation of the given instruction.
126
     * @throws AnalyzerException if an error occured during the interpretation.
127
     */
128
    Value binaryOperation(AbstractInsnNode insn, Value value1, Value value2)
129
            throws AnalyzerException;
130
 
131
    /**
132
     * Interprets a bytecode instruction with three arguments. This method is
133
     * called for the following opcodes:
134
     *
135
     * IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
136
     *
137
     * @param insn the bytecode instruction to be interpreted.
138
     * @param value1 the first argument of the instruction to be interpreted.
139
     * @param value2 the second argument of the instruction to be interpreted.
140
     * @param value3 the third argument of the instruction to be interpreted.
141
     * @return the result of the interpretation of the given instruction.
142
     * @throws AnalyzerException if an error occured during the interpretation.
143
     */
144
    Value ternaryOperation(
145
        AbstractInsnNode insn,
146
        Value value1,
147
        Value value2,
148
        Value value3) throws AnalyzerException;
149
 
150
    /**
151
     * Interprets a bytecode instruction with a variable number of arguments.
152
     * This method is called for the following opcodes:
153
     *
154
     * INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE,
155
     * MULTIANEWARRAY
156
     *
157
     * @param insn the bytecode instruction to be interpreted.
158
     * @param values the arguments of the instruction to be interpreted.
159
     * @return the result of the interpretation of the given instruction.
160
     * @throws AnalyzerException if an error occured during the interpretation.
161
     */
162
    Value naryOperation(AbstractInsnNode insn, List values)
163
            throws AnalyzerException;
164
 
165
    /**
166
     * Merges two values. The merge operation must return a value that
167
     * represents both values (for instance, if the two values are two types,
168
     * the merged value must be a common super type of the two types. If the two
169
     * values are integer intervals, the merged value must be an interval that
170
     * contains the previous ones. Likewise for other types of values).
171
     *
172
     * @param v a value.
173
     * @param w another value.
174
     * @return the merged value. If the merged value is equal to <tt>v</tt>,
175
     *         this method <i>must</i> return <tt>v</tt>.
176
     */
177
    Value merge(Value v, Value w);
178
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.