aboutsummaryrefslogtreecommitdiff
path: root/libjava/classpath/tools/external/asm
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2016-09-30 16:24:48 +0000
committerAndrew Haley <aph@gcc.gnu.org>2016-09-30 16:24:48 +0000
commit07b78716af6a9d7c9fd1e94d9baf94a52c873947 (patch)
tree3f22b3241c513ad168c8353805614ae1249410f4 /libjava/classpath/tools/external/asm
parenteae993948bae8b788c53772bcb9217c063716f93 (diff)
downloadgcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.zip
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.gz
gcc-07b78716af6a9d7c9fd1e94d9baf94a52c873947.tar.bz2
Makefile.def: Remove libjava.
2016-09-30 Andrew Haley <aph@redhat.com> * Makefile.def: Remove libjava. * Makefile.tpl: Likewise. * Makefile.in: Regenerate. * configure.ac: Likewise. * configure: Likewise. * gcc/java: Remove. * libjava: Likewise. From-SVN: r240662
Diffstat (limited to 'libjava/classpath/tools/external/asm')
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationVisitor.java88
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationWriter.java311
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Attribute.java254
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/ByteVector.java293
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/ClassAdapter.java121
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/ClassReader.java1606
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/ClassVisitor.java195
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/ClassWriter.java1162
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Edge.java57
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/FieldVisitor.java63
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/FieldWriter.java276
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Handler.java70
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Item.java252
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Label.java299
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/MethodAdapter.java185
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/MethodVisitor.java334
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/MethodWriter.java2022
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Opcodes.java295
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/Type.java760
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapAttribute.java378
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapFrame.java82
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapTableAttribute.java927
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapType.java114
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/AdviceAdapter.java642
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/EmptyVisitor.java211
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/GeneratorAdapter.java1454
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/LocalVariablesSorter.java136
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/Method.java220
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/SerialVersionUIDAdder.java490
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/StaticInitMerger.java99
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/commons/TableSwitchGenerator.java55
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java150
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassConstantsCollector.java212
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassOptimizer.java182
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Constant.java265
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ConstantPool.java198
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/FieldConstantsCollector.java76
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/JarOptimizer.java87
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodConstantsCollector.java168
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodOptimizer.java108
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/NameMapping.java101
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Shrinker.java168
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/shrink.properties225
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureReader.java233
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureVisitor.java185
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureWriter.java207
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AbstractInsnNode.java143
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AnnotationNode.java187
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/ClassNode.java283
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldInsnNode.java97
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldNode.java123
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IincInsnNode.java71
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InnerClassNode.java101
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InsnNode.java96
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IntInsnNode.java75
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/JumpInsnNode.java84
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LabelNode.java54
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LdcInsnNode.java68
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LineNumberNode.java73
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LocalVariableNode.java111
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LookupSwitchInsnNode.java103
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MemberNode.java120
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodInsnNode.java98
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodNode.java439
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MultiANewArrayInsnNode.java71
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TableSwitchInsnNode.java102
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TryCatchBlockNode.java93
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TypeInsnNode.java78
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/VarInsnNode.java81
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Analyzer.java416
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/AnalyzerException.java56
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicInterpreter.java335
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicValue.java105
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicVerifier.java428
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowInterpreter.java174
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowValue.java92
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Frame.java670
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/IntMap.java73
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Interpreter.java178
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SimpleVerifier.java266
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SmallSet.java126
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Subroutine.java96
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Value.java45
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAbstractVisitor.java226
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAnnotationVisitor.java127
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierClassVisitor.java607
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierFieldVisitor.java50
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierMethodVisitor.java347
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/AbstractVisitor.java201
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckAnnotationAdapter.java125
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckClassAdapter.java416
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckFieldAdapter.java75
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckMethodAdapter.java942
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAbstractVisitor.java180
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAnnotationVisitor.java272
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceClassVisitor.java534
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceFieldVisitor.java78
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceMethodVisitor.java486
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceSignatureVisitor.java300
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapAttribute.java223
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapTableAttribute.java214
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMifiable.java53
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/Traceable.java52
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/ASMContentHandler.java1215
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/Processor.java1048
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAdapter.java91
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAnnotationAdapter.java191
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXClassAdapter.java351
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXCodeAdapter.java310
-rw-r--r--libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXFieldAdapter.java77
110 files changed, 0 insertions, 30618 deletions
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationVisitor.java
deleted file mode 100644
index 835b3e0..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationVisitor.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java annotation. The methods of this interface must be
- * called in the following order: (<tt>visit<tt> | <tt>visitEnum<tt> |
- * <tt>visitAnnotation<tt> | <tt>visitArray<tt>)* <tt>visitEnd<tt>.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public interface AnnotationVisitor {
-
- /**
- * Visits a primitive value of the annotation.
- *
- * @param name the value name.
- * @param value the actual value, whose type must be {@link Byte},
- * {@link Boolean}, {@link Character}, {@link Short},
- * {@link Integer}, {@link Long}, {@link Float}, {@link Double},
- * {@link String} or {@link Type}.
- */
- void visit(String name, Object value);
-
- /**
- * Visits an enumeration value of the annotation.
- *
- * @param name the value name.
- * @param desc the class descriptor of the enumeration class.
- * @param value the actual enumeration value.
- */
- void visitEnum(String name, String desc, String value);
-
- /**
- * Visits a nested annotation value of the annotation.
- *
- * @param name the value name.
- * @param desc the class descriptor of the nested annotation class.
- * @return a non null visitor to visit the actual nested annotation value.
- * <i>The nested annotation value must be fully visited before
- * calling other methods on this annotation visitor</i>.
- */
- AnnotationVisitor visitAnnotation(String name, String desc);
-
- /**
- * Visits an array value of the annotation.
- *
- * @param name the value name.
- * @return a non null visitor to visit the actual array value elements. The
- * 'name' parameters passed to the methods of this visitor are
- * ignored. <i>All the array values must be visited before calling
- * other methods on this annotation visitor</i>.
- */
- AnnotationVisitor visitArray(String name);
-
- /**
- * Visits the end of the annotation.
- */
- void visitEnd();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationWriter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationWriter.java
deleted file mode 100644
index bf06bc9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/AnnotationWriter.java
+++ /dev/null
@@ -1,311 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * An {@link AnnotationVisitor} that generates annotations in bytecode form.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-final class AnnotationWriter implements AnnotationVisitor {
-
- /**
- * The class writer to which this annotation must be added.
- */
- private final ClassWriter cw;
-
- /**
- * The number of values in this annotation.
- */
- private int size;
-
- /**
- * <tt>true<tt> if values are named, <tt>false</tt> otherwise. Annotation
- * writers used for annotation default and annotation arrays use unnamed
- * values.
- */
- private final boolean named;
-
- /**
- * The annotation values in bytecode form. This byte vector only contains
- * the values themselves, i.e. the number of values must be stored as a
- * unsigned short just before these bytes.
- */
- private final ByteVector bv;
-
- /**
- * The byte vector to be used to store the number of values of this
- * annotation. See {@link #bv}.
- */
- private final ByteVector parent;
-
- /**
- * Where the number of values of this annotation must be stored in
- * {@link #parent}.
- */
- private final int offset;
-
- /**
- * Next annotation writer. This field is used to store annotation lists.
- */
- AnnotationWriter next;
-
- /**
- * Previous annotation writer. This field is used to store annotation lists.
- */
- AnnotationWriter prev;
-
- // ------------------------------------------------------------------------
- // Constructor
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a new {@link AnnotationWriter}.
- *
- * @param cw the class writer to which this annotation must be added.
- * @param named <tt>true<tt> if values are named, <tt>false</tt> otherwise.
- * @param bv where the annotation values must be stored.
- * @param parent where the number of annotation values must be stored.
- * @param offset where in <tt>parent</tt> the number of annotation values must
- * be stored.
- */
- AnnotationWriter(
- final ClassWriter cw,
- final boolean named,
- final ByteVector bv,
- final ByteVector parent,
- final int offset)
- {
- this.cw = cw;
- this.named = named;
- this.bv = bv;
- this.parent = parent;
- this.offset = offset;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the AnnotationVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(final String name, final Object value) {
- ++size;
- if (named) {
- bv.putShort(cw.newUTF8(name));
- }
- if (value instanceof String) {
- bv.put12('s', cw.newUTF8((String) value));
- } else if (value instanceof Byte) {
- bv.put12('B', cw.newInteger(((Byte) value).byteValue()).index);
- } else if (value instanceof Boolean) {
- int v = ((Boolean) value).booleanValue() ? 1 : 0;
- bv.put12('Z', cw.newInteger(v).index);
- } else if (value instanceof Character) {
- bv.put12('C', cw.newInteger(((Character) value).charValue()).index);
- } else if (value instanceof Short) {
- bv.put12('S', cw.newInteger(((Short) value).shortValue()).index);
- } else if (value instanceof Type) {
- bv.put12('c', cw.newUTF8(((Type) value).getDescriptor()));
- } else if (value instanceof byte[]) {
- byte[] v = (byte[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('B', cw.newInteger(v[i]).index);
- }
- } else if (value instanceof boolean[]) {
- boolean[] v = (boolean[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('Z', cw.newInteger(v[i] ? 1 : 0).index);
- }
- } else if (value instanceof short[]) {
- short[] v = (short[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('S', cw.newInteger(v[i]).index);
- }
- } else if (value instanceof char[]) {
- char[] v = (char[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('C', cw.newInteger(v[i]).index);
- }
- } else if (value instanceof int[]) {
- int[] v = (int[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('I', cw.newInteger(v[i]).index);
- }
- } else if (value instanceof long[]) {
- long[] v = (long[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('J', cw.newLong(v[i]).index);
- }
- } else if (value instanceof float[]) {
- float[] v = (float[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('F', cw.newFloat(v[i]).index);
- }
- } else if (value instanceof double[]) {
- double[] v = (double[]) value;
- bv.put12('[', v.length);
- for (int i = 0; i < v.length; i++) {
- bv.put12('D', cw.newDouble(v[i]).index);
- }
- } else {
- Item i = cw.newConstItem(value);
- bv.put12(".s.IFJDCS".charAt(i.type), i.index);
- }
- }
-
- public void visitEnum(
- final String name,
- final String desc,
- final String value)
- {
- ++size;
- if (named) {
- bv.putShort(cw.newUTF8(name));
- }
- bv.put12('e', cw.newUTF8(desc)).putShort(cw.newUTF8(value));
- }
-
- public AnnotationVisitor visitAnnotation(
- final String name,
- final String desc)
- {
- ++size;
- if (named) {
- bv.putShort(cw.newUTF8(name));
- }
- // write tag and type, and reserve space for values count
- bv.put12('@', cw.newUTF8(desc)).putShort(0);
- return new AnnotationWriter(cw, true, bv, bv, bv.length - 2);
- }
-
- public AnnotationVisitor visitArray(final String name) {
- ++size;
- if (named) {
- bv.putShort(cw.newUTF8(name));
- }
- // write tag, and reserve space for array size
- bv.put12('[', 0);
- return new AnnotationWriter(cw, false, bv, bv, bv.length - 2);
- }
-
- public void visitEnd() {
- if (parent != null) {
- byte[] data = parent.data;
- data[offset] = (byte) (size >>> 8);
- data[offset + 1] = (byte) size;
- }
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Returns the size of this annotation writer list.
- *
- * @return the size of this annotation writer list.
- */
- int getSize() {
- int size = 0;
- AnnotationWriter aw = this;
- while (aw != null) {
- size += aw.bv.length;
- aw = aw.next;
- }
- return size;
- }
-
- /**
- * Puts the annotations of this annotation writer list into the given byte
- * vector.
- *
- * @param out where the annotations must be put.
- */
- void put(final ByteVector out) {
- int n = 0;
- int size = 2;
- AnnotationWriter aw = this;
- AnnotationWriter last = null;
- while (aw != null) {
- ++n;
- size += aw.bv.length;
- aw.visitEnd(); // in case user forgot to call visitEnd
- aw.prev = last;
- last = aw;
- aw = aw.next;
- }
- out.putInt(size);
- out.putShort(n);
- aw = last;
- while (aw != null) {
- out.putByteArray(aw.bv.data, 0, aw.bv.length);
- aw = aw.prev;
- }
- }
-
- /**
- * Puts the given annotation lists into the given byte vector.
- *
- * @param panns an array of annotation writer lists.
- * @param out where the annotations must be put.
- */
- static void put(final AnnotationWriter[] panns, final ByteVector out) {
- int size = 1 + 2 * panns.length;
- for (int i = 0; i < panns.length; ++i) {
- size += panns[i] == null ? 0 : panns[i].getSize();
- }
- out.putInt(size).putByte(panns.length);
- for (int i = 0; i < panns.length; ++i) {
- AnnotationWriter aw = panns[i];
- AnnotationWriter last = null;
- int n = 0;
- while (aw != null) {
- ++n;
- aw.visitEnd(); // in case user forgot to call visitEnd
- aw.prev = last;
- last = aw;
- aw = aw.next;
- }
- out.putShort(n);
- aw = last;
- while (aw != null) {
- out.putByteArray(aw.bv.data, 0, aw.bv.length);
- aw = aw.prev;
- }
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Attribute.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Attribute.java
deleted file mode 100644
index 897a33c..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Attribute.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A non standard class, field, method or code attribute.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class Attribute {
-
- /**
- * The type of this attribute.
- */
- public final String type;
-
- /**
- * The raw value of this attribute, used only for unknown attributes.
- */
- byte[] value;
-
- /**
- * The next attribute in this attribute list. May be <tt>null</tt>.
- */
- Attribute next;
-
- /**
- * Constructs a new empty attribute.
- *
- * @param type the type of the attribute.
- */
- protected Attribute(final String type) {
- this.type = type;
- }
-
- /**
- * Returns <tt>true</tt> if this type of attribute is unknown. The default
- * implementation of this method always returns <tt>true</tt>.
- *
- * @return <tt>true</tt> if this type of attribute is unknown.
- */
- public boolean isUnknown() {
- return true;
- }
-
- /**
- * Returns <tt>true</tt> if this type of attribute is a code attribute.
- *
- * @return <tt>true</tt> if this type of attribute is a code attribute.
- */
- public boolean isCodeAttribute() {
- return false;
- }
-
- /**
- * Returns the labels corresponding to this attribute.
- *
- * @return the labels corresponding to this attribute, or <tt>null</tt> if
- * this attribute is not a code attribute that contains labels.
- */
- protected Label[] getLabels() {
- return null;
- }
-
- /**
- * Reads a {@link #type type} attribute. This method must return a <i>new</i>
- * {@link Attribute} object, of type {@link #type type}, corresponding to
- * the <tt>len</tt> bytes starting at the given offset, in the given class
- * reader.
- *
- * @param cr the class that contains the attribute to be read.
- * @param off index of the first byte of the attribute's content in {@link
- * ClassReader#b cr.b}. The 6 attribute header bytes, containing the
- * type and the length of the attribute, are not taken into account
- * here.
- * @param len the length of the attribute's content.
- * @param buf buffer to be used to call
- * {@link ClassReader#readUTF8 readUTF8},
- * {@link ClassReader#readClass(int,char[]) readClass} or
- * {@link ClassReader#readConst readConst}.
- * @param codeOff index of the first byte of code's attribute content in
- * {@link ClassReader#b cr.b}, or -1 if the attribute to be read is
- * not a code attribute. The 6 attribute header bytes, containing the
- * type and the length of the attribute, are not taken into account
- * here.
- * @param labels the labels of the method's code, or <tt>null</tt> if the
- * attribute to be read is not a code attribute.
- * @return a <i>new</i> {@link Attribute} object corresponding to the given
- * bytes.
- */
- protected Attribute read(
- ClassReader cr,
- int off,
- int len,
- char[] buf,
- int codeOff,
- Label[] labels)
- {
- Attribute attr = new Attribute(type);
- attr.value = new byte[len];
- System.arraycopy(cr.b, off, attr.value, 0, len);
- return attr;
- }
-
- /**
- * Returns the byte array form of this attribute.
- *
- * @param cw the class to which this attribute must be added. This parameter
- * can be used to add to the constant pool of this class the items
- * that corresponds to this attribute.
- * @param code the bytecode of the method corresponding to this code
- * attribute, or <tt>null</tt> if this attribute is not a code
- * attributes.
- * @param len the length of the bytecode of the method corresponding to this
- * code attribute, or <tt>null</tt> if this attribute is not a code
- * attribute.
- * @param maxStack the maximum stack size of the method corresponding to
- * this code attribute, or -1 if this attribute is not a code
- * attribute.
- * @param maxLocals the maximum number of local variables of the method
- * corresponding to this code attribute, or -1 if this attribute is
- * not a code attribute.
- * @return the byte array form of this attribute.
- */
- protected ByteVector write(
- ClassWriter cw,
- byte[] code,
- int len,
- int maxStack,
- int maxLocals)
- {
- ByteVector v = new ByteVector();
- v.data = value;
- v.length = value.length;
- return v;
- }
-
- /**
- * Returns the length of the attribute list that begins with this attribute.
- *
- * @return the length of the attribute list that begins with this attribute.
- */
- final int getCount() {
- int count = 0;
- Attribute attr = this;
- while (attr != null) {
- count += 1;
- attr = attr.next;
- }
- return count;
- }
-
- /**
- * Returns the size of all the attributes in this attribute list.
- *
- * @param cw the class writer to be used to convert the attributes into byte
- * arrays, with the {@link #write write} method.
- * @param code the bytecode of the method corresponding to these code
- * attributes, or <tt>null</tt> if these attributes are not code
- * attributes.
- * @param len the length of the bytecode of the method corresponding to
- * these code attributes, or <tt>null</tt> if these attributes are
- * not code attributes.
- * @param maxStack the maximum stack size of the method corresponding to
- * these code attributes, or -1 if these attributes are not code
- * attributes.
- * @param maxLocals the maximum number of local variables of the method
- * corresponding to these code attributes, or -1 if these attributes
- * are not code attributes.
- * @return the size of all the attributes in this attribute list. This size
- * includes the size of the attribute headers.
- */
- final int getSize(
- final ClassWriter cw,
- final byte[] code,
- final int len,
- final int maxStack,
- final int maxLocals)
- {
- Attribute attr = this;
- int size = 0;
- while (attr != null) {
- cw.newUTF8(attr.type);
- size += attr.write(cw, code, len, maxStack, maxLocals).length + 6;
- attr = attr.next;
- }
- return size;
- }
-
- /**
- * Writes all the attributes of this attribute list in the given byte
- * vector.
- *
- * @param cw the class writer to be used to convert the attributes into byte
- * arrays, with the {@link #write write} method.
- * @param code the bytecode of the method corresponding to these code
- * attributes, or <tt>null</tt> if these attributes are not code
- * attributes.
- * @param len the length of the bytecode of the method corresponding to
- * these code attributes, or <tt>null</tt> if these attributes are
- * not code attributes.
- * @param maxStack the maximum stack size of the method corresponding to
- * these code attributes, or -1 if these attributes are not code
- * attributes.
- * @param maxLocals the maximum number of local variables of the method
- * corresponding to these code attributes, or -1 if these attributes
- * are not code attributes.
- * @param out where the attributes must be written.
- */
- final void put(
- final ClassWriter cw,
- final byte[] code,
- final int len,
- final int maxStack,
- final int maxLocals,
- final ByteVector out)
- {
- Attribute attr = this;
- while (attr != null) {
- ByteVector b = attr.write(cw, code, len, maxStack, maxLocals);
- out.putShort(cw.newUTF8(attr.type)).putInt(b.length);
- out.putByteArray(b.data, 0, b.length);
- attr = attr.next;
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/ByteVector.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/ByteVector.java
deleted file mode 100644
index a1bc325..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/ByteVector.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A dynamically extensible vector of bytes. This class is roughly equivalent to
- * a DataOutputStream on top of a ByteArrayOutputStream, but is more efficient.
- *
- * @author Eric Bruneton
- */
-public class ByteVector {
-
- /**
- * The content of this vector.
- */
- byte[] data;
-
- /**
- * Actual number of bytes in this vector.
- */
- int length;
-
- /**
- * Constructs a new {@link ByteVector ByteVector} with a default initial
- * size.
- */
- public ByteVector() {
- data = new byte[64];
- }
-
- /**
- * Constructs a new {@link ByteVector ByteVector} with the given initial
- * size.
- *
- * @param initialSize the initial size of the byte vector to be constructed.
- */
- public ByteVector(final int initialSize) {
- data = new byte[initialSize];
- }
-
- /**
- * Puts a byte into this byte vector. The byte vector is automatically
- * enlarged if necessary.
- *
- * @param b a byte.
- * @return this byte vector.
- */
- public ByteVector putByte(final int b) {
- int length = this.length;
- if (length + 1 > data.length) {
- enlarge(1);
- }
- data[length++] = (byte) b;
- this.length = length;
- return this;
- }
-
- /**
- * Puts two bytes into this byte vector. The byte vector is automatically
- * enlarged if necessary.
- *
- * @param b1 a byte.
- * @param b2 another byte.
- * @return this byte vector.
- */
- ByteVector put11(final int b1, final int b2) {
- int length = this.length;
- if (length + 2 > data.length) {
- enlarge(2);
- }
- byte[] data = this.data;
- data[length++] = (byte) b1;
- data[length++] = (byte) b2;
- this.length = length;
- return this;
- }
-
- /**
- * Puts a short into this byte vector. The byte vector is automatically
- * enlarged if necessary.
- *
- * @param s a short.
- * @return this byte vector.
- */
- public ByteVector putShort(final int s) {
- int length = this.length;
- if (length + 2 > data.length) {
- enlarge(2);
- }
- byte[] data = this.data;
- data[length++] = (byte) (s >>> 8);
- data[length++] = (byte) s;
- this.length = length;
- return this;
- }
-
- /**
- * Puts a byte and a short into this byte vector. The byte vector is
- * automatically enlarged if necessary.
- *
- * @param b a byte.
- * @param s a short.
- * @return this byte vector.
- */
- ByteVector put12(final int b, final int s) {
- int length = this.length;
- if (length + 3 > data.length) {
- enlarge(3);
- }
- byte[] data = this.data;
- data[length++] = (byte) b;
- data[length++] = (byte) (s >>> 8);
- data[length++] = (byte) s;
- this.length = length;
- return this;
- }
-
- /**
- * Puts an int into this byte vector. The byte vector is automatically
- * enlarged if necessary.
- *
- * @param i an int.
- * @return this byte vector.
- */
- public ByteVector putInt(final int i) {
- int length = this.length;
- if (length + 4 > data.length) {
- enlarge(4);
- }
- byte[] data = this.data;
- data[length++] = (byte) (i >>> 24);
- data[length++] = (byte) (i >>> 16);
- data[length++] = (byte) (i >>> 8);
- data[length++] = (byte) i;
- this.length = length;
- return this;
- }
-
- /**
- * Puts a long into this byte vector. The byte vector is automatically
- * enlarged if necessary.
- *
- * @param l a long.
- * @return this byte vector.
- */
- public ByteVector putLong(final long l) {
- int length = this.length;
- if (length + 8 > data.length) {
- enlarge(8);
- }
- byte[] data = this.data;
- int i = (int) (l >>> 32);
- data[length++] = (byte) (i >>> 24);
- data[length++] = (byte) (i >>> 16);
- data[length++] = (byte) (i >>> 8);
- data[length++] = (byte) i;
- i = (int) l;
- data[length++] = (byte) (i >>> 24);
- data[length++] = (byte) (i >>> 16);
- data[length++] = (byte) (i >>> 8);
- data[length++] = (byte) i;
- this.length = length;
- return this;
- }
-
- /**
- * Puts an UTF8 string into this byte vector. The byte vector is
- * automatically enlarged if necessary.
- *
- * @param s a String.
- * @return this byte vector.
- */
- public ByteVector putUTF8(final String s) {
- int charLength = s.length();
- if (length + 2 + charLength > data.length) {
- enlarge(2 + charLength);
- }
- int len = length;
- byte[] data = this.data;
- // optimistic algorithm: instead of computing the byte length and then
- // serializing the string (which requires two loops), we assume the byte
- // length is equal to char length (which is the most frequent case), and
- // we start serializing the string right away. During the serialization,
- // if we find that this assumption is wrong, we continue with the
- // general method.
- data[len++] = (byte) (charLength >>> 8);
- data[len++] = (byte) (charLength);
- for (int i = 0; i < charLength; ++i) {
- char c = s.charAt(i);
- if (c >= '\001' && c <= '\177') {
- data[len++] = (byte) c;
- } else {
- int byteLength = i;
- for (int j = i; j < charLength; ++j) {
- c = s.charAt(j);
- if (c >= '\001' && c <= '\177') {
- byteLength++;
- } else if (c > '\u07FF') {
- byteLength += 3;
- } else {
- byteLength += 2;
- }
- }
- data[length] = (byte) (byteLength >>> 8);
- data[length + 1] = (byte) (byteLength);
- if (length + 2 + byteLength > data.length) {
- length = len;
- enlarge(2 + byteLength);
- data = this.data;
- }
- for (int j = i; j < charLength; ++j) {
- c = s.charAt(j);
- if (c >= '\001' && c <= '\177') {
- data[len++] = (byte) c;
- } else if (c > '\u07FF') {
- data[len++] = (byte) (0xE0 | c >> 12 & 0xF);
- data[len++] = (byte) (0x80 | c >> 6 & 0x3F);
- data[len++] = (byte) (0x80 | c & 0x3F);
- } else {
- data[len++] = (byte) (0xC0 | c >> 6 & 0x1F);
- data[len++] = (byte) (0x80 | c & 0x3F);
- }
- }
- break;
- }
- }
- length = len;
- return this;
- }
-
- /**
- * Puts an array of bytes into this byte vector. The byte vector is
- * automatically enlarged if necessary.
- *
- * @param b an array of bytes. May be <tt>null</tt> to put <tt>len</tt>
- * null bytes into this byte vector.
- * @param off index of the fist byte of b that must be copied.
- * @param len number of bytes of b that must be copied.
- * @return this byte vector.
- */
- public ByteVector putByteArray(final byte[] b, final int off, final int len)
- {
- if (length + len > data.length) {
- enlarge(len);
- }
- if (b != null) {
- System.arraycopy(b, off, data, length, len);
- }
- length += len;
- return this;
- }
-
- /**
- * Enlarge this byte vector so that it can receive n more bytes.
- *
- * @param size number of additional bytes that this byte vector should be
- * able to receive.
- */
- private void enlarge(final int size) {
- int length1 = 2 * data.length;
- int length2 = length + size;
- byte[] newData = new byte[length1 > length2 ? length1 : length2];
- System.arraycopy(data, 0, newData, 0, length);
- data = newData;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassAdapter.java
deleted file mode 100644
index 24e34bb..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassAdapter.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * An empty {@link ClassVisitor} that delegates to another {@link ClassVisitor}.
- * This class can be used as a super class to quickly implement usefull class
- * adapter classes, just by overriding the necessary methods.
- *
- * @author Eric Bruneton
- */
-public class ClassAdapter implements ClassVisitor {
-
- /**
- * The {@link ClassVisitor} to which this adapter delegates calls.
- */
- protected ClassVisitor cv;
-
- /**
- * Constructs a new {@link ClassAdapter} object.
- *
- * @param cv the class visitor to which this adapter must delegate calls.
- */
- public ClassAdapter(final ClassVisitor cv) {
- this.cv = cv;
- }
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- cv.visit(version, access, name, signature, superName, interfaces);
- }
-
- public void visitSource(final String source, final String debug) {
- cv.visitSource(source, debug);
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- cv.visitOuterClass(owner, name, desc);
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- return cv.visitAnnotation(desc, visible);
- }
-
- public void visitAttribute(final Attribute attr) {
- cv.visitAttribute(attr);
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- cv.visitInnerClass(name, outerName, innerName, access);
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- return cv.visitField(access, name, desc, signature, value);
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- return cv.visitMethod(access, name, desc, signature, exceptions);
- }
-
- public void visitEnd() {
- cv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassReader.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassReader.java
deleted file mode 100644
index 9d94a42..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassReader.java
+++ /dev/null
@@ -1,1606 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-import java.io.InputStream;
-import java.io.IOException;
-
-/**
- * A Java class parser to make a {@link ClassVisitor} visit an existing class.
- * This class parses a byte array conforming to the Java class file format and
- * calls the appropriate visit methods of a given class visitor for each field,
- * method and bytecode instruction encountered.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ClassReader {
-
- /**
- * The class to be parsed. <i>The content of this array must not be
- * modified. This field is intended for {@link Attribute} sub classes, and
- * is normally not needed by class generators or adapters.</i>
- */
- public final byte[] b;
-
- /**
- * The start index of each constant pool item in {@link #b b}, plus one.
- * The one byte offset skips the constant pool item tag that indicates its
- * type.
- */
- private int[] items;
-
- /**
- * The String objects corresponding to the CONSTANT_Utf8 items. This cache
- * avoids multiple parsing of a given CONSTANT_Utf8 constant pool item,
- * which GREATLY improves performances (by a factor 2 to 3). This caching
- * strategy could be extended to all constant pool items, but its benefit
- * would not be so great for these items (because they are much less
- * expensive to parse than CONSTANT_Utf8 items).
- */
- private String[] strings;
-
- /**
- * Maximum length of the strings contained in the constant pool of the
- * class.
- */
- private int maxStringLength;
-
- /**
- * Start index of the class header information (access, name...) in
- * {@link #b b}.
- */
- public final int header;
-
- // ------------------------------------------------------------------------
- // Constructors
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a new {@link ClassReader} object.
- *
- * @param b the bytecode of the class to be read.
- */
- public ClassReader(final byte[] b) {
- this(b, 0, b.length);
- }
-
- /**
- * Constructs a new {@link ClassReader} object.
- *
- * @param b the bytecode of the class to be read.
- * @param off the start offset of the class data.
- * @param len the length of the class data.
- */
- public ClassReader(final byte[] b, final int off, final int len) {
- this.b = b;
- // parses the constant pool
- items = new int[readUnsignedShort(off + 8)];
- int ll = items.length;
- strings = new String[ll];
- int max = 0;
- int index = off + 10;
- for (int i = 1; i < ll; ++i) {
- items[i] = index + 1;
- int tag = b[index];
- int size;
- switch (tag) {
- case ClassWriter.FIELD:
- case ClassWriter.METH:
- case ClassWriter.IMETH:
- case ClassWriter.INT:
- case ClassWriter.FLOAT:
- case ClassWriter.NAME_TYPE:
- size = 5;
- break;
- case ClassWriter.LONG:
- case ClassWriter.DOUBLE:
- size = 9;
- ++i;
- break;
- case ClassWriter.UTF8:
- size = 3 + readUnsignedShort(index + 1);
- if (size > max) {
- max = size;
- }
- break;
- // case ClassWriter.CLASS:
- // case ClassWriter.STR:
- default:
- size = 3;
- break;
- }
- index += size;
- }
- maxStringLength = max;
- // the class header information starts just after the constant pool
- header = index;
- }
-
- /**
- * Copies the constant pool data into the given {@link ClassWriter}. Should
- * be called before the {@link #accept(ClassVisitor,boolean)} method.
- *
- * @param classWriter the {@link ClassWriter} to copy constant pool into.
- */
- void copyPool(final ClassWriter classWriter) {
- char[] buf = new char[maxStringLength];
- int ll = items.length;
- Item[] items2 = new Item[ll];
- for (int i = 1; i < ll; i++) {
- int index = items[i];
- int tag = b[index - 1];
- Item item = new Item(i);
- int nameType;
- switch (tag) {
- case ClassWriter.FIELD:
- case ClassWriter.METH:
- case ClassWriter.IMETH:
- nameType = items[readUnsignedShort(index + 2)];
- item.set(tag,
- readClass(index, buf),
- readUTF8(nameType, buf),
- readUTF8(nameType + 2, buf));
- break;
-
- case ClassWriter.INT:
- item.set(readInt(index));
- break;
-
- case ClassWriter.FLOAT:
- item.set(Float.intBitsToFloat(readInt(index)));
- break;
-
- case ClassWriter.NAME_TYPE:
- item.set(tag,
- readUTF8(index, buf),
- readUTF8(index + 2, buf),
- null);
- break;
-
- case ClassWriter.LONG:
- item.set(readLong(index));
- ++i;
- break;
-
- case ClassWriter.DOUBLE:
- item.set(Double.longBitsToDouble(readLong(index)));
- ++i;
- break;
-
- case ClassWriter.UTF8: {
- String s = strings[i];
- if (s == null) {
- index = items[i];
- s = strings[i] = readUTF(index + 2,
- readUnsignedShort(index),
- buf);
- }
- item.set(tag, s, null, null);
- }
- break;
-
- // case ClassWriter.STR:
- // case ClassWriter.CLASS:
- default:
- item.set(tag, readUTF8(index, buf), null, null);
- break;
- }
-
- int index2 = item.hashCode % items2.length;
- item.next = items2[index2];
- items2[index2] = item;
- }
-
- int off = items[1] - 1;
- classWriter.pool.putByteArray(b, off, header - off);
- classWriter.items = items2;
- classWriter.threshold = (int) (0.75d * ll);
- classWriter.index = ll;
- }
-
- /**
- * Constructs a new {@link ClassReader} object.
- *
- * @param is an input stream from which to read the class.
- * @throws IOException if a problem occurs during reading.
- */
- public ClassReader(final InputStream is) throws IOException {
- this(readClass(is));
- }
-
- /**
- * Constructs a new {@link ClassReader} object.
- *
- * @param name the fully qualified name of the class to be read.
- * @throws IOException if an exception occurs during reading.
- */
- public ClassReader(final String name) throws IOException {
- this(ClassLoader.getSystemResourceAsStream(name.replace('.', '/')
- + ".class"));
- }
-
- /**
- * Reads the bytecode of a class.
- *
- * @param is an input stream from which to read the class.
- * @return the bytecode read from the given input stream.
- * @throws IOException if a problem occurs during reading.
- */
- private static byte[] readClass(final InputStream is) throws IOException {
- if (is == null) {
- throw new IOException("Class not found");
- }
- byte[] b = new byte[is.available()];
- int len = 0;
- while (true) {
- int n = is.read(b, len, b.length - len);
- if (n == -1) {
- if (len < b.length) {
- byte[] c = new byte[len];
- System.arraycopy(b, 0, c, 0, len);
- b = c;
- }
- return b;
- }
- len += n;
- if (len == b.length) {
- byte[] c = new byte[b.length + 1000];
- System.arraycopy(b, 0, c, 0, len);
- b = c;
- }
- }
- }
-
- // ------------------------------------------------------------------------
- // Public methods
- // ------------------------------------------------------------------------
-
- /**
- * Makes the given visitor visit the Java class of this {@link ClassReader}.
- * This class is the one specified in the constructor (see
- * {@link #ClassReader(byte[]) ClassReader}).
- *
- * @param classVisitor the visitor that must visit this class.
- * @param skipDebug <tt>true</tt> if the debug information of the class
- * must not be visited. In this case the
- * {@link MethodVisitor#visitLocalVariable visitLocalVariable} and
- * {@link MethodVisitor#visitLineNumber visitLineNumber} methods will
- * not be called.
- */
- public void accept(final ClassVisitor classVisitor, final boolean skipDebug)
- {
- accept(classVisitor, new Attribute[0], skipDebug);
- }
-
- /**
- * Makes the given visitor visit the Java class of this {@link ClassReader}.
- * This class is the one specified in the constructor (see
- * {@link #ClassReader(byte[]) ClassReader}).
- *
- * @param classVisitor the visitor that must visit this class.
- * @param attrs prototypes of the attributes that must be parsed during the
- * visit of the class. Any attribute whose type is not equal to the
- * type of one the prototypes will be ignored.
- * @param skipDebug <tt>true</tt> if the debug information of the class
- * must not be visited. In this case the
- * {@link MethodVisitor#visitLocalVariable visitLocalVariable} and
- * {@link MethodVisitor#visitLineNumber visitLineNumber} methods will
- * not be called.
- */
- public void accept(
- final ClassVisitor classVisitor,
- final Attribute[] attrs,
- final boolean skipDebug)
- {
- byte[] b = this.b; // the bytecode array
- char[] c = new char[maxStringLength]; // buffer used to read strings
- int i, j, k; // loop variables
- int u, v, w; // indexes in b
- Attribute attr;
-
- int access;
- String name;
- String desc;
- String attrName;
- String signature;
- int anns = 0;
- int ianns = 0;
- Attribute cattrs = null;
-
- // visits the header
- u = header;
- access = readUnsignedShort(u);
- name = readClass(u + 2, c);
- v = items[readUnsignedShort(u + 4)];
- String superClassName = v == 0 ? null : readUTF8(v, c);
- String[] implementedItfs = new String[readUnsignedShort(u + 6)];
- w = 0;
- u += 8;
- for (i = 0; i < implementedItfs.length; ++i) {
- implementedItfs[i] = readClass(u, c);
- u += 2;
- }
-
- // skips fields and methods
- v = u;
- i = readUnsignedShort(v);
- v += 2;
- for (; i > 0; --i) {
- j = readUnsignedShort(v + 6);
- v += 8;
- for (; j > 0; --j) {
- v += 6 + readInt(v + 2);
- }
- }
- i = readUnsignedShort(v);
- v += 2;
- for (; i > 0; --i) {
- j = readUnsignedShort(v + 6);
- v += 8;
- for (; j > 0; --j) {
- v += 6 + readInt(v + 2);
- }
- }
- // reads the class's attributes
- signature = null;
- String sourceFile = null;
- String sourceDebug = null;
- String enclosingOwner = null;
- String enclosingName = null;
- String enclosingDesc = null;
-
- i = readUnsignedShort(v);
- v += 2;
- for (; i > 0; --i) {
- attrName = readUTF8(v, c);
- if (attrName.equals("SourceFile")) {
- sourceFile = readUTF8(v + 6, c);
- } else if (attrName.equals("Deprecated")) {
- access |= Opcodes.ACC_DEPRECATED;
- } else if (attrName.equals("Synthetic")) {
- access |= Opcodes.ACC_SYNTHETIC;
- } else if (attrName.equals("Annotation")) {
- access |= Opcodes.ACC_ANNOTATION;
- } else if (attrName.equals("Enum")) {
- access |= Opcodes.ACC_ENUM;
- } else if (attrName.equals("InnerClasses")) {
- w = v + 6;
- } else if (attrName.equals("Signature")) {
- signature = readUTF8(v + 6, c);
- } else if (attrName.equals("SourceDebugExtension")) {
- int len = readInt(v + 2);
- sourceDebug = readUTF(v + 6, len, new char[len]);
- } else if (attrName.equals("EnclosingMethod")) {
- enclosingOwner = readClass(v + 6, c);
- int item = readUnsignedShort(v + 8);
- if (item != 0) {
- enclosingName = readUTF8(items[item], c);
- enclosingDesc = readUTF8(items[item] + 2, c);
- }
- } else if (attrName.equals("RuntimeVisibleAnnotations")) {
- anns = v + 6;
- } else if (attrName.equals("RuntimeInvisibleAnnotations")) {
- ianns = v + 6;
- } else {
- attr = readAttribute(attrs,
- attrName,
- v + 6,
- readInt(v + 2),
- c,
- -1,
- null);
- if (attr != null) {
- attr.next = cattrs;
- cattrs = attr;
- }
- }
- v += 6 + readInt(v + 2);
- }
- // calls the visit method
- classVisitor.visit(readInt(4),
- access,
- name,
- signature,
- superClassName,
- implementedItfs);
-
- // calls the visitSource method
- if (sourceFile != null || sourceDebug != null) {
- classVisitor.visitSource(sourceFile, sourceDebug);
- }
-
- // calls the visitOuterClass method
- if (enclosingOwner != null) {
- classVisitor.visitOuterClass(enclosingOwner,
- enclosingName,
- enclosingDesc);
- }
-
- // visits the class annotations
- for (i = 1; i >= 0; --i) {
- v = i == 0 ? ianns : anns;
- if (v != 0) {
- j = readUnsignedShort(v);
- v += 2;
- for (; j > 0; --j) {
- desc = readUTF8(v, c);
- v += 2;
- v = readAnnotationValues(v,
- c,
- classVisitor.visitAnnotation(desc, i != 0));
- }
- }
- }
-
- // visits the class attributes
- while (cattrs != null) {
- attr = cattrs.next;
- cattrs.next = null;
- classVisitor.visitAttribute(cattrs);
- cattrs = attr;
- }
-
- // class the visitInnerClass method
- if (w != 0) {
- i = readUnsignedShort(w);
- w += 2;
- for (; i > 0; --i) {
- classVisitor.visitInnerClass(readUnsignedShort(w) == 0
- ? null
- : readClass(w, c), readUnsignedShort(w + 2) == 0
- ? null
- : readClass(w + 2, c), readUnsignedShort(w + 4) == 0
- ? null
- : readUTF8(w + 4, c), readUnsignedShort(w + 6));
- w += 8;
- }
- }
-
- // visits the fields
- i = readUnsignedShort(u);
- u += 2;
- for (; i > 0; --i) {
- access = readUnsignedShort(u);
- name = readUTF8(u + 2, c);
- desc = readUTF8(u + 4, c);
- // visits the field's attributes and looks for a ConstantValue
- // attribute
- int fieldValueItem = 0;
- signature = null;
- anns = 0;
- ianns = 0;
- cattrs = null;
-
- j = readUnsignedShort(u + 6);
- u += 8;
- for (; j > 0; --j) {
- attrName = readUTF8(u, c);
- if (attrName.equals("ConstantValue")) {
- fieldValueItem = readUnsignedShort(u + 6);
- } else if (attrName.equals("Synthetic")) {
- access |= Opcodes.ACC_SYNTHETIC;
- } else if (attrName.equals("Deprecated")) {
- access |= Opcodes.ACC_DEPRECATED;
- } else if (attrName.equals("Enum")) {
- access |= Opcodes.ACC_ENUM;
- } else if (attrName.equals("Signature")) {
- signature = readUTF8(u + 6, c);
- } else if (attrName.equals("RuntimeVisibleAnnotations")) {
- anns = u + 6;
- } else if (attrName.equals("RuntimeInvisibleAnnotations")) {
- ianns = u + 6;
- } else {
- attr = readAttribute(attrs,
- attrName,
- u + 6,
- readInt(u + 2),
- c,
- -1,
- null);
- if (attr != null) {
- attr.next = cattrs;
- cattrs = attr;
- }
- }
- u += 6 + readInt(u + 2);
- }
- // reads the field's value, if any
- Object value = (fieldValueItem == 0
- ? null
- : readConst(fieldValueItem, c));
- // visits the field
- FieldVisitor fv = classVisitor.visitField(access,
- name,
- desc,
- signature,
- value);
- // visits the field annotations and attributes
- if (fv != null) {
- for (j = 1; j >= 0; --j) {
- v = j == 0 ? ianns : anns;
- if (v != 0) {
- k = readUnsignedShort(v);
- v += 2;
- for (; k > 0; --k) {
- desc = readUTF8(v, c);
- v += 2;
- v = readAnnotationValues(v,
- c,
- fv.visitAnnotation(desc, j != 0));
- }
- }
- }
- while (cattrs != null) {
- attr = cattrs.next;
- cattrs.next = null;
- fv.visitAttribute(cattrs);
- cattrs = attr;
- }
- fv.visitEnd();
- }
- }
-
- // visits the methods
- i = readUnsignedShort(u);
- u += 2;
- for (; i > 0; --i) {
- int u0 = u + 6;
- access = readUnsignedShort(u);
- name = readUTF8(u + 2, c);
- desc = readUTF8(u + 4, c);
- signature = null;
- anns = 0;
- ianns = 0;
- int dann = 0;
- int mpanns = 0;
- int impanns = 0;
- cattrs = null;
- v = 0;
- w = 0;
-
- // looks for Code and Exceptions attributes
- j = readUnsignedShort(u + 6);
- u += 8;
- for (; j > 0; --j) {
- attrName = readUTF8(u, c);
- u += 2;
- int attrSize = readInt(u);
- u += 4;
- if (attrName.equals("Code")) {
- v = u;
- } else if (attrName.equals("Exceptions")) {
- w = u;
- } else if (attrName.equals("Synthetic")) {
- access |= Opcodes.ACC_SYNTHETIC;
- } else if (attrName.equals("Varargs")) {
- access |= Opcodes.ACC_VARARGS;
- } else if (attrName.equals("Bridge")) {
- access |= Opcodes.ACC_BRIDGE;
- } else if (attrName.equals("Deprecated")) {
- access |= Opcodes.ACC_DEPRECATED;
- } else if (attrName.equals("Signature")) {
- signature = readUTF8(u, c);
- } else if (attrName.equals("AnnotationDefault")) {
- dann = u;
- } else if (attrName.equals("RuntimeVisibleAnnotations")) {
- anns = u;
- } else if (attrName.equals("RuntimeInvisibleAnnotations")) {
- ianns = u;
- } else if (attrName.equals("RuntimeVisibleParameterAnnotations"))
- {
- mpanns = u;
- } else if (attrName.equals("RuntimeInvisibleParameterAnnotations"))
- {
- impanns = u;
- } else {
- attr = readAttribute(attrs,
- attrName,
- u,
- attrSize,
- c,
- -1,
- null);
- if (attr != null) {
- attr.next = cattrs;
- cattrs = attr;
- }
- }
- u += attrSize;
- }
- // reads declared exceptions
- String[] exceptions;
- if (w == 0) {
- exceptions = null;
- } else {
- exceptions = new String[readUnsignedShort(w)];
- w += 2;
- for (j = 0; j < exceptions.length; ++j) {
- exceptions[j] = readClass(w, c);
- w += 2;
- }
- }
-
- // visits the method's code, if any
- MethodVisitor mv = classVisitor.visitMethod(access,
- name,
- desc,
- signature,
- exceptions);
-
- if (mv != null) {
- /*
- * if the returned MethodVisitor is in fact a MethodWriter, it
- * means there is no method adapter between the reader and the
- * writer. If, in addition, the writer's constant pool was
- * copied from this reader (mw.cw.cr == this), and the signature
- * and exceptions of the method have not been changed, then it
- * is possible to skip all visit events and just copy the
- * original code of the method to the writer (the access, name
- * and descriptor can have been changed, this is not important
- * since they are not copied as is from the reader).
- */
- if (mv instanceof MethodWriter) {
- MethodWriter mw = (MethodWriter) mv;
- if (mw.cw.cr == this) {
- if (signature == mw.signature) {
- boolean sameExceptions = false;
- if (exceptions == null) {
- sameExceptions = mw.exceptionCount == 0;
- } else {
- if (exceptions.length == mw.exceptionCount) {
- sameExceptions = true;
- for (j = exceptions.length - 1; j >= 0; --j)
- {
- w -= 2;
- if (mw.exceptions[j] != readUnsignedShort(w))
- {
- sameExceptions = false;
- break;
- }
- }
- }
- }
- if (sameExceptions) {
- /*
- * we do not copy directly the code into
- * MethodWriter to save a byte array copy
- * operation. The real copy will be done in
- * ClassWriter.toByteArray().
- */
- mw.classReaderOffset = u0;
- mw.classReaderLength = u - u0;
- continue;
- }
- }
- }
- }
- if (dann != 0) {
- AnnotationVisitor dv = mv.visitAnnotationDefault();
- readAnnotationValue(dann, c, null, dv);
- dv.visitEnd();
- }
- for (j = 1; j >= 0; --j) {
- w = j == 0 ? ianns : anns;
- if (w != 0) {
- k = readUnsignedShort(w);
- w += 2;
- for (; k > 0; --k) {
- desc = readUTF8(w, c);
- w += 2;
- w = readAnnotationValues(w,
- c,
- mv.visitAnnotation(desc, j != 0));
- }
- }
- }
- if (mpanns != 0) {
- readParameterAnnotations(mpanns, c, true, mv);
- }
- if (impanns != 0) {
- readParameterAnnotations(impanns, c, false, mv);
- }
- while (cattrs != null) {
- attr = cattrs.next;
- cattrs.next = null;
- mv.visitAttribute(cattrs);
- cattrs = attr;
- }
- }
-
- if (mv != null && v != 0) {
- int maxStack = readUnsignedShort(v);
- int maxLocals = readUnsignedShort(v + 2);
- int codeLength = readInt(v + 4);
- v += 8;
-
- int codeStart = v;
- int codeEnd = v + codeLength;
-
- mv.visitCode();
-
- // 1st phase: finds the labels
- int label;
- Label[] labels = new Label[codeLength + 1];
- while (v < codeEnd) {
- int opcode = b[v] & 0xFF;
- switch (ClassWriter.TYPE[opcode]) {
- case ClassWriter.NOARG_INSN:
- case ClassWriter.IMPLVAR_INSN:
- v += 1;
- break;
- case ClassWriter.LABEL_INSN:
- label = v - codeStart + readShort(v + 1);
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- v += 3;
- break;
- case ClassWriter.LABELW_INSN:
- label = v - codeStart + readInt(v + 1);
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- v += 5;
- break;
- case ClassWriter.WIDE_INSN:
- opcode = b[v + 1] & 0xFF;
- if (opcode == Opcodes.IINC) {
- v += 6;
- } else {
- v += 4;
- }
- break;
- case ClassWriter.TABL_INSN:
- // skips 0 to 3 padding bytes
- w = v - codeStart;
- v = v + 4 - (w & 3);
- // reads instruction
- label = w + readInt(v);
- v += 4;
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- j = readInt(v);
- v += 4;
- j = readInt(v) - j + 1;
- v += 4;
- for (; j > 0; --j) {
- label = w + readInt(v);
- v += 4;
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- }
- break;
- case ClassWriter.LOOK_INSN:
- // skips 0 to 3 padding bytes
- w = v - codeStart;
- v = v + 4 - (w & 3);
- // reads instruction
- label = w + readInt(v);
- v += 4;
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- j = readInt(v);
- v += 4;
- for (; j > 0; --j) {
- v += 4; // skips key
- label = w + readInt(v);
- v += 4;
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- }
- break;
- case ClassWriter.VAR_INSN:
- case ClassWriter.SBYTE_INSN:
- case ClassWriter.LDC_INSN:
- v += 2;
- break;
- case ClassWriter.SHORT_INSN:
- case ClassWriter.LDCW_INSN:
- case ClassWriter.FIELDORMETH_INSN:
- case ClassWriter.TYPE_INSN:
- case ClassWriter.IINC_INSN:
- v += 3;
- break;
- case ClassWriter.ITFMETH_INSN:
- v += 5;
- break;
- // case MANA_INSN:
- default:
- v += 4;
- break;
- }
- }
- // parses the try catch entries
- j = readUnsignedShort(v);
- v += 2;
- for (; j > 0; --j) {
- label = readUnsignedShort(v);
- Label start = labels[label];
- if (start == null) {
- labels[label] = start = new Label();
- }
- label = readUnsignedShort(v + 2);
- Label end = labels[label];
- if (end == null) {
- labels[label] = end = new Label();
- }
- label = readUnsignedShort(v + 4);
- Label handler = labels[label];
- if (handler == null) {
- labels[label] = handler = new Label();
- }
-
- int type = readUnsignedShort(v + 6);
- if (type == 0) {
- mv.visitTryCatchBlock(start, end, handler, null);
- } else {
- mv.visitTryCatchBlock(start,
- end,
- handler,
- readUTF8(items[type], c));
- }
- v += 8;
- }
- // parses the local variable, line number tables, and code
- // attributes
- int varTable = 0;
- int varTypeTable = 0;
- cattrs = null;
- j = readUnsignedShort(v);
- v += 2;
- for (; j > 0; --j) {
- attrName = readUTF8(v, c);
- if (attrName.equals("LocalVariableTable")) {
- if (!skipDebug) {
- varTable = v + 6;
- k = readUnsignedShort(v + 6);
- w = v + 8;
- for (; k > 0; --k) {
- label = readUnsignedShort(w);
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- label += readUnsignedShort(w + 2);
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- w += 10;
- }
- }
- } else if (attrName.equals("LocalVariableTypeTable")) {
- varTypeTable = v + 6;
- } else if (attrName.equals("LineNumberTable")) {
- if (!skipDebug) {
- k = readUnsignedShort(v + 6);
- w = v + 8;
- for (; k > 0; --k) {
- label = readUnsignedShort(w);
- if (labels[label] == null) {
- labels[label] = new Label();
- }
- labels[label].line = readUnsignedShort(w + 2);
- w += 4;
- }
- }
- } else {
- for (k = 0; k < attrs.length; ++k) {
- if (attrs[k].type.equals(attrName)) {
- attr = attrs[k].read(this,
- v + 6,
- readInt(v + 2),
- c,
- codeStart - 8,
- labels);
- if (attr != null) {
- attr.next = cattrs;
- cattrs = attr;
- }
- }
- }
- }
- v += 6 + readInt(v + 2);
- }
-
- // 2nd phase: visits each instruction
- v = codeStart;
- Label l;
- while (v < codeEnd) {
- w = v - codeStart;
- l = labels[w];
- if (l != null) {
- mv.visitLabel(l);
- if (!skipDebug && l.line > 0) {
- mv.visitLineNumber(l.line, l);
- }
- }
- int opcode = b[v] & 0xFF;
- switch (ClassWriter.TYPE[opcode]) {
- case ClassWriter.NOARG_INSN:
- mv.visitInsn(opcode);
- v += 1;
- break;
- case ClassWriter.IMPLVAR_INSN:
- if (opcode > Opcodes.ISTORE) {
- opcode -= 59; // ISTORE_0
- mv.visitVarInsn(Opcodes.ISTORE + (opcode >> 2),
- opcode & 0x3);
- } else {
- opcode -= 26; // ILOAD_0
- mv.visitVarInsn(Opcodes.ILOAD + (opcode >> 2),
- opcode & 0x3);
- }
- v += 1;
- break;
- case ClassWriter.LABEL_INSN:
- mv.visitJumpInsn(opcode, labels[w
- + readShort(v + 1)]);
- v += 3;
- break;
- case ClassWriter.LABELW_INSN:
- mv.visitJumpInsn(opcode - 33, labels[w
- + readInt(v + 1)]);
- v += 5;
- break;
- case ClassWriter.WIDE_INSN:
- opcode = b[v + 1] & 0xFF;
- if (opcode == Opcodes.IINC) {
- mv.visitIincInsn(readUnsignedShort(v + 2),
- readShort(v + 4));
- v += 6;
- } else {
- mv.visitVarInsn(opcode,
- readUnsignedShort(v + 2));
- v += 4;
- }
- break;
- case ClassWriter.TABL_INSN:
- // skips 0 to 3 padding bytes
- v = v + 4 - (w & 3);
- // reads instruction
- label = w + readInt(v);
- v += 4;
- int min = readInt(v);
- v += 4;
- int max = readInt(v);
- v += 4;
- Label[] table = new Label[max - min + 1];
- for (j = 0; j < table.length; ++j) {
- table[j] = labels[w + readInt(v)];
- v += 4;
- }
- mv.visitTableSwitchInsn(min,
- max,
- labels[label],
- table);
- break;
- case ClassWriter.LOOK_INSN:
- // skips 0 to 3 padding bytes
- v = v + 4 - (w & 3);
- // reads instruction
- label = w + readInt(v);
- v += 4;
- j = readInt(v);
- v += 4;
- int[] keys = new int[j];
- Label[] values = new Label[j];
- for (j = 0; j < keys.length; ++j) {
- keys[j] = readInt(v);
- v += 4;
- values[j] = labels[w + readInt(v)];
- v += 4;
- }
- mv.visitLookupSwitchInsn(labels[label],
- keys,
- values);
- break;
- case ClassWriter.VAR_INSN:
- mv.visitVarInsn(opcode, b[v + 1] & 0xFF);
- v += 2;
- break;
- case ClassWriter.SBYTE_INSN:
- mv.visitIntInsn(opcode, b[v + 1]);
- v += 2;
- break;
- case ClassWriter.SHORT_INSN:
- mv.visitIntInsn(opcode, readShort(v + 1));
- v += 3;
- break;
- case ClassWriter.LDC_INSN:
- mv.visitLdcInsn(readConst(b[v + 1] & 0xFF, c));
- v += 2;
- break;
- case ClassWriter.LDCW_INSN:
- mv.visitLdcInsn(readConst(readUnsignedShort(v + 1),
- c));
- v += 3;
- break;
- case ClassWriter.FIELDORMETH_INSN:
- case ClassWriter.ITFMETH_INSN:
- int cpIndex = items[readUnsignedShort(v + 1)];
- String iowner = readClass(cpIndex, c);
- cpIndex = items[readUnsignedShort(cpIndex + 2)];
- String iname = readUTF8(cpIndex, c);
- String idesc = readUTF8(cpIndex + 2, c);
- if (opcode < Opcodes.INVOKEVIRTUAL) {
- mv.visitFieldInsn(opcode, iowner, iname, idesc);
- } else {
- mv.visitMethodInsn(opcode, iowner, iname, idesc);
- }
- if (opcode == Opcodes.INVOKEINTERFACE) {
- v += 5;
- } else {
- v += 3;
- }
- break;
- case ClassWriter.TYPE_INSN:
- mv.visitTypeInsn(opcode, readClass(v + 1, c));
- v += 3;
- break;
- case ClassWriter.IINC_INSN:
- mv.visitIincInsn(b[v + 1] & 0xFF, b[v + 2]);
- v += 3;
- break;
- // case MANA_INSN:
- default:
- mv.visitMultiANewArrayInsn(readClass(v + 1, c),
- b[v + 3] & 0xFF);
- v += 4;
- break;
- }
- }
- l = labels[codeEnd - codeStart];
- if (l != null) {
- mv.visitLabel(l);
- }
-
- // visits the local variable tables
- if (!skipDebug && varTable != 0) {
- int[] typeTable = null;
- if (varTypeTable != 0) {
- w = varTypeTable;
- k = readUnsignedShort(w) * 3;
- w += 2;
- typeTable = new int[k];
- while (k > 0) {
- typeTable[--k] = w + 6; // signature
- typeTable[--k] = readUnsignedShort(w + 8); // index
- typeTable[--k] = readUnsignedShort(w); // start
- w += 10;
- }
- }
- w = varTable;
- k = readUnsignedShort(w);
- w += 2;
- for (; k > 0; --k) {
- int start = readUnsignedShort(w);
- int length = readUnsignedShort(w + 2);
- int index = readUnsignedShort(w + 8);
- String vsignature = null;
- if (typeTable != null) {
- for (int a = 0; a < typeTable.length; a += 3) {
- if (typeTable[a] == start
- && typeTable[a + 1] == index)
- {
- vsignature = readUTF8(typeTable[a + 2], c);
- break;
- }
- }
- }
- mv.visitLocalVariable(readUTF8(w + 4, c),
- readUTF8(w + 6, c),
- vsignature,
- labels[start],
- labels[start + length],
- index);
- w += 10;
- }
- }
- // visits the other attributes
- while (cattrs != null) {
- attr = cattrs.next;
- cattrs.next = null;
- mv.visitAttribute(cattrs);
- cattrs = attr;
- }
- // visits the max stack and max locals values
- mv.visitMaxs(maxStack, maxLocals);
- }
-
- if (mv != null) {
- mv.visitEnd();
- }
- }
-
- // visits the end of the class
- classVisitor.visitEnd();
- }
-
- /**
- * Reads parameter annotations and makes the given visitor visit them.
- *
- * @param v start offset in {@link #b b} of the annotations to be read.
- * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
- * {@link #readClass(int,char[]) readClass} or
- * {@link #readConst readConst}.
- * @param visible <tt>true</tt> if the annotations to be read are visible
- * at runtime.
- * @param mv the visitor that must visit the annotations.
- */
- private void readParameterAnnotations(
- int v,
- final char[] buf,
- final boolean visible,
- final MethodVisitor mv)
- {
- int n = b[v++] & 0xFF;
- for (int i = 0; i < n; ++i) {
- int j = readUnsignedShort(v);
- v += 2;
- for (; j > 0; --j) {
- String desc = readUTF8(v, buf);
- v += 2;
- AnnotationVisitor av = mv.visitParameterAnnotation(i,
- desc,
- visible);
- v = readAnnotationValues(v, buf, av);
- }
- }
- }
-
- /**
- * Reads the values of an annotation and makes the given visitor visit them.
- *
- * @param v the start offset in {@link #b b} of the values to be read
- * (including the unsigned short that gives the number of values).
- * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
- * {@link #readClass(int,char[]) readClass} or
- * {@link #readConst readConst}.
- * @param av the visitor that must visit the values.
- * @return the end offset of the annotations values.
- */
- private int readAnnotationValues(
- int v,
- final char[] buf,
- final AnnotationVisitor av)
- {
- int i = readUnsignedShort(v);
- v += 2;
- for (; i > 0; --i) {
- String name = readUTF8(v, buf);
- v += 2;
- v = readAnnotationValue(v, buf, name, av);
- }
- av.visitEnd();
- return v;
- }
-
- /**
- * Reads a value of an annotation and makes the given visitor visit it.
- *
- * @param v the start offset in {@link #b b} of the value to be read (<i>not
- * including the value name constant pool index</i>).
- * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
- * {@link #readClass(int,char[]) readClass} or
- * {@link #readConst readConst}.
- * @param name the name of the value to be read.
- * @param av the visitor that must visit the value.
- * @return the end offset of the annotation value.
- */
- private int readAnnotationValue(
- int v,
- final char[] buf,
- final String name,
- final AnnotationVisitor av)
- {
- int i;
- switch (readByte(v++)) {
- case 'I': // pointer to CONSTANT_Integer
- case 'J': // pointer to CONSTANT_Long
- case 'F': // pointer to CONSTANT_Float
- case 'D': // pointer to CONSTANT_Double
- av.visit(name, readConst(readUnsignedShort(v), buf));
- v += 2;
- break;
- case 'B': // pointer to CONSTANT_Byte
- av.visit(name,
- new Byte((byte) readInt(items[readUnsignedShort(v)])));
- v += 2;
- break;
- case 'Z': // pointer to CONSTANT_Boolean
- boolean b = readInt(items[readUnsignedShort(v)]) == 0;
- av.visit(name, b ? Boolean.FALSE : Boolean.TRUE);
- v += 2;
- break;
- case 'S': // pointer to CONSTANT_Short
- av.visit(name,
- new Short((short) readInt(items[readUnsignedShort(v)])));
- v += 2;
- break;
- case 'C': // pointer to CONSTANT_Char
- av.visit(name,
- new Character((char) readInt(items[readUnsignedShort(v)])));
- v += 2;
- break;
- case 's': // pointer to CONSTANT_Utf8
- av.visit(name, readUTF8(v, buf));
- v += 2;
- break;
- case 'e': // enum_const_value
- av.visitEnum(name, readUTF8(v, buf), readUTF8(v + 2, buf));
- v += 4;
- break;
- case 'c': // class_info
- av.visit(name, Type.getType(readUTF8(v, buf)));
- v += 2;
- break;
- case '@': // annotation_value
- String desc = readUTF8(v, buf);
- v += 2;
- v = readAnnotationValues(v, buf, av.visitAnnotation(name, desc));
- break;
- case '[': // array_value
- int size = readUnsignedShort(v);
- v += 2;
- if (size == 0) {
- av.visitArray(name).visitEnd();
- return v;
- }
- switch (readByte(v++)) {
- case 'B':
- byte[] bv = new byte[size];
- for (i = 0; i < size; i++) {
- bv[i] = (byte) readInt(items[readUnsignedShort(v)]);
- v += 3;
- }
- av.visit(name, bv);
- --v;
- break;
- case 'Z':
- boolean[] zv = new boolean[size];
- for (i = 0; i < size; i++) {
- zv[i] = readInt(items[readUnsignedShort(v)]) != 0;
- v += 3;
- }
- av.visit(name, zv);
- --v;
- break;
- case 'S':
- short[] sv = new short[size];
- for (i = 0; i < size; i++) {
- sv[i] = (short) readInt(items[readUnsignedShort(v)]);
- v += 3;
- }
- av.visit(name, sv);
- --v;
- break;
- case 'C':
- char[] cv = new char[size];
- for (i = 0; i < size; i++) {
- cv[i] = (char) readInt(items[readUnsignedShort(v)]);
- v += 3;
- }
- av.visit(name, cv);
- --v;
- break;
- case 'I':
- int[] iv = new int[size];
- for (i = 0; i < size; i++) {
- iv[i] = readInt(items[readUnsignedShort(v)]);
- v += 3;
- }
- av.visit(name, iv);
- --v;
- break;
- case 'J':
- long[] lv = new long[size];
- for (i = 0; i < size; i++) {
- lv[i] = readLong(items[readUnsignedShort(v)]);
- v += 3;
- }
- av.visit(name, lv);
- --v;
- break;
- case 'F':
- float[] fv = new float[size];
- for (i = 0; i < size; i++) {
- fv[i] = Float.intBitsToFloat(readInt(items[readUnsignedShort(v)]));
- v += 3;
- }
- av.visit(name, fv);
- --v;
- break;
- case 'D':
- double[] dv = new double[size];
- for (i = 0; i < size; i++) {
- dv[i] = Double.longBitsToDouble(readLong(items[readUnsignedShort(v)]));
- v += 3;
- }
- av.visit(name, dv);
- --v;
- break;
- default:
- v--;
- AnnotationVisitor aav = av.visitArray(name);
- for (i = size; i > 0; --i) {
- v = readAnnotationValue(v, buf, null, aav);
- }
- aav.visitEnd();
- }
- }
- return v;
- }
-
- /**
- * Reads an attribute in {@link #b b}.
- *
- * @param attrs prototypes of the attributes that must be parsed during the
- * visit of the class. Any attribute whose type is not equal to the
- * type of one the prototypes is ignored (i.e. an empty
- * {@link Attribute} instance is returned).
- * @param type the type of the attribute.
- * @param off index of the first byte of the attribute's content in
- * {@link #b b}. The 6 attribute header bytes, containing the type
- * and the length of the attribute, are not taken into account here
- * (they have already been read).
- * @param len the length of the attribute's content.
- * @param buf buffer to be used to call {@link #readUTF8 readUTF8},
- * {@link #readClass(int,char[]) readClass} or
- * {@link #readConst readConst}.
- * @param codeOff index of the first byte of code's attribute content in
- * {@link #b b}, or -1 if the attribute to be read is not a code
- * attribute. The 6 attribute header bytes, containing the type and
- * the length of the attribute, are not taken into account here.
- * @param labels the labels of the method's code, or <tt>null</tt> if the
- * attribute to be read is not a code attribute.
- * @return the attribute that has been read, or <tt>null</tt> to skip this
- * attribute.
- */
- private Attribute readAttribute(
- final Attribute[] attrs,
- final String type,
- final int off,
- final int len,
- final char[] buf,
- final int codeOff,
- final Label[] labels)
- {
- for (int i = 0; i < attrs.length; ++i) {
- if (attrs[i].type.equals(type)) {
- return attrs[i].read(this, off, len, buf, codeOff, labels);
- }
- }
- return new Attribute(type).read(this, off, len, null, -1, null);
- }
-
- // ------------------------------------------------------------------------
- // Utility methods: low level parsing
- // ------------------------------------------------------------------------
-
- /**
- * Returns the start index of the constant pool item in {@link #b b}, plus
- * one. <i>This method is intended for {@link Attribute} sub classes, and is
- * normally not needed by class generators or adapters.</i>
- *
- * @param item the index a constant pool item.
- * @return the start index of the constant pool item in {@link #b b}, plus
- * one.
- */
- public int getItem(final int item) {
- return items[item];
- }
-
- /**
- * Reads a byte value in {@link #b b}. <i>This method is intended for
- * {@link Attribute} sub classes, and is normally not needed by class
- * generators or adapters.</i>
- *
- * @param index the start index of the value to be read in {@link #b b}.
- * @return the read value.
- */
- public int readByte(final int index) {
- return b[index] & 0xFF;
- }
-
- /**
- * Reads an unsigned short value in {@link #b b}. <i>This method is
- * intended for {@link Attribute} sub classes, and is normally not needed by
- * class generators or adapters.</i>
- *
- * @param index the start index of the value to be read in {@link #b b}.
- * @return the read value.
- */
- public int readUnsignedShort(final int index) {
- byte[] b = this.b;
- return ((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF);
- }
-
- /**
- * Reads a signed short value in {@link #b b}. <i>This method is intended
- * for {@link Attribute} sub classes, and is normally not needed by class
- * generators or adapters.</i>
- *
- * @param index the start index of the value to be read in {@link #b b}.
- * @return the read value.
- */
- public short readShort(final int index) {
- byte[] b = this.b;
- return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
- }
-
- /**
- * Reads a signed int value in {@link #b b}. <i>This method is intended for
- * {@link Attribute} sub classes, and is normally not needed by class
- * generators or adapters.</i>
- *
- * @param index the start index of the value to be read in {@link #b b}.
- * @return the read value.
- */
- public int readInt(final int index) {
- byte[] b = this.b;
- return ((b[index] & 0xFF) << 24) | ((b[index + 1] & 0xFF) << 16)
- | ((b[index + 2] & 0xFF) << 8) | (b[index + 3] & 0xFF);
- }
-
- /**
- * Reads a signed long value in {@link #b b}. <i>This method is intended
- * for {@link Attribute} sub classes, and is normally not needed by class
- * generators or adapters.</i>
- *
- * @param index the start index of the value to be read in {@link #b b}.
- * @return the read value.
- */
- public long readLong(final int index) {
- long l1 = readInt(index);
- long l0 = readInt(index + 4) & 0xFFFFFFFFL;
- return (l1 << 32) | l0;
- }
-
- /**
- * Reads an UTF8 string constant pool item in {@link #b b}. <i>This method
- * is intended for {@link Attribute} sub classes, and is normally not needed
- * by class generators or adapters.</i>
- *
- * @param index the start index of an unsigned short value in {@link #b b},
- * whose value is the index of an UTF8 constant pool item.
- * @param buf buffer to be used to read the item. This buffer must be
- * sufficiently large. It is not automatically resized.
- * @return the String corresponding to the specified UTF8 item.
- */
- public String readUTF8(int index, final char[] buf) {
- int item = readUnsignedShort(index);
- String s = strings[item];
- if (s != null) {
- return s;
- }
- index = items[item];
- return strings[item] = readUTF(index + 2, readUnsignedShort(index), buf);
- }
-
- /**
- * Reads UTF8 string in {@link #b b}.
- *
- * @param index start offset of the UTF8 string to be read.
- * @param utfLen length of the UTF8 string to be read.
- * @param buf buffer to be used to read the string. This buffer must be
- * sufficiently large. It is not automatically resized.
- * @return the String corresponding to the specified UTF8 string.
- */
- private String readUTF(int index, int utfLen, char[] buf) {
- int endIndex = index + utfLen;
- byte[] b = this.b;
- int strLen = 0;
- int c, d, e;
- while (index < endIndex) {
- c = b[index++] & 0xFF;
- switch (c >> 4) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- // 0xxxxxxx
- buf[strLen++] = (char) c;
- break;
- case 12:
- case 13:
- // 110x xxxx 10xx xxxx
- d = b[index++];
- buf[strLen++] = (char) (((c & 0x1F) << 6) | (d & 0x3F));
- break;
- default:
- // 1110 xxxx 10xx xxxx 10xx xxxx
- d = b[index++];
- e = b[index++];
- buf[strLen++] = (char) (((c & 0x0F) << 12)
- | ((d & 0x3F) << 6) | (e & 0x3F));
- break;
- }
- }
- return new String(buf, 0, strLen);
- }
-
- /**
- * Reads a class constant pool item in {@link #b b}. <i>This method is
- * intended for {@link Attribute} sub classes, and is normally not needed by
- * class generators or adapters.</i>
- *
- * @param index the start index of an unsigned short value in {@link #b b},
- * whose value is the index of a class constant pool item.
- * @param buf buffer to be used to read the item. This buffer must be
- * sufficiently large. It is not automatically resized.
- * @return the String corresponding to the specified class item.
- */
- public String readClass(final int index, final char[] buf) {
- // computes the start index of the CONSTANT_Class item in b
- // and reads the CONSTANT_Utf8 item designated by
- // the first two bytes of this CONSTANT_Class item
- return readUTF8(items[readUnsignedShort(index)], buf);
- }
-
- /**
- * Reads a numeric or string constant pool item in {@link #b b}. <i>This
- * method is intended for {@link Attribute} sub classes, and is normally not
- * needed by class generators or adapters.</i>
- *
- * @param item the index of a constant pool item.
- * @param buf buffer to be used to read the item. This buffer must be
- * sufficiently large. It is not automatically resized.
- * @return the {@link Integer}, {@link Float}, {@link Long},
- * {@link Double}, {@link String} or {@link Type} corresponding to
- * the given constant pool item.
- */
- public Object readConst(final int item, final char[] buf) {
- int index = items[item];
- switch (b[index - 1]) {
- case ClassWriter.INT:
- return new Integer(readInt(index));
- case ClassWriter.FLOAT:
- return new Float(Float.intBitsToFloat(readInt(index)));
- case ClassWriter.LONG:
- return new Long(readLong(index));
- case ClassWriter.DOUBLE:
- return new Double(Double.longBitsToDouble(readLong(index)));
- case ClassWriter.CLASS:
- String s = readUTF8(index, buf);
- return Type.getType(s.charAt(0) == '[' ? s : "L" + s + ";");
- // case ClassWriter.STR:
- default:
- return readUTF8(index, buf);
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassVisitor.java
deleted file mode 100644
index edeb587..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassVisitor.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java class. The methods of this interface must be called
- * in the following order: <tt>visit</tt> [ <tt>visitSource</tt> ] [
- * <tt>visitOuterClass</tt> ] ( <tt>visitAnnotation</tt> |
- * <tt>visitAttribute</tt> )* (<tt>visitInnerClass</tt> |
- * <tt>visitField</tt> | <tt>visitMethod</tt> )* <tt>visitEnd</tt>.
- *
- * @author Eric Bruneton
- */
-public interface ClassVisitor {
-
- /**
- * Visits the header of the class.
- *
- * @param version the class version.
- * @param access the class's access flags (see {@link Opcodes}). This
- * parameter also indicates if the class is deprecated.
- * @param name the internal name of the class (see
- * {@link Type#getInternalName() getInternalName}).
- * @param signature the signature of this class. May be <tt>null</tt> if
- * the class is not a generic one, and does not extend or implement
- * generic classes or interfaces.
- * @param superName the internal of name of the super class (see
- * {@link Type#getInternalName() getInternalName}). For interfaces,
- * the super class is {@link Object}. May be <tt>null</tt>, but
- * only for the {@link Object} class.
- * @param interfaces the internal names of the class's interfaces (see
- * {@link Type#getInternalName() getInternalName}). May be
- * <tt>null</tt>.
- */
- void visit(
- int version,
- int access,
- String name,
- String signature,
- String superName,
- String[] interfaces);
-
- /**
- * Visits the source of the class.
- *
- * @param source the name of the source file from which the class was
- * compiled. May be <tt>null</tt>.
- * @param debug additional debug information to compute the correspondance
- * between source and compiled elements of the class. May be
- * <tt>null</tt>.
- */
- void visitSource(String source, String debug);
-
- /**
- * Visits the enclosing class of the class. This method must be called only
- * if the class has an enclosing class.
- *
- * @param owner internal name of the enclosing class of the class.
- * @param name the name of the method that contains the class, or
- * <tt>null</tt> if the class is not enclosed in a method of its
- * enclosing class.
- * @param desc the descriptor of the method that contains the class, or
- * <tt>null</tt> if the class is not enclosed in a method of its
- * enclosing class.
- */
- void visitOuterClass(String owner, String name, String desc);
-
- /**
- * Visits an annotation of the class.
- *
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a non null visitor to visit the annotation values.
- */
- AnnotationVisitor visitAnnotation(String desc, boolean visible);
-
- /**
- * Visits a non standard attribute of the class.
- *
- * @param attr an attribute.
- */
- void visitAttribute(Attribute attr);
-
- /**
- * Visits information about an inner class. This inner class is not
- * necessarily a member of the class being visited.
- *
- * @param name the internal name of an inner class (see
- * {@link Type#getInternalName() getInternalName}).
- * @param outerName the internal name of the class to which the inner class
- * belongs (see {@link Type#getInternalName() getInternalName}). May
- * be <tt>null</tt>.
- * @param innerName the (simple) name of the inner class inside its
- * enclosing class. May be <tt>null</tt> for anonymous inner
- * classes.
- * @param access the access flags of the inner class as originally declared
- * in the enclosing class.
- */
- void visitInnerClass(
- String name,
- String outerName,
- String innerName,
- int access);
-
- /**
- * Visits a field of the class.
- *
- * @param access the field's access flags (see {@link Opcodes}). This
- * parameter also indicates if the field is synthetic and/or
- * deprecated.
- * @param name the field's name.
- * @param desc the field's descriptor (see {@link Type Type}).
- * @param signature the field's signature. May be <tt>null</tt> if the
- * field's type does not use generic types.
- * @param value the field's initial value. This parameter, which may be
- * <tt>null</tt> if the field does not have an initial value, must
- * be an {@link Integer}, a {@link Float}, a {@link Long}, a
- * {@link Double} or a {@link String} (for <tt>int</tt>,
- * <tt>float</tt>, <tt>long</tt> or <tt>String</tt> fields
- * respectively). <i>This parameter is only used for static fields</i>.
- * Its value is ignored for non static fields, which must be
- * initialized through bytecode instructions in constructors or
- * methods.
- * @return a visitor to visit field annotations and attributes, or
- * <tt>null</tt> if this class visitor is not interested in
- * visiting these annotations and attributes.
- */
- FieldVisitor visitField(
- int access,
- String name,
- String desc,
- String signature,
- Object value);
-
- /**
- * Visits a method of the class. This method <i>must</i> return a new
- * {@link MethodVisitor} instance (or <tt>null</tt>) each time it is
- * called, i.e., it should not return a previously returned visitor.
- *
- * @param access the method's access flags (see {@link Opcodes}). This
- * parameter also indicates if the method is synthetic and/or
- * deprecated.
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type Type}).
- * @param signature the method's signature. May be <tt>null</tt> if the
- * method parameters, return type and exceptions do not use generic
- * types.
- * @param exceptions the internal names of the method's exception classes
- * (see {@link Type#getInternalName() getInternalName}). May be
- * <tt>null</tt>.
- * @return an object to visit the byte code of the method, or <tt>null</tt>
- * if this class visitor is not interested in visiting the code of
- * this method.
- */
- MethodVisitor visitMethod(
- int access,
- String name,
- String desc,
- String signature,
- String[] exceptions);
-
- /**
- * Visits the end of the class. This method, which is the last one to be
- * called, is used to inform the visitor that all the fields and methods of
- * the class have been visited.
- */
- void visitEnd();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassWriter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassWriter.java
deleted file mode 100644
index 81eeeb7..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/ClassWriter.java
+++ /dev/null
@@ -1,1162 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A {@link ClassVisitor} that generates classes in bytecode form. More
- * precisely this visitor generates a byte array conforming to the Java class
- * file format. It can be used alone, to generate a Java class "from scratch",
- * or with one or more {@link ClassReader ClassReader} and adapter class visitor
- * to generate a modified class from one or more existing Java classes.
- *
- * @author Eric Bruneton
- */
-public class ClassWriter implements ClassVisitor {
-
- /**
- * The type of instructions without any argument.
- */
- final static int NOARG_INSN = 0;
-
- /**
- * The type of instructions with an signed byte argument.
- */
- final static int SBYTE_INSN = 1;
-
- /**
- * The type of instructions with an signed short argument.
- */
- final static int SHORT_INSN = 2;
-
- /**
- * The type of instructions with a local variable index argument.
- */
- final static int VAR_INSN = 3;
-
- /**
- * The type of instructions with an implicit local variable index argument.
- */
- final static int IMPLVAR_INSN = 4;
-
- /**
- * The type of instructions with a type descriptor argument.
- */
- final static int TYPE_INSN = 5;
-
- /**
- * The type of field and method invocations instructions.
- */
- final static int FIELDORMETH_INSN = 6;
-
- /**
- * The type of the INVOKEINTERFACE instruction.
- */
- final static int ITFMETH_INSN = 7;
-
- /**
- * The type of instructions with a 2 bytes bytecode offset label.
- */
- final static int LABEL_INSN = 8;
-
- /**
- * The type of instructions with a 4 bytes bytecode offset label.
- */
- final static int LABELW_INSN = 9;
-
- /**
- * The type of the LDC instruction.
- */
- final static int LDC_INSN = 10;
-
- /**
- * The type of the LDC_W and LDC2_W instructions.
- */
- final static int LDCW_INSN = 11;
-
- /**
- * The type of the IINC instruction.
- */
- final static int IINC_INSN = 12;
-
- /**
- * The type of the TABLESWITCH instruction.
- */
- final static int TABL_INSN = 13;
-
- /**
- * The type of the LOOKUPSWITCH instruction.
- */
- final static int LOOK_INSN = 14;
-
- /**
- * The type of the MULTIANEWARRAY instruction.
- */
- final static int MANA_INSN = 15;
-
- /**
- * The type of the WIDE instruction.
- */
- final static int WIDE_INSN = 16;
-
- /**
- * The instruction types of all JVM opcodes.
- */
- static byte[] TYPE;
-
- /**
- * The type of CONSTANT_Class constant pool items.
- */
- final static int CLASS = 7;
-
- /**
- * The type of CONSTANT_Fieldref constant pool items.
- */
- final static int FIELD = 9;
-
- /**
- * The type of CONSTANT_Methodref constant pool items.
- */
- final static int METH = 10;
-
- /**
- * The type of CONSTANT_InterfaceMethodref constant pool items.
- */
- final static int IMETH = 11;
-
- /**
- * The type of CONSTANT_String constant pool items.
- */
- final static int STR = 8;
-
- /**
- * The type of CONSTANT_Integer constant pool items.
- */
- final static int INT = 3;
-
- /**
- * The type of CONSTANT_Float constant pool items.
- */
- final static int FLOAT = 4;
-
- /**
- * The type of CONSTANT_Long constant pool items.
- */
- final static int LONG = 5;
-
- /**
- * The type of CONSTANT_Double constant pool items.
- */
- final static int DOUBLE = 6;
-
- /**
- * The type of CONSTANT_NameAndType constant pool items.
- */
- final static int NAME_TYPE = 12;
-
- /**
- * The type of CONSTANT_Utf8 constant pool items.
- */
- final static int UTF8 = 1;
-
- /**
- * The class reader from which this class writer was constructed, if any.
- */
- ClassReader cr;
-
- /**
- * Minor and major version numbers of the class to be generated.
- */
- int version;
-
- /**
- * Index of the next item to be added in the constant pool.
- */
- int index;
-
- /**
- * The constant pool of this class.
- */
- ByteVector pool;
-
- /**
- * The constant pool's hash table data.
- */
- Item[] items;
-
- /**
- * The threshold of the constant pool's hash table.
- */
- int threshold;
-
- /**
- * A reusable key used to look for items in the hash {@link #items items}.
- */
- Item key;
-
- /**
- * A reusable key used to look for items in the hash {@link #items items}.
- */
- Item key2;
-
- /**
- * A reusable key used to look for items in the hash {@link #items items}.
- */
- Item key3;
-
- /**
- * The access flags of this class.
- */
- private int access;
-
- /**
- * The constant pool item that contains the internal name of this class.
- */
- private int name;
-
- /**
- * The constant pool item that contains the signature of this class.
- */
- private int signature;
-
- /**
- * The constant pool item that contains the internal name of the super class
- * of this class.
- */
- private int superName;
-
- /**
- * Number of interfaces implemented or extended by this class or interface.
- */
- private int interfaceCount;
-
- /**
- * The interfaces implemented or extended by this class or interface. More
- * precisely, this array contains the indexes of the constant pool items
- * that contain the internal names of these interfaces.
- */
- private int[] interfaces;
-
- /**
- * The index of the constant pool item that contains the name of the source
- * file from which this class was compiled.
- */
- private int sourceFile;
-
- /**
- * The SourceDebug attribute of this class.
- */
- private ByteVector sourceDebug;
-
- /**
- * The constant pool item that contains the name of the enclosing class of
- * this class.
- */
- private int enclosingMethodOwner;
-
- /**
- * The constant pool item that contains the name and descriptor of the
- * enclosing method of this class.
- */
- private int enclosingMethod;
-
- /**
- * The runtime visible annotations of this class.
- */
- private AnnotationWriter anns;
-
- /**
- * The runtime invisible annotations of this class.
- */
- private AnnotationWriter ianns;
-
- /**
- * The non standard attributes of this class.
- */
- private Attribute attrs;
-
- /**
- * The number of entries in the InnerClasses attribute.
- */
- private int innerClassesCount;
-
- /**
- * The InnerClasses attribute.
- */
- private ByteVector innerClasses;
-
- /**
- * The fields of this class. These fields are stored in a linked list of
- * {@link FieldWriter} objects, linked to each other by their
- * {@link FieldWriter#next} field. This field stores the first element of
- * this list.
- */
- FieldWriter firstField;
-
- /**
- * The fields of this class. These fields are stored in a linked list of
- * {@link FieldWriter} objects, linked to each other by their
- * {@link FieldWriter#next} field. This field stores the last element of
- * this list.
- */
- FieldWriter lastField;
-
- /**
- * The methods of this class. These methods are stored in a linked list of
- * {@link MethodWriter} objects, linked to each other by their
- * {@link MethodWriter#next} field. This field stores the first element of
- * this list.
- */
- MethodWriter firstMethod;
-
- /**
- * The methods of this class. These methods are stored in a linked list of
- * {@link MethodWriter} objects, linked to each other by their
- * {@link MethodWriter#next} field. This field stores the last element of
- * this list.
- */
- MethodWriter lastMethod;
-
- /**
- * <tt>true</tt> if the maximum stack size and number of local variables
- * must be automatically computed.
- */
- private boolean computeMaxs;
-
- // ------------------------------------------------------------------------
- // Static initializer
- // ------------------------------------------------------------------------
-
- /**
- * Computes the instruction types of JVM opcodes.
- */
- static {
- int i;
- byte[] b = new byte[220];
- String s = "AAAAAAAAAAAAAAAABCKLLDDDDDEEEEEEEEEEEEEEEEEEEEAAAAAAAADD"
- + "DDDEEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
- + "AAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAIIIIIIIIIIIIIIIIDNOAA"
- + "AAAAGGGGGGGHAFBFAAFFAAQPIIJJIIIIIIIIIIIIIIIIII";
- for (i = 0; i < b.length; ++i) {
- b[i] = (byte) (s.charAt(i) - 'A');
- }
- TYPE = b;
-
- // code to generate the above string
- //
- // // SBYTE_INSN instructions
- // b[Constants.NEWARRAY] = SBYTE_INSN;
- // b[Constants.BIPUSH] = SBYTE_INSN;
- //
- // // SHORT_INSN instructions
- // b[Constants.SIPUSH] = SHORT_INSN;
- //
- // // (IMPL)VAR_INSN instructions
- // b[Constants.RET] = VAR_INSN;
- // for (i = Constants.ILOAD; i <= Constants.ALOAD; ++i) {
- // b[i] = VAR_INSN;
- // }
- // for (i = Constants.ISTORE; i <= Constants.ASTORE; ++i) {
- // b[i] = VAR_INSN;
- // }
- // for (i = 26; i <= 45; ++i) { // ILOAD_0 to ALOAD_3
- // b[i] = IMPLVAR_INSN;
- // }
- // for (i = 59; i <= 78; ++i) { // ISTORE_0 to ASTORE_3
- // b[i] = IMPLVAR_INSN;
- // }
- //
- // // TYPE_INSN instructions
- // b[Constants.NEW] = TYPE_INSN;
- // b[Constants.ANEWARRAY] = TYPE_INSN;
- // b[Constants.CHECKCAST] = TYPE_INSN;
- // b[Constants.INSTANCEOF] = TYPE_INSN;
- //
- // // (Set)FIELDORMETH_INSN instructions
- // for (i = Constants.GETSTATIC; i <= Constants.INVOKESTATIC; ++i) {
- // b[i] = FIELDORMETH_INSN;
- // }
- // b[Constants.INVOKEINTERFACE] = ITFMETH_INSN;
- //
- // // LABEL(W)_INSN instructions
- // for (i = Constants.IFEQ; i <= Constants.JSR; ++i) {
- // b[i] = LABEL_INSN;
- // }
- // b[Constants.IFNULL] = LABEL_INSN;
- // b[Constants.IFNONNULL] = LABEL_INSN;
- // b[200] = LABELW_INSN; // GOTO_W
- // b[201] = LABELW_INSN; // JSR_W
- // // temporary opcodes used internally by ASM - see Label and
- // MethodWriter
- // for (i = 202; i < 220; ++i) {
- // b[i] = LABEL_INSN;
- // }
- //
- // // LDC(_W) instructions
- // b[Constants.LDC] = LDC_INSN;
- // b[19] = LDCW_INSN; // LDC_W
- // b[20] = LDCW_INSN; // LDC2_W
- //
- // // special instructions
- // b[Constants.IINC] = IINC_INSN;
- // b[Constants.TABLESWITCH] = TABL_INSN;
- // b[Constants.LOOKUPSWITCH] = LOOK_INSN;
- // b[Constants.MULTIANEWARRAY] = MANA_INSN;
- // b[196] = WIDE_INSN; // WIDE
- //
- // for (i = 0; i < b.length; ++i) {
- // System.err.print((char)('A' + b[i]));
- // }
- // System.err.println();
- }
-
- // ------------------------------------------------------------------------
- // Constructor
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a new {@link ClassWriter ClassWriter} object.
- *
- * @param computeMaxs <tt>true</tt> if the maximum stack size and the
- * maximum number of local variables must be automatically computed.
- * If this flag is <tt>true</tt>, then the arguments of the
- * {@link MethodVisitor#visitMaxs visitMaxs} method of the
- * {@link MethodVisitor} returned by the
- * {@link #visitMethod visitMethod} method will be ignored, and
- * computed automatically from the signature and the bytecode of each
- * method.
- */
- public ClassWriter(final boolean computeMaxs) {
- this(computeMaxs, false);
- }
-
- /**
- * Constructs a new {@link ClassWriter} object.
- *
- * @param computeMaxs <tt>true</tt> if the maximum stack size and the
- * maximum number of local variables must be automatically computed.
- * If this flag is <tt>true</tt>, then the arguments of the
- * {@link MethodVisitor#visitMaxs visitMaxs} method of the
- * {@link MethodVisitor} returned by the
- * {@link #visitMethod visitMethod} method will be ignored, and
- * computed automatically from the signature and the bytecode of each
- * method.
- * @param skipUnknownAttributes <b>Deprecated</b>. The value of this
- * parameter is ignored.
- */
- public ClassWriter(
- final boolean computeMaxs,
- final boolean skipUnknownAttributes)
- {
- index = 1;
- pool = new ByteVector();
- items = new Item[256];
- threshold = (int) (0.75d * items.length);
- key = new Item();
- key2 = new Item();
- key3 = new Item();
- this.computeMaxs = computeMaxs;
- }
-
- /**
- * Constructs a new {@link ClassWriter} object and enables optimizations for
- * "mostly add" bytecode transformations. These optimizations are the
- * following:
- *
- * <ul> <li>The constant pool from the original class is copied as is in
- * the new class, which saves time. New constant pool entries will be added
- * at the end if necessary, but unused constant pool entries <i>won't be
- * removed</i>.</li> <li>Methods that are not transformed are copied as
- * is in the new class, directly from the original class bytecode (i.e.
- * without emitting visit events for all the method instructions), which
- * saves a <i>lot</i> of time. Untransformed methods are detected by the
- * fact that the {@link ClassReader} receives {@link MethodVisitor} objects
- * that come from a {@link ClassWriter} (and not from a custom
- * {@link ClassAdapter} or any other {@link ClassVisitor} instance).</li>
- * </ul>
- *
- * @param classReader the {@link ClassReader} used to read the original
- * class. It will be used to copy the entire constant pool from the
- * original class and also to copy other fragments of original
- * bytecode where applicable.
- * @param computeMaxs <tt>true</tt> if the maximum stack size and the
- * maximum number of local variables must be automatically computed.
- * If this flag is <tt>true</tt>, then the arguments of the
- * {@link MethodVisitor#visitMaxs visitMaxs} method of the
- * {@link MethodVisitor} returned by the
- * {@link #visitMethod visitMethod} method will be ignored, and
- * computed automatically from the signature and the bytecode of each
- * method.
- */
- public ClassWriter(
- final ClassReader classReader,
- final boolean computeMaxs)
- {
- this(computeMaxs, false);
- classReader.copyPool(this);
- this.cr = classReader;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the ClassVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- this.version = version;
- this.access = access;
- this.name = newClass(name);
- if (signature != null) {
- this.signature = newUTF8(signature);
- }
- this.superName = superName == null ? 0 : newClass(superName);
- if (interfaces != null && interfaces.length > 0) {
- interfaceCount = interfaces.length;
- this.interfaces = new int[interfaceCount];
- for (int i = 0; i < interfaceCount; ++i) {
- this.interfaces[i] = newClass(interfaces[i]);
- }
- }
- }
-
- public void visitSource(final String file, final String debug) {
- if (file != null) {
- sourceFile = newUTF8(file);
- }
- if (debug != null) {
- sourceDebug = new ByteVector().putUTF8(debug);
- }
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- enclosingMethodOwner = newClass(owner);
- if (name != null && desc != null) {
- enclosingMethod = newNameType(name, desc);
- }
- }
-
- public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- ByteVector bv = new ByteVector();
- // write type, and reserve space for values count
- bv.putShort(newUTF8(desc)).putShort(0);
- AnnotationWriter aw = new AnnotationWriter(this, true, bv, bv, 2);
- if (visible) {
- aw.next = anns;
- anns = aw;
- } else {
- aw.next = ianns;
- ianns = aw;
- }
- return aw;
- }
-
- public void visitAttribute(final Attribute attr) {
- attr.next = attrs;
- attrs = attr;
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- if (innerClasses == null) {
- innerClasses = new ByteVector();
- }
- ++innerClassesCount;
- innerClasses.putShort(name == null ? 0 : newClass(name));
- innerClasses.putShort(outerName == null ? 0 : newClass(outerName));
- innerClasses.putShort(innerName == null ? 0 : newUTF8(innerName));
- innerClasses.putShort(access);
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- return new FieldWriter(this, access, name, desc, signature, value);
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- return new MethodWriter(this,
- access,
- name,
- desc,
- signature,
- exceptions,
- computeMaxs);
- }
-
- public void visitEnd() {
- }
-
- // ------------------------------------------------------------------------
- // Other public methods
- // ------------------------------------------------------------------------
-
- /**
- * Returns the bytecode of the class that was build with this class writer.
- *
- * @return the bytecode of the class that was build with this class writer.
- */
- public byte[] toByteArray() {
- // computes the real size of the bytecode of this class
- int size = 24 + 2 * interfaceCount;
- int nbFields = 0;
- FieldWriter fb = firstField;
- while (fb != null) {
- ++nbFields;
- size += fb.getSize();
- fb = fb.next;
- }
- int nbMethods = 0;
- MethodWriter mb = firstMethod;
- while (mb != null) {
- ++nbMethods;
- size += mb.getSize();
- mb = mb.next;
- }
- int attributeCount = 0;
- if (signature != 0) {
- ++attributeCount;
- size += 8;
- newUTF8("Signature");
- }
- if (sourceFile != 0) {
- ++attributeCount;
- size += 8;
- newUTF8("SourceFile");
- }
- if (sourceDebug != null) {
- ++attributeCount;
- size += sourceDebug.length + 4;
- newUTF8("SourceDebugExtension");
- }
- if (enclosingMethodOwner != 0) {
- ++attributeCount;
- size += 10;
- newUTF8("EnclosingMethod");
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- ++attributeCount;
- size += 6;
- newUTF8("Deprecated");
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (version & 0xffff) < Opcodes.V1_5)
- {
- ++attributeCount;
- size += 6;
- newUTF8("Synthetic");
- }
- if (version == Opcodes.V1_4) {
- if ((access & Opcodes.ACC_ANNOTATION) != 0) {
- ++attributeCount;
- size += 6;
- newUTF8("Annotation");
- }
- if ((access & Opcodes.ACC_ENUM) != 0) {
- ++attributeCount;
- size += 6;
- newUTF8("Enum");
- }
- }
- if (innerClasses != null) {
- ++attributeCount;
- size += 8 + innerClasses.length;
- newUTF8("InnerClasses");
- }
- if (anns != null) {
- ++attributeCount;
- size += 8 + anns.getSize();
- newUTF8("RuntimeVisibleAnnotations");
- }
- if (ianns != null) {
- ++attributeCount;
- size += 8 + ianns.getSize();
- newUTF8("RuntimeInvisibleAnnotations");
- }
- if (attrs != null) {
- attributeCount += attrs.getCount();
- size += attrs.getSize(this, null, 0, -1, -1);
- }
- size += pool.length;
- // allocates a byte vector of this size, in order to avoid unnecessary
- // arraycopy operations in the ByteVector.enlarge() method
- ByteVector out = new ByteVector(size);
- out.putInt(0xCAFEBABE).putInt(version);
- out.putShort(index).putByteArray(pool.data, 0, pool.length);
- out.putShort(access).putShort(name).putShort(superName);
- out.putShort(interfaceCount);
- for (int i = 0; i < interfaceCount; ++i) {
- out.putShort(interfaces[i]);
- }
- out.putShort(nbFields);
- fb = firstField;
- while (fb != null) {
- fb.put(out);
- fb = fb.next;
- }
- out.putShort(nbMethods);
- mb = firstMethod;
- while (mb != null) {
- mb.put(out);
- mb = mb.next;
- }
- out.putShort(attributeCount);
- if (signature != 0) {
- out.putShort(newUTF8("Signature")).putInt(2).putShort(signature);
- }
- if (sourceFile != 0) {
- out.putShort(newUTF8("SourceFile")).putInt(2).putShort(sourceFile);
- }
- if (sourceDebug != null) {
- int len = sourceDebug.length - 2;
- out.putShort(newUTF8("SourceDebugExtension")).putInt(len);
- out.putByteArray(sourceDebug.data, 2, len);
- }
- if (enclosingMethodOwner != 0) {
- out.putShort(newUTF8("EnclosingMethod")).putInt(4);
- out.putShort(enclosingMethodOwner).putShort(enclosingMethod);
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- out.putShort(newUTF8("Deprecated")).putInt(0);
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (version & 0xffff) < Opcodes.V1_5)
- {
- out.putShort(newUTF8("Synthetic")).putInt(0);
- }
- if (version == Opcodes.V1_4) {
- if ((access & Opcodes.ACC_ANNOTATION) != 0) {
- out.putShort(newUTF8("Annotation")).putInt(0);
- }
- if ((access & Opcodes.ACC_ENUM) != 0) {
- out.putShort(newUTF8("Enum")).putInt(0);
- }
- }
- if (innerClasses != null) {
- out.putShort(newUTF8("InnerClasses"));
- out.putInt(innerClasses.length + 2).putShort(innerClassesCount);
- out.putByteArray(innerClasses.data, 0, innerClasses.length);
- }
- if (anns != null) {
- out.putShort(newUTF8("RuntimeVisibleAnnotations"));
- anns.put(out);
- }
- if (ianns != null) {
- out.putShort(newUTF8("RuntimeInvisibleAnnotations"));
- ianns.put(out);
- }
- if (attrs != null) {
- attrs.put(this, null, 0, -1, -1, out);
- }
- return out.data;
- }
-
- // ------------------------------------------------------------------------
- // Utility methods: constant pool management
- // ------------------------------------------------------------------------
-
- /**
- * Adds a number or string constant to the constant pool of the class being
- * build. Does nothing if the constant pool already contains a similar item.
- *
- * @param cst the value of the constant to be added to the constant pool.
- * This parameter must be an {@link Integer}, a {@link Float}, a
- * {@link Long}, a {@link Double}, a {@link String} or a
- * {@link Type}.
- * @return a new or already existing constant item with the given value.
- */
- Item newConstItem(final Object cst) {
- if (cst instanceof Integer) {
- int val = ((Integer) cst).intValue();
- return newInteger(val);
- } else if (cst instanceof Byte) {
- int val = ((Byte) cst).intValue();
- return newInteger(val);
- } else if (cst instanceof Character) {
- int val = ((Character) cst).charValue();
- return newInteger(val);
- } else if (cst instanceof Short) {
- int val = ((Short) cst).intValue();
- return newInteger(val);
- } else if (cst instanceof Boolean) {
- int val = ((Boolean) cst).booleanValue() ? 1 : 0;
- return newInteger(val);
- } else if (cst instanceof Float) {
- float val = ((Float) cst).floatValue();
- return newFloat(val);
- } else if (cst instanceof Long) {
- long val = ((Long) cst).longValue();
- return newLong(val);
- } else if (cst instanceof Double) {
- double val = ((Double) cst).doubleValue();
- return newDouble(val);
- } else if (cst instanceof String) {
- return newString((String) cst);
- } else if (cst instanceof Type) {
- Type t = (Type) cst;
- return newClassItem(t.getSort() == Type.OBJECT
- ? t.getInternalName()
- : t.getDescriptor());
- } else {
- throw new IllegalArgumentException("value " + cst);
- }
- }
-
- /**
- * Adds a number or string constant to the constant pool of the class being
- * build. Does nothing if the constant pool already contains a similar item.
- * <i>This method is intended for {@link Attribute} sub classes, and is
- * normally not needed by class generators or adapters.</i>
- *
- * @param cst the value of the constant to be added to the constant pool.
- * This parameter must be an {@link Integer}, a {@link Float}, a
- * {@link Long}, a {@link Double} or a {@link String}.
- * @return the index of a new or already existing constant item with the
- * given value.
- */
- public int newConst(final Object cst) {
- return newConstItem(cst).index;
- }
-
- /**
- * Adds an UTF8 string to the constant pool of the class being build. Does
- * nothing if the constant pool already contains a similar item. <i>This
- * method is intended for {@link Attribute} sub classes, and is normally not
- * needed by class generators or adapters.</i>
- *
- * @param value the String value.
- * @return the index of a new or already existing UTF8 item.
- */
- public int newUTF8(final String value) {
- key.set(UTF8, value, null, null);
- Item result = get(key);
- if (result == null) {
- pool.putByte(UTF8).putUTF8(value);
- result = new Item(index++, key);
- put(result);
- }
- return result.index;
- }
-
- /**
- * Adds a class reference to the constant pool of the class being build.
- * Does nothing if the constant pool already contains a similar item.
- * <i>This method is intended for {@link Attribute} sub classes, and is
- * normally not needed by class generators or adapters.</i>
- *
- * @param value the internal name of the class.
- * @return the index of a new or already existing class reference item.
- */
- public int newClass(final String value) {
- return newClassItem(value).index;
- }
-
- /**
- * Adds a class reference to the constant pool of the class being build.
- * Does nothing if the constant pool already contains a similar item.
- * <i>This method is intended for {@link Attribute} sub classes, and is
- * normally not needed by class generators or adapters.</i>
- *
- * @param value the internal name of the class.
- * @return a new or already existing class reference item.
- */
- private Item newClassItem(final String value) {
- key2.set(CLASS, value, null, null);
- Item result = get(key2);
- if (result == null) {
- pool.put12(CLASS, newUTF8(value));
- result = new Item(index++, key2);
- put(result);
- }
- return result;
- }
-
- /**
- * Adds a field reference to the constant pool of the class being build.
- * Does nothing if the constant pool already contains a similar item.
- * <i>This method is intended for {@link Attribute} sub classes, and is
- * normally not needed by class generators or adapters.</i>
- *
- * @param owner the internal name of the field's owner class.
- * @param name the field's name.
- * @param desc the field's descriptor.
- * @return the index of a new or already existing field reference item.
- */
- public int newField(final String owner, final String name, final String desc)
- {
- key3.set(FIELD, owner, name, desc);
- Item result = get(key3);
- if (result == null) {
- put122(FIELD, newClass(owner), newNameType(name, desc));
- result = new Item(index++, key3);
- put(result);
- }
- return result.index;
- }
-
- /**
- * Adds a method reference to the constant pool of the class being build.
- * Does nothing if the constant pool already contains a similar item.
- *
- * @param owner the internal name of the method's owner class.
- * @param name the method's name.
- * @param desc the method's descriptor.
- * @param itf <tt>true</tt> if <tt>owner</tt> is an interface.
- * @return a new or already existing method reference item.
- */
- Item newMethodItem(
- final String owner,
- final String name,
- final String desc,
- final boolean itf)
- {
- int type = itf ? IMETH : METH;
- key3.set(type, owner, name, desc);
- Item result = get(key3);
- if (result == null) {
- put122(type, newClass(owner), newNameType(name, desc));
- result = new Item(index++, key3);
- put(result);
- }
- return result;
- }
-
- /**
- * Adds a method reference to the constant pool of the class being build.
- * Does nothing if the constant pool already contains a similar item.
- * <i>This method is intended for {@link Attribute} sub classes, and is
- * normally not needed by class generators or adapters.</i>
- *
- * @param owner the internal name of the method's owner class.
- * @param name the method's name.
- * @param desc the method's descriptor.
- * @param itf <tt>true</tt> if <tt>owner</tt> is an interface.
- * @return the index of a new or already existing method reference item.
- */
- public int newMethod(
- final String owner,
- final String name,
- final String desc,
- final boolean itf)
- {
- return newMethodItem(owner, name, desc, itf).index;
- }
-
- /**
- * Adds an integer to the constant pool of the class being build. Does
- * nothing if the constant pool already contains a similar item.
- *
- * @param value the int value.
- * @return a new or already existing int item.
- */
- Item newInteger(final int value) {
- key.set(value);
- Item result = get(key);
- if (result == null) {
- pool.putByte(INT).putInt(value);
- result = new Item(index++, key);
- put(result);
- }
- return result;
- }
-
- /**
- * Adds a float to the constant pool of the class being build. Does nothing
- * if the constant pool already contains a similar item.
- *
- * @param value the float value.
- * @return a new or already existing float item.
- */
- Item newFloat(final float value) {
- key.set(value);
- Item result = get(key);
- if (result == null) {
- pool.putByte(FLOAT).putInt(Float.floatToIntBits(value));
- result = new Item(index++, key);
- put(result);
- }
- return result;
- }
-
- /**
- * Adds a long to the constant pool of the class being build. Does nothing
- * if the constant pool already contains a similar item.
- *
- * @param value the long value.
- * @return a new or already existing long item.
- */
- Item newLong(final long value) {
- key.set(value);
- Item result = get(key);
- if (result == null) {
- pool.putByte(LONG).putLong(value);
- result = new Item(index, key);
- put(result);
- index += 2;
- }
- return result;
- }
-
- /**
- * Adds a double to the constant pool of the class being build. Does nothing
- * if the constant pool already contains a similar item.
- *
- * @param value the double value.
- * @return a new or already existing double item.
- */
- Item newDouble(final double value) {
- key.set(value);
- Item result = get(key);
- if (result == null) {
- pool.putByte(DOUBLE).putLong(Double.doubleToLongBits(value));
- result = new Item(index, key);
- put(result);
- index += 2;
- }
- return result;
- }
-
- /**
- * Adds a string to the constant pool of the class being build. Does nothing
- * if the constant pool already contains a similar item.
- *
- * @param value the String value.
- * @return a new or already existing string item.
- */
- private Item newString(final String value) {
- key2.set(STR, value, null, null);
- Item result = get(key2);
- if (result == null) {
- pool.put12(STR, newUTF8(value));
- result = new Item(index++, key2);
- put(result);
- }
- return result;
- }
-
- /**
- * Adds a name and type to the constant pool of the class being build. Does
- * nothing if the constant pool already contains a similar item. <i>This
- * method is intended for {@link Attribute} sub classes, and is normally not
- * needed by class generators or adapters.</i>
- *
- * @param name a name.
- * @param desc a type descriptor.
- * @return the index of a new or already existing name and type item.
- */
- public int newNameType(final String name, final String desc) {
- key2.set(NAME_TYPE, name, desc, null);
- Item result = get(key2);
- if (result == null) {
- put122(NAME_TYPE, newUTF8(name), newUTF8(desc));
- result = new Item(index++, key2);
- put(result);
- }
- return result.index;
- }
-
- /**
- * Returns the constant pool's hash table item which is equal to the given
- * item.
- *
- * @param key a constant pool item.
- * @return the constant pool's hash table item which is equal to the given
- * item, or <tt>null</tt> if there is no such item.
- */
- private Item get(final Item key) {
- Item i = items[key.hashCode % items.length];
- while (i != null && !key.isEqualTo(i)) {
- i = i.next;
- }
- return i;
- }
-
- /**
- * Puts the given item in the constant pool's hash table. The hash table
- * <i>must</i> not already contains this item.
- *
- * @param i the item to be added to the constant pool's hash table.
- */
- private void put(final Item i) {
- if (index > threshold) {
- int ll = items.length;
- int nl = ll * 2 + 1;
- Item[] newItems = new Item[nl];
- for (int l = ll - 1; l >= 0; --l) {
- Item j = items[l];
- while (j != null) {
- int index = j.hashCode % newItems.length;
- Item k = j.next;
- j.next = newItems[index];
- newItems[index] = j;
- j = k;
- }
- }
- items = newItems;
- threshold = (int) (nl * 0.75);
- }
- int index = i.hashCode % items.length;
- i.next = items[index];
- items[index] = i;
- }
-
- /**
- * Puts one byte and two shorts into the constant pool.
- *
- * @param b a byte.
- * @param s1 a short.
- * @param s2 another short.
- */
- private void put122(final int b, final int s1, final int s2) {
- pool.put12(b, s1).putShort(s2);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Edge.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Edge.java
deleted file mode 100644
index 5bada4e..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Edge.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * An edge in the control flow graph of a method body. See {@link Label Label}.
- *
- * @author Eric Bruneton
- */
-class Edge {
-
- /**
- * The (relative) stack size in the basic block from which this edge
- * originates. This size is equal to the stack size at the "jump"
- * instruction to which this edge corresponds, relatively to the stack size
- * at the beginning of the originating basic block.
- */
- int stackSize;
-
- /**
- * The successor block of the basic block from which this edge originates.
- */
- Label successor;
-
- /**
- * The next edge in the list of successors of the originating basic block.
- * See {@link Label#successors successors}.
- */
- Edge next;
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/FieldVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/FieldVisitor.java
deleted file mode 100644
index a05cb5a..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/FieldVisitor.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java field. The methods of this interface must be called
- * in the following order: ( <tt>visitAnnotation</tt> |
- * <tt>visitAttribute</tt> )* <tt>visitEnd</tt>.
- *
- * @author Eric Bruneton
- */
-public interface FieldVisitor {
-
- /**
- * Visits an annotation of the field.
- *
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a non null visitor to visit the annotation values.
- */
- AnnotationVisitor visitAnnotation(String desc, boolean visible);
-
- /**
- * Visits a non standard attribute of the field.
- *
- * @param attr an attribute.
- */
- void visitAttribute(Attribute attr);
-
- /**
- * Visits the end of the field. This method, which is the last one to be
- * called, is used to inform the visitor that all the annotations and
- * attributes of the field have been visited.
- */
- void visitEnd();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/FieldWriter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/FieldWriter.java
deleted file mode 100644
index 0adbea9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/FieldWriter.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * An {@link FieldVisitor} that generates Java fields in bytecode form.
- *
- * @author Eric Bruneton
- */
-final class FieldWriter implements FieldVisitor {
-
- /**
- * Next field writer (see {@link ClassWriter#firstField firstField}).
- */
- FieldWriter next;
-
- /**
- * The class writer to which this field must be added.
- */
- private ClassWriter cw;
-
- /**
- * Access flags of this field.
- */
- private int access;
-
- /**
- * The index of the constant pool item that contains the name of this
- * method.
- */
- private int name;
-
- /**
- * The index of the constant pool item that contains the descriptor of this
- * field.
- */
- private int desc;
-
- /**
- * The index of the constant pool item that contains the signature of this
- * field.
- */
- private int signature;
-
- /**
- * The index of the constant pool item that contains the constant value of
- * this field.
- */
- private int value;
-
- /**
- * The runtime visible annotations of this field. May be <tt>null</tt>.
- */
- private AnnotationWriter anns;
-
- /**
- * The runtime invisible annotations of this field. May be <tt>null</tt>.
- */
- private AnnotationWriter ianns;
-
- /**
- * The non standard attributes of this field. May be <tt>null</tt>.
- */
- private Attribute attrs;
-
- // ------------------------------------------------------------------------
- // Constructor
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a new {@link FieldWriter}.
- *
- * @param cw the class writer to which this field must be added.
- * @param access the field's access flags (see {@link Opcodes}).
- * @param name the field's name.
- * @param desc the field's descriptor (see {@link Type}).
- * @param signature the field's signature. May be <tt>null</tt>.
- * @param value the field's constant value. May be <tt>null</tt>.
- */
- protected FieldWriter(
- final ClassWriter cw,
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- if (cw.firstField == null) {
- cw.firstField = this;
- } else {
- cw.lastField.next = this;
- }
- cw.lastField = this;
- this.cw = cw;
- this.access = access;
- this.name = cw.newUTF8(name);
- this.desc = cw.newUTF8(desc);
- if (signature != null) {
- this.signature = cw.newUTF8(signature);
- }
- if (value != null) {
- this.value = cw.newConstItem(value).index;
- }
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the FieldVisitor interface
- // ------------------------------------------------------------------------
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- ByteVector bv = new ByteVector();
- // write type, and reserve space for values count
- bv.putShort(cw.newUTF8(desc)).putShort(0);
- AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
- if (visible) {
- aw.next = anns;
- anns = aw;
- } else {
- aw.next = ianns;
- ianns = aw;
- }
- return aw;
- }
-
- public void visitAttribute(final Attribute attr) {
- attr.next = attrs;
- attrs = attr;
- }
-
- public void visitEnd() {
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Returns the size of this field.
- *
- * @return the size of this field.
- */
- int getSize() {
- int size = 8;
- if (value != 0) {
- cw.newUTF8("ConstantValue");
- size += 8;
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (cw.version & 0xffff) < Opcodes.V1_5)
- {
- cw.newUTF8("Synthetic");
- size += 6;
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- cw.newUTF8("Deprecated");
- size += 6;
- }
- if (cw.version == Opcodes.V1_4 && (access & Opcodes.ACC_ENUM) != 0) {
- cw.newUTF8("Enum");
- size += 6;
- }
- if (signature != 0) {
- cw.newUTF8("Signature");
- size += 8;
- }
- if (anns != null) {
- cw.newUTF8("RuntimeVisibleAnnotations");
- size += 8 + anns.getSize();
- }
- if (ianns != null) {
- cw.newUTF8("RuntimeInvisibleAnnotations");
- size += 8 + ianns.getSize();
- }
- if (attrs != null) {
- size += attrs.getSize(cw, null, 0, -1, -1);
- }
- return size;
- }
-
- /**
- * Puts the content of this field into the given byte vector.
- *
- * @param out where the content of this field must be put.
- */
- void put(final ByteVector out) {
- out.putShort(access).putShort(name).putShort(desc);
- int attributeCount = 0;
- if (value != 0) {
- ++attributeCount;
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (cw.version & 0xffff) < Opcodes.V1_5)
- {
- ++attributeCount;
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- ++attributeCount;
- }
- if (cw.version == Opcodes.V1_4 && (access & Opcodes.ACC_ENUM) != 0) {
- ++attributeCount;
- }
- if (signature != 0) {
- ++attributeCount;
- }
- if (anns != null) {
- ++attributeCount;
- }
- if (ianns != null) {
- ++attributeCount;
- }
- if (attrs != null) {
- attributeCount += attrs.getCount();
- }
- out.putShort(attributeCount);
- if (value != 0) {
- out.putShort(cw.newUTF8("ConstantValue"));
- out.putInt(2).putShort(value);
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (cw.version & 0xffff) < Opcodes.V1_5)
- {
- out.putShort(cw.newUTF8("Synthetic")).putInt(0);
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- out.putShort(cw.newUTF8("Deprecated")).putInt(0);
- }
- if (cw.version == Opcodes.V1_4 && (access & Opcodes.ACC_ENUM) != 0) {
- out.putShort(cw.newUTF8("Enum")).putInt(0);
- }
- if (signature != 0) {
- out.putShort(cw.newUTF8("Signature"));
- out.putInt(2).putShort(signature);
- }
- if (anns != null) {
- out.putShort(cw.newUTF8("RuntimeVisibleAnnotations"));
- anns.put(out);
- }
- if (ianns != null) {
- out.putShort(cw.newUTF8("RuntimeInvisibleAnnotations"));
- ianns.put(out);
- }
- if (attrs != null) {
- attrs.put(cw, null, 0, -1, -1, out);
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Handler.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Handler.java
deleted file mode 100644
index a1211ae..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Handler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * Information about an exception handler block.
- *
- * @author Eric Bruneton
- */
-class Handler {
-
- /**
- * Beginning of the exception handler's scope (inclusive).
- */
- Label start;
-
- /**
- * End of the exception handler's scope (exclusive).
- */
- Label end;
-
- /**
- * Beginning of the exception handler's code.
- */
- Label handler;
-
- /**
- * Internal name of the type of exceptions handled by this handler, or
- * <tt>null</tt> to catch any exceptions.
- */
- String desc;
-
- /**
- * Constant pool index of the internal name of the type of exceptions
- * handled by this handler, or 0 to catch any exceptions.
- */
- int type;
-
- /**
- * Next exception handler block info.
- */
- Handler next;
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Item.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Item.java
deleted file mode 100644
index fc67b01..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Item.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A constant pool item. Constant pool items can be created with the 'newXXX'
- * methods in the {@link ClassWriter} class.
- *
- * @author Eric Bruneton
- */
-final class Item {
-
- /**
- * Index of this item in the constant pool.
- */
- int index;
-
- /**
- * Type of this constant pool item. A single class is used to represent all
- * constant pool item types, in order to minimize the bytecode size of this
- * package. The value of this field is one of {@link ClassWriter#INT},
- * {@link ClassWriter#LONG}, {@link ClassWriter#FLOAT},
- * {@link ClassWriter#DOUBLE}, {@link ClassWriter#UTF8},
- * {@link ClassWriter#STR}, {@link ClassWriter#CLASS},
- * {@link ClassWriter#NAME_TYPE}, {@link ClassWriter#FIELD},
- * {@link ClassWriter#METH}, {@link ClassWriter#IMETH}.
- */
- int type;
-
- /**
- * Value of this item, for an integer item.
- */
- int intVal;
-
- /**
- * Value of this item, for a long item.
- */
- long longVal;
-
- /**
- * Value of this item, for a float item.
- */
- float floatVal;
-
- /**
- * Value of this item, for a double item.
- */
- double doubleVal;
-
- /**
- * First part of the value of this item, for items that do not hold a
- * primitive value.
- */
- String strVal1;
-
- /**
- * Second part of the value of this item, for items that do not hold a
- * primitive value.
- */
- String strVal2;
-
- /**
- * Third part of the value of this item, for items that do not hold a
- * primitive value.
- */
- String strVal3;
-
- /**
- * The hash code value of this constant pool item.
- */
- int hashCode;
-
- /**
- * Link to another constant pool item, used for collision lists in the
- * constant pool's hash table.
- */
- Item next;
-
- /**
- * Constructs an uninitialized {@link Item}.
- */
- Item() {
- }
-
- Item(int index) {
- this.index = index;
- }
-
- /**
- * Constructs a copy of the given item.
- *
- * @param index index of the item to be constructed.
- * @param i the item that must be copied into the item to be constructed.
- */
- Item(final int index, final Item i) {
- this.index = index;
- type = i.type;
- intVal = i.intVal;
- longVal = i.longVal;
- floatVal = i.floatVal;
- doubleVal = i.doubleVal;
- strVal1 = i.strVal1;
- strVal2 = i.strVal2;
- strVal3 = i.strVal3;
- hashCode = i.hashCode;
- }
-
- /**
- * Sets this item to an integer item.
- *
- * @param intVal the value of this item.
- */
- void set(final int intVal) {
- this.type = ClassWriter.INT;
- this.intVal = intVal;
- this.hashCode = 0x7FFFFFFF & (type + intVal);
- }
-
- /**
- * Sets this item to a long item.
- *
- * @param longVal the value of this item.
- */
- void set(final long longVal) {
- this.type = ClassWriter.LONG;
- this.longVal = longVal;
- this.hashCode = 0x7FFFFFFF & (type + (int) longVal);
- }
-
- /**
- * Sets this item to a float item.
- *
- * @param floatVal the value of this item.
- */
- void set(final float floatVal) {
- this.type = ClassWriter.FLOAT;
- this.floatVal = floatVal;
- this.hashCode = 0x7FFFFFFF & (type + (int) floatVal);
- }
-
- /**
- * Sets this item to a double item.
- *
- * @param doubleVal the value of this item.
- */
- void set(final double doubleVal) {
- this.type = ClassWriter.DOUBLE;
- this.doubleVal = doubleVal;
- this.hashCode = 0x7FFFFFFF & (type + (int) doubleVal);
- }
-
- /**
- * Sets this item to an item that do not hold a primitive value.
- *
- * @param type the type of this item.
- * @param strVal1 first part of the value of this item.
- * @param strVal2 second part of the value of this item.
- * @param strVal3 third part of the value of this item.
- */
- void set(
- final int type,
- final String strVal1,
- final String strVal2,
- final String strVal3)
- {
- this.type = type;
- this.strVal1 = strVal1;
- this.strVal2 = strVal2;
- this.strVal3 = strVal3;
- switch (type) {
- case ClassWriter.UTF8:
- case ClassWriter.STR:
- case ClassWriter.CLASS:
- hashCode = 0x7FFFFFFF & (type + strVal1.hashCode());
- return;
- case ClassWriter.NAME_TYPE:
- hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
- * strVal2.hashCode());
- return;
- // ClassWriter.FIELD:
- // ClassWriter.METH:
- // ClassWriter.IMETH:
- default:
- hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
- * strVal2.hashCode() * strVal3.hashCode());
- }
- }
-
- /**
- * Indicates if the given item is equal to this one.
- *
- * @param i the item to be compared to this one.
- * @return <tt>true</tt> if the given item if equal to this one,
- * <tt>false</tt> otherwise.
- */
- boolean isEqualTo(final Item i) {
- if (i.type == type) {
- switch (type) {
- case ClassWriter.INT:
- return i.intVal == intVal;
- case ClassWriter.LONG:
- return i.longVal == longVal;
- case ClassWriter.FLOAT:
- return i.floatVal == floatVal;
- case ClassWriter.DOUBLE:
- return i.doubleVal == doubleVal;
- case ClassWriter.UTF8:
- case ClassWriter.STR:
- case ClassWriter.CLASS:
- return i.strVal1.equals(strVal1);
- case ClassWriter.NAME_TYPE:
- return i.strVal1.equals(strVal1)
- && i.strVal2.equals(strVal2);
- // ClassWriter.FIELD:
- // ClassWriter.METH:
- // ClassWriter.IMETH:
- default:
- return i.strVal1.equals(strVal1)
- && i.strVal2.equals(strVal2)
- && i.strVal3.equals(strVal3);
- }
- }
- return false;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Label.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Label.java
deleted file mode 100644
index 3998e5a..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Label.java
+++ /dev/null
@@ -1,299 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A label represents a position in the bytecode of a method. Labels are used
- * for jump, goto, and switch instructions, and for try catch blocks.
- *
- * @author Eric Bruneton
- */
-public class Label {
-
- /**
- * The line number corresponding to this label, if known.
- */
- int line;
-
- /**
- * Indicates if the position of this label is known.
- */
- boolean resolved;
-
- /**
- * The position of this label in the code, if known.
- */
- int position;
-
- /**
- * If the label position has been updated, after instruction resizing.
- */
- boolean resized;
-
- /**
- * Number of forward references to this label, times two.
- */
- private int referenceCount;
-
- /**
- * Informations about forward references. Each forward reference is
- * described by two consecutive integers in this array: the first one is the
- * position of the first byte of the bytecode instruction that contains the
- * forward reference, while the second is the position of the first byte of
- * the forward reference itself. In fact the sign of the first integer
- * indicates if this reference uses 2 or 4 bytes, and its absolute value
- * gives the position of the bytecode instruction.
- */
- private int[] srcAndRefPositions;
-
- /*
- * Fields for the control flow graph analysis algorithm (used to compute the
- * maximum stack size). A control flow graph contains one node per "basic
- * block", and one edge per "jump" from one basic block to another. Each
- * node (i.e., each basic block) is represented by the Label object that
- * corresponds to the first instruction of this basic block. Each node also
- * stores the list of it successors in the graph, as a linked list of Edge
- * objects.
- */
-
- /**
- * The stack size at the beginning of this basic block. This size is
- * initially unknown. It is computed by the control flow analysis algorithm
- * (see {@link MethodWriter#visitMaxs visitMaxs}).
- */
- int beginStackSize;
-
- /**
- * The (relative) maximum stack size corresponding to this basic block. This
- * size is relative to the stack size at the beginning of the basic block,
- * i.e., the true maximum stack size is equal to {@link #beginStackSize
- * beginStackSize} + {@link #maxStackSize maxStackSize}.
- */
- int maxStackSize;
-
- /**
- * The successors of this node in the control flow graph. These successors
- * are stored in a linked list of {@link Edge Edge} objects, linked to each
- * other by their {@link Edge#next} field.
- */
- Edge successors;
-
- /**
- * The next basic block in the basic block stack. See
- * {@link MethodWriter#visitMaxs visitMaxs}.
- */
- Label next;
-
- /**
- * <tt>true</tt> if this basic block has been pushed in the basic block
- * stack. See {@link MethodWriter#visitMaxs visitMaxs}.
- */
- boolean pushed;
-
- // ------------------------------------------------------------------------
- // Constructor
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a new label.
- */
- public Label() {
- }
-
- // ------------------------------------------------------------------------
- // Methods to compute offsets and to manage forward references
- // ------------------------------------------------------------------------
-
- /**
- * Returns the offset corresponding to this label. This offset is computed
- * from the start of the method's bytecode. <i>This method is intended for
- * {@link Attribute} sub classes, and is normally not needed by class
- * generators or adapters.</i>
- *
- * @return the offset corresponding to this label.
- * @throws IllegalStateException if this label is not resolved yet.
- */
- public int getOffset() {
- if (!resolved) {
- throw new IllegalStateException("Label offset position has not been resolved yet");
- }
- return position;
- }
-
- /**
- * Puts a reference to this label in the bytecode of a method. If the
- * position of the label is known, the offset is computed and written
- * directly. Otherwise, a null offset is written and a new forward reference
- * is declared for this label.
- *
- * @param owner the code writer that calls this method.
- * @param out the bytecode of the method.
- * @param source the position of first byte of the bytecode instruction that
- * contains this label.
- * @param wideOffset <tt>true</tt> if the reference must be stored in 4
- * bytes, or <tt>false</tt> if it must be stored with 2 bytes.
- * @throws IllegalArgumentException if this label has not been created by
- * the given code writer.
- */
- void put(
- final MethodWriter owner,
- final ByteVector out,
- final int source,
- final boolean wideOffset)
- {
- if (resolved) {
- if (wideOffset) {
- out.putInt(position - source);
- } else {
- out.putShort(position - source);
- }
- } else {
- if (wideOffset) {
- addReference(-1 - source, out.length);
- out.putInt(-1);
- } else {
- addReference(source, out.length);
- out.putShort(-1);
- }
- }
- }
-
- /**
- * Adds a forward reference to this label. This method must be called only
- * for a true forward reference, i.e. only if this label is not resolved
- * yet. For backward references, the offset of the reference can be, and
- * must be, computed and stored directly.
- *
- * @param sourcePosition the position of the referencing instruction. This
- * position will be used to compute the offset of this forward
- * reference.
- * @param referencePosition the position where the offset for this forward
- * reference must be stored.
- */
- private void addReference(
- final int sourcePosition,
- final int referencePosition)
- {
- if (srcAndRefPositions == null) {
- srcAndRefPositions = new int[6];
- }
- if (referenceCount >= srcAndRefPositions.length) {
- int[] a = new int[srcAndRefPositions.length + 6];
- System.arraycopy(srcAndRefPositions,
- 0,
- a,
- 0,
- srcAndRefPositions.length);
- srcAndRefPositions = a;
- }
- srcAndRefPositions[referenceCount++] = sourcePosition;
- srcAndRefPositions[referenceCount++] = referencePosition;
- }
-
- /**
- * Resolves all forward references to this label. This method must be called
- * when this label is added to the bytecode of the method, i.e. when its
- * position becomes known. This method fills in the blanks that where left
- * in the bytecode by each forward reference previously added to this label.
- *
- * @param owner the code writer that calls this method.
- * @param position the position of this label in the bytecode.
- * @param data the bytecode of the method.
- * @return <tt>true</tt> if a blank that was left for this label was to
- * small to store the offset. In such a case the corresponding jump
- * instruction is replaced with a pseudo instruction (using unused
- * opcodes) using an unsigned two bytes offset. These pseudo
- * instructions will need to be replaced with true instructions with
- * wider offsets (4 bytes instead of 2). This is done in
- * {@link MethodWriter#resizeInstructions}.
- * @throws IllegalArgumentException if this label has already been resolved,
- * or if it has not been created by the given code writer.
- */
- boolean resolve(
- final MethodWriter owner,
- final int position,
- final byte[] data)
- {
- boolean needUpdate = false;
- this.resolved = true;
- this.position = position;
- int i = 0;
- while (i < referenceCount) {
- int source = srcAndRefPositions[i++];
- int reference = srcAndRefPositions[i++];
- int offset;
- if (source >= 0) {
- offset = position - source;
- if (offset < Short.MIN_VALUE || offset > Short.MAX_VALUE) {
- /*
- * changes the opcode of the jump instruction, in order to
- * be able to find it later (see resizeInstructions in
- * MethodWriter). These temporary opcodes are similar to
- * jump instruction opcodes, except that the 2 bytes offset
- * is unsigned (and can therefore represent values from 0 to
- * 65535, which is sufficient since the size of a method is
- * limited to 65535 bytes).
- */
- int opcode = data[reference - 1] & 0xFF;
- if (opcode <= Opcodes.JSR) {
- // changes IFEQ ... JSR to opcodes 202 to 217
- data[reference - 1] = (byte) (opcode + 49);
- } else {
- // changes IFNULL and IFNONNULL to opcodes 218 and 219
- data[reference - 1] = (byte) (opcode + 20);
- }
- needUpdate = true;
- }
- data[reference++] = (byte) (offset >>> 8);
- data[reference] = (byte) offset;
- } else {
- offset = position + source + 1;
- data[reference++] = (byte) (offset >>> 24);
- data[reference++] = (byte) (offset >>> 16);
- data[reference++] = (byte) (offset >>> 8);
- data[reference] = (byte) offset;
- }
- }
- return needUpdate;
- }
-
- // ------------------------------------------------------------------------
- // Overriden Object methods
- // ------------------------------------------------------------------------
-
- /**
- * Returns a string representation of this label.
- *
- * @return a string representation of this label.
- */
- public String toString() {
- return "L" + System.identityHashCode(this);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodAdapter.java
deleted file mode 100644
index a038ac7..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodAdapter.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * An empty {@link MethodVisitor} that delegates to another
- * {@link MethodVisitor}. This class can be used as a super class to quickly
- * implement usefull method adapter classes, just by overriding the necessary
- * methods.
- *
- * @author Eric Bruneton
- */
-public class MethodAdapter implements MethodVisitor {
-
- /**
- * The {@link MethodVisitor} to which this adapter delegates calls.
- */
- protected MethodVisitor mv;
-
- /**
- * Constructs a new {@link MethodAdapter} object.
- *
- * @param mv the code visitor to which this adapter must delegate calls.
- */
- public MethodAdapter(final MethodVisitor mv) {
- this.mv = mv;
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- return mv.visitAnnotationDefault();
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- return mv.visitAnnotation(desc, visible);
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- return mv.visitParameterAnnotation(parameter, desc, visible);
- }
-
- public void visitAttribute(final Attribute attr) {
- mv.visitAttribute(attr);
- }
-
- public void visitCode() {
- mv.visitCode();
- }
-
- public void visitInsn(final int opcode) {
- mv.visitInsn(opcode);
- }
-
- public void visitIntInsn(final int opcode, final int operand) {
- mv.visitIntInsn(opcode, operand);
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- mv.visitVarInsn(opcode, var);
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- mv.visitTypeInsn(opcode, desc);
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- mv.visitFieldInsn(opcode, owner, name, desc);
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- mv.visitMethodInsn(opcode, owner, name, desc);
- }
-
- public void visitJumpInsn(final int opcode, final Label label) {
- mv.visitJumpInsn(opcode, label);
- }
-
- public void visitLabel(final Label label) {
- mv.visitLabel(label);
- }
-
- public void visitLdcInsn(final Object cst) {
- mv.visitLdcInsn(cst);
- }
-
- public void visitIincInsn(final int var, final int increment) {
- mv.visitIincInsn(var, increment);
- }
-
- public void visitTableSwitchInsn(
- final int min,
- final int max,
- final Label dflt,
- final Label labels[])
- {
- mv.visitTableSwitchInsn(min, max, dflt, labels);
- }
-
- public void visitLookupSwitchInsn(
- final Label dflt,
- final int keys[],
- final Label labels[])
- {
- mv.visitLookupSwitchInsn(dflt, keys, labels);
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- mv.visitMultiANewArrayInsn(desc, dims);
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- mv.visitTryCatchBlock(start, end, handler, type);
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- mv.visitLocalVariable(name, desc, signature, start, end, index);
- }
-
- public void visitLineNumber(final int line, final Label start) {
- mv.visitLineNumber(line, start);
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- mv.visitMaxs(maxStack, maxLocals);
- }
-
- public void visitEnd() {
- mv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodVisitor.java
deleted file mode 100644
index d56b3bd..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodVisitor.java
+++ /dev/null
@@ -1,334 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A visitor to visit a Java method. The methods of this interface must be
- * called in the following order: [ <tt>visitAnnotationDefault</tt> ] (
- * <tt>visitAnnotation</tt> | <tt>visitParameterAnnotation</tt> |
- * <tt>visitAttribute</tt> )* [ <tt>visitCode</tt> ( <tt>visit</tt><i>X</i>Insn</tt> |
- * <tt>visitLabel</tt> | <tt>visitTryCatchBlock</tt> | <tt>visitLocalVariable</tt> |
- * <tt>visitLineNumber</tt>)* <tt>visitMaxs</tt> ] <tt>visitEnd</tt>. In
- * addition, the <tt>visit</tt><i>X</i>Insn</tt> and <tt>visitLabel</tt>
- * methods must be called in the sequential order of the bytecode instructions
- * of the visited code, and the <tt>visitLocalVariable</tt> and <tt>visitLineNumber</tt>
- * methods must be called <i>after</i> the labels passed as arguments have been
- * visited.
- *
- * @author Eric Bruneton
- */
-public interface MethodVisitor {
-
- // -------------------------------------------------------------------------
- // Annotations and non standard attributes
- // -------------------------------------------------------------------------
-
- /**
- * Visits the default value of this annotation interface method.
- *
- * @return a non null visitor to the visit the actual default value of this
- * annotation interface method. The 'name' parameters passed to the
- * methods of this annotation visitor are ignored. Moreover, exacly
- * one visit method must be called on this annotation visitor,
- * followed by visitEnd.
- */
- AnnotationVisitor visitAnnotationDefault();
-
- /**
- * Visits an annotation of this method.
- *
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a non null visitor to visit the annotation values.
- */
- AnnotationVisitor visitAnnotation(String desc, boolean visible);
-
- /**
- * Visits an annotation of a parameter this method.
- *
- * @param parameter the parameter index.
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a non null visitor to visit the annotation values.
- */
- AnnotationVisitor visitParameterAnnotation(
- int parameter,
- String desc,
- boolean visible);
-
- /**
- * Visits a non standard attribute of this method.
- *
- * @param attr an attribute.
- */
- void visitAttribute(Attribute attr);
-
- /**
- * Starts the visit of the method's code, if any (i.e. non abstract method).
- */
- void visitCode();
-
- // -------------------------------------------------------------------------
- // Normal instructions
- // -------------------------------------------------------------------------
-
- /**
- * Visits a zero operand instruction.
- *
- * @param opcode the opcode of the instruction to be visited. This opcode is
- * either NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2,
- * ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1, FCONST_0,
- * FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD, LALOAD, FALOAD,
- * DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IASTORE, LASTORE, FASTORE,
- * DASTORE, AASTORE, BASTORE, CASTORE, SASTORE, POP, POP2, DUP,
- * DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP, IADD, LADD, FADD,
- * DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV, LDIV,
- * FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG, ISHL,
- * LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR,
- * I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F, I2B,
- * I2C, I2S, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN,
- * FRETURN, DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW,
- * MONITORENTER, or MONITOREXIT.
- */
- void visitInsn(int opcode);
-
- /**
- * Visits an instruction with a single int operand.
- *
- * @param opcode the opcode of the instruction to be visited. This opcode is
- * either BIPUSH, SIPUSH or NEWARRAY.
- * @param operand the operand of the instruction to be visited.<br>
- * When opcode is BIPUSH, operand value should be between
- * Byte.MIN_VALUE and Byte.MAX_VALUE.<br>
- * When opcode is SIPUSH, operand value should be between
- * Short.MIN_VALUE and Short.MAX_VALUE.<br>
- * When opcode is NEWARRAY, operand value should be one of
- * {@link Opcodes#T_BOOLEAN}, {@link Opcodes#T_CHAR},
- * {@link Opcodes#T_FLOAT}, {@link Opcodes#T_DOUBLE},
- * {@link Opcodes#T_BYTE}, {@link Opcodes#T_SHORT},
- * {@link Opcodes#T_INT} or {@link Opcodes#T_LONG}.
- */
- void visitIntInsn(int opcode, int operand);
-
- /**
- * Visits a local variable instruction. A local variable instruction is an
- * instruction that loads or stores the value of a local variable.
- *
- * @param opcode the opcode of the local variable instruction to be visited.
- * This opcode is either ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE,
- * LSTORE, FSTORE, DSTORE, ASTORE or RET.
- * @param var the operand of the instruction to be visited. This operand is
- * the index of a local variable.
- */
- void visitVarInsn(int opcode, int var);
-
- /**
- * Visits a type instruction. A type instruction is an instruction that
- * takes a type descriptor as parameter.
- *
- * @param opcode the opcode of the type instruction to be visited. This
- * opcode is either NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.
- * @param desc the operand of the instruction to be visited. This operand is
- * must be a fully qualified class name in internal form, or the type
- * descriptor of an array type (see {@link Type Type}).
- */
- void visitTypeInsn(int opcode, String desc);
-
- /**
- * Visits a field instruction. A field instruction is an instruction that
- * loads or stores the value of a field of an object.
- *
- * @param opcode the opcode of the type instruction to be visited. This
- * opcode is either GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.
- * @param owner the internal name of the field's owner class (see {@link
- * Type#getInternalName() getInternalName}).
- * @param name the field's name.
- * @param desc the field's descriptor (see {@link Type Type}).
- */
- void visitFieldInsn(int opcode, String owner, String name, String desc);
-
- /**
- * Visits a method instruction. A method instruction is an instruction that
- * invokes a method.
- *
- * @param opcode the opcode of the type instruction to be visited. This
- * opcode is either INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or
- * INVOKEINTERFACE.
- * @param owner the internal name of the method's owner class (see {@link
- * Type#getInternalName() getInternalName}).
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type Type}).
- */
- void visitMethodInsn(int opcode, String owner, String name, String desc);
-
- /**
- * Visits a jump instruction. A jump instruction is an instruction that may
- * jump to another instruction.
- *
- * @param opcode the opcode of the type instruction to be visited. This
- * opcode is either IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ,
- * IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ,
- * IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL.
- * @param label the operand of the instruction to be visited. This operand
- * is a label that designates the instruction to which the jump
- * instruction may jump.
- */
- void visitJumpInsn(int opcode, Label label);
-
- /**
- * Visits a label. A label designates the instruction that will be visited
- * just after it.
- *
- * @param label a {@link Label Label} object.
- */
- void visitLabel(Label label);
-
- // -------------------------------------------------------------------------
- // Special instructions
- // -------------------------------------------------------------------------
-
- /**
- * Visits a LDC instruction.
- *
- * @param cst the constant to be loaded on the stack. This parameter must be
- * a non null {@link Integer}, a {@link Float}, a {@link Long}, a
- * {@link Double} a {@link String} (or a {@link Type} for
- * <tt>.class</tt> constants, for classes whose version is 49.0 or
- * more).
- */
- void visitLdcInsn(Object cst);
-
- /**
- * Visits an IINC instruction.
- *
- * @param var index of the local variable to be incremented.
- * @param increment amount to increment the local variable by.
- */
- void visitIincInsn(int var, int increment);
-
- /**
- * Visits a TABLESWITCH instruction.
- *
- * @param min the minimum key value.
- * @param max the maximum key value.
- * @param dflt beginning of the default handler block.
- * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
- * the beginning of the handler block for the <tt>min + i</tt> key.
- */
- void visitTableSwitchInsn(int min, int max, Label dflt, Label labels[]);
-
- /**
- * Visits a LOOKUPSWITCH instruction.
- *
- * @param dflt beginning of the default handler block.
- * @param keys the values of the keys.
- * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
- * the beginning of the handler block for the <tt>keys[i]</tt> key.
- */
- void visitLookupSwitchInsn(Label dflt, int keys[], Label labels[]);
-
- /**
- * Visits a MULTIANEWARRAY instruction.
- *
- * @param desc an array type descriptor (see {@link Type Type}).
- * @param dims number of dimensions of the array to allocate.
- */
- void visitMultiANewArrayInsn(String desc, int dims);
-
- // -------------------------------------------------------------------------
- // Exceptions table entries, debug information,
- // max stack size and max locals
- // -------------------------------------------------------------------------
-
- /**
- * Visits a try catch block.
- *
- * @param start beginning of the exception handler's scope (inclusive).
- * @param end end of the exception handler's scope (exclusive).
- * @param handler beginning of the exception handler's code.
- * @param type internal name of the type of exceptions handled by the
- * handler, or <tt>null</tt> to catch any exceptions (for "finally"
- * blocks).
- */
- void visitTryCatchBlock(Label start, Label end, Label handler, String type);
-
- /**
- * Visits a local variable declaration.
- *
- * @param name the name of a local variable.
- * @param desc the type descriptor of this local variable.
- * @param signature the type signature of this local variable. May be
- * <tt>null</tt> if the local variable type does not use generic
- * types.
- * @param start the first instruction corresponding to the scope of this
- * local variable (inclusive).
- * @param end the last instruction corresponding to the scope of this local
- * variable (exclusive).
- * @param index the local variable's index.
- * @throws IllegalArgumentException if one of the labels has not already
- * been visited by this visitor (by the
- * {@link #visitLabel visitLabel} method).
- */
- void visitLocalVariable(
- String name,
- String desc,
- String signature,
- Label start,
- Label end,
- int index);
-
- /**
- * Visits a line number declaration.
- *
- * @param line a line number. This number refers to the source file from
- * which the class was compiled.
- * @param start the first instruction corresponding to this line number.
- * @throws IllegalArgumentException if <tt>start</tt> has not already been
- * visited by this visitor (by the {@link #visitLabel visitLabel}
- * method).
- */
- void visitLineNumber(int line, Label start);
-
- /**
- * Visits the maximum stack size and the maximum number of local variables
- * of the method.
- *
- * @param maxStack maximum stack size of the method.
- * @param maxLocals maximum number of local variables for the method.
- */
- void visitMaxs(int maxStack, int maxLocals);
-
- /**
- * Visits the end of the method. This method, which is the last one to be
- * called, is used to inform the visitor that all the annotations and
- * attributes of the method have been visited.
- */
- void visitEnd();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodWriter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodWriter.java
deleted file mode 100644
index 5b841d5..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/MethodWriter.java
+++ /dev/null
@@ -1,2022 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * A {@link MethodVisitor} that generates methods in bytecode form. Each visit
- * method of this class appends the bytecode corresponding to the visited
- * instruction to a byte vector, in the order these methods are called.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-class MethodWriter implements MethodVisitor {
-
- /**
- * Next method writer (see {@link ClassWriter#firstMethod firstMethod}).
- */
- MethodWriter next;
-
- /**
- * The class writer to which this method must be added.
- */
- ClassWriter cw;
-
- /**
- * Access flags of this method.
- */
- private int access;
-
- /**
- * The index of the constant pool item that contains the name of this
- * method.
- */
- private int name;
-
- /**
- * The index of the constant pool item that contains the descriptor of this
- * method.
- */
- private int desc;
-
- /**
- * The descriptor of this method.
- */
- private String descriptor;
-
- /**
- * If not zero, indicates that the code of this method must be copied from
- * the ClassReader associated to this writer in <code>cw.cr</code>. More
- * precisely, this field gives the index of the first byte to copied from
- * <code>cw.cr.b</code>.
- */
- int classReaderOffset;
-
- /**
- * If not zero, indicates that the code of this method must be copied from
- * the ClassReader associated to this writer in <code>cw.cr</code>. More
- * precisely, this field gives the number of bytes to copied from
- * <code>cw.cr.b</code>.
- */
- int classReaderLength;
-
- /**
- * The signature of this method.
- */
- String signature;
-
- /**
- * Number of exceptions that can be thrown by this method.
- */
- int exceptionCount;
-
- /**
- * The exceptions that can be thrown by this method. More precisely, this
- * array contains the indexes of the constant pool items that contain the
- * internal names of these exception classes.
- */
- int[] exceptions;
-
- /**
- * The annotation default attribute of this method. May be <tt>null</tt>.
- */
- private ByteVector annd;
-
- /**
- * The runtime visible annotations of this method. May be <tt>null</tt>.
- */
- private AnnotationWriter anns;
-
- /**
- * The runtime invisible annotations of this method. May be <tt>null</tt>.
- */
- private AnnotationWriter ianns;
-
- /**
- * The runtime visible parameter annotations of this method. May be
- * <tt>null</tt>.
- */
- private AnnotationWriter[] panns;
-
- /**
- * The runtime invisible parameter annotations of this method. May be
- * <tt>null</tt>.
- */
- private AnnotationWriter[] ipanns;
-
- /**
- * The non standard attributes of the method.
- */
- private Attribute attrs;
-
- /**
- * The bytecode of this method.
- */
- private ByteVector code = new ByteVector();
-
- /**
- * Maximum stack size of this method.
- */
- private int maxStack;
-
- /**
- * Maximum number of local variables for this method.
- */
- private int maxLocals;
-
- /**
- * Number of entries in the catch table of this method.
- */
- private int catchCount;
-
- /**
- * The catch table of this method.
- */
- private Handler catchTable;
-
- /**
- * The last element in the catchTable handler list.
- */
- private Handler lastHandler;
-
- /**
- * Number of entries in the LocalVariableTable attribute.
- */
- private int localVarCount;
-
- /**
- * The LocalVariableTable attribute.
- */
- private ByteVector localVar;
-
- /**
- * Number of entries in the LocalVariableTypeTable attribute.
- */
- private int localVarTypeCount;
-
- /**
- * The LocalVariableTypeTable attribute.
- */
- private ByteVector localVarType;
-
- /**
- * Number of entries in the LineNumberTable attribute.
- */
- private int lineNumberCount;
-
- /**
- * The LineNumberTable attribute.
- */
- private ByteVector lineNumber;
-
- /**
- * The non standard attributes of the method's code.
- */
- private Attribute cattrs;
-
- /**
- * Indicates if some jump instructions are too small and need to be resized.
- */
- private boolean resize;
-
- /*
- * Fields for the control flow graph analysis algorithm (used to compute the
- * maximum stack size). A control flow graph contains one node per "basic
- * block", and one edge per "jump" from one basic block to another. Each
- * node (i.e., each basic block) is represented by the Label object that
- * corresponds to the first instruction of this basic block. Each node also
- * stores the list of its successors in the graph, as a linked list of Edge
- * objects.
- */
-
- /**
- * <tt>true</tt> if the maximum stack size and number of local variables
- * must be automatically computed.
- */
- private final boolean computeMaxs;
-
- /**
- * The (relative) stack size after the last visited instruction. This size
- * is relative to the beginning of the current basic block, i.e., the true
- * stack size after the last visited instruction is equal to the {@link
- * Label#beginStackSize beginStackSize} of the current basic block plus
- * <tt>stackSize</tt>.
- */
- private int stackSize;
-
- /**
- * The (relative) maximum stack size after the last visited instruction.
- * This size is relative to the beginning of the current basic block, i.e.,
- * the true maximum stack size after the last visited instruction is equal
- * to the {@link Label#beginStackSize beginStackSize} of the current basic
- * block plus <tt>stackSize</tt>.
- */
- private int maxStackSize;
-
- /**
- * The current basic block. This block is the basic block to which the next
- * instruction to be visited must be added.
- */
- private Label currentBlock;
-
- /**
- * The basic block stack used by the control flow analysis algorithm. This
- * stack is represented by a linked list of {@link Label Label} objects,
- * linked to each other by their {@link Label#next} field. This stack must
- * not be confused with the JVM stack used to execute the JVM instructions!
- */
- private Label blockStack;
-
- /**
- * The stack size variation corresponding to each JVM instruction. This
- * stack variation is equal to the size of the values produced by an
- * instruction, minus the size of the values consumed by this instruction.
- */
- private final static int[] SIZE;
-
- // ------------------------------------------------------------------------
- // Static initializer
- // ------------------------------------------------------------------------
-
- /**
- * Computes the stack size variation corresponding to each JVM instruction.
- */
- static {
- int i;
- int[] b = new int[202];
- String s = "EFFFFFFFFGGFFFGGFFFEEFGFGFEEEEEEEEEEEEEEEEEEEEDEDEDDDDD"
- + "CDCDEEEEEEEEEEEEEEEEEEEEBABABBBBDCFFFGGGEDCDCDCDCDCDCDCDCD"
- + "CDCEEEEDDDDDDDCDCDCEFEFDDEEFFDEDEEEBDDBBDDDDDDCCCCCCCCEFED"
- + "DDCDCDEEEEEEEEEEFEEEEEEDDEEDDEE";
- for (i = 0; i < b.length; ++i) {
- b[i] = s.charAt(i) - 'E';
- }
- SIZE = b;
-
- // code to generate the above string
- //
- // int NA = 0; // not applicable (unused opcode or variable size opcode)
- //
- // b = new int[] {
- // 0, //NOP, // visitInsn
- // 1, //ACONST_NULL, // -
- // 1, //ICONST_M1, // -
- // 1, //ICONST_0, // -
- // 1, //ICONST_1, // -
- // 1, //ICONST_2, // -
- // 1, //ICONST_3, // -
- // 1, //ICONST_4, // -
- // 1, //ICONST_5, // -
- // 2, //LCONST_0, // -
- // 2, //LCONST_1, // -
- // 1, //FCONST_0, // -
- // 1, //FCONST_1, // -
- // 1, //FCONST_2, // -
- // 2, //DCONST_0, // -
- // 2, //DCONST_1, // -
- // 1, //BIPUSH, // visitIntInsn
- // 1, //SIPUSH, // -
- // 1, //LDC, // visitLdcInsn
- // NA, //LDC_W, // -
- // NA, //LDC2_W, // -
- // 1, //ILOAD, // visitVarInsn
- // 2, //LLOAD, // -
- // 1, //FLOAD, // -
- // 2, //DLOAD, // -
- // 1, //ALOAD, // -
- // NA, //ILOAD_0, // -
- // NA, //ILOAD_1, // -
- // NA, //ILOAD_2, // -
- // NA, //ILOAD_3, // -
- // NA, //LLOAD_0, // -
- // NA, //LLOAD_1, // -
- // NA, //LLOAD_2, // -
- // NA, //LLOAD_3, // -
- // NA, //FLOAD_0, // -
- // NA, //FLOAD_1, // -
- // NA, //FLOAD_2, // -
- // NA, //FLOAD_3, // -
- // NA, //DLOAD_0, // -
- // NA, //DLOAD_1, // -
- // NA, //DLOAD_2, // -
- // NA, //DLOAD_3, // -
- // NA, //ALOAD_0, // -
- // NA, //ALOAD_1, // -
- // NA, //ALOAD_2, // -
- // NA, //ALOAD_3, // -
- // -1, //IALOAD, // visitInsn
- // 0, //LALOAD, // -
- // -1, //FALOAD, // -
- // 0, //DALOAD, // -
- // -1, //AALOAD, // -
- // -1, //BALOAD, // -
- // -1, //CALOAD, // -
- // -1, //SALOAD, // -
- // -1, //ISTORE, // visitVarInsn
- // -2, //LSTORE, // -
- // -1, //FSTORE, // -
- // -2, //DSTORE, // -
- // -1, //ASTORE, // -
- // NA, //ISTORE_0, // -
- // NA, //ISTORE_1, // -
- // NA, //ISTORE_2, // -
- // NA, //ISTORE_3, // -
- // NA, //LSTORE_0, // -
- // NA, //LSTORE_1, // -
- // NA, //LSTORE_2, // -
- // NA, //LSTORE_3, // -
- // NA, //FSTORE_0, // -
- // NA, //FSTORE_1, // -
- // NA, //FSTORE_2, // -
- // NA, //FSTORE_3, // -
- // NA, //DSTORE_0, // -
- // NA, //DSTORE_1, // -
- // NA, //DSTORE_2, // -
- // NA, //DSTORE_3, // -
- // NA, //ASTORE_0, // -
- // NA, //ASTORE_1, // -
- // NA, //ASTORE_2, // -
- // NA, //ASTORE_3, // -
- // -3, //IASTORE, // visitInsn
- // -4, //LASTORE, // -
- // -3, //FASTORE, // -
- // -4, //DASTORE, // -
- // -3, //AASTORE, // -
- // -3, //BASTORE, // -
- // -3, //CASTORE, // -
- // -3, //SASTORE, // -
- // -1, //POP, // -
- // -2, //POP2, // -
- // 1, //DUP, // -
- // 1, //DUP_X1, // -
- // 1, //DUP_X2, // -
- // 2, //DUP2, // -
- // 2, //DUP2_X1, // -
- // 2, //DUP2_X2, // -
- // 0, //SWAP, // -
- // -1, //IADD, // -
- // -2, //LADD, // -
- // -1, //FADD, // -
- // -2, //DADD, // -
- // -1, //ISUB, // -
- // -2, //LSUB, // -
- // -1, //FSUB, // -
- // -2, //DSUB, // -
- // -1, //IMUL, // -
- // -2, //LMUL, // -
- // -1, //FMUL, // -
- // -2, //DMUL, // -
- // -1, //IDIV, // -
- // -2, //LDIV, // -
- // -1, //FDIV, // -
- // -2, //DDIV, // -
- // -1, //IREM, // -
- // -2, //LREM, // -
- // -1, //FREM, // -
- // -2, //DREM, // -
- // 0, //INEG, // -
- // 0, //LNEG, // -
- // 0, //FNEG, // -
- // 0, //DNEG, // -
- // -1, //ISHL, // -
- // -1, //LSHL, // -
- // -1, //ISHR, // -
- // -1, //LSHR, // -
- // -1, //IUSHR, // -
- // -1, //LUSHR, // -
- // -1, //IAND, // -
- // -2, //LAND, // -
- // -1, //IOR, // -
- // -2, //LOR, // -
- // -1, //IXOR, // -
- // -2, //LXOR, // -
- // 0, //IINC, // visitIincInsn
- // 1, //I2L, // visitInsn
- // 0, //I2F, // -
- // 1, //I2D, // -
- // -1, //L2I, // -
- // -1, //L2F, // -
- // 0, //L2D, // -
- // 0, //F2I, // -
- // 1, //F2L, // -
- // 1, //F2D, // -
- // -1, //D2I, // -
- // 0, //D2L, // -
- // -1, //D2F, // -
- // 0, //I2B, // -
- // 0, //I2C, // -
- // 0, //I2S, // -
- // -3, //LCMP, // -
- // -1, //FCMPL, // -
- // -1, //FCMPG, // -
- // -3, //DCMPL, // -
- // -3, //DCMPG, // -
- // -1, //IFEQ, // visitJumpInsn
- // -1, //IFNE, // -
- // -1, //IFLT, // -
- // -1, //IFGE, // -
- // -1, //IFGT, // -
- // -1, //IFLE, // -
- // -2, //IF_ICMPEQ, // -
- // -2, //IF_ICMPNE, // -
- // -2, //IF_ICMPLT, // -
- // -2, //IF_ICMPGE, // -
- // -2, //IF_ICMPGT, // -
- // -2, //IF_ICMPLE, // -
- // -2, //IF_ACMPEQ, // -
- // -2, //IF_ACMPNE, // -
- // 0, //GOTO, // -
- // 1, //JSR, // -
- // 0, //RET, // visitVarInsn
- // -1, //TABLESWITCH, // visiTableSwitchInsn
- // -1, //LOOKUPSWITCH, // visitLookupSwitch
- // -1, //IRETURN, // visitInsn
- // -2, //LRETURN, // -
- // -1, //FRETURN, // -
- // -2, //DRETURN, // -
- // -1, //ARETURN, // -
- // 0, //RETURN, // -
- // NA, //GETSTATIC, // visitFieldInsn
- // NA, //PUTSTATIC, // -
- // NA, //GETFIELD, // -
- // NA, //PUTFIELD, // -
- // NA, //INVOKEVIRTUAL, // visitMethodInsn
- // NA, //INVOKESPECIAL, // -
- // NA, //INVOKESTATIC, // -
- // NA, //INVOKEINTERFACE, // -
- // NA, //UNUSED, // NOT VISITED
- // 1, //NEW, // visitTypeInsn
- // 0, //NEWARRAY, // visitIntInsn
- // 0, //ANEWARRAY, // visitTypeInsn
- // 0, //ARRAYLENGTH, // visitInsn
- // NA, //ATHROW, // -
- // 0, //CHECKCAST, // visitTypeInsn
- // 0, //INSTANCEOF, // -
- // -1, //MONITORENTER, // visitInsn
- // -1, //MONITOREXIT, // -
- // NA, //WIDE, // NOT VISITED
- // NA, //MULTIANEWARRAY, // visitMultiANewArrayInsn
- // -1, //IFNULL, // visitJumpInsn
- // -1, //IFNONNULL, // -
- // NA, //GOTO_W, // -
- // NA, //JSR_W, // -
- // };
- // for (i = 0; i < b.length; ++i) {
- // System.err.print((char)('E' + b[i]));
- // }
- // System.err.println();
- }
-
- // ------------------------------------------------------------------------
- // Constructor
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a new {@link MethodWriter}.
- *
- * @param cw the class writer in which the method must be added.
- * @param access the method's access flags (see {@link Opcodes}).
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type}).
- * @param signature the method's signature. May be <tt>null</tt>.
- * @param exceptions the internal names of the method's exceptions. May be
- * <tt>null</tt>.
- * @param computeMaxs <tt>true</tt> if the maximum stack size and number
- * of local variables must be automatically computed.
- */
- MethodWriter(
- final ClassWriter cw,
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions,
- final boolean computeMaxs)
- {
- if (cw.firstMethod == null) {
- cw.firstMethod = this;
- } else {
- cw.lastMethod.next = this;
- }
- cw.lastMethod = this;
- this.cw = cw;
- this.access = access;
- this.name = cw.newUTF8(name);
- this.desc = cw.newUTF8(desc);
- this.descriptor = desc;
- this.signature = signature;
- if (exceptions != null && exceptions.length > 0) {
- exceptionCount = exceptions.length;
- this.exceptions = new int[exceptionCount];
- for (int i = 0; i < exceptionCount; ++i) {
- this.exceptions[i] = cw.newClass(exceptions[i]);
- }
- }
- this.computeMaxs = computeMaxs;
- if (computeMaxs) {
- // updates maxLocals
- int size = getArgumentsAndReturnSizes(desc) >> 2;
- if ((access & Opcodes.ACC_STATIC) != 0) {
- --size;
- }
- maxLocals = size;
- // pushes the first block onto the stack of blocks to be visited
- currentBlock = new Label();
- currentBlock.pushed = true;
- blockStack = currentBlock;
- }
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the MethodVisitor interface
- // ------------------------------------------------------------------------
-
- public AnnotationVisitor visitAnnotationDefault() {
- annd = new ByteVector();
- return new AnnotationWriter(cw, false, annd, null, 0);
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- ByteVector bv = new ByteVector();
- // write type, and reserve space for values count
- bv.putShort(cw.newUTF8(desc)).putShort(0);
- AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
- if (visible) {
- aw.next = anns;
- anns = aw;
- } else {
- aw.next = ianns;
- ianns = aw;
- }
- return aw;
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- ByteVector bv = new ByteVector();
- // write type, and reserve space for values count
- bv.putShort(cw.newUTF8(desc)).putShort(0);
- AnnotationWriter aw = new AnnotationWriter(cw, true, bv, bv, 2);
- if (visible) {
- if (panns == null) {
- panns = new AnnotationWriter[Type.getArgumentTypes(descriptor).length];
- }
- aw.next = panns[parameter];
- panns[parameter] = aw;
- } else {
- if (ipanns == null) {
- ipanns = new AnnotationWriter[Type.getArgumentTypes(descriptor).length];
- }
- aw.next = ipanns[parameter];
- ipanns[parameter] = aw;
- }
- return aw;
- }
-
- public void visitAttribute(final Attribute attr) {
- if (attr.isCodeAttribute()) {
- attr.next = cattrs;
- cattrs = attr;
- } else {
- attr.next = attrs;
- attrs = attr;
- }
- }
-
- public void visitCode() {
- }
-
- public void visitInsn(final int opcode) {
- if (computeMaxs) {
- // updates current and max stack sizes
- int size = stackSize + SIZE[opcode];
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- // if opcode == ATHROW or xRETURN, ends current block (no successor)
- if ((opcode >= Opcodes.IRETURN && opcode <= Opcodes.RETURN)
- || opcode == Opcodes.ATHROW)
- {
- if (currentBlock != null) {
- currentBlock.maxStackSize = maxStackSize;
- currentBlock = null;
- }
- }
- }
- // adds the instruction to the bytecode of the method
- code.putByte(opcode);
- }
-
- public void visitIntInsn(final int opcode, final int operand) {
- if (computeMaxs && opcode != Opcodes.NEWARRAY) {
- // updates current and max stack sizes only if opcode == NEWARRAY
- // (stack size variation = 0 for BIPUSH or SIPUSH)
- int size = stackSize + 1;
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- }
- // adds the instruction to the bytecode of the method
- if (opcode == Opcodes.SIPUSH) {
- code.put12(opcode, operand);
- } else { // BIPUSH or NEWARRAY
- code.put11(opcode, operand);
- }
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- if (computeMaxs) {
- // updates current and max stack sizes
- if (opcode == Opcodes.RET) {
- // no stack change, but end of current block (no successor)
- if (currentBlock != null) {
- currentBlock.maxStackSize = maxStackSize;
- currentBlock = null;
- }
- } else { // xLOAD or xSTORE
- int size = stackSize + SIZE[opcode];
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- }
- // updates max locals
- int n;
- if (opcode == Opcodes.LLOAD || opcode == Opcodes.DLOAD
- || opcode == Opcodes.LSTORE || opcode == Opcodes.DSTORE)
- {
- n = var + 2;
- } else {
- n = var + 1;
- }
- if (n > maxLocals) {
- maxLocals = n;
- }
- }
- // adds the instruction to the bytecode of the method
- if (var < 4 && opcode != Opcodes.RET) {
- int opt;
- if (opcode < Opcodes.ISTORE) {
- /* ILOAD_0 */
- opt = 26 + ((opcode - Opcodes.ILOAD) << 2) + var;
- } else {
- /* ISTORE_0 */
- opt = 59 + ((opcode - Opcodes.ISTORE) << 2) + var;
- }
- code.putByte(opt);
- } else if (var >= 256) {
- code.putByte(196 /* WIDE */).put12(opcode, var);
- } else {
- code.put11(opcode, var);
- }
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- if (computeMaxs && opcode == Opcodes.NEW) {
- // updates current and max stack sizes only if opcode == NEW
- // (stack size variation = 0 for ANEWARRAY, CHECKCAST, INSTANCEOF)
- int size = stackSize + 1;
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- }
- // adds the instruction to the bytecode of the method
- code.put12(opcode, cw.newClass(desc));
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- if (computeMaxs) {
- int size;
- // computes the stack size variation
- char c = desc.charAt(0);
- switch (opcode) {
- case Opcodes.GETSTATIC:
- size = stackSize + (c == 'D' || c == 'J' ? 2 : 1);
- break;
- case Opcodes.PUTSTATIC:
- size = stackSize + (c == 'D' || c == 'J' ? -2 : -1);
- break;
- case Opcodes.GETFIELD:
- size = stackSize + (c == 'D' || c == 'J' ? 1 : 0);
- break;
- // case Constants.PUTFIELD:
- default:
- size = stackSize + (c == 'D' || c == 'J' ? -3 : -2);
- break;
- }
- // updates current and max stack sizes
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- }
- // adds the instruction to the bytecode of the method
- code.put12(opcode, cw.newField(owner, name, desc));
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- boolean itf = opcode == Opcodes.INVOKEINTERFACE;
- Item i = cw.newMethodItem(owner, name, desc, itf);
- int argSize = i.intVal;
- if (computeMaxs) {
- /*
- * computes the stack size variation. In order not to recompute
- * several times this variation for the same Item, we use the intVal
- * field of this item to store this variation, once it has been
- * computed. More precisely this intVal field stores the sizes of
- * the arguments and of the return value corresponding to desc.
- */
- if (argSize == 0) {
- // the above sizes have not been computed yet, so we compute
- // them...
- argSize = getArgumentsAndReturnSizes(desc);
- // ... and we save them in order not to recompute them in the
- // future
- i.intVal = argSize;
- }
- int size;
- if (opcode == Opcodes.INVOKESTATIC) {
- size = stackSize - (argSize >> 2) + (argSize & 0x03) + 1;
- } else {
- size = stackSize - (argSize >> 2) + (argSize & 0x03);
- }
- // updates current and max stack sizes
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- }
- // adds the instruction to the bytecode of the method
- if (itf) {
- if (!computeMaxs) {
- if (argSize == 0) {
- argSize = getArgumentsAndReturnSizes(desc);
- i.intVal = argSize;
- }
- }
- code.put12(Opcodes.INVOKEINTERFACE, i.index).put11(argSize >> 2, 0);
- } else {
- code.put12(opcode, i.index);
- }
- }
-
- public void visitJumpInsn(final int opcode, final Label label) {
- if (computeMaxs) {
- if (opcode == Opcodes.GOTO) {
- // no stack change, but end of current block (with one new
- // successor)
- if (currentBlock != null) {
- currentBlock.maxStackSize = maxStackSize;
- addSuccessor(stackSize, label);
- currentBlock = null;
- }
- } else if (opcode == Opcodes.JSR) {
- if (currentBlock != null) {
- addSuccessor(stackSize + 1, label);
- }
- } else {
- // updates current stack size (max stack size unchanged because
- // stack size variation always negative in this case)
- stackSize += SIZE[opcode];
- if (currentBlock != null) {
- addSuccessor(stackSize, label);
- }
- }
- }
- // adds the instruction to the bytecode of the method
- if (label.resolved && label.position - code.length < Short.MIN_VALUE) {
- /*
- * case of a backward jump with an offset < -32768. In this case we
- * automatically replace GOTO with GOTO_W, JSR with JSR_W and IFxxx
- * <l> with IFNOTxxx <l'> GOTO_W <l>, where IFNOTxxx is the
- * "opposite" opcode of IFxxx (i.e., IFNE for IFEQ) and where <l'>
- * designates the instruction just after the GOTO_W.
- */
- if (opcode == Opcodes.GOTO) {
- code.putByte(200); // GOTO_W
- } else if (opcode == Opcodes.JSR) {
- code.putByte(201); // JSR_W
- } else {
- code.putByte(opcode <= 166
- ? ((opcode + 1) ^ 1) - 1
- : opcode ^ 1);
- code.putShort(8); // jump offset
- code.putByte(200); // GOTO_W
- }
- label.put(this, code, code.length - 1, true);
- } else {
- /*
- * case of a backward jump with an offset >= -32768, or of a forward
- * jump with, of course, an unknown offset. In these cases we store
- * the offset in 2 bytes (which will be increased in
- * resizeInstructions, if needed).
- */
- code.putByte(opcode);
- label.put(this, code, code.length - 1, false);
- }
- }
-
- public void visitLabel(final Label label) {
- if (computeMaxs) {
- if (currentBlock != null) {
- // ends current block (with one new successor)
- currentBlock.maxStackSize = maxStackSize;
- addSuccessor(stackSize, label);
- }
- // begins a new current block,
- // resets the relative current and max stack sizes
- currentBlock = label;
- stackSize = 0;
- maxStackSize = 0;
- }
- // resolves previous forward references to label, if any
- resize |= label.resolve(this, code.length, code.data);
- }
-
- public void visitLdcInsn(final Object cst) {
- Item i = cw.newConstItem(cst);
- if (computeMaxs) {
- int size;
- // computes the stack size variation
- if (i.type == ClassWriter.LONG || i.type == ClassWriter.DOUBLE) {
- size = stackSize + 2;
- } else {
- size = stackSize + 1;
- }
- // updates current and max stack sizes
- if (size > maxStackSize) {
- maxStackSize = size;
- }
- stackSize = size;
- }
- // adds the instruction to the bytecode of the method
- int index = i.index;
- if (i.type == ClassWriter.LONG || i.type == ClassWriter.DOUBLE) {
- code.put12(20 /* LDC2_W */, index);
- } else if (index >= 256) {
- code.put12(19 /* LDC_W */, index);
- } else {
- code.put11(Opcodes.LDC, index);
- }
- }
-
- public void visitIincInsn(final int var, final int increment) {
- if (computeMaxs) {
- // updates max locals only (no stack change)
- int n = var + 1;
- if (n > maxLocals) {
- maxLocals = n;
- }
- }
- // adds the instruction to the bytecode of the method
- if ((var > 255) || (increment > 127) || (increment < -128)) {
- code.putByte(196 /* WIDE */)
- .put12(Opcodes.IINC, var)
- .putShort(increment);
- } else {
- code.putByte(Opcodes.IINC).put11(var, increment);
- }
- }
-
- public void visitTableSwitchInsn(
- final int min,
- final int max,
- final Label dflt,
- final Label labels[])
- {
- if (computeMaxs) {
- // updates current stack size (max stack size unchanged)
- --stackSize;
- // ends current block (with many new successors)
- if (currentBlock != null) {
- currentBlock.maxStackSize = maxStackSize;
- addSuccessor(stackSize, dflt);
- for (int i = 0; i < labels.length; ++i) {
- addSuccessor(stackSize, labels[i]);
- }
- currentBlock = null;
- }
- }
- // adds the instruction to the bytecode of the method
- int source = code.length;
- code.putByte(Opcodes.TABLESWITCH);
- while (code.length % 4 != 0) {
- code.putByte(0);
- }
- dflt.put(this, code, source, true);
- code.putInt(min).putInt(max);
- for (int i = 0; i < labels.length; ++i) {
- labels[i].put(this, code, source, true);
- }
- }
-
- public void visitLookupSwitchInsn(
- final Label dflt,
- final int keys[],
- final Label labels[])
- {
- if (computeMaxs) {
- // updates current stack size (max stack size unchanged)
- --stackSize;
- // ends current block (with many new successors)
- if (currentBlock != null) {
- currentBlock.maxStackSize = maxStackSize;
- addSuccessor(stackSize, dflt);
- for (int i = 0; i < labels.length; ++i) {
- addSuccessor(stackSize, labels[i]);
- }
- currentBlock = null;
- }
- }
- // adds the instruction to the bytecode of the method
- int source = code.length;
- code.putByte(Opcodes.LOOKUPSWITCH);
- while (code.length % 4 != 0) {
- code.putByte(0);
- }
- dflt.put(this, code, source, true);
- code.putInt(labels.length);
- for (int i = 0; i < labels.length; ++i) {
- code.putInt(keys[i]);
- labels[i].put(this, code, source, true);
- }
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- if (computeMaxs) {
- // updates current stack size (max stack size unchanged because
- // stack size variation always negative or null)
- stackSize += 1 - dims;
- }
- // adds the instruction to the bytecode of the method
- code.put12(Opcodes.MULTIANEWARRAY, cw.newClass(desc)).putByte(dims);
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- if (computeMaxs) {
- // pushes handler block onto the stack of blocks to be visited
- if (!handler.pushed) {
- handler.beginStackSize = 1;
- handler.pushed = true;
- handler.next = blockStack;
- blockStack = handler;
- }
- }
- ++catchCount;
- Handler h = new Handler();
- h.start = start;
- h.end = end;
- h.handler = handler;
- h.desc = type;
- h.type = type != null ? cw.newClass(type) : 0;
- if (lastHandler == null) {
- catchTable = h;
- } else {
- lastHandler.next = h;
- }
- lastHandler = h;
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- if (signature != null) {
- if (localVarType == null) {
- localVarType = new ByteVector();
- }
- ++localVarTypeCount;
- localVarType.putShort(start.position)
- .putShort(end.position - start.position)
- .putShort(cw.newUTF8(name))
- .putShort(cw.newUTF8(signature))
- .putShort(index);
- }
- if (localVar == null) {
- localVar = new ByteVector();
- }
- ++localVarCount;
- localVar.putShort(start.position)
- .putShort(end.position - start.position)
- .putShort(cw.newUTF8(name))
- .putShort(cw.newUTF8(desc))
- .putShort(index);
-
- if(computeMaxs) {
- // updates max locals
- char c = desc.charAt(0);
- int n = index + ( c=='L' || c=='D' ? 2 : 1);
- if (n > maxLocals) {
- maxLocals = n;
- }
- }
- }
-
- public void visitLineNumber(final int line, final Label start) {
- if (lineNumber == null) {
- lineNumber = new ByteVector();
- }
- ++lineNumberCount;
- lineNumber.putShort(start.position);
- lineNumber.putShort(line);
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- if (computeMaxs) {
- // true (non relative) max stack size
- int max = 0;
- /*
- * control flow analysis algorithm: while the block stack is not
- * empty, pop a block from this stack, update the max stack size,
- * compute the true (non relative) begin stack size of the
- * successors of this block, and push these successors onto the
- * stack (unless they have already been pushed onto the stack).
- * Note: by hypothesis, the {@link Label#beginStackSize} of the
- * blocks in the block stack are the true (non relative) beginning
- * stack sizes of these blocks.
- */
- Label stack = blockStack;
- while (stack != null) {
- // pops a block from the stack
- Label l = stack;
- stack = stack.next;
- // computes the true (non relative) max stack size of this block
- int start = l.beginStackSize;
- int blockMax = start + l.maxStackSize;
- // updates the global max stack size
- if (blockMax > max) {
- max = blockMax;
- }
- // analyses the successors of the block
- Edge b = l.successors;
- while (b != null) {
- l = b.successor;
- // if this successor has not already been pushed onto the
- // stack...
- if (!l.pushed) {
- // computes the true beginning stack size of this
- // successor block
- l.beginStackSize = start + b.stackSize;
- // pushes this successor onto the stack
- l.pushed = true;
- l.next = stack;
- stack = l;
- }
- b = b.next;
- }
- }
- this.maxStack = max;
- } else {
- this.maxStack = maxStack;
- this.maxLocals = maxLocals;
- }
- }
-
- public void visitEnd() {
- }
-
- // ------------------------------------------------------------------------
- // Utility methods: control flow analysis algorithm
- // ------------------------------------------------------------------------
-
- /**
- * Computes the size of the arguments and of the return value of a method.
- *
- * @param desc the descriptor of a method.
- * @return the size of the arguments of the method (plus one for the
- * implicit this argument), argSize, and the size of its return
- * value, retSize, packed into a single int i =
- * <tt>(argSize << 2) | retSize</tt> (argSize is therefore equal
- * to <tt>i >> 2</tt>, and retSize to <tt>i & 0x03</tt>).
- */
- private static int getArgumentsAndReturnSizes(final String desc) {
- int n = 1;
- int c = 1;
- while (true) {
- char car = desc.charAt(c++);
- if (car == ')') {
- car = desc.charAt(c);
- return n << 2
- | (car == 'V' ? 0 : (car == 'D' || car == 'J' ? 2 : 1));
- } else if (car == 'L') {
- while (desc.charAt(c++) != ';') {
- }
- n += 1;
- } else if (car == '[') {
- while ((car = desc.charAt(c)) == '[') {
- ++c;
- }
- if (car == 'D' || car == 'J') {
- n -= 1;
- }
- } else if (car == 'D' || car == 'J') {
- n += 2;
- } else {
- n += 1;
- }
- }
- }
-
- /**
- * Adds a successor to the {@link #currentBlock currentBlock} block.
- *
- * @param stackSize the current (relative) stack size in the current block.
- * @param successor the successor block to be added to the current block.
- */
- private void addSuccessor(final int stackSize, final Label successor) {
- Edge b = new Edge();
- // initializes the previous Edge object...
- b.stackSize = stackSize;
- b.successor = successor;
- // ...and adds it to the successor list of the currentBlock block
- b.next = currentBlock.successors;
- currentBlock.successors = b;
- }
-
- // ------------------------------------------------------------------------
- // Utility methods: dump bytecode array
- // ------------------------------------------------------------------------
-
- /**
- * Returns the size of the bytecode of this method.
- *
- * @return the size of the bytecode of this method.
- */
- final int getSize() {
- if (classReaderOffset != 0) {
- return 6 + classReaderLength;
- }
- if (resize) {
- // replaces the temporary jump opcodes introduced by Label.resolve.
- resizeInstructions(new int[0], new int[0], 0);
- }
- int size = 8;
- if (code.length > 0) {
- cw.newUTF8("Code");
- size += 18 + code.length + 8 * catchCount;
- if (localVar != null) {
- cw.newUTF8("LocalVariableTable");
- size += 8 + localVar.length;
- }
- if (localVarType != null) {
- cw.newUTF8("LocalVariableTypeTable");
- size += 8 + localVarType.length;
- }
- if (lineNumber != null) {
- cw.newUTF8("LineNumberTable");
- size += 8 + lineNumber.length;
- }
- if (cattrs != null) {
- size += cattrs.getSize(cw,
- code.data,
- code.length,
- maxStack,
- maxLocals);
- }
- }
- if (exceptionCount > 0) {
- cw.newUTF8("Exceptions");
- size += 8 + 2 * exceptionCount;
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (cw.version & 0xffff) < Opcodes.V1_5)
- {
- cw.newUTF8("Synthetic");
- size += 6;
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- cw.newUTF8("Deprecated");
- size += 6;
- }
- if (cw.version == Opcodes.V1_4) {
- if ((access & Opcodes.ACC_VARARGS) != 0) {
- cw.newUTF8("Varargs");
- size += 6;
- }
- if ((access & Opcodes.ACC_BRIDGE) != 0) {
- cw.newUTF8("Bridge");
- size += 6;
- }
- }
- if (signature != null) {
- cw.newUTF8("Signature");
- cw.newUTF8(signature);
- size += 8;
- }
- if (annd != null) {
- cw.newUTF8("AnnotationDefault");
- size += 6 + annd.length;
- }
- if (anns != null) {
- cw.newUTF8("RuntimeVisibleAnnotations");
- size += 8 + anns.getSize();
- }
- if (ianns != null) {
- cw.newUTF8("RuntimeInvisibleAnnotations");
- size += 8 + ianns.getSize();
- }
- if (panns != null) {
- cw.newUTF8("RuntimeVisibleParameterAnnotations");
- size += 7 + 2 * panns.length;
- for (int i = panns.length - 1; i >= 0; --i) {
- size += panns[i] == null ? 0 : panns[i].getSize();
- }
- }
- if (ipanns != null) {
- cw.newUTF8("RuntimeInvisibleParameterAnnotations");
- size += 7 + 2 * ipanns.length;
- for (int i = ipanns.length - 1; i >= 0; --i) {
- size += ipanns[i] == null ? 0 : ipanns[i].getSize();
- }
- }
- if (attrs != null) {
- size += attrs.getSize(cw, null, 0, -1, -1);
- }
- return size;
- }
-
- /**
- * Puts the bytecode of this method in the given byte vector.
- *
- * @param out the byte vector into which the bytecode of this method must be
- * copied.
- */
- final void put(final ByteVector out) {
- out.putShort(access).putShort(name).putShort(desc);
- if (classReaderOffset != 0) {
- out.putByteArray(cw.cr.b, classReaderOffset, classReaderLength);
- return;
- }
- int attributeCount = 0;
- if (code.length > 0) {
- ++attributeCount;
- }
- if (exceptionCount > 0) {
- ++attributeCount;
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (cw.version & 0xffff) < Opcodes.V1_5)
- {
- ++attributeCount;
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- ++attributeCount;
- }
- if (cw.version == Opcodes.V1_4) {
- if ((access & Opcodes.ACC_VARARGS) != 0) {
- ++attributeCount;
- }
- if ((access & Opcodes.ACC_BRIDGE) != 0) {
- ++attributeCount;
- }
- }
- if (signature != null) {
- ++attributeCount;
- }
- if (annd != null) {
- ++attributeCount;
- }
- if (anns != null) {
- ++attributeCount;
- }
- if (ianns != null) {
- ++attributeCount;
- }
- if (panns != null) {
- ++attributeCount;
- }
- if (ipanns != null) {
- ++attributeCount;
- }
- if (attrs != null) {
- attributeCount += attrs.getCount();
- }
- out.putShort(attributeCount);
- if (code.length > 0) {
- int size = 12 + code.length + 8 * catchCount;
- if (localVar != null) {
- size += 8 + localVar.length;
- }
- if (localVarType != null) {
- size += 8 + localVarType.length;
- }
- if (lineNumber != null) {
- size += 8 + lineNumber.length;
- }
- if (cattrs != null) {
- size += cattrs.getSize(cw,
- code.data,
- code.length,
- maxStack,
- maxLocals);
- }
- out.putShort(cw.newUTF8("Code")).putInt(size);
- out.putShort(maxStack).putShort(maxLocals);
- out.putInt(code.length).putByteArray(code.data, 0, code.length);
- out.putShort(catchCount);
- if (catchCount > 0) {
- Handler h = catchTable;
- while (h != null) {
- out.putShort(h.start.position)
- .putShort(h.end.position)
- .putShort(h.handler.position)
- .putShort(h.type);
- h = h.next;
- }
- }
- attributeCount = 0;
- if (localVar != null) {
- ++attributeCount;
- }
- if (localVarType != null) {
- ++attributeCount;
- }
- if (lineNumber != null) {
- ++attributeCount;
- }
- if (cattrs != null) {
- attributeCount += cattrs.getCount();
- }
- out.putShort(attributeCount);
- if (localVar != null) {
- out.putShort(cw.newUTF8("LocalVariableTable"));
- out.putInt(localVar.length + 2).putShort(localVarCount);
- out.putByteArray(localVar.data, 0, localVar.length);
- }
- if (localVarType != null) {
- out.putShort(cw.newUTF8("LocalVariableTypeTable"));
- out.putInt(localVarType.length + 2).putShort(localVarTypeCount);
- out.putByteArray(localVarType.data, 0, localVarType.length);
- }
- if (lineNumber != null) {
- out.putShort(cw.newUTF8("LineNumberTable"));
- out.putInt(lineNumber.length + 2).putShort(lineNumberCount);
- out.putByteArray(lineNumber.data, 0, lineNumber.length);
- }
- if (cattrs != null) {
- cattrs.put(cw, code.data, code.length, maxLocals, maxStack, out);
- }
- }
- if (exceptionCount > 0) {
- out.putShort(cw.newUTF8("Exceptions"))
- .putInt(2 * exceptionCount + 2);
- out.putShort(exceptionCount);
- for (int i = 0; i < exceptionCount; ++i) {
- out.putShort(exceptions[i]);
- }
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0
- && (cw.version & 0xffff) < Opcodes.V1_5)
- {
- out.putShort(cw.newUTF8("Synthetic")).putInt(0);
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- out.putShort(cw.newUTF8("Deprecated")).putInt(0);
- }
- if (cw.version == Opcodes.V1_4) {
- if ((access & Opcodes.ACC_VARARGS) != 0) {
- out.putShort(cw.newUTF8("Varargs")).putInt(0);
- }
- if ((access & Opcodes.ACC_BRIDGE) != 0) {
- out.putShort(cw.newUTF8("Bridge")).putInt(0);
- }
- }
- if (signature != null) {
- out.putShort(cw.newUTF8("Signature"))
- .putInt(2)
- .putShort(cw.newUTF8(signature));
- }
- if (annd != null) {
- out.putShort(cw.newUTF8("AnnotationDefault"));
- out.putInt(annd.length);
- out.putByteArray(annd.data, 0, annd.length);
- }
- if (anns != null) {
- out.putShort(cw.newUTF8("RuntimeVisibleAnnotations"));
- anns.put(out);
- }
- if (ianns != null) {
- out.putShort(cw.newUTF8("RuntimeInvisibleAnnotations"));
- ianns.put(out);
- }
- if (panns != null) {
- out.putShort(cw.newUTF8("RuntimeVisibleParameterAnnotations"));
- AnnotationWriter.put(panns, out);
- }
- if (ipanns != null) {
- out.putShort(cw.newUTF8("RuntimeInvisibleParameterAnnotations"));
- AnnotationWriter.put(ipanns, out);
- }
- if (attrs != null) {
- attrs.put(cw, null, 0, -1, -1, out);
- }
- }
-
- // ------------------------------------------------------------------------
- // Utility methods: instruction resizing (used to handle GOTO_W and JSR_W)
- // ------------------------------------------------------------------------
-
- /**
- * Resizes the designated instructions, while keeping jump offsets and
- * instruction addresses consistent. This may require to resize other
- * existing instructions, or even to introduce new instructions: for
- * example, increasing the size of an instruction by 2 at the middle of a
- * method can increases the offset of an IFEQ instruction from 32766 to
- * 32768, in which case IFEQ 32766 must be replaced with IFNEQ 8 GOTO_W
- * 32765. This, in turn, may require to increase the size of another jump
- * instruction, and so on... All these operations are handled automatically
- * by this method. <p> <i>This method must be called after all the method
- * that is being built has been visited</i>. In particular, the
- * {@link Label Label} objects used to construct the method are no longer
- * valid after this method has been called.
- *
- * @param indexes current positions of the instructions to be resized. Each
- * instruction must be designated by the index of its <i>last</i>
- * byte, plus one (or, in other words, by the index of the <i>first</i>
- * byte of the <i>next</i> instruction).
- * @param sizes the number of bytes to be <i>added</i> to the above
- * instructions. More precisely, for each i &lt; <tt>len</tt>,
- * <tt>sizes</tt>[i] bytes will be added at the end of the
- * instruction designated by <tt>indexes</tt>[i] or, if
- * <tt>sizes</tt>[i] is negative, the <i>last</i> |<tt>sizes[i]</tt>|
- * bytes of the instruction will be removed (the instruction size
- * <i>must not</i> become negative or null). The gaps introduced by
- * this method must be filled in "manually" in {@link #code code}
- * method.
- * @param len the number of instruction to be resized. Must be smaller than
- * or equal to <tt>indexes</tt>.length and <tt>sizes</tt>.length.
- * @return the <tt>indexes</tt> array, which now contains the new
- * positions of the resized instructions (designated as above).
- */
- private int[] resizeInstructions(
- final int[] indexes,
- final int[] sizes,
- final int len)
- {
- byte[] b = code.data; // bytecode of the method
- int u, v, label; // indexes in b
- int i, j; // loop indexes
-
- /*
- * 1st step: As explained above, resizing an instruction may require to
- * resize another one, which may require to resize yet another one, and
- * so on. The first step of the algorithm consists in finding all the
- * instructions that need to be resized, without modifying the code.
- * This is done by the following "fix point" algorithm:
- *
- * Parse the code to find the jump instructions whose offset will need
- * more than 2 bytes to be stored (the future offset is computed from
- * the current offset and from the number of bytes that will be inserted
- * or removed between the source and target instructions). For each such
- * instruction, adds an entry in (a copy of) the indexes and sizes
- * arrays (if this has not already been done in a previous iteration!).
- *
- * If at least one entry has been added during the previous step, go
- * back to the beginning, otherwise stop.
- *
- * In fact the real algorithm is complicated by the fact that the size
- * of TABLESWITCH and LOOKUPSWITCH instructions depends on their
- * position in the bytecode (because of padding). In order to ensure the
- * convergence of the algorithm, the number of bytes to be added or
- * removed from these instructions is over estimated during the previous
- * loop, and computed exactly only after the loop is finished (this
- * requires another pass to parse the bytecode of the method).
- */
- int[] allIndexes = new int[len]; // copy of indexes
- int[] allSizes = new int[len]; // copy of sizes
- boolean[] resize; // instructions to be resized
- int newOffset; // future offset of a jump instruction
-
- System.arraycopy(indexes, 0, allIndexes, 0, len);
- System.arraycopy(sizes, 0, allSizes, 0, len);
- resize = new boolean[code.length];
-
- // 3 = loop again, 2 = loop ended, 1 = last pass, 0 = done
- int state = 3;
- do {
- if (state == 3) {
- state = 2;
- }
- u = 0;
- while (u < b.length) {
- int opcode = b[u] & 0xFF; // opcode of current instruction
- int insert = 0; // bytes to be added after this instruction
-
- switch (ClassWriter.TYPE[opcode]) {
- case ClassWriter.NOARG_INSN:
- case ClassWriter.IMPLVAR_INSN:
- u += 1;
- break;
- case ClassWriter.LABEL_INSN:
- if (opcode > 201) {
- // converts temporary opcodes 202 to 217, 218 and
- // 219 to IFEQ ... JSR (inclusive), IFNULL and
- // IFNONNULL
- opcode = opcode < 218 ? opcode - 49 : opcode - 20;
- label = u + readUnsignedShort(b, u + 1);
- } else {
- label = u + readShort(b, u + 1);
- }
- newOffset = getNewOffset(allIndexes, allSizes, u, label);
- if (newOffset < Short.MIN_VALUE
- || newOffset > Short.MAX_VALUE)
- {
- if (!resize[u]) {
- if (opcode == Opcodes.GOTO
- || opcode == Opcodes.JSR)
- {
- // two additional bytes will be required to
- // replace this GOTO or JSR instruction with
- // a GOTO_W or a JSR_W
- insert = 2;
- } else {
- // five additional bytes will be required to
- // replace this IFxxx <l> instruction with
- // IFNOTxxx <l'> GOTO_W <l>, where IFNOTxxx
- // is the "opposite" opcode of IFxxx (i.e.,
- // IFNE for IFEQ) and where <l'> designates
- // the instruction just after the GOTO_W.
- insert = 5;
- }
- resize[u] = true;
- }
- }
- u += 3;
- break;
- case ClassWriter.LABELW_INSN:
- u += 5;
- break;
- case ClassWriter.TABL_INSN:
- if (state == 1) {
- // true number of bytes to be added (or removed)
- // from this instruction = (future number of padding
- // bytes - current number of padding byte) -
- // previously over estimated variation =
- // = ((3 - newOffset%4) - (3 - u%4)) - u%4
- // = (-newOffset%4 + u%4) - u%4
- // = -(newOffset & 3)
- newOffset = getNewOffset(allIndexes, allSizes, 0, u);
- insert = -(newOffset & 3);
- } else if (!resize[u]) {
- // over estimation of the number of bytes to be
- // added to this instruction = 3 - current number
- // of padding bytes = 3 - (3 - u%4) = u%4 = u & 3
- insert = u & 3;
- resize[u] = true;
- }
- // skips instruction
- u = u + 4 - (u & 3);
- u += 4 * (readInt(b, u + 8) - readInt(b, u + 4) + 1) + 12;
- break;
- case ClassWriter.LOOK_INSN:
- if (state == 1) {
- // like TABL_INSN
- newOffset = getNewOffset(allIndexes, allSizes, 0, u);
- insert = -(newOffset & 3);
- } else if (!resize[u]) {
- // like TABL_INSN
- insert = u & 3;
- resize[u] = true;
- }
- // skips instruction
- u = u + 4 - (u & 3);
- u += 8 * readInt(b, u + 4) + 8;
- break;
- case ClassWriter.WIDE_INSN:
- opcode = b[u + 1] & 0xFF;
- if (opcode == Opcodes.IINC) {
- u += 6;
- } else {
- u += 4;
- }
- break;
- case ClassWriter.VAR_INSN:
- case ClassWriter.SBYTE_INSN:
- case ClassWriter.LDC_INSN:
- u += 2;
- break;
- case ClassWriter.SHORT_INSN:
- case ClassWriter.LDCW_INSN:
- case ClassWriter.FIELDORMETH_INSN:
- case ClassWriter.TYPE_INSN:
- case ClassWriter.IINC_INSN:
- u += 3;
- break;
- case ClassWriter.ITFMETH_INSN:
- u += 5;
- break;
- // case ClassWriter.MANA_INSN:
- default:
- u += 4;
- break;
- }
- if (insert != 0) {
- // adds a new (u, insert) entry in the allIndexes and
- // allSizes arrays
- int[] newIndexes = new int[allIndexes.length + 1];
- int[] newSizes = new int[allSizes.length + 1];
- System.arraycopy(allIndexes,
- 0,
- newIndexes,
- 0,
- allIndexes.length);
- System.arraycopy(allSizes, 0, newSizes, 0, allSizes.length);
- newIndexes[allIndexes.length] = u;
- newSizes[allSizes.length] = insert;
- allIndexes = newIndexes;
- allSizes = newSizes;
- if (insert > 0) {
- state = 3;
- }
- }
- }
- if (state < 3) {
- --state;
- }
- } while (state != 0);
-
- // 2nd step:
- // copies the bytecode of the method into a new bytevector, updates the
- // offsets, and inserts (or removes) bytes as requested.
-
- ByteVector newCode = new ByteVector(code.length);
-
- u = 0;
- while (u < code.length) {
- for (i = allIndexes.length - 1; i >= 0; --i) {
- if (allIndexes[i] == u) {
- if (i < len) {
- if (sizes[i] > 0) {
- newCode.putByteArray(null, 0, sizes[i]);
- } else {
- newCode.length += sizes[i];
- }
- indexes[i] = newCode.length;
- }
- }
- }
- int opcode = b[u] & 0xFF;
- switch (ClassWriter.TYPE[opcode]) {
- case ClassWriter.NOARG_INSN:
- case ClassWriter.IMPLVAR_INSN:
- newCode.putByte(opcode);
- u += 1;
- break;
- case ClassWriter.LABEL_INSN:
- if (opcode > 201) {
- // changes temporary opcodes 202 to 217 (inclusive), 218
- // and 219 to IFEQ ... JSR (inclusive), IFNULL and
- // IFNONNULL
- opcode = opcode < 218 ? opcode - 49 : opcode - 20;
- label = u + readUnsignedShort(b, u + 1);
- } else {
- label = u + readShort(b, u + 1);
- }
- newOffset = getNewOffset(allIndexes, allSizes, u, label);
- if (resize[u]) {
- // replaces GOTO with GOTO_W, JSR with JSR_W and IFxxx
- // <l> with IFNOTxxx <l'> GOTO_W <l>, where IFNOTxxx is
- // the "opposite" opcode of IFxxx (i.e., IFNE for IFEQ)
- // and where <l'> designates the instruction just after
- // the GOTO_W.
- if (opcode == Opcodes.GOTO) {
- newCode.putByte(200); // GOTO_W
- } else if (opcode == Opcodes.JSR) {
- newCode.putByte(201); // JSR_W
- } else {
- newCode.putByte(opcode <= 166
- ? ((opcode + 1) ^ 1) - 1
- : opcode ^ 1);
- newCode.putShort(8); // jump offset
- newCode.putByte(200); // GOTO_W
- // newOffset now computed from start of GOTO_W
- newOffset -= 3;
- }
- newCode.putInt(newOffset);
- } else {
- newCode.putByte(opcode);
- newCode.putShort(newOffset);
- }
- u += 3;
- break;
- case ClassWriter.LABELW_INSN:
- label = u + readInt(b, u + 1);
- newOffset = getNewOffset(allIndexes, allSizes, u, label);
- newCode.putByte(opcode);
- newCode.putInt(newOffset);
- u += 5;
- break;
- case ClassWriter.TABL_INSN:
- // skips 0 to 3 padding bytes
- v = u;
- u = u + 4 - (v & 3);
- // reads and copies instruction
- newCode.putByte(Opcodes.TABLESWITCH);
- while (newCode.length % 4 != 0) {
- newCode.putByte(0);
- }
- label = v + readInt(b, u);
- u += 4;
- newOffset = getNewOffset(allIndexes, allSizes, v, label);
- newCode.putInt(newOffset);
- j = readInt(b, u);
- u += 4;
- newCode.putInt(j);
- j = readInt(b, u) - j + 1;
- u += 4;
- newCode.putInt(readInt(b, u - 4));
- for (; j > 0; --j) {
- label = v + readInt(b, u);
- u += 4;
- newOffset = getNewOffset(allIndexes, allSizes, v, label);
- newCode.putInt(newOffset);
- }
- break;
- case ClassWriter.LOOK_INSN:
- // skips 0 to 3 padding bytes
- v = u;
- u = u + 4 - (v & 3);
- // reads and copies instruction
- newCode.putByte(Opcodes.LOOKUPSWITCH);
- while (newCode.length % 4 != 0) {
- newCode.putByte(0);
- }
- label = v + readInt(b, u);
- u += 4;
- newOffset = getNewOffset(allIndexes, allSizes, v, label);
- newCode.putInt(newOffset);
- j = readInt(b, u);
- u += 4;
- newCode.putInt(j);
- for (; j > 0; --j) {
- newCode.putInt(readInt(b, u));
- u += 4;
- label = v + readInt(b, u);
- u += 4;
- newOffset = getNewOffset(allIndexes, allSizes, v, label);
- newCode.putInt(newOffset);
- }
- break;
- case ClassWriter.WIDE_INSN:
- opcode = b[u + 1] & 0xFF;
- if (opcode == Opcodes.IINC) {
- newCode.putByteArray(b, u, 6);
- u += 6;
- } else {
- newCode.putByteArray(b, u, 4);
- u += 4;
- }
- break;
- case ClassWriter.VAR_INSN:
- case ClassWriter.SBYTE_INSN:
- case ClassWriter.LDC_INSN:
- newCode.putByteArray(b, u, 2);
- u += 2;
- break;
- case ClassWriter.SHORT_INSN:
- case ClassWriter.LDCW_INSN:
- case ClassWriter.FIELDORMETH_INSN:
- case ClassWriter.TYPE_INSN:
- case ClassWriter.IINC_INSN:
- newCode.putByteArray(b, u, 3);
- u += 3;
- break;
- case ClassWriter.ITFMETH_INSN:
- newCode.putByteArray(b, u, 5);
- u += 5;
- break;
- // case MANA_INSN:
- default:
- newCode.putByteArray(b, u, 4);
- u += 4;
- break;
- }
- }
-
- // updates the exception handler block labels
- Handler h = catchTable;
- while (h != null) {
- getNewOffset(allIndexes, allSizes, h.start);
- getNewOffset(allIndexes, allSizes, h.end);
- getNewOffset(allIndexes, allSizes, h.handler);
- h = h.next;
- }
- for (i = 0; i < 2; ++i) {
- ByteVector bv = i == 0 ? localVar : localVarType;
- if (bv != null) {
- b = bv.data;
- u = 0;
- while (u < bv.length) {
- label = readUnsignedShort(b, u);
- newOffset = getNewOffset(allIndexes, allSizes, 0, label);
- writeShort(b, u, newOffset);
- label += readUnsignedShort(b, u + 2);
- newOffset = getNewOffset(allIndexes, allSizes, 0, label)
- - newOffset;
- writeShort(b, u + 2, newOffset);
- u += 10;
- }
- }
- }
- if (lineNumber != null) {
- b = lineNumber.data;
- u = 0;
- while (u < lineNumber.length) {
- writeShort(b, u, getNewOffset(allIndexes,
- allSizes,
- 0,
- readUnsignedShort(b, u)));
- u += 4;
- }
- }
- // updates the labels of the other attributes
- while (cattrs != null) {
- Label[] labels = cattrs.getLabels();
- if (labels != null) {
- for (i = labels.length - 1; i >= 0; --i) {
- if (!labels[i].resized) {
- labels[i].position = getNewOffset(allIndexes,
- allSizes,
- 0,
- labels[i].position);
- labels[i].resized = true;
- }
- }
- }
- }
-
- // replaces old bytecodes with new ones
- code = newCode;
-
- // returns the positions of the resized instructions
- return indexes;
- }
-
- /**
- * Reads an unsigned short value in the given byte array.
- *
- * @param b a byte array.
- * @param index the start index of the value to be read.
- * @return the read value.
- */
- static int readUnsignedShort(final byte[] b, final int index) {
- return ((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF);
- }
-
- /**
- * Reads a signed short value in the given byte array.
- *
- * @param b a byte array.
- * @param index the start index of the value to be read.
- * @return the read value.
- */
- static short readShort(final byte[] b, final int index) {
- return (short) (((b[index] & 0xFF) << 8) | (b[index + 1] & 0xFF));
- }
-
- /**
- * Reads a signed int value in the given byte array.
- *
- * @param b a byte array.
- * @param index the start index of the value to be read.
- * @return the read value.
- */
- static int readInt(final byte[] b, final int index) {
- return ((b[index] & 0xFF) << 24) | ((b[index + 1] & 0xFF) << 16)
- | ((b[index + 2] & 0xFF) << 8) | (b[index + 3] & 0xFF);
- }
-
- /**
- * Writes a short value in the given byte array.
- *
- * @param b a byte array.
- * @param index where the first byte of the short value must be written.
- * @param s the value to be written in the given byte array.
- */
- static void writeShort(final byte[] b, final int index, final int s) {
- b[index] = (byte) (s >>> 8);
- b[index + 1] = (byte) s;
- }
-
- /**
- * Computes the future value of a bytecode offset. <p> Note: it is possible
- * to have several entries for the same instruction in the <tt>indexes</tt>
- * and <tt>sizes</tt>: two entries (index=a,size=b) and (index=a,size=b')
- * are equivalent to a single entry (index=a,size=b+b').
- *
- * @param indexes current positions of the instructions to be resized. Each
- * instruction must be designated by the index of its <i>last</i>
- * byte, plus one (or, in other words, by the index of the <i>first</i>
- * byte of the <i>next</i> instruction).
- * @param sizes the number of bytes to be <i>added</i> to the above
- * instructions. More precisely, for each i < <tt>len</tt>,
- * <tt>sizes</tt>[i] bytes will be added at the end of the
- * instruction designated by <tt>indexes</tt>[i] or, if
- * <tt>sizes</tt>[i] is negative, the <i>last</i> |<tt>sizes[i]</tt>|
- * bytes of the instruction will be removed (the instruction size
- * <i>must not</i> become negative or null).
- * @param begin index of the first byte of the source instruction.
- * @param end index of the first byte of the target instruction.
- * @return the future value of the given bytecode offset.
- */
- static int getNewOffset(
- final int[] indexes,
- final int[] sizes,
- final int begin,
- final int end)
- {
- int offset = end - begin;
- for (int i = 0; i < indexes.length; ++i) {
- if (begin < indexes[i] && indexes[i] <= end) {
- // forward jump
- offset += sizes[i];
- } else if (end < indexes[i] && indexes[i] <= begin) {
- // backward jump
- offset -= sizes[i];
- }
- }
- return offset;
- }
-
- /**
- * Updates the offset of the given label.
- *
- * @param indexes current positions of the instructions to be resized. Each
- * instruction must be designated by the index of its <i>last</i>
- * byte, plus one (or, in other words, by the index of the <i>first</i>
- * byte of the <i>next</i> instruction).
- * @param sizes the number of bytes to be <i>added</i> to the above
- * instructions. More precisely, for each i < <tt>len</tt>,
- * <tt>sizes</tt>[i] bytes will be added at the end of the
- * instruction designated by <tt>indexes</tt>[i] or, if
- * <tt>sizes</tt>[i] is negative, the <i>last</i> |<tt>sizes[i]</tt>|
- * bytes of the instruction will be removed (the instruction size
- * <i>must not</i> become negative or null).
- * @param label the label whose offset must be updated.
- */
- static void getNewOffset(
- final int[] indexes,
- final int[] sizes,
- final Label label)
- {
- if (!label.resized) {
- label.position = getNewOffset(indexes, sizes, 0, label.position);
- label.resized = true;
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Opcodes.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Opcodes.java
deleted file mode 100644
index 2728d96..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Opcodes.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-/**
- * Defines the JVM opcodes, access flags and array type codes. This interface
- * does not define all the JVM opcodes because some opcodes are automatically
- * handled. For example, the xLOAD and xSTORE opcodes are automatically replaced
- * by xLOAD_n and xSTORE_n opcodes when possible. The xLOAD_n and xSTORE_n
- * opcodes are therefore not defined in this interface. Likewise for LDC,
- * automatically replaced by LDC_W or LDC2_W when necessary, WIDE, GOTO_W and
- * JSR_W.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public interface Opcodes {
-
- // versions
-
- int V1_1 = 3 << 16 | 45;
- int V1_2 = 0 << 16 | 46;
- int V1_3 = 0 << 16 | 47;
- int V1_4 = 0 << 16 | 48;
- int V1_5 = 0 << 16 | 49;
- int V1_6 = 0 << 16 | 50;
-
- // access flags
-
- int ACC_PUBLIC = 0x0001; // class, field, method
- int ACC_PRIVATE = 0x0002; // class, field, method
- int ACC_PROTECTED = 0x0004; // class, field, method
- int ACC_STATIC = 0x0008; // field, method
- int ACC_FINAL = 0x0010; // class, field, method
- int ACC_SUPER = 0x0020; // class
- int ACC_SYNCHRONIZED = 0x0020; // method
- int ACC_VOLATILE = 0x0040; // field
- int ACC_BRIDGE = 0x0040; // method
- int ACC_VARARGS = 0x0080; // method
- int ACC_TRANSIENT = 0x0080; // field
- int ACC_NATIVE = 0x0100; // method
- int ACC_INTERFACE = 0x0200; // class
- int ACC_ABSTRACT = 0x0400; // class, method
- int ACC_STRICT = 0x0800; // method
- int ACC_SYNTHETIC = 0x1000; // class, field, method
- int ACC_ANNOTATION = 0x2000; // class
- int ACC_ENUM = 0x4000; // class(?) field inner
-
- // ASM specific pseudo access flags
-
- int ACC_DEPRECATED = 131072; // class, field, method
-
- // types for NEWARRAY
-
- int T_BOOLEAN = 4;
- int T_CHAR = 5;
- int T_FLOAT = 6;
- int T_DOUBLE = 7;
- int T_BYTE = 8;
- int T_SHORT = 9;
- int T_INT = 10;
- int T_LONG = 11;
-
- // opcodes // visit method (- = idem)
-
- int NOP = 0; // visitInsn
- int ACONST_NULL = 1; // -
- int ICONST_M1 = 2; // -
- int ICONST_0 = 3; // -
- int ICONST_1 = 4; // -
- int ICONST_2 = 5; // -
- int ICONST_3 = 6; // -
- int ICONST_4 = 7; // -
- int ICONST_5 = 8; // -
- int LCONST_0 = 9; // -
- int LCONST_1 = 10; // -
- int FCONST_0 = 11; // -
- int FCONST_1 = 12; // -
- int FCONST_2 = 13; // -
- int DCONST_0 = 14; // -
- int DCONST_1 = 15; // -
- int BIPUSH = 16; // visitIntInsn
- int SIPUSH = 17; // -
- int LDC = 18; // visitLdcInsn
- // int LDC_W = 19; // -
- // int LDC2_W = 20; // -
- int ILOAD = 21; // visitVarInsn
- int LLOAD = 22; // -
- int FLOAD = 23; // -
- int DLOAD = 24; // -
- int ALOAD = 25; // -
- // int ILOAD_0 = 26; // -
- // int ILOAD_1 = 27; // -
- // int ILOAD_2 = 28; // -
- // int ILOAD_3 = 29; // -
- // int LLOAD_0 = 30; // -
- // int LLOAD_1 = 31; // -
- // int LLOAD_2 = 32; // -
- // int LLOAD_3 = 33; // -
- // int FLOAD_0 = 34; // -
- // int FLOAD_1 = 35; // -
- // int FLOAD_2 = 36; // -
- // int FLOAD_3 = 37; // -
- // int DLOAD_0 = 38; // -
- // int DLOAD_1 = 39; // -
- // int DLOAD_2 = 40; // -
- // int DLOAD_3 = 41; // -
- // int ALOAD_0 = 42; // -
- // int ALOAD_1 = 43; // -
- // int ALOAD_2 = 44; // -
- // int ALOAD_3 = 45; // -
- int IALOAD = 46; // visitInsn
- int LALOAD = 47; // -
- int FALOAD = 48; // -
- int DALOAD = 49; // -
- int AALOAD = 50; // -
- int BALOAD = 51; // -
- int CALOAD = 52; // -
- int SALOAD = 53; // -
- int ISTORE = 54; // visitVarInsn
- int LSTORE = 55; // -
- int FSTORE = 56; // -
- int DSTORE = 57; // -
- int ASTORE = 58; // -
- // int ISTORE_0 = 59; // -
- // int ISTORE_1 = 60; // -
- // int ISTORE_2 = 61; // -
- // int ISTORE_3 = 62; // -
- // int LSTORE_0 = 63; // -
- // int LSTORE_1 = 64; // -
- // int LSTORE_2 = 65; // -
- // int LSTORE_3 = 66; // -
- // int FSTORE_0 = 67; // -
- // int FSTORE_1 = 68; // -
- // int FSTORE_2 = 69; // -
- // int FSTORE_3 = 70; // -
- // int DSTORE_0 = 71; // -
- // int DSTORE_1 = 72; // -
- // int DSTORE_2 = 73; // -
- // int DSTORE_3 = 74; // -
- // int ASTORE_0 = 75; // -
- // int ASTORE_1 = 76; // -
- // int ASTORE_2 = 77; // -
- // int ASTORE_3 = 78; // -
- int IASTORE = 79; // visitInsn
- int LASTORE = 80; // -
- int FASTORE = 81; // -
- int DASTORE = 82; // -
- int AASTORE = 83; // -
- int BASTORE = 84; // -
- int CASTORE = 85; // -
- int SASTORE = 86; // -
- int POP = 87; // -
- int POP2 = 88; // -
- int DUP = 89; // -
- int DUP_X1 = 90; // -
- int DUP_X2 = 91; // -
- int DUP2 = 92; // -
- int DUP2_X1 = 93; // -
- int DUP2_X2 = 94; // -
- int SWAP = 95; // -
- int IADD = 96; // -
- int LADD = 97; // -
- int FADD = 98; // -
- int DADD = 99; // -
- int ISUB = 100; // -
- int LSUB = 101; // -
- int FSUB = 102; // -
- int DSUB = 103; // -
- int IMUL = 104; // -
- int LMUL = 105; // -
- int FMUL = 106; // -
- int DMUL = 107; // -
- int IDIV = 108; // -
- int LDIV = 109; // -
- int FDIV = 110; // -
- int DDIV = 111; // -
- int IREM = 112; // -
- int LREM = 113; // -
- int FREM = 114; // -
- int DREM = 115; // -
- int INEG = 116; // -
- int LNEG = 117; // -
- int FNEG = 118; // -
- int DNEG = 119; // -
- int ISHL = 120; // -
- int LSHL = 121; // -
- int ISHR = 122; // -
- int LSHR = 123; // -
- int IUSHR = 124; // -
- int LUSHR = 125; // -
- int IAND = 126; // -
- int LAND = 127; // -
- int IOR = 128; // -
- int LOR = 129; // -
- int IXOR = 130; // -
- int LXOR = 131; // -
- int IINC = 132; // visitIincInsn
- int I2L = 133; // visitInsn
- int I2F = 134; // -
- int I2D = 135; // -
- int L2I = 136; // -
- int L2F = 137; // -
- int L2D = 138; // -
- int F2I = 139; // -
- int F2L = 140; // -
- int F2D = 141; // -
- int D2I = 142; // -
- int D2L = 143; // -
- int D2F = 144; // -
- int I2B = 145; // -
- int I2C = 146; // -
- int I2S = 147; // -
- int LCMP = 148; // -
- int FCMPL = 149; // -
- int FCMPG = 150; // -
- int DCMPL = 151; // -
- int DCMPG = 152; // -
- int IFEQ = 153; // visitJumpInsn
- int IFNE = 154; // -
- int IFLT = 155; // -
- int IFGE = 156; // -
- int IFGT = 157; // -
- int IFLE = 158; // -
- int IF_ICMPEQ = 159; // -
- int IF_ICMPNE = 160; // -
- int IF_ICMPLT = 161; // -
- int IF_ICMPGE = 162; // -
- int IF_ICMPGT = 163; // -
- int IF_ICMPLE = 164; // -
- int IF_ACMPEQ = 165; // -
- int IF_ACMPNE = 166; // -
- int GOTO = 167; // -
- int JSR = 168; // -
- int RET = 169; // visitVarInsn
- int TABLESWITCH = 170; // visiTableSwitchInsn
- int LOOKUPSWITCH = 171; // visitLookupSwitch
- int IRETURN = 172; // visitInsn
- int LRETURN = 173; // -
- int FRETURN = 174; // -
- int DRETURN = 175; // -
- int ARETURN = 176; // -
- int RETURN = 177; // -
- int GETSTATIC = 178; // visitFieldInsn
- int PUTSTATIC = 179; // -
- int GETFIELD = 180; // -
- int PUTFIELD = 181; // -
- int INVOKEVIRTUAL = 182; // visitMethodInsn
- int INVOKESPECIAL = 183; // -
- int INVOKESTATIC = 184; // -
- int INVOKEINTERFACE = 185; // -
- // int UNUSED = 186; // NOT VISITED
- int NEW = 187; // visitTypeInsn
- int NEWARRAY = 188; // visitIntInsn
- int ANEWARRAY = 189; // visitTypeInsn
- int ARRAYLENGTH = 190; // visitInsn
- int ATHROW = 191; // -
- int CHECKCAST = 192; // visitTypeInsn
- int INSTANCEOF = 193; // -
- int MONITORENTER = 194; // visitInsn
- int MONITOREXIT = 195; // -
- // int WIDE = 196; // NOT VISITED
- int MULTIANEWARRAY = 197; // visitMultiANewArrayInsn
- int IFNULL = 198; // visitJumpInsn
- int IFNONNULL = 199; // -
- // int GOTO_W = 200; // -
- // int JSR_W = 201; // -
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/Type.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/Type.java
deleted file mode 100644
index ae314e8..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/Type.java
+++ /dev/null
@@ -1,760 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm;
-
-import java.lang.reflect.Method;
-
-/**
- * A Java type. This class can be used to make it easier to manipulate type and
- * method descriptors.
- *
- * @author Eric Bruneton
- * @author Chris Nokleberg
- */
-public class Type {
-
- /**
- * The sort of the <tt>void</tt> type. See {@link #getSort getSort}.
- */
- public final static int VOID = 0;
-
- /**
- * The sort of the <tt>boolean</tt> type. See {@link #getSort getSort}.
- */
- public final static int BOOLEAN = 1;
-
- /**
- * The sort of the <tt>char</tt> type. See {@link #getSort getSort}.
- */
- public final static int CHAR = 2;
-
- /**
- * The sort of the <tt>byte</tt> type. See {@link #getSort getSort}.
- */
- public final static int BYTE = 3;
-
- /**
- * The sort of the <tt>short</tt> type. See {@link #getSort getSort}.
- */
- public final static int SHORT = 4;
-
- /**
- * The sort of the <tt>int</tt> type. See {@link #getSort getSort}.
- */
- public final static int INT = 5;
-
- /**
- * The sort of the <tt>float</tt> type. See {@link #getSort getSort}.
- */
- public final static int FLOAT = 6;
-
- /**
- * The sort of the <tt>long</tt> type. See {@link #getSort getSort}.
- */
- public final static int LONG = 7;
-
- /**
- * The sort of the <tt>double</tt> type. See {@link #getSort getSort}.
- */
- public final static int DOUBLE = 8;
-
- /**
- * The sort of array reference types. See {@link #getSort getSort}.
- */
- public final static int ARRAY = 9;
-
- /**
- * The sort of object reference type. See {@link #getSort getSort}.
- */
- public final static int OBJECT = 10;
-
- /**
- * The <tt>void</tt> type.
- */
- public final static Type VOID_TYPE = new Type(VOID);
-
- /**
- * The <tt>boolean</tt> type.
- */
- public final static Type BOOLEAN_TYPE = new Type(BOOLEAN);
-
- /**
- * The <tt>char</tt> type.
- */
- public final static Type CHAR_TYPE = new Type(CHAR);
-
- /**
- * The <tt>byte</tt> type.
- */
- public final static Type BYTE_TYPE = new Type(BYTE);
-
- /**
- * The <tt>short</tt> type.
- */
- public final static Type SHORT_TYPE = new Type(SHORT);
-
- /**
- * The <tt>int</tt> type.
- */
- public final static Type INT_TYPE = new Type(INT);
-
- /**
- * The <tt>float</tt> type.
- */
- public final static Type FLOAT_TYPE = new Type(FLOAT);
-
- /**
- * The <tt>long</tt> type.
- */
- public final static Type LONG_TYPE = new Type(LONG);
-
- /**
- * The <tt>double</tt> type.
- */
- public final static Type DOUBLE_TYPE = new Type(DOUBLE);
-
- // ------------------------------------------------------------------------
- // Fields
- // ------------------------------------------------------------------------
-
- /**
- * The sort of this Java type.
- */
- private final int sort;
-
- /**
- * A buffer containing the descriptor of this Java type. This field is only
- * used for reference types.
- */
- private char[] buf;
-
- /**
- * The offset of the descriptor of this Java type in {@link #buf buf}. This
- * field is only used for reference types.
- */
- private int off;
-
- /**
- * The length of the descriptor of this Java type.
- */
- private int len;
-
- // ------------------------------------------------------------------------
- // Constructors
- // ------------------------------------------------------------------------
-
- /**
- * Constructs a primitive type.
- *
- * @param sort the sort of the primitive type to be constructed.
- */
- private Type(final int sort) {
- this.sort = sort;
- this.len = 1;
- }
-
- /**
- * Constructs a reference type.
- *
- * @param sort the sort of the reference type to be constructed.
- * @param buf a buffer containing the descriptor of the previous type.
- * @param off the offset of this descriptor in the previous buffer.
- * @param len the length of this descriptor.
- */
- private Type(final int sort, final char[] buf, final int off, final int len)
- {
- this.sort = sort;
- this.buf = buf;
- this.off = off;
- this.len = len;
- }
-
- /**
- * Returns the Java type corresponding to the given type descriptor.
- *
- * @param typeDescriptor a type descriptor.
- * @return the Java type corresponding to the given type descriptor.
- */
- public static Type getType(final String typeDescriptor) {
- return getType(typeDescriptor.toCharArray(), 0);
- }
-
- /**
- * Returns the Java type corresponding to the given class.
- *
- * @param c a class.
- * @return the Java type corresponding to the given class.
- */
- public static Type getType(final Class c) {
- if (c.isPrimitive()) {
- if (c == Integer.TYPE) {
- return INT_TYPE;
- } else if (c == Void.TYPE) {
- return VOID_TYPE;
- } else if (c == Boolean.TYPE) {
- return BOOLEAN_TYPE;
- } else if (c == Byte.TYPE) {
- return BYTE_TYPE;
- } else if (c == Character.TYPE) {
- return CHAR_TYPE;
- } else if (c == Short.TYPE) {
- return SHORT_TYPE;
- } else if (c == Double.TYPE) {
- return DOUBLE_TYPE;
- } else if (c == Float.TYPE) {
- return FLOAT_TYPE;
- } else /* if (c == Long.TYPE) */{
- return LONG_TYPE;
- }
- } else {
- return getType(getDescriptor(c));
- }
- }
-
- /**
- * Returns the Java types corresponding to the argument types of the given
- * method descriptor.
- *
- * @param methodDescriptor a method descriptor.
- * @return the Java types corresponding to the argument types of the given
- * method descriptor.
- */
- public static Type[] getArgumentTypes(final String methodDescriptor) {
- char[] buf = methodDescriptor.toCharArray();
- int off = 1;
- int size = 0;
- while (true) {
- char car = buf[off++];
- if (car == ')') {
- break;
- } else if (car == 'L') {
- while (buf[off++] != ';') {
- }
- ++size;
- } else if (car != '[') {
- ++size;
- }
- }
- Type[] args = new Type[size];
- off = 1;
- size = 0;
- while (buf[off] != ')') {
- args[size] = getType(buf, off);
- off += args[size].len;
- size += 1;
- }
- return args;
- }
-
- /**
- * Returns the Java types corresponding to the argument types of the given
- * method.
- *
- * @param method a method.
- * @return the Java types corresponding to the argument types of the given
- * method.
- */
- public static Type[] getArgumentTypes(final Method method) {
- Class[] classes = method.getParameterTypes();
- Type[] types = new Type[classes.length];
- for (int i = classes.length - 1; i >= 0; --i) {
- types[i] = getType(classes[i]);
- }
- return types;
- }
-
- /**
- * Returns the Java type corresponding to the return type of the given
- * method descriptor.
- *
- * @param methodDescriptor a method descriptor.
- * @return the Java type corresponding to the return type of the given
- * method descriptor.
- */
- public static Type getReturnType(final String methodDescriptor) {
- char[] buf = methodDescriptor.toCharArray();
- return getType(buf, methodDescriptor.indexOf(')') + 1);
- }
-
- /**
- * Returns the Java type corresponding to the return type of the given
- * method.
- *
- * @param method a method.
- * @return the Java type corresponding to the return type of the given
- * method.
- */
- public static Type getReturnType(final Method method) {
- return getType(method.getReturnType());
- }
-
- /**
- * Returns the Java type corresponding to the given type descriptor.
- *
- * @param buf a buffer containing a type descriptor.
- * @param off the offset of this descriptor in the previous buffer.
- * @return the Java type corresponding to the given type descriptor.
- */
- private static Type getType(final char[] buf, final int off) {
- int len;
- switch (buf[off]) {
- case 'V':
- return VOID_TYPE;
- case 'Z':
- return BOOLEAN_TYPE;
- case 'C':
- return CHAR_TYPE;
- case 'B':
- return BYTE_TYPE;
- case 'S':
- return SHORT_TYPE;
- case 'I':
- return INT_TYPE;
- case 'F':
- return FLOAT_TYPE;
- case 'J':
- return LONG_TYPE;
- case 'D':
- return DOUBLE_TYPE;
- case '[':
- len = 1;
- while (buf[off + len] == '[') {
- ++len;
- }
- if (buf[off + len] == 'L') {
- ++len;
- while (buf[off + len] != ';') {
- ++len;
- }
- }
- return new Type(ARRAY, buf, off, len + 1);
- // case 'L':
- default:
- len = 1;
- while (buf[off + len] != ';') {
- ++len;
- }
- return new Type(OBJECT, buf, off, len + 1);
- }
- }
-
- // ------------------------------------------------------------------------
- // Accessors
- // ------------------------------------------------------------------------
-
- /**
- * Returns the sort of this Java type.
- *
- * @return {@link #VOID VOID}, {@link #BOOLEAN BOOLEAN},
- * {@link #CHAR CHAR}, {@link #BYTE BYTE}, {@link #SHORT SHORT},
- * {@link #INT INT}, {@link #FLOAT FLOAT}, {@link #LONG LONG},
- * {@link #DOUBLE DOUBLE}, {@link #ARRAY ARRAY} or
- * {@link #OBJECT OBJECT}.
- */
- public int getSort() {
- return sort;
- }
-
- /**
- * Returns the number of dimensions of this array type. This method should
- * only be used for an array type.
- *
- * @return the number of dimensions of this array type.
- */
- public int getDimensions() {
- int i = 1;
- while (buf[off + i] == '[') {
- ++i;
- }
- return i;
- }
-
- /**
- * Returns the type of the elements of this array type. This method should
- * only be used for an array type.
- *
- * @return Returns the type of the elements of this array type.
- */
- public Type getElementType() {
- return getType(buf, off + getDimensions());
- }
-
- /**
- * Returns the name of the class corresponding to this type.
- *
- * @return the fully qualified name of the class corresponding to this type.
- */
- public String getClassName() {
- switch (sort) {
- case VOID:
- return "void";
- case BOOLEAN:
- return "boolean";
- case CHAR:
- return "char";
- case BYTE:
- return "byte";
- case SHORT:
- return "short";
- case INT:
- return "int";
- case FLOAT:
- return "float";
- case LONG:
- return "long";
- case DOUBLE:
- return "double";
- case ARRAY:
- StringBuffer b = new StringBuffer(getElementType().getClassName());
- for (int i = getDimensions(); i > 0; --i) {
- b.append("[]");
- }
- return b.toString();
- // case OBJECT:
- default:
- return new String(buf, off + 1, len - 2).replace('/', '.');
- }
- }
-
- /**
- * Returns the internal name of the class corresponding to this object type.
- * The internal name of a class is its fully qualified name, where '.' are
- * replaced by '/'. This method should only be used for an object type.
- *
- * @return the internal name of the class corresponding to this object type.
- */
- public String getInternalName() {
- return new String(buf, off + 1, len - 2);
- }
-
- // ------------------------------------------------------------------------
- // Conversion to type descriptors
- // ------------------------------------------------------------------------
-
- /**
- * Returns the descriptor corresponding to this Java type.
- *
- * @return the descriptor corresponding to this Java type.
- */
- public String getDescriptor() {
- StringBuffer buf = new StringBuffer();
- getDescriptor(buf);
- return buf.toString();
- }
-
- /**
- * Returns the descriptor corresponding to the given argument and return
- * types.
- *
- * @param returnType the return type of the method.
- * @param argumentTypes the argument types of the method.
- * @return the descriptor corresponding to the given argument and return
- * types.
- */
- public static String getMethodDescriptor(
- final Type returnType,
- final Type[] argumentTypes)
- {
- StringBuffer buf = new StringBuffer();
- buf.append('(');
- for (int i = 0; i < argumentTypes.length; ++i) {
- argumentTypes[i].getDescriptor(buf);
- }
- buf.append(')');
- returnType.getDescriptor(buf);
- return buf.toString();
- }
-
- /**
- * Appends the descriptor corresponding to this Java type to the given
- * string buffer.
- *
- * @param buf the string buffer to which the descriptor must be appended.
- */
- private void getDescriptor(final StringBuffer buf) {
- switch (sort) {
- case VOID:
- buf.append('V');
- return;
- case BOOLEAN:
- buf.append('Z');
- return;
- case CHAR:
- buf.append('C');
- return;
- case BYTE:
- buf.append('B');
- return;
- case SHORT:
- buf.append('S');
- return;
- case INT:
- buf.append('I');
- return;
- case FLOAT:
- buf.append('F');
- return;
- case LONG:
- buf.append('J');
- return;
- case DOUBLE:
- buf.append('D');
- return;
- // case ARRAY:
- // case OBJECT:
- default:
- buf.append(this.buf, off, len);
- }
- }
-
- // ------------------------------------------------------------------------
- // Direct conversion from classes to type descriptors,
- // without intermediate Type objects
- // ------------------------------------------------------------------------
-
- /**
- * Returns the internal name of the given class. The internal name of a
- * class is its fully qualified name, where '.' are replaced by '/'.
- *
- * @param c an object class.
- * @return the internal name of the given class.
- */
- public static String getInternalName(final Class c) {
- return c.getName().replace('.', '/');
- }
-
- /**
- * Returns the descriptor corresponding to the given Java type.
- *
- * @param c an object class, a primitive class or an array class.
- * @return the descriptor corresponding to the given class.
- */
- public static String getDescriptor(final Class c) {
- StringBuffer buf = new StringBuffer();
- getDescriptor(buf, c);
- return buf.toString();
- }
-
- /**
- * Returns the descriptor corresponding to the given method.
- *
- * @param m a {@link Method Method} object.
- * @return the descriptor of the given method.
- */
- public static String getMethodDescriptor(final Method m) {
- Class[] parameters = m.getParameterTypes();
- StringBuffer buf = new StringBuffer();
- buf.append('(');
- for (int i = 0; i < parameters.length; ++i) {
- getDescriptor(buf, parameters[i]);
- }
- buf.append(')');
- getDescriptor(buf, m.getReturnType());
- return buf.toString();
- }
-
- /**
- * Appends the descriptor of the given class to the given string buffer.
- *
- * @param buf the string buffer to which the descriptor must be appended.
- * @param c the class whose descriptor must be computed.
- */
- private static void getDescriptor(final StringBuffer buf, final Class c) {
- Class d = c;
- while (true) {
- if (d.isPrimitive()) {
- char car;
- if (d == Integer.TYPE) {
- car = 'I';
- } else if (d == Void.TYPE) {
- car = 'V';
- } else if (d == Boolean.TYPE) {
- car = 'Z';
- } else if (d == Byte.TYPE) {
- car = 'B';
- } else if (d == Character.TYPE) {
- car = 'C';
- } else if (d == Short.TYPE) {
- car = 'S';
- } else if (d == Double.TYPE) {
- car = 'D';
- } else if (d == Float.TYPE) {
- car = 'F';
- } else /* if (d == Long.TYPE) */{
- car = 'J';
- }
- buf.append(car);
- return;
- } else if (d.isArray()) {
- buf.append('[');
- d = d.getComponentType();
- } else {
- buf.append('L');
- String name = d.getName();
- int len = name.length();
- for (int i = 0; i < len; ++i) {
- char car = name.charAt(i);
- buf.append(car == '.' ? '/' : car);
- }
- buf.append(';');
- return;
- }
- }
- }
-
- // ------------------------------------------------------------------------
- // Corresponding size and opcodes
- // ------------------------------------------------------------------------
-
- /**
- * Returns the size of values of this type.
- *
- * @return the size of values of this type, i.e., 2 for <tt>long</tt> and
- * <tt>double</tt>, and 1 otherwise.
- */
- public int getSize() {
- return (sort == LONG || sort == DOUBLE ? 2 : 1);
- }
-
- /**
- * Returns a JVM instruction opcode adapted to this Java type.
- *
- * @param opcode a JVM instruction opcode. This opcode must be one of ILOAD,
- * ISTORE, IALOAD, IASTORE, IADD, ISUB, IMUL, IDIV, IREM, INEG, ISHL,
- * ISHR, IUSHR, IAND, IOR, IXOR and IRETURN.
- * @return an opcode that is similar to the given opcode, but adapted to
- * this Java type. For example, if this type is <tt>float</tt> and
- * <tt>opcode</tt> is IRETURN, this method returns FRETURN.
- */
- public int getOpcode(final int opcode) {
- if (opcode == Opcodes.IALOAD || opcode == Opcodes.IASTORE) {
- switch (sort) {
- case BOOLEAN:
- case BYTE:
- return opcode + 5;
- case CHAR:
- return opcode + 6;
- case SHORT:
- return opcode + 7;
- case INT:
- return opcode;
- case FLOAT:
- return opcode + 2;
- case LONG:
- return opcode + 1;
- case DOUBLE:
- return opcode + 3;
- // case ARRAY:
- // case OBJECT:
- default:
- return opcode + 4;
- }
- } else {
- switch (sort) {
- case VOID:
- return opcode + 5;
- case BOOLEAN:
- case CHAR:
- case BYTE:
- case SHORT:
- case INT:
- return opcode;
- case FLOAT:
- return opcode + 2;
- case LONG:
- return opcode + 1;
- case DOUBLE:
- return opcode + 3;
- // case ARRAY:
- // case OBJECT:
- default:
- return opcode + 4;
- }
- }
- }
-
- // ------------------------------------------------------------------------
- // Equals, hashCode and toString
- // ------------------------------------------------------------------------
-
- /**
- * Tests if the given object is equal to this type.
- *
- * @param o the object to be compared to this type.
- * @return <tt>true</tt> if the given object is equal to this type.
- */
- public boolean equals(final Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || !(o instanceof Type)) {
- return false;
- }
- Type t = (Type) o;
- if (sort != t.sort) {
- return false;
- }
- if (sort == Type.OBJECT || sort == Type.ARRAY) {
- if (len != t.len) {
- return false;
- }
- for (int i = off, j = t.off, end = i + len; i < end; i++, j++) {
- if (buf[i] != t.buf[j]) {
- return false;
- }
- }
- }
- return true;
- }
-
- /**
- * Returns a hash code value for this type.
- *
- * @return a hash code value for this type.
- */
- public int hashCode() {
- int hc = 13 * sort;
- if (sort == Type.OBJECT || sort == Type.ARRAY) {
- for (int i = off, end = i + len; i < end; i++) {
- hc = 17 * (hc + buf[i]);
- }
- }
- return hc;
- }
-
- /**
- * Returns a string representation of this type.
- *
- * @return the descriptor of this type.
- */
- public String toString() {
- return getDescriptor();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapAttribute.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapAttribute.java
deleted file mode 100644
index f359474..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapAttribute.java
+++ /dev/null
@@ -1,378 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.attrs;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-
-/**
- * StackMapAttribute is used by CDLC preverifier. Definition is given in
- * appendix "CLDC Byte Code Typechecker Specification" from CDLC 1.1
- * specification. <p> <i>Note that this implementation does not calculate
- * StackMapFrame structures from the method bytecode. If method code is changed
- * or generated from scratch, then developer is responsible to prepare a correct
- * StackMapFrame structures.</i> <p> The format of the stack map in the class
- * file is given below. In the following, <ul> <li>if the length of the
- * method's byte code1 is 65535 or less, then <tt>uoffset</tt> represents the
- * type u2; otherwise <tt>uoffset</tt> represents the type u4.</li> <li>If
- * the maximum number of local variables for the method is 65535 or less, then
- * <tt>ulocalvar</tt> represents the type u2; otherwise <tt>ulocalvar</tt>
- * represents the type u4.</li> <li>If the maximum size of the operand stack
- * is 65535 or less, then <tt>ustack</tt> represents the type u2; otherwise
- * ustack represents the type u4.</li> </ul>
- *
- * <pre>
- * stack_map { // attribute StackMap
- * u2 attribute_name_index;
- * u4 attribute_length
- * uoffset number_of_entries;
- * stack_map_frame entries[number_of_entries];
- * }
- * </pre>
- *
- * Each stack map frame has the following format:
- *
- * <pre>
- * stack_map_frame {
- * uoffset offset;
- * ulocalvar number_of_locals;
- * verification_type_info locals[number_of_locals];
- * ustack number_of_stack_items;
- * verification_type_info stack[number_of_stack_items];
- * }
- * </pre>
- *
- * The <tt>verification_type_info</tt> structure consists of a one-byte tag
- * followed by zero or more bytes, giving more information about the tag. Each
- * <tt>verification_type_info</tt> structure specifies the verification type
- * of one or two locations.
- *
- * <pre>
- * union verification_type_info {
- * Top_variable_info;
- * Integer_variable_info;
- * Float_variable_info;
- * Long_variable_info;
- * Double_variable_info;
- * Null_variable_info;
- * UninitializedThis_variable_info;
- * Object_variable_info;
- * Uninitialized_variable_info;
- * }
- *
- * Top_variable_info {
- * u1 tag = ITEM_Top; // 0
- * }
- *
- * Integer_variable_info {
- * u1 tag = ITEM_Integer; // 1
- * }
- *
- * Float_variable_info {
- * u1 tag = ITEM_Float; // 2
- * }
- *
- * Long_variable_info {
- * u1 tag = ITEM_Long; // 4
- * }
- *
- * Double_variable_info {
- * u1 tag = ITEM_Double; // 3
- * }
- *
- * Null_variable_info {
- * u1 tag = ITEM_Null; // 5
- * }
- *
- * UninitializedThis_variable_info {
- * u1 tag = ITEM_UninitializedThis; // 6
- * }
- *
- * Object_variable_info {
- * u1 tag = ITEM_Object; // 7
- * u2 cpool_index;
- * }
- *
- * Uninitialized_variable_info {
- * u1 tag = ITEM_Uninitialized // 8
- * uoffset offset;
- * }
- * </pre>
- *
- * @see <a href="http://www.jcp.org/en/jsr/detail?id=139">JSR 139 : Connected
- * Limited Device Configuration 1.1</a>
- *
- * @author Eugene Kuleshov
- */
-public class StackMapAttribute extends Attribute {
-
- static final int MAX_SIZE = 65535;
-
- /**
- * A List of <code>StackMapFrame</code> instances.
- */
- public List frames = new ArrayList();
-
- public StackMapAttribute() {
- super("StackMap");
- }
-
- public StackMapAttribute(List frames) {
- this();
- this.frames = frames;
- }
-
- public List getFrames() {
- return frames;
- }
-
- public StackMapFrame getFrame(Label label) {
- for (int i = 0; i < frames.size(); i++) {
- StackMapFrame frame = (StackMapFrame) frames.get(i);
- if (frame.label == label) {
- return frame;
- }
- }
- return null;
- }
-
- public boolean isUnknown() {
- return false;
- }
-
- public boolean isCodeAttribute() {
- return true;
- }
-
- protected Attribute read(
- ClassReader cr,
- int off,
- int len,
- char[] buf,
- int codeOff,
- Label[] labels)
- {
- StackMapAttribute attr = new StackMapAttribute();
- // note that this is not the size of Code attribute
- boolean isExtCodeSize = cr.readInt(codeOff + 4) > MAX_SIZE;
- boolean isExtLocals = cr.readUnsignedShort(codeOff + 2) > MAX_SIZE;
- boolean isExtStack = cr.readUnsignedShort(codeOff) > MAX_SIZE;
-
- int size = 0;
- if (isExtCodeSize) {
- size = cr.readInt(off);
- off += 4;
- } else {
- size = cr.readUnsignedShort(off);
- off += 2;
- }
- for (int i = 0; i < size; i++) {
- int offset;
- if (isExtCodeSize) {
- offset = cr.readInt(off);
- off += 4;
- } else {
- offset = cr.readUnsignedShort(off);
- off += 2;
- }
-
- Label label = getLabel(offset, labels);
- List locals = new ArrayList();
- List stack = new ArrayList();
-
- off = readTypeInfo(cr,
- off,
- locals,
- labels,
- buf,
- isExtLocals,
- isExtCodeSize);
- off = readTypeInfo(cr,
- off,
- stack,
- labels,
- buf,
- isExtStack,
- isExtCodeSize);
-
- attr.frames.add(new StackMapFrame(label, locals, stack));
- }
- return attr;
- }
-
- private int readTypeInfo(
- ClassReader cr,
- int off,
- List info,
- Label[] labels,
- char[] buf,
- boolean isExt,
- boolean isExtCode)
- {
- int n = 0;
- if (isExt) {
- n = cr.readInt(off);
- off += 4;
- } else {
- n = cr.readUnsignedShort(off);
- off += 2;
- }
- for (int j = 0; j < n; j++) {
- int itemType = cr.readByte(off++);
- StackMapType typeInfo = StackMapType.getTypeInfo(itemType);
- info.add(typeInfo);
- switch (itemType) {
- case StackMapType.ITEM_Object: //
- typeInfo.setObject(cr.readClass(off, buf));
- off += 2;
- break;
- case StackMapType.ITEM_Uninitialized: //
- int offset;
- if (isExtCode) {
- offset = cr.readInt(off);
- off += 4;
- } else {
- offset = cr.readUnsignedShort(off);
- off += 2;
- }
- typeInfo.setLabel(getLabel(offset, labels));
- break;
- }
- }
- return off;
- }
-
- private void writeTypeInfo(ByteVector bv, ClassWriter cw, List info, int max)
- {
- if (max > StackMapAttribute.MAX_SIZE) {
- bv.putInt(info.size());
- } else {
- bv.putShort(info.size());
- }
- for (int j = 0; j < info.size(); j++) {
- StackMapType typeInfo = (StackMapType) info.get(j);
- bv.putByte(typeInfo.getType());
- switch (typeInfo.getType()) {
- case StackMapType.ITEM_Object: //
- bv.putShort(cw.newClass(typeInfo.getObject()));
- break;
-
- case StackMapType.ITEM_Uninitialized: //
- bv.putShort(typeInfo.getLabel().getOffset());
- break;
-
- }
- }
- }
-
- private Label getLabel(int offset, Label[] labels) {
- Label l = labels[offset];
- if (l != null) {
- return l;
- }
- return labels[offset] = new Label();
- }
-
- protected ByteVector write(
- ClassWriter cw,
- byte[] code,
- int len,
- int maxStack,
- int maxLocals)
- {
- ByteVector bv = new ByteVector();
- if (code != null && code.length > MAX_SIZE) { // TODO verify value
- bv.putInt(frames.size());
- } else {
- bv.putShort(frames.size());
- }
- for (int i = 0; i < frames.size(); i++) {
- writeFrame((StackMapFrame) frames.get(i),
- cw,
- maxStack,
- maxLocals,
- bv);
- }
- return bv;
- }
-
- protected Label[] getLabels() {
- HashSet labels = new HashSet();
- for (int i = 0; i < frames.size(); i++) {
- getFrameLabels((StackMapFrame) frames.get(i), labels);
- }
- return (Label[]) labels.toArray(new Label[labels.size()]);
- }
-
- private void writeFrame(
- StackMapFrame frame,
- ClassWriter cw,
- int maxStack,
- int maxLocals,
- ByteVector bv)
- {
- bv.putShort(frame.label.getOffset());
- writeTypeInfo(bv, cw, frame.locals, maxLocals);
- writeTypeInfo(bv, cw, frame.stack, maxStack);
- }
-
- private void getFrameLabels(StackMapFrame frame, Set labels) {
- labels.add(frame.label);
- getTypeInfoLabels(labels, frame.locals);
- getTypeInfoLabels(labels, frame.stack);
- }
-
- private void getTypeInfoLabels(Set labels, List info) {
- for (Iterator it = info.iterator(); it.hasNext();) {
- StackMapType typeInfo = (StackMapType) it.next();
- if (typeInfo.getType() == StackMapType.ITEM_Uninitialized) {
- labels.add(typeInfo.getLabel());
- }
- }
- }
-
- public String toString() {
- StringBuffer sb = new StringBuffer("StackMap[");
- for (int i = 0; i < frames.size(); i++) {
- sb.append('\n').append('[').append(frames.get(i)).append(']');
- }
- sb.append("\n]");
- return sb.toString();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapFrame.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapFrame.java
deleted file mode 100644
index d91d8e7..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapFrame.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.attrs;
-
-import java.util.List;
-
-import org.objectweb.asm.Label;
-
-/**
- * Holds the state of the stack and local variables for a single execution
- * branch.
- *
- * <i>Note that Long and Double types are represented by two entries in locals
- * and stack. Second entry should be always of type Top.</i>
- *
- * @see <a href="http://www.jcp.org/en/jsr/detail?id=139">JSR 139 : Connected
- * Limited Device Configuration 1.1</a>
- *
- * @see "ClassFileFormat-Java6.fm Page 138 Friday, April 15, 2005 3:22 PM"
- *
- * @author Eugene Kuleshov
- */
-public class StackMapFrame {
-
- /**
- * A <code>Label</code> for frame offset within method bytecode.
- */
- public Label label;
-
- /**
- * A List of <code>StackMapType</code> instances that represent locals for
- * this frame.
- */
- public List locals;
-
- /**
- * A List of <code>StackMapType</code> instances that represent stack for
- * this frame.
- */
- public List stack;
-
- public StackMapFrame(Label label, List locals, List stack) {
- this.label = label;
- this.locals = locals;
- this.stack = stack;
- }
-
- public String toString() {
- StringBuffer sb = new StringBuffer("Frame:L");
- sb.append(System.identityHashCode(label));
- sb.append(" locals").append(locals);
- sb.append(" stack").append(stack);
- return sb.toString();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapTableAttribute.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapTableAttribute.java
deleted file mode 100644
index 032adf6..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapTableAttribute.java
+++ /dev/null
@@ -1,927 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.attrs;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ByteVector;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * The stack map attribute is used during the process of verification by
- * typechecking (§4.11.1). <br> <br> A stack map attribute consists of zero or
- * more stack map frames. Each stack map frame specifies (either explicitly or
- * implicitly) a bytecode offset, the verification types (§4.11.1) for the local
- * variables, and the verification types for the operand stack. <br> <br> The
- * type checker deals with and manipulates the expected types of a method's
- * local variables and operand stack. Throughout this section, a location refers
- * to either a single local variable or to a single operand stack entry. <br>
- * <br> We will use the terms stack frame map and type state interchangeably to
- * describe a mapping from locations in the operand stack and local variables of
- * a method to verification types. We will usually use the term stack frame map
- * when such a mapping is provided in the class file, and the term type state
- * when the mapping is inferred by the type checker. <br> <br> If a method's
- * Code attribute does not have a StackMapTable attribute, it has an implicit
- * stack map attribute. This implicit stack map attribute is equivalent to a
- * StackMapTable attribute with number_of_entries equal to zero. A method's Code
- * attribute may have at most one StackMapTable attribute, otherwise a
- * java.lang.ClassFormatError is thrown. <br> <br> The format of the stack map
- * in the class file is given below. In the following, if the length of the
- * method's byte code is 65535 or less, then uoffset represents the type u2;
- * otherwise uoffset represents the type u4. If the maximum number of local
- * variables for the method is 65535 or less, then <code>ulocalvar</code>
- * represents the type u2; otherwise ulocalvar represents the type u4. If the
- * maximum size of the operand stack is 65535 or less, then <code>ustack</code>
- * represents the type u2; otherwise ustack represents the type u4.
- *
- * <pre>
- * stack_map { // attribute StackMapTable
- * u2 attribute_name_index;
- * u4 attribute_length
- * uoffset number_of_entries;
- * stack_map_frame entries[number_of_entries];
- * }
- * </pre>
- *
- * Each stack_map_frame structure specifies the type state at a particular byte
- * code offset. Each frame type specifies (explicitly or implicitly) a value,
- * offset_delta, that is used to calulate the actual byte code offset at which
- * it applies. The byte code offset at which the frame applies is given by
- * adding <code>1 + offset_delta</code> to the <code>offset</code> of the
- * previous frame, unless the previous frame is the initial frame of the method,
- * in which case the byte code offset is <code>offset_delta</code>. <br> <br>
- * <i>Note that the length of the byte codes is not the same as the length of
- * the Code attribute. The byte codes are embedded in the Code attribute, along
- * with other information.</i> <br> <br> By using an offset delta rather than
- * the actual byte code offset we ensure, by definition, that stack map frames
- * are in the correctly sorted order. Furthermore, by consistently using the
- * formula <code>offset_delta + 1</code> for all explicit frames, we guarantee
- * the absence of duplicates. <br> <br> All frame types, even full_frame, rely
- * on the previous frame for some of their semantics. This raises the question
- * of what is the very first frame? The initial frame is implicit, and computed
- * from the method descriptor. See the Prolog code for methodInitialStacFrame.
- * <br> <br> The stack_map_frame structure consists of a one-byte tag followed
- * by zero or more bytes, giving more information, depending upon the tag. <br>
- * <br> A stack map frame may belong to one of several frame types
- *
- * <pre>
- * union stack_map_frame {
- * same_frame;
- * same_locals_1_stack_item_frame;
- * chop_frame;
- * same_frame_extended;
- * append_frame;
- * full_frame;
- * }
- * </pre>
- *
- * The frame type same_frame is represented by tags in the range [0-63]. If the
- * frame type is same_frame, it means the frame has exactly the same locals as
- * the previous stack map frame and that the number of stack items is zero. The
- * offset_delta value for the frame is the value of the tag field, frame_type.
- * The form of such a frame is then:
- *
- * <pre>
- * same_frame {
- * u1 frame_type = SAME; // 0-63
- * }
- * </pre>
- *
- * The frame type same_locals_1_stack_item_frame is represented by tags in the
- * range [64, 127]. If the frame_type is same_locals_1_stack_item_frame, it
- * means the frame has exactly the same locals as the previous stack map frame
- * and that the number of stack items is 1. The offset_delta value for the frame
- * is the value (frame_type - 64). There is a verification_type_info following
- * the frame_type for the one stack item. The form of such a frame is then:
- *
- * <pre>
- * same_locals_1_stack_item_frame {
- * u1 frame_type = SAME_LOCALS_1_STACK_ITEM; // 64-127
- * verification_type_info stack[1];
- * }
- * </pre>
- *
- * Tags in the range [128-247] are reserved for future use. <br> <br> The frame
- * type chop_frame is represented by tags in the range [248-250]. If the
- * frame_type is chop_frame, it means that the current locals are the same as
- * the locals in the previous frame, except that the k last locals are absent.
- * The value of k is given by the formula 251-frame_type. <br> <br> The form of
- * such a frame is then:
- *
- * <pre>
- * chop_frame {
- * u1 frame_type=CHOP; // 248-250
- * uoffset offset_delta;
- * }
- * </pre>
- *
- * The frame type same_frame_extended is represented by the tag value 251. If
- * the frame type is same_frame_extended, it means the frame has exactly the
- * same locals as the previous stack map frame and that the number of stack
- * items is zero. The form of such a frame is then:
- *
- * <pre>
- * same_frame_extended {
- * u1 frame_type = SAME_FRAME_EXTENDED; // 251
- * uoffset offset_delta;
- * }
- * </pre>
- *
- * The frame type append_frame is represented by tags in the range [252-254]. If
- * the frame_type is append_frame, it means that the current locals are the same
- * as the locals in the previous frame, except that k additional locals are
- * defined. The value of k is given by the formula frame_type-251. <br> <br> The
- * form of such a frame is then:
- *
- * <pre>
- * append_frame {
- * u1 frame_type =APPEND; // 252-254
- * uoffset offset_delta;
- * verification_type_info locals[frame_type -251];
- * }
- * </pre>
- *
- * The 0th entry in locals represents the type of the first additional local
- * variable. If locals[M] represents local variable N, then locals[M+1]
- * represents local variable N+1 if locals[M] is one of Top_variable_info,
- * Integer_variable_info, Float_variable_info, Null_variable_info,
- * UninitializedThis_variable_info, Object_variable_info, or
- * Uninitialized_variable_info, otherwise locals[M+1] represents local variable
- * N+2. It is an error if, for any index i, locals[i] represents a local
- * variable whose index is greater than the maximum number of local variables
- * for the method. <br> <br> The frame type full_frame is represented by the tag
- * value 255. The form of such a frame is then:
- *
- * <pre>
- * full_frame {
- * u1 frame_type = FULL_FRAME; // 255
- * uoffset offset_delta;
- * ulocalvar number_of_locals;
- * verification_type_info locals[number_of_locals];
- * ustack number_of_stack_items;
- * verification_type_info stack[number_of_stack_items];
- * }
- * </pre>
- *
- * The 0th entry in locals represents the type of local variable 0. If locals[M]
- * represents local variable N, then locals[M+1] represents local variable N+1
- * if locals[M] is one of Top_variable_info, Integer_variable_info,
- * Float_variable_info, Null_variable_info, UninitializedThis_variable_info,
- * Object_variable_info, or Uninitialized_variable_info, otherwise locals[M+1]
- * represents local variable N+2. It is an error if, for any index i, locals[i]
- * represents a local variable whose index is greater than the maximum number of
- * local variables for the method. <br> <br> The 0th entry in stack represents
- * the type of the bottom of the stack, and subsequent entries represent types
- * of stack elements closer to the top of the operand stack. We shall refer to
- * the bottom element of the stack as stack element 0, and to subsequent
- * elements as stack element 1, 2 etc. If stack[M] represents stack element N,
- * then stack[M+1] represents stack element N+1 if stack[M] is one of
- * Top_variable_info, Integer_variable_info, Float_variable_info,
- * Null_variable_info, UninitializedThis_variable_info, Object_variable_info, or
- * Uninitialized_variable_info, otherwise stack[M+1] represents stack element
- * N+2. It is an error if, for any index i, stack[i] represents a stack entry
- * whose index is greater than the maximum operand stack size for the method.
- * <br> <br> We say that an instruction in the byte code has a corresponding
- * stack map frame if the offset in the offset field of the stack map frame is
- * the same as the offset of the instruction in the byte codes. <br> <br> The
- * verification_type_info structure consists of a one-byte tag followed by zero
- * or more bytes, giving more information about the tag. Each
- * verification_type_info structure specifies the verification type of one or
- * two locations.
- *
- * <pre>
- * union verification_type_info {
- * Top_variable_info;
- * Integer_variable_info;
- * Float_variable_info;
- * Long_variable_info;
- * Double_variable_info;
- * Null_variable_info;
- * UninitializedThis_variable_info;
- * Object_variable_info;
- * Uninitialized_variable_info;
- * }
- * </pre>
- *
- * The Top_variable_info type indicates that the local variable has the
- * verification type top (T.)
- *
- * <pre>
- * Top_variable_info {
- * u1 tag = ITEM_Top; // 0
- * }
- * </pre>
- *
- * The Integer_variable_info type indicates that the location contains the
- * verification type int.
- *
- * <pre>
- * Integer_variable_info {
- * u1 tag = ITEM_Integer; // 1
- * }
- * </pre>
- *
- * The Float_variable_info type indicates that the location contains the
- * verification type float.
- *
- * <pre>
- * Float_variable_info {
- * u1 tag = ITEM_Float; // 2
- * }
- * </pre>
- *
- * The Long_variable_info type indicates that the location contains the
- * verification type long. If the location is a local variable, then:
- *
- * <ul> <li>It must not be the local variable with the highest index.</li>
- * <li>The next higher numbered local variable contains the verification type
- * T.</li> </ul>
- *
- * If the location is an operand stack entry, then:
- *
- * <ul> <li>The current location must not be the topmost location of the
- * operand stack.</li> <li>the next location closer to the top of the operand
- * stack contains the verification type T.</li> </ul>
- *
- * This structure gives the contents of two locations in the operand stack or in
- * the local variables.
- *
- * <pre>
- * Long_variable_info {
- * u1 tag = ITEM_Long; // 4
- * }
- * </pre>
- *
- * The Double_variable_info type indicates that the location contains the
- * verification type double. If the location is a local variable, then:
- *
- * <ul> <li>It must not be the local variable with the highest index.</li>
- * <li>The next higher numbered local variable contains the verification type
- * T. <li> </ul>
- *
- * If the location is an operand stack entry, then:
- *
- * <ul> <li>The current location must not be the topmost location of the
- * operand stack.</li> <li>the next location closer to the top of the operand
- * stack contains the verification type T.</li> </ul>
- *
- * This structure gives the contents of two locations in in the operand stack or
- * in the local variables.
- *
- * <pre>
- * Double_variable_info {
- * u1 tag = ITEM_Double; // 3
- * }
- * </pre>
- *
- * The Null_variable_info type indicates that location contains the verification
- * type null.
- *
- * <pre>
- * Null_variable_info {
- * u1 tag = ITEM_Null; // 5
- * }
- * </pre>
- *
- * The UninitializedThis_variable_info type indicates that the location contains
- * the verification type uninitializedThis.
- *
- * <pre>
- * UninitializedThis_variable_info {
- * u1 tag = ITEM_UninitializedThis; // 6
- * }
- * </pre>
- *
- * The Object_variable_info type indicates that the location contains an
- * instance of the class referenced by the constant pool entry.
- *
- * <pre>
- * Object_variable_info {
- * u1 tag = ITEM_Object; // 7
- * u2 cpool_index;
- * }
- * </pre>
- *
- * The Uninitialized_variable_info indicates that the location contains the
- * verification type uninitialized(offset). The offset item indicates the offset
- * of the new instruction that created the object being stored in the location.
- *
- * <pre>
- * Uninitialized_variable_info {
- * u1 tag = ITEM_Uninitialized // 8
- * uoffset offset;
- * }
- * </pre>
- *
- * @see "ClassFileFormat-Java6.fm Page 138 Friday, April 15, 2005 3:22 PM"
- *
- * @author Eugene Kuleshov
- */
-public class StackMapTableAttribute extends Attribute {
- /**
- * Frame has exactly the same locals as the previous stack map frame and
- * number of stack items is zero.
- */
- public static final int SAME_FRAME = 0; // to 63 (0-3f)
-
- /**
- * Frame has exactly the same locals as the previous stack map frame and
- * number of stack items is 1
- */
- public static final int SAME_LOCALS_1_STACK_ITEM_FRAME = 64; // to 127
-
- // (40-7f)
-
- /**
- * Reserved for future use
- */
- public static final int RESERVED = 128;
-
- /**
- * Frame has exactly the same locals as the previous stack map frame and
- * number of stack items is 1. Offset is bigger then 63;
- */
- public static final int SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED = 247; // f7
-
- /**
- * Frame where current locals are the same as the locals in the previous
- * frame, except that the k last locals are absent. The value of k is given
- * by the formula 251-frame_type.
- */
- public static final int CHOP_FRAME = 248; // to 250 (f8-fA)
-
- /**
- * Frame has exactly the same locals as the previous stack map frame and
- * number of stack items is zero. Offset is bigger then 63;
- */
- public static final int SAME_FRAME_EXTENDED = 251; // fb
-
- /**
- * Frame where current locals are the same as the locals in the previous
- * frame, except that k additional locals are defined. The value of k is
- * given by the formula frame_type-251.
- */
- public static final int APPEND_FRAME = 252; // to 254 // fc-fe
-
- /**
- * Full frame
- */
- public static final int FULL_FRAME = 255; // ff
-
- private static final int MAX_SHORT = 65535;
-
- /**
- * A <code>List</code> of <code>StackMapFrame</code> instances.
- */
- private List frames;
-
- public StackMapTableAttribute() {
- super("StackMapTable");
- }
-
- public StackMapTableAttribute(List frames) {
- this();
- this.frames = frames;
- }
-
- public List getFrames() {
- return frames;
- }
-
- public StackMapFrame getFrame(Label label) {
- for (int i = 0; i < frames.size(); i++) {
- StackMapFrame frame = (StackMapFrame) frames.get(i);
- if (frame.label == label) {
- return frame;
- }
- }
- return null;
- }
-
- public boolean isUnknown() {
- return false;
- }
-
- public boolean isCodeAttribute() {
- return true;
- }
-
- protected Attribute read(
- ClassReader cr,
- int off,
- int len,
- char[] buf,
- int codeOff,
- Label[] labels)
- {
-
- ArrayList frames = new ArrayList();
-
- // note that this is not the size of Code attribute
- boolean isExtCodeSize = cr.readInt(codeOff + 4) > MAX_SHORT;
- boolean isExtLocals = cr.readUnsignedShort(codeOff + 2) > MAX_SHORT;
- boolean isExtStack = cr.readUnsignedShort(codeOff) > MAX_SHORT;
-
- int offset = 0;
-
- int methodOff = getMethodOff(cr, codeOff, buf);
- StackMapFrame frame = new StackMapFrame(getLabel(offset, labels),
- calculateLocals(cr.readClass(cr.header + 2, buf), // owner
- cr.readUnsignedShort(methodOff), // method access
- cr.readUTF8(methodOff + 2, buf), // method name
- cr.readUTF8(methodOff + 4, buf)), // method desc
- Collections.EMPTY_LIST);
- frames.add(frame);
-
- // System.err.println( cr.readUTF8( methodOff + 2, buf));
- // System.err.println( offset +" delta:" + 0 +" : "+ frame);
-
- int size;
- if (isExtCodeSize) {
- size = cr.readInt(off);
- off += 4;
- } else {
- size = cr.readUnsignedShort(off);
- off += 2;
- }
-
- for (; size > 0; size--) {
- int tag = cr.readByte(off); // & 0xff;
- off++;
-
- List stack;
- List locals;
-
- int offsetDelta;
- if (tag < SAME_LOCALS_1_STACK_ITEM_FRAME) { // SAME_FRAME
- offsetDelta = tag;
-
- locals = new ArrayList(frame.locals);
- stack = Collections.EMPTY_LIST;
-
- } else if (tag < RESERVED) { // SAME_LOCALS_1_STACK_ITEM_FRAME
- offsetDelta = tag - SAME_LOCALS_1_STACK_ITEM_FRAME;
-
- locals = new ArrayList(frame.locals);
- stack = new ArrayList();
- // read verification_type_info stack[1];
- off = readType(stack, isExtCodeSize, cr, off, labels, buf);
-
- } else {
- if (isExtCodeSize) {
- offsetDelta = cr.readInt(off);
- off += 4;
- } else {
- offsetDelta = cr.readUnsignedShort(off);
- off += 2;
- }
-
- if (tag == SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED) { // SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED
- locals = new ArrayList(frame.locals);
- stack = new ArrayList();
- // read verification_type_info stack[1];
- off = readType(stack, isExtCodeSize, cr, off, labels, buf);
-
- } else if (tag >= CHOP_FRAME && tag < SAME_FRAME_EXTENDED) { // CHOP_FRAME
- stack = Collections.EMPTY_LIST;
-
- int k = SAME_FRAME_EXTENDED - tag;
- // copy locals from prev frame and chop last k
- locals = new ArrayList(frame.locals.subList(0,
- frame.locals.size() - k));
-
- } else if (tag == SAME_FRAME_EXTENDED) { // SAME_FRAME_EXTENDED
- stack = Collections.EMPTY_LIST;
- locals = new ArrayList(frame.locals);
-
- } else if ( /* tag>=APPEND && */tag < FULL_FRAME) { // APPEND_FRAME
- stack = Collections.EMPTY_LIST;
-
- // copy locals from prev frame and append new k
- locals = new ArrayList(frame.locals);
- for (int k = tag - SAME_FRAME_EXTENDED; k > 0; k--) {
- off = readType(locals,
- isExtCodeSize,
- cr,
- off,
- labels,
- buf);
- }
-
- } else if (tag == FULL_FRAME) { // FULL_FRAME
- // read verification_type_info locals[number_of_locals];
- locals = new ArrayList();
- off = readTypes(locals,
- isExtLocals,
- isExtCodeSize,
- cr,
- off,
- labels,
- buf);
-
- // read verification_type_info stack[number_of_stack_items];
- stack = new ArrayList();
- off = readTypes(stack,
- isExtStack,
- isExtCodeSize,
- cr,
- off,
- labels,
- buf);
-
- } else {
- throw new RuntimeException("Unknown frame type " + tag
- + " after offset " + offset);
-
- }
- }
-
- offset += offsetDelta;
-
- Label offsetLabel = getLabel(offset, labels);
-
- frame = new StackMapFrame(offsetLabel, locals, stack);
- frames.add(frame);
- // System.err.println( tag +" " + offset +" delta:" + offsetDelta +
- // " frameType:"+ frameType+" : "+ frame);
-
- offset++;
- }
-
- return new StackMapTableAttribute(frames);
- }
-
- protected ByteVector write(
- ClassWriter cw,
- byte[] code,
- int len,
- int maxStack,
- int maxLocals)
- {
- ByteVector bv = new ByteVector();
- // TODO verify this value (MAX_SHORT)
- boolean isExtCodeSize = code != null && code.length > MAX_SHORT;
- writeSize(frames.size() - 1, bv, isExtCodeSize);
-
- if (frames.size() < 2) {
- return bv;
- }
-
- boolean isExtLocals = maxLocals > MAX_SHORT;
- boolean isExtStack = maxStack > MAX_SHORT;
-
- // skip the first frame
- StackMapFrame frame = (StackMapFrame) frames.get(0);
- List locals = frame.locals;
- int offset = frame.label.getOffset();
-
- for (int i = 1; i < frames.size(); i++) {
- frame = (StackMapFrame) frames.get(i);
-
- List clocals = frame.locals;
- List cstack = frame.stack;
- int coffset = frame.label.getOffset();
-
- int clocalsSize = clocals.size();
- int cstackSize = cstack.size();
-
- int localsSize = locals.size();
-
- int delta = coffset - offset;
-
- int type = FULL_FRAME;
- int k = 0;
- if (cstackSize == 0) {
- k = clocalsSize - localsSize;
- switch (k) {
- case -3:
- case -2:
- case -1:
- type = CHOP_FRAME; // CHOP or FULL
- localsSize = clocalsSize; // for full_frame check
- break;
-
- case 0:
- // SAME, SAME_EXTENDED or FULL
- type = delta < 64 ? SAME_FRAME : SAME_FRAME_EXTENDED;
- break;
-
- case 1:
- case 2:
- case 3:
- type = APPEND_FRAME; // APPEND or FULL
- break;
- }
- } else if (localsSize == clocalsSize && cstackSize == 1) {
- // SAME_LOCAL_1_STACK or FULL
- type = delta < 63
- ? SAME_LOCALS_1_STACK_ITEM_FRAME
- : SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED;
- }
-
- if (type != FULL_FRAME) {
- // verify if stack and locals are the same
- for (int j = 0; j < localsSize && type != FULL_FRAME; j++) {
- if (!locals.get(j).equals(clocals.get(j)))
- type = FULL_FRAME;
- }
- }
-
- switch (type) {
- case SAME_FRAME:
- bv.putByte(delta);
- break;
-
- case SAME_LOCALS_1_STACK_ITEM_FRAME:
- bv.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME + delta);
- writeTypeInfos(bv, cw, cstack, 0, 1);
- break;
-
- case SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED:
- bv.putByte(SAME_LOCALS_1_STACK_ITEM_FRAME_EXTENDED);
- writeSize(delta, bv, isExtCodeSize);
- writeTypeInfos(bv, cw, cstack, 0, 1);
- break;
-
- case SAME_FRAME_EXTENDED:
- bv.putByte(SAME_FRAME_EXTENDED);
- writeSize(delta, bv, isExtCodeSize);
- break;
-
- case CHOP_FRAME:
- bv.putByte(SAME_FRAME_EXTENDED + k); // negative k
- writeSize(delta, bv, isExtCodeSize);
- break;
-
- case APPEND_FRAME:
- bv.putByte(SAME_FRAME_EXTENDED + k); // positive k
- writeSize(delta, bv, isExtCodeSize);
- writeTypeInfos(bv,
- cw,
- clocals,
- clocalsSize - 1,
- clocalsSize);
- break;
-
- case FULL_FRAME:
- bv.putByte(FULL_FRAME);
- writeSize(delta, bv, isExtCodeSize);
- writeSize(clocalsSize, bv, isExtLocals);
- writeTypeInfos(bv, cw, clocals, 0, clocalsSize);
- writeSize(cstackSize, bv, isExtStack);
- writeTypeInfos(bv, cw, cstack, 0, cstackSize);
- break;
-
- default:
- throw new RuntimeException();
- }
- offset = coffset + 1; // compensating non first offset
- locals = clocals;
- }
- return bv;
- }
-
- private void writeSize(int delta, ByteVector bv, boolean isExt) {
- if (isExt) {
- bv.putInt(delta);
- } else {
- bv.putShort(delta);
- }
- }
-
- private void writeTypeInfos(
- ByteVector bv,
- ClassWriter cw,
- List info,
- int start,
- int end)
- {
- for (int j = start; j < end; j++) {
- StackMapType typeInfo = (StackMapType) info.get(j);
- bv.putByte(typeInfo.getType());
-
- switch (typeInfo.getType()) {
- case StackMapType.ITEM_Object: //
- bv.putShort(cw.newClass(typeInfo.getObject()));
- break;
-
- case StackMapType.ITEM_Uninitialized: //
- bv.putShort(typeInfo.getLabel().getOffset());
- break;
-
- }
- }
- }
-
- public static int getMethodOff(ClassReader cr, int codeOff, char[] buf) {
- int off = cr.header + 6;
-
- int interfacesCount = cr.readUnsignedShort(off);
- off += 2 + interfacesCount * 2;
-
- int fieldsCount = cr.readUnsignedShort(off);
- off += 2;
- for (; fieldsCount > 0; --fieldsCount) {
- int attrCount = cr.readUnsignedShort(off + 6); // field attributes
- off += 8;
- for (; attrCount > 0; --attrCount) {
- off += 6 + cr.readInt(off + 2);
- }
- }
-
- int methodsCount = cr.readUnsignedShort(off);
- off += 2;
- for (; methodsCount > 0; --methodsCount) {
- int methodOff = off;
- int attrCount = cr.readUnsignedShort(off + 6); // method attributes
- off += 8;
- for (; attrCount > 0; --attrCount) {
- String attrName = cr.readUTF8(off, buf);
- off += 6;
- if (attrName.equals("Code")) {
- if (codeOff == off) {
- return methodOff;
- }
- }
- off += cr.readInt(off - 4);
- }
- }
-
- return -1;
- }
-
- /**
- * Use method signature and access flags to resolve initial locals state.
- *
- * @param className name of the method's owner class.
- * @param access access flags of the method.
- * @param methodName name of the method.
- * @param methodDesc descriptor of the method.
- * @return list of <code>StackMapType</code> instances representing locals
- * for an initial frame.
- */
- public static List calculateLocals(
- String className,
- int access,
- String methodName,
- String methodDesc)
- {
- List locals = new ArrayList();
-
- // TODO
- if ("<init>".equals(methodName)
- && !className.equals("java/lang/Object"))
- {
- StackMapType typeInfo = StackMapType.getTypeInfo(StackMapType.ITEM_UninitializedThis);
- typeInfo.setObject(className); // this
- locals.add(typeInfo);
- } else if ((access & Opcodes.ACC_STATIC) == 0) {
- StackMapType typeInfo = StackMapType.getTypeInfo(StackMapType.ITEM_Object);
- typeInfo.setObject(className); // this
- locals.add(typeInfo);
- }
-
- Type[] types = Type.getArgumentTypes(methodDesc);
- for (int i = 0; i < types.length; i++) {
- Type t = types[i];
- StackMapType smt;
- switch (t.getSort()) {
- case Type.LONG:
- smt = StackMapType.getTypeInfo(StackMapType.ITEM_Long);
- break;
- case Type.DOUBLE:
- smt = StackMapType.getTypeInfo(StackMapType.ITEM_Double);
- break;
-
- case Type.FLOAT:
- smt = StackMapType.getTypeInfo(StackMapType.ITEM_Float);
- break;
-
- case Type.ARRAY:
- case Type.OBJECT:
- smt = StackMapType.getTypeInfo(StackMapType.ITEM_Object);
- smt.setObject(t.getDescriptor()); // TODO verify name
- break;
-
- default:
- smt = StackMapType.getTypeInfo(StackMapType.ITEM_Integer);
- break;
- }
- }
-
- return locals;
- }
-
- private int readTypes(
- List info,
- boolean isExt,
- boolean isExtCodeSize,
- ClassReader cr,
- int off,
- Label[] labels,
- char[] buf)
- {
- int n = 0;
- if (isExt) {
- n = cr.readInt(off);
- off += 4;
- } else {
- n = cr.readUnsignedShort(off);
- off += 2;
- }
-
- for (; n > 0; n--) {
- off = readType(info, isExtCodeSize, cr, off, labels, buf);
- }
- return off;
- }
-
- private int readType(
- List info,
- boolean isExtCodeSize,
- ClassReader cr,
- int off,
- Label[] labels,
- char[] buf)
- {
- int itemType = cr.readByte(off++);
- StackMapType typeInfo = StackMapType.getTypeInfo(itemType);
- info.add(typeInfo);
- switch (itemType) {
- // case StackMapType.ITEM_Long: //
- // case StackMapType.ITEM_Double: //
- // info.add(StackMapType.getTypeInfo(StackMapType.ITEM_Top));
- // break;
-
- case StackMapType.ITEM_Object: //
- typeInfo.setObject(cr.readClass(off, buf));
- off += 2;
- break;
-
- case StackMapType.ITEM_Uninitialized: //
- int offset;
- if (isExtCodeSize) {
- offset = cr.readInt(off);
- off += 4;
- } else {
- offset = cr.readUnsignedShort(off);
- off += 2;
- }
-
- typeInfo.setLabel(getLabel(offset, labels));
- break;
- }
- return off;
- }
-
- private Label getLabel(int offset, Label[] labels) {
- Label l = labels[offset];
- if (l != null) {
- return l;
- }
- return labels[offset] = new Label();
- }
-
- public String toString() {
- StringBuffer sb = new StringBuffer("StackMapTable[");
- for (int i = 0; i < frames.size(); i++) {
- sb.append('\n').append('[').append(frames.get(i)).append(']');
- }
- sb.append("\n]");
- return sb.toString();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapType.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapType.java
deleted file mode 100644
index 30cadf1..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/attrs/StackMapType.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package org.objectweb.asm.attrs;
-
-import org.objectweb.asm.Label;
-
-/**
- * Verification type info used by {@link StackMapAttribute}.
- *
- * @see <a href="http://www.jcp.org/en/jsr/detail?id=139">JSR 139 : Connected
- * Limited Device Configuration 1.1</a>
- *
- * @see "ClassFileFormat-Java6.fm Page 138 Friday, April 15, 2005 3:22 PM"
- *
- * @author Eugene Kuleshov
- */
-
-public class StackMapType {
-
- public static final int ITEM_Top = 0;
- public static final int ITEM_Integer = 1;
- public static final int ITEM_Float = 2;
- public static final int ITEM_Double = 3;
- public static final int ITEM_Long = 4;
- public static final int ITEM_Null = 5;
- public static final int ITEM_UninitializedThis = 6;
- public static final int ITEM_Object = 7;
- public static final int ITEM_Uninitialized = 8;
-
- public static final String[] ITEM_NAMES = {
- "Top",
- "Integer",
- "Float",
- "Double",
- "Long",
- "Null",
- "UninitializedThis",
- "Object",
- "Uninitialized" };
-
- private int type;
- private Label offset;
- private String object;
-
- private StackMapType(int type) {
- this.type = type;
- }
-
- public int getType() {
- return type;
- }
-
- public static StackMapType getTypeInfo(int itemType) {
- if (itemType < ITEM_Top || itemType > ITEM_Uninitialized) {
- throw new IllegalArgumentException("" + itemType);
- }
- return new StackMapType(itemType);
- }
-
- public void setLabel(Label offset) {
- this.offset = offset;
- }
-
- public void setObject(String object) {
- this.object = object;
- }
-
- public Label getLabel() {
- return offset;
- }
-
- public String getObject() {
- return object;
- }
-
- public String toString() {
- StringBuffer sb = new StringBuffer(ITEM_NAMES[type]);
- if (type == ITEM_Object) {
- sb.append(":").append(object);
- }
- if (type == ITEM_Uninitialized) {
- sb.append(":L").append(System.identityHashCode(offset));
- }
- return sb.toString();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/AdviceAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/AdviceAdapter.java
deleted file mode 100644
index 13fbaa6..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/AdviceAdapter.java
+++ /dev/null
@@ -1,642 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A <code>MethodAdapter</code> to dispatch method body instruction
- * <p>
- * The behavior is like this:
- * <ol>
- *
- * <li>as long as the INVOKESPECIAL for the object initialization has not been
- * reached, every bytecode instruction is dispatched in the ctor code visitor</li>
- *
- * <li>when this one is reached, it is only added in the ctor code visitor and
- * a JP invoke is added</li>
- * <li>after that, only the other code visitor receives the instructions</li>
- *
- * </ol>
- *
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public abstract class AdviceAdapter extends GeneratorAdapter implements Opcodes {
- private static final Object THIS = new Object();
- private static final Object OTHER = new Object();
-
- protected int methodAccess;
- protected String methodDesc;
-
- private boolean constructor;
- private boolean superInitialized;
- private ArrayList stackFrame;
- private HashMap branches;
-
-
- /**
- * Creates a new {@link AdviceAdapter}.
- *
- * @param mv the method visitor to which this adapter delegates calls.
- * @param access the method's access flags (see {@link Opcodes}).
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type Type}).
- */
- public AdviceAdapter(MethodVisitor mv, int access, String name, String desc) {
- super(mv, access, name, desc);
- methodAccess = access;
- methodDesc = desc;
-
- constructor = "<init>".equals(name);
- if (!constructor) {
- superInitialized = true;
- onMethodEnter();
- } else {
- stackFrame = new ArrayList();
- branches = new HashMap();
- }
- }
-
- public void visitLabel(Label label) {
- mv.visitLabel(label);
-
- if (constructor && branches != null) {
- ArrayList frame = (ArrayList) branches.get(label);
- if (frame != null) {
- stackFrame = frame;
- branches.remove(label);
- }
- }
- }
-
- public void visitInsn(int opcode) {
- if (constructor) {
- switch (opcode) {
- case RETURN: // empty stack
- onMethodExit(opcode);
- break;
-
- case IRETURN: // 1 before n/a after
- case FRETURN: // 1 before n/a after
- case ARETURN: // 1 before n/a after
- case ATHROW: // 1 before n/a after
- popValue();
- popValue();
- onMethodExit(opcode);
- break;
-
- case LRETURN: // 2 before n/a after
- case DRETURN: // 2 before n/a after
- popValue();
- popValue();
- onMethodExit(opcode);
- break;
-
- case NOP:
- case LALOAD: // remove 2 add 2
- case DALOAD: // remove 2 add 2
- case LNEG:
- case DNEG:
- case FNEG:
- case INEG:
- case L2D:
- case D2L:
- case F2I:
- case I2B:
- case I2C:
- case I2S:
- case I2F:
- case Opcodes.ARRAYLENGTH:
- break;
-
- case ACONST_NULL:
- case ICONST_M1:
- case ICONST_0:
- case ICONST_1:
- case ICONST_2:
- case ICONST_3:
- case ICONST_4:
- case ICONST_5:
- case FCONST_0:
- case FCONST_1:
- case FCONST_2:
- case F2L: // 1 before 2 after
- case F2D:
- case I2L:
- case I2D:
- pushValue(OTHER);
- break;
-
- case LCONST_0:
- case LCONST_1:
- case DCONST_0:
- case DCONST_1:
- pushValue(OTHER);
- pushValue(OTHER);
- break;
-
- case IALOAD: // remove 2 add 1
- case FALOAD: // remove 2 add 1
- case AALOAD: // remove 2 add 1
- case BALOAD: // remove 2 add 1
- case CALOAD: // remove 2 add 1
- case SALOAD: // remove 2 add 1
- case POP:
- case IADD:
- case FADD:
- case ISUB:
- case LSHL: // 3 before 2 after
- case LSHR: // 3 before 2 after
- case LUSHR: // 3 before 2 after
- case L2I: // 2 before 1 after
- case L2F: // 2 before 1 after
- case D2I: // 2 before 1 after
- case D2F: // 2 before 1 after
- case FSUB:
- case FMUL:
- case FDIV:
- case FREM:
- case FCMPL: // 2 before 1 after
- case FCMPG: // 2 before 1 after
- case IMUL:
- case IDIV:
- case IREM:
- case ISHL:
- case ISHR:
- case IUSHR:
- case IAND:
- case IOR:
- case IXOR:
- case MONITORENTER:
- case MONITOREXIT:
- popValue();
- break;
-
- case POP2:
- case LSUB:
- case LMUL:
- case LDIV:
- case LREM:
- case LADD:
- case LAND:
- case LOR:
- case LXOR:
- case DADD:
- case DMUL:
- case DSUB:
- case DDIV:
- case DREM:
- popValue();
- popValue();
- break;
-
- case IASTORE:
- case FASTORE:
- case AASTORE:
- case BASTORE:
- case CASTORE:
- case SASTORE:
- case LCMP: // 4 before 1 after
- case DCMPL:
- case DCMPG:
- popValue();
- popValue();
- popValue();
- break;
-
- case LASTORE:
- case DASTORE:
- popValue();
- popValue();
- popValue();
- popValue();
- break;
-
- case DUP:
- pushValue(peekValue());
- break;
-
- case DUP_X1:
- // TODO optimize this
- {
- Object o1 = popValue();
- Object o2 = popValue();
- pushValue(o1);
- pushValue(o2);
- pushValue(o1);
- }
- break;
-
- case DUP_X2:
- // TODO optimize this
- {
- Object o1 = popValue();
- Object o2 = popValue();
- Object o3 = popValue();
- pushValue(o1);
- pushValue(o3);
- pushValue(o2);
- pushValue(o1);
- }
- break;
-
- case DUP2:
- // TODO optimize this
- {
- Object o1 = popValue();
- Object o2 = popValue();
- pushValue(o2);
- pushValue(o1);
- pushValue(o2);
- pushValue(o1);
- }
- break;
-
- case DUP2_X1:
- // TODO optimize this
- {
- Object o1 = popValue();
- Object o2 = popValue();
- Object o3 = popValue();
- pushValue(o2);
- pushValue(o1);
- pushValue(o3);
- pushValue(o2);
- pushValue(o1);
- }
- break;
-
- case DUP2_X2:
- // TODO optimize this
- {
- Object o1 = popValue();
- Object o2 = popValue();
- Object o3 = popValue();
- Object o4 = popValue();
- pushValue(o2);
- pushValue(o1);
- pushValue(o4);
- pushValue(o3);
- pushValue(o2);
- pushValue(o1);
- }
- break;
-
- case SWAP: {
- Object o1 = popValue();
- Object o2 = popValue();
- pushValue(o1);
- pushValue(o2);
- }
- break;
- }
- } else {
- switch (opcode) {
- case RETURN:
- case IRETURN:
- case FRETURN:
- case ARETURN:
- case LRETURN:
- case DRETURN:
- case ATHROW:
- onMethodExit(opcode);
- break;
- }
- }
- mv.visitInsn(opcode);
- }
-
- public void visitVarInsn(int opcode, int var) {
- super.visitVarInsn(opcode, var);
-
- if (constructor) {
- switch (opcode) {
- case ILOAD:
- case FLOAD:
- pushValue(OTHER);
- break;
- case LLOAD:
- case DLOAD:
- pushValue(OTHER);
- pushValue(OTHER);
- break;
- case ALOAD:
- pushValue(var == 0 ? THIS : OTHER);
- break;
- case ASTORE:
- case ISTORE:
- case FSTORE:
- popValue();
- break;
- case LSTORE:
- case DSTORE:
- popValue();
- popValue();
- break;
- }
- }
- }
-
- public void visitFieldInsn(
- int opcode,
- String owner,
- String name,
- String desc)
- {
- mv.visitFieldInsn(opcode, owner, name, desc);
-
- if (constructor) {
- char c = desc.charAt(0);
- boolean longOrDouble = c == 'J' || c == 'D';
- switch (opcode) {
- case GETSTATIC:
- pushValue(OTHER);
- if (longOrDouble) {
- pushValue(OTHER);
- }
- break;
- case PUTSTATIC:
- popValue();
- if(longOrDouble) {
- popValue();
- }
- break;
- case PUTFIELD:
- popValue();
- if(longOrDouble) {
- popValue();
- popValue();
- }
- break;
- // case GETFIELD:
- default:
- if (longOrDouble) {
- pushValue(OTHER);
- }
- }
- }
- }
-
- public void visitIntInsn(int opcode, int operand) {
- mv.visitIntInsn(opcode, operand);
-
- if (constructor) {
- switch (opcode) {
- case BIPUSH:
- case SIPUSH:
- pushValue(OTHER);
- }
- }
- }
-
- public void visitLdcInsn(Object cst) {
- mv.visitLdcInsn(cst);
-
- if (constructor) {
- pushValue(OTHER);
- if (cst instanceof Double || cst instanceof Long) {
- pushValue(OTHER);
- }
- }
- }
-
- public void visitMultiANewArrayInsn(String desc, int dims) {
- mv.visitMultiANewArrayInsn(desc, dims);
-
- if (constructor) {
- for (int i = 0; i < dims; i++) {
- popValue();
- }
- pushValue(OTHER);
- }
- }
-
- public void visitTypeInsn(int opcode, String name) {
- mv.visitTypeInsn(opcode, name);
-
- // ANEWARRAY, CHECKCAST or INSTANCEOF don't change stack
- if (constructor && opcode == NEW) {
- pushValue(OTHER);
- }
- }
-
- public void visitMethodInsn(
- int opcode,
- String owner,
- String name,
- String desc)
- {
- mv.visitMethodInsn(opcode, owner, name, desc);
-
- if (constructor) {
- Type[] types = Type.getArgumentTypes(desc);
- for (int i = 0; i < types.length; i++) {
- popValue();
- if (types[i].getSize() == 2) {
- popValue();
- }
- }
- switch (opcode) {
- // case INVOKESTATIC:
- // break;
-
- case INVOKEINTERFACE:
- case INVOKEVIRTUAL:
- popValue(); // objectref
- break;
-
- case INVOKESPECIAL:
- Object type = popValue(); // objectref
- if (type == THIS && !superInitialized) {
- onMethodEnter();
- superInitialized = true;
- // once super has been initialized it is no longer
- // necessary to keep track of stack state
- constructor = false;
- }
- break;
- }
-
- Type returnType = Type.getReturnType(desc);
- if (returnType != Type.VOID_TYPE) {
- pushValue(OTHER);
- if (returnType.getSize() == 2) {
- pushValue(OTHER);
- }
- }
- }
- }
-
- public void visitJumpInsn(int opcode, Label label) {
- mv.visitJumpInsn(opcode, label);
-
- if (constructor) {
- switch (opcode) {
- case IFEQ:
- case IFNE:
- case IFLT:
- case IFGE:
- case IFGT:
- case IFLE:
- case IFNULL:
- case IFNONNULL:
- popValue();
- break;
-
- case IF_ICMPEQ:
- case IF_ICMPNE:
- case IF_ICMPLT:
- case IF_ICMPGE:
- case IF_ICMPGT:
- case IF_ICMPLE:
- case IF_ACMPEQ:
- case IF_ACMPNE:
- popValue();
- popValue();
- break;
-
- case JSR:
- pushValue(OTHER);
- break;
- }
- addBranch(label);
- }
- }
-
- public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
- mv.visitLookupSwitchInsn(dflt, keys, labels);
-
- if (constructor) {
- popValue();
- addBranches(dflt, labels);
- }
- }
-
- public void visitTableSwitchInsn(
- int min,
- int max,
- Label dflt,
- Label[] labels)
- {
- mv.visitTableSwitchInsn(min, max, dflt, labels);
-
- if (constructor) {
- popValue();
- addBranches(dflt, labels);
- }
- }
-
- private void addBranches(Label dflt, Label[] labels) {
- addBranch(dflt);
- for (int i = 0; i < labels.length; i++) {
- addBranch(labels[i]);
- }
- }
-
- private void addBranch(Label label) {
- if (branches.containsKey(label)) {
- return;
- }
- ArrayList frame = new ArrayList();
- frame.addAll(stackFrame);
- branches.put(label, frame);
- }
-
- private Object popValue() {
- return stackFrame.remove(stackFrame.size()-1);
- }
-
- private Object peekValue() {
- return stackFrame.get(stackFrame.size()-1);
- }
-
- private void pushValue(Object o) {
- stackFrame.add(o);
- }
-
- /**
- * Called at the beginning of the method or after super
- * class class call in the constructor.
- * <br><br>
- *
- * <i>Custom code can use or change all the local variables,
- * but should not change state of the stack.</i>
- */
- protected abstract void onMethodEnter();
-
- /**
- * Called before explicit exit from the method using either
- * return or throw. Top element on the stack contains the
- * return value or exception instance. For example:
- *
- * <pre>
- * public void onMethodExit(int opcode) {
- * if(opcode==RETURN) {
- * visitInsn(ACONST_NULL);
- * } else if(opcode==ARETURN || opcode==ATHROW) {
- * dup();
- * } else {
- * if(opcode==LRETURN || opcode==DRETURN) {
- * dup2();
- * } else {
- * dup();
- * }
- * box(Type.getReturnType(this.methodDesc));
- * }
- * visitIntInsn(SIPUSH, opcode);
- * visitMethodInsn(INVOKESTATIC, owner, "onExit", "(Ljava/lang/Object;I)V");
- * }
- *
- * // an actual call back method
- * public static void onExit(int opcode, Object param) {
- * ...
- * </pre>
- *
- * <br><br>
- *
- * <i>Custom code can use or change all the local variables,
- * but should not change state of the stack.</i>
- *
- * @param opcode one of the RETURN, IRETURN, FRETURN,
- * ARETURN, LRETURN, DRETURN or ATHROW
- *
- */
- protected abstract void onMethodExit(int opcode);
-
- // TODO onException, onMethodCall
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/EmptyVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/EmptyVisitor.java
deleted file mode 100644
index d979659..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/EmptyVisitor.java
+++ /dev/null
@@ -1,211 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * An empty implementation of the ASM visitor interfaces.
- *
- * @author Eric Bruneton
- */
-public class EmptyVisitor implements
- ClassVisitor,
- FieldVisitor,
- MethodVisitor,
- AnnotationVisitor
-{
-
- public void visit(
- int version,
- int access,
- String name,
- String signature,
- String superName,
- String[] interfaces)
- {
- }
-
- public void visitSource(String source, String debug) {
- }
-
- public void visitOuterClass(String owner, String name, String desc) {
- }
-
- public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- return this;
- }
-
- public void visitAttribute(Attribute attr) {
- }
-
- public void visitInnerClass(
- String name,
- String outerName,
- String innerName,
- int access)
- {
- }
-
- public FieldVisitor visitField(
- int access,
- String name,
- String desc,
- String signature,
- Object value)
- {
- return this;
- }
-
- public MethodVisitor visitMethod(
- int access,
- String name,
- String desc,
- String signature,
- String[] exceptions)
- {
- return this;
- }
-
- public void visitEnd() {
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- return this;
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- int parameter,
- String desc,
- boolean visible)
- {
- return this;
- }
-
- public void visitCode() {
- }
-
- public void visitInsn(int opcode) {
- }
-
- public void visitIntInsn(int opcode, int operand) {
- }
-
- public void visitVarInsn(int opcode, int var) {
- }
-
- public void visitTypeInsn(int opcode, String desc) {
- }
-
- public void visitFieldInsn(
- int opcode,
- String owner,
- String name,
- String desc)
- {
- }
-
- public void visitMethodInsn(
- int opcode,
- String owner,
- String name,
- String desc)
- {
- }
-
- public void visitJumpInsn(int opcode, Label label) {
- }
-
- public void visitLabel(Label label) {
- }
-
- public void visitLdcInsn(Object cst) {
- }
-
- public void visitIincInsn(int var, int increment) {
- }
-
- public void visitTableSwitchInsn(
- int min,
- int max,
- Label dflt,
- Label labels[])
- {
- }
-
- public void visitLookupSwitchInsn(Label dflt, int keys[], Label labels[]) {
- }
-
- public void visitMultiANewArrayInsn(String desc, int dims) {
- }
-
- public void visitTryCatchBlock(
- Label start,
- Label end,
- Label handler,
- String type)
- {
- }
-
- public void visitLocalVariable(
- String name,
- String desc,
- String signature,
- Label start,
- Label end,
- int index)
- {
- }
-
- public void visitLineNumber(int line, Label start) {
- }
-
- public void visitMaxs(int maxStack, int maxLocals) {
- }
-
- public void visit(String name, Object value) {
- }
-
- public void visitEnum(String name, String desc, String value) {
- }
-
- public AnnotationVisitor visitAnnotation(String name, String desc) {
- return this;
- }
-
- public AnnotationVisitor visitArray(String name) {
- return this;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/GeneratorAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/GeneratorAdapter.java
deleted file mode 100644
index aacb27c..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/GeneratorAdapter.java
+++ /dev/null
@@ -1,1454 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link org.objectweb.asm.MethodAdapter} with convenient methods to generate
- * code. For example, using this adapter, the class below
- *
- * <pre>
- * public class Example {
- * public static void main(String[] args) {
- * System.out.println(&quot;Hello world!&quot;);
- * }
- * }
- * </pre>
- *
- * can be generated as follows:
- *
- * <pre>
- * ClassWriter cw = new ClassWriter(true);
- * cw.visit(V1_1, ACC_PUBLIC, &quot;Example&quot;, null, &quot;java/lang/Object&quot;, null);
- *
- * Method m = Method.getMethod(&quot;void &lt;init&gt; ()&quot;);
- * GeneratorAdapter mg = new GeneratorAdapter(ACC_PUBLIC, m, null, null, cw);
- * mg.loadThis();
- * mg.invokeConstructor(Type.getType(Object.class), m);
- * mg.returnValue();
- * mg.endMethod();
- *
- * m = Method.getMethod(&quot;void main (String[])&quot;);
- * mg = new GeneratorAdapter(ACC_PUBLIC + ACC_STATIC, m, null, null, cw);
- * mg.getStatic(Type.getType(System.class), &quot;out&quot;, Type.getType(PrintStream.class));
- * mg.push(&quot;Hello world!&quot;);
- * mg.invokeVirtual(Type.getType(PrintStream.class), Method.getMethod(&quot;void println (String)&quot;));
- * mg.returnValue();
- * mg.endMethod();
- *
- * cw.visitEnd();
- * </pre>
- *
- * @author Juozas Baliuka
- * @author Chris Nokleberg
- * @author Eric Bruneton
- */
-public class GeneratorAdapter extends LocalVariablesSorter {
-
- private final static Type BYTE_TYPE = Type.getType("Ljava/lang/Byte;");
-
- private final static Type BOOLEAN_TYPE = Type.getType("Ljava/lang/Boolean;");
-
- private final static Type SHORT_TYPE = Type.getType("Ljava/lang/Short;");
-
- private final static Type CHARACTER_TYPE = Type.getType("Ljava/lang/Character;");
-
- private final static Type INTEGER_TYPE = Type.getType("Ljava/lang/Integer;");
-
- private final static Type FLOAT_TYPE = Type.getType("Ljava/lang/Float;");
-
- private final static Type LONG_TYPE = Type.getType("Ljava/lang/Long;");
-
- private final static Type DOUBLE_TYPE = Type.getType("Ljava/lang/Double;");
-
- private final static Type NUMBER_TYPE = Type.getType("Ljava/lang/Number;");
-
- private final static Type OBJECT_TYPE = Type.getType("Ljava/lang/Object;");
-
- private final static Method BOOLEAN_VALUE = Method.getMethod("boolean booleanValue()");
-
- private final static Method CHAR_VALUE = Method.getMethod("char charValue()");
-
- private final static Method INT_VALUE = Method.getMethod("int intValue()");
-
- private final static Method FLOAT_VALUE = Method.getMethod("float floatValue()");
-
- private final static Method LONG_VALUE = Method.getMethod("long longValue()");
-
- private final static Method DOUBLE_VALUE = Method.getMethod("double doubleValue()");
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int ADD = Opcodes.IADD;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int SUB = Opcodes.ISUB;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int MUL = Opcodes.IMUL;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int DIV = Opcodes.IDIV;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int REM = Opcodes.IREM;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int NEG = Opcodes.INEG;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int SHL = Opcodes.ISHL;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int SHR = Opcodes.ISHR;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int USHR = Opcodes.IUSHR;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int AND = Opcodes.IAND;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int OR = Opcodes.IOR;
-
- /**
- * Constant for the {@link #math math} method.
- */
- public final static int XOR = Opcodes.IXOR;
-
- /**
- * Constant for the {@link #ifCmp ifCmp} method.
- */
- public final static int EQ = Opcodes.IFEQ;
-
- /**
- * Constant for the {@link #ifCmp ifCmp} method.
- */
- public final static int NE = Opcodes.IFNE;
-
- /**
- * Constant for the {@link #ifCmp ifCmp} method.
- */
- public final static int LT = Opcodes.IFLT;
-
- /**
- * Constant for the {@link #ifCmp ifCmp} method.
- */
- public final static int GE = Opcodes.IFGE;
-
- /**
- * Constant for the {@link #ifCmp ifCmp} method.
- */
- public final static int GT = Opcodes.IFGT;
-
- /**
- * Constant for the {@link #ifCmp ifCmp} method.
- */
- public final static int LE = Opcodes.IFLE;
-
- /**
- * Access flags of the method visited by this adapter.
- */
- private final int access;
-
- /**
- * Return type of the method visited by this adapter.
- */
- private final Type returnType;
-
- /**
- * Argument types of the method visited by this adapter.
- */
- private final Type[] argumentTypes;
-
- /**
- * Types of the local variables of the method visited by this adapter.
- */
- private final List localTypes;
-
- /**
- * Creates a new {@link GeneratorAdapter}.
- *
- * @param mv the method visitor to which this adapter delegates calls.
- * @param access the method's access flags (see {@link Opcodes}).
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type Type}).
- */
- public GeneratorAdapter(
- MethodVisitor mv,
- int access,
- String name,
- String desc)
- {
- super(access, desc, mv);
- this.access = access;
- this.returnType = Type.getReturnType(desc);
- this.argumentTypes = Type.getArgumentTypes(desc);
- this.localTypes = new ArrayList();
- }
-
- /**
- * Creates a new {@link GeneratorAdapter}.
- *
- * @param access access flags of the adapted method.
- * @param method the adapted method.
- * @param mv the method visitor to which this adapter delegates calls.
- */
- public GeneratorAdapter(
- final int access,
- final Method method,
- final MethodVisitor mv)
- {
- super(access, method.getDescriptor(), mv);
- this.access = access;
- this.returnType = method.getReturnType();
- this.argumentTypes = method.getArgumentTypes();
- this.localTypes = new ArrayList();
- }
-
- /**
- * Creates a new {@link GeneratorAdapter}.
- *
- * @param access access flags of the adapted method.
- * @param method the adapted method.
- * @param signature the signature of the adapted method (may be
- * <tt>null</tt>).
- * @param exceptions the exceptions thrown by the adapted method (may be
- * <tt>null</tt>).
- * @param cv the class visitor to which this adapter delegates calls.
- */
- public GeneratorAdapter(
- final int access,
- final Method method,
- final String signature,
- final Type[] exceptions,
- final ClassVisitor cv)
- {
- this(access, method, cv.visitMethod(access,
- method.getName(),
- method.getDescriptor(),
- signature,
- getInternalNames(exceptions)));
- }
-
- /**
- * Returns the internal names of the given types.
- *
- * @param types a set of types.
- * @return the internal names of the given types.
- */
- private static String[] getInternalNames(final Type[] types) {
- if (types == null) {
- return null;
- }
- String[] names = new String[types.length];
- for (int i = 0; i < names.length; ++i) {
- names[i] = types[i].getInternalName();
- }
- return names;
- }
-
- // ------------------------------------------------------------------------
- // Instructions to push constants on the stack
- // ------------------------------------------------------------------------
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack.
- */
- public void push(final boolean value) {
- push(value ? 1 : 0);
- }
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack.
- */
- public void push(final int value) {
- if (value >= -1 && value <= 5) {
- mv.visitInsn(Opcodes.ICONST_0 + value);
- } else if (value >= Byte.MIN_VALUE && value <= Byte.MAX_VALUE) {
- mv.visitIntInsn(Opcodes.BIPUSH, value);
- } else if (value >= Short.MIN_VALUE && value <= Short.MAX_VALUE) {
- mv.visitIntInsn(Opcodes.SIPUSH, value);
- } else {
- mv.visitLdcInsn(new Integer(value));
- }
- }
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack.
- */
- public void push(final long value) {
- if (value == 0L || value == 1L) {
- mv.visitInsn(Opcodes.LCONST_0 + (int) value);
- } else {
- mv.visitLdcInsn(new Long(value));
- }
- }
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack.
- */
- public void push(final float value) {
- int bits = Float.floatToIntBits(value);
- if (bits == 0L || bits == 0x3f800000 || bits == 0x40000000) { // 0..2
- mv.visitInsn(Opcodes.FCONST_0 + (int) value);
- } else {
- mv.visitLdcInsn(new Float(value));
- }
- }
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack.
- */
- public void push(final double value) {
- long bits = Double.doubleToLongBits(value);
- if (bits == 0L || bits == 0x3ff0000000000000L) { // +0.0d and 1.0d
- mv.visitInsn(Opcodes.DCONST_0 + (int) value);
- } else {
- mv.visitLdcInsn(new Double(value));
- }
- }
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack. May be <tt>null</tt>.
- */
- public void push(final String value) {
- if (value == null) {
- mv.visitInsn(Opcodes.ACONST_NULL);
- } else {
- mv.visitLdcInsn(value);
- }
- }
-
- /**
- * Generates the instruction to push the given value on the stack.
- *
- * @param value the value to be pushed on the stack.
- */
- public void push(final Type value) {
- if (value == null) {
- mv.visitInsn(Opcodes.ACONST_NULL);
- } else {
- mv.visitLdcInsn(value);
- }
- }
-
- // ------------------------------------------------------------------------
- // Instructions to load and store method arguments
- // ------------------------------------------------------------------------
-
- /**
- * Returns the index of the given method argument in the frame's local
- * variables array.
- *
- * @param arg the index of a method argument.
- * @return the index of the given method argument in the frame's local
- * variables array.
- */
- private int getArgIndex(final int arg) {
- int index = ((access & Opcodes.ACC_STATIC) == 0 ? 1 : 0);
- for (int i = 0; i < arg; i++) {
- index += argumentTypes[i].getSize();
- }
- return index;
- }
-
- /**
- * Generates the instruction to push a local variable on the stack.
- *
- * @param type the type of the local variable to be loaded.
- * @param index an index in the frame's local variables array.
- */
- private void loadInsn(final Type type, final int index) {
- mv.visitVarInsn(type.getOpcode(Opcodes.ILOAD), index);
- }
-
- /**
- * Generates the instruction to store the top stack value in a local
- * variable.
- *
- * @param type the type of the local variable to be stored.
- * @param index an index in the frame's local variables array.
- */
- private void storeInsn(final Type type, final int index) {
- mv.visitVarInsn(type.getOpcode(Opcodes.ISTORE), index);
- }
-
- /**
- * Generates the instruction to load 'this' on the stack.
- */
- public void loadThis() {
- if ((access & Opcodes.ACC_STATIC) != 0) {
- throw new IllegalStateException("no 'this' pointer within static method");
- }
- mv.visitVarInsn(Opcodes.ALOAD, 0);
- }
-
- /**
- * Generates the instruction to load the given method argument on the stack.
- *
- * @param arg the index of a method argument.
- */
- public void loadArg(final int arg) {
- loadInsn(argumentTypes[arg], getArgIndex(arg));
- }
-
- /**
- * Generates the instructions to load the given method arguments on the
- * stack.
- *
- * @param arg the index of the first method argument to be loaded.
- * @param count the number of method arguments to be loaded.
- */
- public void loadArgs(final int arg, final int count) {
- int index = getArgIndex(arg);
- for (int i = 0; i < count; ++i) {
- Type t = argumentTypes[arg + i];
- loadInsn(t, index);
- index += t.getSize();
- }
- }
-
- /**
- * Generates the instructions to load all the method arguments on the stack.
- */
- public void loadArgs() {
- loadArgs(0, argumentTypes.length);
- }
-
- /**
- * Generates the instructions to load all the method arguments on the stack,
- * as a single object array.
- */
- public void loadArgArray() {
- push(argumentTypes.length);
- newArray(OBJECT_TYPE);
- for (int i = 0; i < argumentTypes.length; i++) {
- dup();
- push(i);
- loadArg(i);
- box(argumentTypes[i]);
- arrayStore(OBJECT_TYPE);
- }
- }
-
- /**
- * Generates the instruction to store the top stack value in the given
- * method argument.
- *
- * @param arg the index of a method argument.
- */
- public void storeArg(final int arg) {
- storeInsn(argumentTypes[arg], getArgIndex(arg));
- }
-
- // ------------------------------------------------------------------------
- // Instructions to load and store local variables
- // ------------------------------------------------------------------------
-
- /**
- * Creates a new local variable of the given type.
- *
- * @param type the type of the local variable to be created.
- * @return the identifier of the newly created local variable.
- */
- public int newLocal(final Type type) {
- int local = super.newLocal(type.getSize());
- setLocalType(local, type);
- return local;
- }
-
- /**
- * Returns the type of the given local variable.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- * @return the type of the given local variable.
- */
- public Type getLocalType(final int local) {
- return (Type) localTypes.get(local - firstLocal);
- }
-
- /**
- * Sets the current type of the given local variable.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- * @param type the type of the value being stored in the local variable
- */
- private void setLocalType(final int local, final Type type) {
- int index = local - firstLocal;
- while (localTypes.size() < index + 1)
- localTypes.add(null);
- localTypes.set(index, type);
- }
-
- /**
- * Generates the instruction to load the given local variable on the stack.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- */
- public void loadLocal(final int local) {
- loadInsn(getLocalType(local), local);
- }
-
- /**
- * Generates the instruction to load the given local variable on the stack.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- * @param type the type of this local variable.
- */
- public void loadLocal(final int local, final Type type) {
- setLocalType(local, type);
- loadInsn(type, local);
- }
-
- /**
- * Generates the instruction to store the top stack value in the given local
- * variable.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- */
- public void storeLocal(final int local) {
- storeInsn(getLocalType(local), local);
- }
-
- /**
- * Generates the instruction to store the top stack value in the given local
- * variable.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- * @param type the type of this local variable.
- */
- public void storeLocal(final int local, final Type type) {
- setLocalType(local, type);
- storeInsn(type, local);
- }
-
- /**
- * Generates the instruction to load an element from an array.
- *
- * @param type the type of the array element to be loaded.
- */
- public void arrayLoad(final Type type) {
- mv.visitInsn(type.getOpcode(Opcodes.IALOAD));
- }
-
- /**
- * Generates the instruction to store an element in an array.
- *
- * @param type the type of the array element to be stored.
- */
- public void arrayStore(final Type type) {
- mv.visitInsn(type.getOpcode(Opcodes.IASTORE));
- }
-
- // ------------------------------------------------------------------------
- // Instructions to manage the stack
- // ------------------------------------------------------------------------
-
- /**
- * Generates a POP instruction.
- */
- public void pop() {
- mv.visitInsn(Opcodes.POP);
- }
-
- /**
- * Generates a POP2 instruction.
- */
- public void pop2() {
- mv.visitInsn(Opcodes.POP2);
- }
-
- /**
- * Generates a DUP instruction.
- */
- public void dup() {
- mv.visitInsn(Opcodes.DUP);
- }
-
- /**
- * Generates a DUP2 instruction.
- */
- public void dup2() {
- mv.visitInsn(Opcodes.DUP2);
- }
-
- /**
- * Generates a DUP_X1 instruction.
- */
- public void dupX1() {
- mv.visitInsn(Opcodes.DUP_X1);
- }
-
- /**
- * Generates a DUP_X2 instruction.
- */
- public void dupX2() {
- mv.visitInsn(Opcodes.DUP_X2);
- }
-
- /**
- * Generates a DUP2_X1 instruction.
- */
- public void dup2X1() {
- mv.visitInsn(Opcodes.DUP2_X1);
- }
-
- /**
- * Generates a DUP2_X2 instruction.
- */
- public void dup2X2() {
- mv.visitInsn(Opcodes.DUP2_X2);
- }
-
- /**
- * Generates a SWAP instruction.
- */
- public void swap() {
- mv.visitInsn(Opcodes.SWAP);
- }
-
- /**
- * Generates the instructions to swap the top two stack values.
- *
- * @param prev type of the top - 1 stack value.
- * @param type type of the top stack value.
- */
- public void swap(final Type prev, final Type type) {
- if (type.getSize() == 1) {
- if (prev.getSize() == 1) {
- swap(); // same as dupX1(), pop();
- } else {
- dupX2();
- pop();
- }
- } else {
- if (prev.getSize() == 1) {
- dup2X1();
- pop2();
- } else {
- dup2X2();
- pop2();
- }
- }
- }
-
- // ------------------------------------------------------------------------
- // Instructions to do mathematical and logical operations
- // ------------------------------------------------------------------------
-
- /**
- * Generates the instruction to do the specified mathematical or logical
- * operation.
- *
- * @param op a mathematical or logical operation. Must be one of ADD, SUB,
- * MUL, DIV, REM, NEG, SHL, SHR, USHR, AND, OR, XOR.
- * @param type the type of the operand(s) for this operation.
- */
- public void math(final int op, final Type type) {
- mv.visitInsn(type.getOpcode(op));
- }
-
- /**
- * Generates the instructions to compute the bitwise negation of the top
- * stack value.
- */
- public void not() {
- mv.visitInsn(Opcodes.ICONST_1);
- mv.visitInsn(Opcodes.IXOR);
- }
-
- /**
- * Generates the instruction to increment the given local variable.
- *
- * @param local the local variable to be incremented.
- * @param amount the amount by which the local variable must be incremented.
- */
- public void iinc(final int local, final int amount) {
- mv.visitIincInsn(local, amount);
- }
-
- /**
- * Generates the instructions to cast a numerical value from one type to
- * another.
- *
- * @param from the type of the top stack value
- * @param to the type into which this value must be cast.
- */
- public void cast(final Type from, final Type to) {
- if (from != to) {
- if (from == Type.DOUBLE_TYPE) {
- if (to == Type.FLOAT_TYPE) {
- mv.visitInsn(Opcodes.D2F);
- } else if (to == Type.LONG_TYPE) {
- mv.visitInsn(Opcodes.D2L);
- } else {
- mv.visitInsn(Opcodes.D2I);
- cast(Type.INT_TYPE, to);
- }
- } else if (from == Type.FLOAT_TYPE) {
- if (to == Type.DOUBLE_TYPE) {
- mv.visitInsn(Opcodes.F2D);
- } else if (to == Type.LONG_TYPE) {
- mv.visitInsn(Opcodes.F2L);
- } else {
- mv.visitInsn(Opcodes.F2I);
- cast(Type.INT_TYPE, to);
- }
- } else if (from == Type.LONG_TYPE) {
- if (to == Type.DOUBLE_TYPE) {
- mv.visitInsn(Opcodes.L2D);
- } else if (to == Type.FLOAT_TYPE) {
- mv.visitInsn(Opcodes.L2F);
- } else {
- mv.visitInsn(Opcodes.L2I);
- cast(Type.INT_TYPE, to);
- }
- } else {
- if (to == Type.BYTE_TYPE) {
- mv.visitInsn(Opcodes.I2B);
- } else if (to == Type.CHAR_TYPE) {
- mv.visitInsn(Opcodes.I2C);
- } else if (to == Type.DOUBLE_TYPE) {
- mv.visitInsn(Opcodes.I2D);
- } else if (to == Type.FLOAT_TYPE) {
- mv.visitInsn(Opcodes.I2F);
- } else if (to == Type.LONG_TYPE) {
- mv.visitInsn(Opcodes.I2L);
- } else if (to == Type.SHORT_TYPE) {
- mv.visitInsn(Opcodes.I2S);
- }
- }
- }
- }
-
- // ------------------------------------------------------------------------
- // Instructions to do boxing and unboxing operations
- // ------------------------------------------------------------------------
-
- /**
- * Generates the instructions to box the top stack value. This value is
- * replaced by its boxed equivalent on top of the stack.
- *
- * @param type the type of the top stack value.
- */
- public void box(final Type type) {
- if (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY) {
- return;
- }
- if (type == Type.VOID_TYPE) {
- push((String) null);
- } else {
- Type boxed = type;
- switch (type.getSort()) {
- case Type.BYTE:
- boxed = BYTE_TYPE;
- break;
- case Type.BOOLEAN:
- boxed = BOOLEAN_TYPE;
- break;
- case Type.SHORT:
- boxed = SHORT_TYPE;
- break;
- case Type.CHAR:
- boxed = CHARACTER_TYPE;
- break;
- case Type.INT:
- boxed = INTEGER_TYPE;
- break;
- case Type.FLOAT:
- boxed = FLOAT_TYPE;
- break;
- case Type.LONG:
- boxed = LONG_TYPE;
- break;
- case Type.DOUBLE:
- boxed = DOUBLE_TYPE;
- break;
- }
- newInstance(boxed);
- if (type.getSize() == 2) {
- // Pp -> Ppo -> oPpo -> ooPpo -> ooPp -> o
- dupX2();
- dupX2();
- pop();
- } else {
- // p -> po -> opo -> oop -> o
- dupX1();
- swap();
- }
- invokeConstructor(boxed, new Method("<init>",
- Type.VOID_TYPE,
- new Type[] { type }));
- }
- }
-
- /**
- * Generates the instructions to unbox the top stack value. This value is
- * replaced by its unboxed equivalent on top of the stack.
- *
- * @param type the type of the top stack value.
- */
- public void unbox(final Type type) {
- Type t = NUMBER_TYPE;
- Method sig = null;
- switch (type.getSort()) {
- case Type.VOID:
- return;
- case Type.CHAR:
- t = CHARACTER_TYPE;
- sig = CHAR_VALUE;
- break;
- case Type.BOOLEAN:
- t = BOOLEAN_TYPE;
- sig = BOOLEAN_VALUE;
- break;
- case Type.DOUBLE:
- sig = DOUBLE_VALUE;
- break;
- case Type.FLOAT:
- sig = FLOAT_VALUE;
- break;
- case Type.LONG:
- sig = LONG_VALUE;
- break;
- case Type.INT:
- case Type.SHORT:
- case Type.BYTE:
- sig = INT_VALUE;
- }
- if (sig == null) {
- checkCast(type);
- } else {
- checkCast(t);
- invokeVirtual(t, sig);
- }
- }
-
- // ------------------------------------------------------------------------
- // Instructions to jump to other instructions
- // ------------------------------------------------------------------------
-
- /**
- * Creates a new {@link Label}.
- *
- * @return a new {@link Label}.
- */
- public Label newLabel() {
- return new Label();
- }
-
- /**
- * Marks the current code position with the given label.
- *
- * @param label a label.
- */
- public void mark(final Label label) {
- mv.visitLabel(label);
- }
-
- /**
- * Marks the current code position with a new label.
- *
- * @return the label that was created to mark the current code position.
- */
- public Label mark() {
- Label label = new Label();
- mv.visitLabel(label);
- return label;
- }
-
- /**
- * Generates the instructions to jump to a label based on the comparison of
- * the top two stack values.
- *
- * @param type the type of the top two stack values.
- * @param mode how these values must be compared. One of EQ, NE, LT, GE, GT,
- * LE.
- * @param label where to jump if the comparison result is <tt>true</tt>.
- */
- public void ifCmp(final Type type, final int mode, final Label label) {
- int intOp = -1;
- int jumpMode = mode;
- switch (mode) {
- case GE:
- jumpMode = LT;
- break;
- case LE:
- jumpMode = GT;
- break;
- }
- switch (type.getSort()) {
- case Type.LONG:
- mv.visitInsn(Opcodes.LCMP);
- break;
- case Type.DOUBLE:
- mv.visitInsn(Opcodes.DCMPG);
- break;
- case Type.FLOAT:
- mv.visitInsn(Opcodes.FCMPG);
- break;
- case Type.ARRAY:
- case Type.OBJECT:
- switch (mode) {
- case EQ:
- mv.visitJumpInsn(Opcodes.IF_ACMPEQ, label);
- return;
- case NE:
- mv.visitJumpInsn(Opcodes.IF_ACMPNE, label);
- return;
- }
- throw new IllegalArgumentException("Bad comparison for type "
- + type);
- default:
- switch (mode) {
- case EQ:
- intOp = Opcodes.IF_ICMPEQ;
- break;
- case NE:
- intOp = Opcodes.IF_ICMPNE;
- break;
- case GE:
- intOp = Opcodes.IF_ICMPGE;
- break;
- case LT:
- intOp = Opcodes.IF_ICMPLT;
- break;
- case LE:
- intOp = Opcodes.IF_ICMPLE;
- break;
- case GT:
- intOp = Opcodes.IF_ICMPGT;
- break;
- }
- mv.visitJumpInsn(intOp, label);
- return;
- }
- mv.visitJumpInsn(jumpMode, label);
- }
-
- /**
- * Generates the instructions to jump to a label based on the comparison of
- * the top two integer stack values.
- *
- * @param mode how these values must be compared. One of EQ, NE, LT, GE, GT,
- * LE.
- * @param label where to jump if the comparison result is <tt>true</tt>.
- */
- public void ifICmp(final int mode, final Label label) {
- ifCmp(Type.INT_TYPE, mode, label);
- }
-
- /**
- * Generates the instructions to jump to a label based on the comparison of
- * the top integer stack value with zero.
- *
- * @param mode how these values must be compared. One of EQ, NE, LT, GE, GT,
- * LE.
- * @param label where to jump if the comparison result is <tt>true</tt>.
- */
- public void ifZCmp(final int mode, final Label label) {
- mv.visitJumpInsn(mode, label);
- }
-
- /**
- * Generates the instruction to jump to the given label if the top stack
- * value is null.
- *
- * @param label where to jump if the condition is <tt>true</tt>.
- */
- public void ifNull(final Label label) {
- mv.visitJumpInsn(Opcodes.IFNULL, label);
- }
-
- /**
- * Generates the instruction to jump to the given label if the top stack
- * value is not null.
- *
- * @param label where to jump if the condition is <tt>true</tt>.
- */
- public void ifNonNull(final Label label) {
- mv.visitJumpInsn(Opcodes.IFNONNULL, label);
- }
-
- /**
- * Generates the instruction to jump to the given label.
- *
- * @param label where to jump if the condition is <tt>true</tt>.
- */
- public void goTo(final Label label) {
- mv.visitJumpInsn(Opcodes.GOTO, label);
- }
-
- /**
- * Generates a RET instruction.
- *
- * @param local a local variable identifier, as returned by {@link #newLocal
- * newLocal}.
- */
- public void ret(final int local) {
- mv.visitVarInsn(Opcodes.RET, local);
- }
-
- /**
- * Generates the instructions for a switch statement.
- *
- * @param keys the switch case keys.
- * @param generator a generator to generate the code for the switch cases.
- */
- public void tableSwitch(
- final int[] keys,
- final TableSwitchGenerator generator)
- {
- float density;
- if (keys.length == 0) {
- density = 0;
- } else {
- density = (float) keys.length
- / (keys[keys.length - 1] - keys[0] + 1);
- }
- tableSwitch(keys, generator, density >= 0.5f);
- }
-
- /**
- * Generates the instructions for a switch statement.
- *
- * @param keys the switch case keys.
- * @param generator a generator to generate the code for the switch cases.
- * @param useTable <tt>true</tt> to use a TABLESWITCH instruction, or
- * <tt>false</tt> to use a LOOKUPSWITCH instruction.
- */
- public void tableSwitch(
- final int[] keys,
- final TableSwitchGenerator generator,
- final boolean useTable)
- {
- for (int i = 1; i < keys.length; ++i) {
- if (keys[i] < keys[i - 1]) {
- throw new IllegalArgumentException("keys must be sorted ascending");
- }
- }
- Label def = newLabel();
- Label end = newLabel();
- if (keys.length > 0) {
- int len = keys.length;
- int min = keys[0];
- int max = keys[len - 1];
- int range = max - min + 1;
- if (useTable) {
- Label[] labels = new Label[range];
- Arrays.fill(labels, def);
- for (int i = 0; i < len; ++i) {
- labels[keys[i] - min] = newLabel();
- }
- mv.visitTableSwitchInsn(min, max, def, labels);
- for (int i = 0; i < range; ++i) {
- Label label = labels[i];
- if (label != def) {
- mark(label);
- generator.generateCase(i + min, end);
- }
- }
- } else {
- Label[] labels = new Label[len];
- for (int i = 0; i < len; ++i) {
- labels[i] = newLabel();
- }
- mv.visitLookupSwitchInsn(def, keys, labels);
- for (int i = 0; i < len; ++i) {
- mark(labels[i]);
- generator.generateCase(keys[i], end);
- }
- }
- }
- mark(def);
- generator.generateDefault();
- mark(end);
- }
-
- /**
- * Generates the instruction to return the top stack value to the caller.
- */
- public void returnValue() {
- mv.visitInsn(returnType.getOpcode(Opcodes.IRETURN));
- }
-
- // ------------------------------------------------------------------------
- // Instructions to load and store fields
- // ------------------------------------------------------------------------
-
- /**
- * Generates a get field or set field instruction.
- *
- * @param opcode the instruction's opcode.
- * @param ownerType the class in which the field is defined.
- * @param name the name of the field.
- * @param fieldType the type of the field.
- */
- private void fieldInsn(
- final int opcode,
- final Type ownerType,
- final String name,
- final Type fieldType)
- {
- mv.visitFieldInsn(opcode,
- ownerType.getInternalName(),
- name,
- fieldType.getDescriptor());
- }
-
- /**
- * Generates the instruction to push the value of a static field on the
- * stack.
- *
- * @param owner the class in which the field is defined.
- * @param name the name of the field.
- * @param type the type of the field.
- */
- public void getStatic(final Type owner, final String name, final Type type)
- {
- fieldInsn(Opcodes.GETSTATIC, owner, name, type);
- }
-
- /**
- * Generates the instruction to store the top stack value in a static field.
- *
- * @param owner the class in which the field is defined.
- * @param name the name of the field.
- * @param type the type of the field.
- */
- public void putStatic(final Type owner, final String name, final Type type)
- {
- fieldInsn(Opcodes.PUTSTATIC, owner, name, type);
- }
-
- /**
- * Generates the instruction to push the value of a non static field on the
- * stack.
- *
- * @param owner the class in which the field is defined.
- * @param name the name of the field.
- * @param type the type of the field.
- */
- public void getField(final Type owner, final String name, final Type type) {
- fieldInsn(Opcodes.GETFIELD, owner, name, type);
- }
-
- /**
- * Generates the instruction to store the top stack value in a non static
- * field.
- *
- * @param owner the class in which the field is defined.
- * @param name the name of the field.
- * @param type the type of the field.
- */
- public void putField(final Type owner, final String name, final Type type) {
- fieldInsn(Opcodes.PUTFIELD, owner, name, type);
- }
-
- // ------------------------------------------------------------------------
- // Instructions to invoke methods
- // ------------------------------------------------------------------------
-
- /**
- * Generates an invoke method instruction.
- *
- * @param opcode the instruction's opcode.
- * @param type the class in which the method is defined.
- * @param method the method to be invoked.
- */
- private void invokeInsn(
- final int opcode,
- final Type type,
- final Method method)
- {
- String owner = type.getSort() == Type.ARRAY
- ? type.getDescriptor()
- : type.getInternalName();
- mv.visitMethodInsn(opcode,
- owner,
- method.getName(),
- method.getDescriptor());
- }
-
- /**
- * Generates the instruction to invoke a normal method.
- *
- * @param owner the class in which the method is defined.
- * @param method the method to be invoked.
- */
- public void invokeVirtual(final Type owner, final Method method) {
- invokeInsn(Opcodes.INVOKEVIRTUAL, owner, method);
- }
-
- /**
- * Generates the instruction to invoke a constructor.
- *
- * @param type the class in which the constructor is defined.
- * @param method the constructor to be invoked.
- */
- public void invokeConstructor(final Type type, final Method method) {
- invokeInsn(Opcodes.INVOKESPECIAL, type, method);
- }
-
- /**
- * Generates the instruction to invoke a static method.
- *
- * @param owner the class in which the method is defined.
- * @param method the method to be invoked.
- */
- public void invokeStatic(final Type owner, final Method method) {
- invokeInsn(Opcodes.INVOKESTATIC, owner, method);
- }
-
- /**
- * Generates the instruction to invoke an interface method.
- *
- * @param owner the class in which the method is defined.
- * @param method the method to be invoked.
- */
- public void invokeInterface(final Type owner, final Method method) {
- invokeInsn(Opcodes.INVOKEINTERFACE, owner, method);
- }
-
- // ------------------------------------------------------------------------
- // Instructions to create objects and arrays
- // ------------------------------------------------------------------------
-
- /**
- * Generates a type dependent instruction.
- *
- * @param opcode the instruction's opcode.
- * @param type the instruction's operand.
- */
- private void typeInsn(final int opcode, final Type type) {
- String desc;
- if (type.getSort() == Type.ARRAY) {
- desc = type.getDescriptor();
- } else {
- desc = type.getInternalName();
- }
- mv.visitTypeInsn(opcode, desc);
- }
-
- /**
- * Generates the instruction to create a new object.
- *
- * @param type the class of the object to be created.
- */
- public void newInstance(final Type type) {
- typeInsn(Opcodes.NEW, type);
- }
-
- /**
- * Generates the instruction to create a new array.
- *
- * @param type the type of the array elements.
- */
- public void newArray(final Type type) {
- int typ;
- switch (type.getSort()) {
- case Type.BOOLEAN:
- typ = Opcodes.T_BOOLEAN;
- break;
- case Type.CHAR:
- typ = Opcodes.T_CHAR;
- break;
- case Type.BYTE:
- typ = Opcodes.T_BYTE;
- break;
- case Type.SHORT:
- typ = Opcodes.T_SHORT;
- break;
- case Type.INT:
- typ = Opcodes.T_INT;
- break;
- case Type.FLOAT:
- typ = Opcodes.T_FLOAT;
- break;
- case Type.LONG:
- typ = Opcodes.T_LONG;
- break;
- case Type.DOUBLE:
- typ = Opcodes.T_DOUBLE;
- break;
- default:
- typeInsn(Opcodes.ANEWARRAY, type);
- return;
- }
- mv.visitIntInsn(Opcodes.NEWARRAY, typ);
- }
-
- // ------------------------------------------------------------------------
- // Miscelaneous instructions
- // ------------------------------------------------------------------------
-
- /**
- * Generates the instruction to compute the length of an array.
- */
- public void arrayLength() {
- mv.visitInsn(Opcodes.ARRAYLENGTH);
- }
-
- /**
- * Generates the instruction to throw an exception.
- */
- public void throwException() {
- mv.visitInsn(Opcodes.ATHROW);
- }
-
- /**
- * Generates the instructions to create and throw an exception. The
- * exception class must have a constructor with a single String argument.
- *
- * @param type the class of the exception to be thrown.
- * @param msg the detailed message of the exception.
- */
- public void throwException(final Type type, final String msg) {
- newInstance(type);
- dup();
- push(msg);
- invokeConstructor(type, Method.getMethod("void <init> (String)"));
- throwException();
- }
-
- /**
- * Generates the instruction to check that the top stack value is of the
- * given type.
- *
- * @param type a class or interface type.
- */
- public void checkCast(final Type type) {
- if (!type.equals(OBJECT_TYPE)) {
- typeInsn(Opcodes.CHECKCAST, type);
- }
- }
-
- /**
- * Generates the instruction to test if the top stack value is of the given
- * type.
- *
- * @param type a class or interface type.
- */
- public void instanceOf(final Type type) {
- typeInsn(Opcodes.INSTANCEOF, type);
- }
-
- /**
- * Generates the instruction to get the monitor of the top stack value.
- */
- public void monitorEnter() {
- mv.visitInsn(Opcodes.MONITORENTER);
- }
-
- /**
- * Generates the instruction to release the monitor of the top stack value.
- */
- public void monitorExit() {
- mv.visitInsn(Opcodes.MONITOREXIT);
- }
-
- // ------------------------------------------------------------------------
- // Non instructions
- // ------------------------------------------------------------------------
-
- /**
- * Marks the end of the visited method.
- */
- public void endMethod() {
- if ((access & Opcodes.ACC_ABSTRACT) == 0) {
- mv.visitMaxs(0, 0);
- }
- }
-
- /**
- * Marks the start of an exception handler.
- *
- * @param start beginning of the exception handler's scope (inclusive).
- * @param end end of the exception handler's scope (exclusive).
- * @param exception internal name of the type of exceptions handled by the
- * handler.
- */
- public void catchException(
- final Label start,
- final Label end,
- final Type exception)
- {
- mv.visitTryCatchBlock(start, end, mark(), exception.getInternalName());
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/LocalVariablesSorter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/LocalVariablesSorter.java
deleted file mode 100644
index bfc8732..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/LocalVariablesSorter.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link MethodAdapter} that renumbers local variables in their order of
- * appearance. This adapter allows one to easily add new local variables to a
- * method.
- *
- * @author Chris Nokleberg
- * @author Eric Bruneton
- */
-public class LocalVariablesSorter extends MethodAdapter {
-
- /**
- * Mapping from old to new local variable indexes. A local variable at index
- * i of size 1 is remapped to 'mapping[2*i]', while a local variable at
- * index i of size 2 is remapped to 'mapping[2*i+1]'.
- */
- private int[] mapping = new int[40];
-
- protected final int firstLocal;
-
- private int nextLocal;
-
- public LocalVariablesSorter(
- final int access,
- final String desc,
- final MethodVisitor mv)
- {
- super(mv);
- Type[] args = Type.getArgumentTypes(desc);
- nextLocal = ((Opcodes.ACC_STATIC & access) != 0) ? 0 : 1;
- for (int i = 0; i < args.length; i++) {
- nextLocal += args[i].getSize();
- }
- firstLocal = nextLocal;
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- int size;
- switch (opcode) {
- case Opcodes.LLOAD:
- case Opcodes.LSTORE:
- case Opcodes.DLOAD:
- case Opcodes.DSTORE:
- size = 2;
- break;
- default:
- size = 1;
- }
- mv.visitVarInsn(opcode, remap(var, size));
- }
-
- public void visitIincInsn(final int var, final int increment) {
- mv.visitIincInsn(remap(var, 1), increment);
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- mv.visitMaxs(maxStack, nextLocal);
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- int size = "J".equals(desc) || "D".equals(desc) ? 2 : 1;
- mv.visitLocalVariable(name, desc, signature, start, end, remap(index, size));
- }
-
- // -------------
-
- protected int newLocal(final int size) {
- int var = nextLocal;
- nextLocal += size;
- return var;
- }
-
- private int remap(final int var, final int size) {
- if (var < firstLocal) {
- return var;
- }
- int key = 2 * var + size - 1;
- int length = mapping.length;
- if (key >= length) {
- int[] newMapping = new int[Math.max(2 * length, key + 1)];
- System.arraycopy(mapping, 0, newMapping, 0, length);
- mapping = newMapping;
- }
- int value = mapping[key];
- if (value == 0) {
- value = nextLocal + 1;
- mapping[key] = value;
- nextLocal += size;
- }
- return value - 1;
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/Method.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/Method.java
deleted file mode 100644
index c5ce314..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/Method.java
+++ /dev/null
@@ -1,220 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.objectweb.asm.Type;
-
-/**
- * A named method descriptor.
- *
- * @author Juozas Baliuka
- * @author Chris Nokleberg
- * @author Eric Bruneton
- */
-public class Method {
-
- /**
- * The method name.
- */
- private final String name;
-
- /**
- * The method descriptor.
- */
- private final String desc;
-
- /**
- * Maps primitive Java type names to their descriptors.
- */
- private final static Map DESCRIPTORS;
-
- static {
- DESCRIPTORS = new HashMap();
- DESCRIPTORS.put("void", "V");
- DESCRIPTORS.put("byte", "B");
- DESCRIPTORS.put("char", "C");
- DESCRIPTORS.put("double", "D");
- DESCRIPTORS.put("float", "F");
- DESCRIPTORS.put("int", "I");
- DESCRIPTORS.put("long", "J");
- DESCRIPTORS.put("short", "S");
- DESCRIPTORS.put("boolean", "Z");
- }
-
- /**
- * Creates a new {@link Method}.
- *
- * @param name the method's name.
- * @param desc the method's descriptor.
- */
- public Method(final String name, final String desc) {
- this.name = name;
- this.desc = desc;
- }
-
- /**
- * Creates a new {@link Method}.
- *
- * @param name the method's name.
- * @param returnType the method's return type.
- * @param argumentTypes the method's argument types.
- */
- public Method(
- final String name,
- final Type returnType,
- final Type[] argumentTypes)
- {
- this(name, Type.getMethodDescriptor(returnType, argumentTypes));
- }
-
- /**
- * Returns a {@link Method} corresponding to the given Java method
- * declaration.
- *
- * @param method a Java method declaration, without argument names, of the
- * form "returnType name (argumentType1, ... argumentTypeN)", where
- * the types are in plain Java (e.g. "int", "float",
- * "java.util.List", ...).
- * @return a {@link Method} corresponding to the given Java method
- * declaration.
- * @throws IllegalArgumentException if <code>method</code> could not get
- * parsed.
- */
- public static Method getMethod(final String method)
- throws IllegalArgumentException
- {
- int space = method.indexOf(' ');
- int start = method.indexOf('(', space) + 1;
- int end = method.indexOf(')', start);
- if (space == -1 || start == -1 || end == -1) {
- throw new IllegalArgumentException();
- }
- // TODO: Check validity of returnType, methodName and arguments.
- String returnType = method.substring(0, space);
- String methodName = method.substring(space + 1, start - 1).trim();
- StringBuffer sb = new StringBuffer();
- sb.append('(');
- int p;
- do {
- p = method.indexOf(',', start);
- if (p == -1) {
- sb.append(map(method.substring(start, end).trim()));
- } else {
- sb.append(map(method.substring(start, p).trim()));
- start = p + 1;
- }
- } while (p != -1);
- sb.append(')');
- sb.append(map(returnType));
- return new Method(methodName, sb.toString());
- }
-
- private static String map(final String type) {
- if (type.equals("")) {
- return type;
- }
-
- StringBuffer sb = new StringBuffer();
- int index = 0;
- while ((index = type.indexOf("[]", index) + 1) > 0) {
- sb.append('[');
- }
-
- String t = type.substring(0, type.length() - sb.length() * 2);
- String desc = (String) DESCRIPTORS.get(t);
- if (desc != null) {
- sb.append(desc);
- } else {
- sb.append('L');
- if (t.indexOf('.') < 0) {
- sb.append("java/lang/" + t);
- } else {
- sb.append(t.replace('.', '/'));
- }
- sb.append(';');
- }
- return sb.toString();
- }
-
- /**
- * Returns the name of the method described by this object.
- *
- * @return the name of the method described by this object.
- */
- public String getName() {
- return name;
- }
-
- /**
- * Returns the descriptor of the method described by this object.
- *
- * @return the descriptor of the method described by this object.
- */
- public String getDescriptor() {
- return desc;
- }
-
- /**
- * Returns the return type of the method described by this object.
- *
- * @return the return type of the method described by this object.
- */
- public Type getReturnType() {
- return Type.getReturnType(desc);
- }
-
- /**
- * Returns the argument types of the method described by this object.
- *
- * @return the argument types of the method described by this object.
- */
- public Type[] getArgumentTypes() {
- return Type.getArgumentTypes(desc);
- }
-
- public String toString() {
- return name + desc;
- }
-
- public boolean equals(final Object o) {
- if (!(o instanceof Method)) {
- return false;
- }
- Method other = (Method) o;
- return name.equals(other.name) && desc.equals(other.desc);
- }
-
- public int hashCode() {
- return name.hashCode() ^ desc.hashCode();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/SerialVersionUIDAdder.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/SerialVersionUIDAdder.java
deleted file mode 100644
index 3932a01..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/SerialVersionUIDAdder.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.security.MessageDigest;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-
-import org.objectweb.asm.ClassAdapter;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassAdapter} that adds a serial version unique identifier to a
- * class if missing. Here is typical usage of this class:
- *
- * <pre>
- * ClassWriter cw = new ClassWriter(...);
- * ClassVisitor sv = new SerialVersionUIDAdder(cw);
- * ClassVisitor ca = new MyClassAdapter(sv);
- * new ClassReader(orginalClass).accept(ca, false);
- * </pre>
- *
- * The SVUID algorithm can be found <a href=
- * "http://java.sun.com/j2se/1.4.2/docs/guide/serialization/spec/class.html"
- * >http://java.sun.com/j2se/1.4.2/docs/guide/serialization/spec/class.html</a>:
- *
- * <pre>
- * The serialVersionUID is computed using the signature of a stream of bytes
- * that reflect the class definition. The National Institute of Standards and
- * Technology (NIST) Secure Hash Algorithm (SHA-1) is used to compute a
- * signature for the stream. The first two 32-bit quantities are used to form a
- * 64-bit hash. A java.lang.DataOutputStream is used to convert primitive data
- * types to a sequence of bytes. The values input to the stream are defined by
- * the Java Virtual Machine (VM) specification for classes.
- *
- * The sequence of items in the stream is as follows:
- *
- * 1. The class name written using UTF encoding.
- * 2. The class modifiers written as a 32-bit integer.
- * 3. The name of each interface sorted by name written using UTF encoding.
- * 4. For each field of the class sorted by field name (except private static
- * and private transient fields):
- * 1. The name of the field in UTF encoding.
- * 2. The modifiers of the field written as a 32-bit integer.
- * 3. The descriptor of the field in UTF encoding
- * 5. If a class initializer exists, write out the following:
- * 1. The name of the method, &lt;clinit&gt;, in UTF encoding.
- * 2. The modifier of the method, java.lang.reflect.Modifier.STATIC,
- * written as a 32-bit integer.
- * 3. The descriptor of the method, ()V, in UTF encoding.
- * 6. For each non-private constructor sorted by method name and signature:
- * 1. The name of the method, &lt;init&gt;, in UTF encoding.
- * 2. The modifiers of the method written as a 32-bit integer.
- * 3. The descriptor of the method in UTF encoding.
- * 7. For each non-private method sorted by method name and signature:
- * 1. The name of the method in UTF encoding.
- * 2. The modifiers of the method written as a 32-bit integer.
- * 3. The descriptor of the method in UTF encoding.
- * 8. The SHA-1 algorithm is executed on the stream of bytes produced by
- * DataOutputStream and produces five 32-bit values sha[0..4].
- *
- * 9. The hash value is assembled from the first and second 32-bit values of
- * the SHA-1 message digest. If the result of the message digest, the five
- * 32-bit words H0 H1 H2 H3 H4, is in an array of five int values named
- * sha, the hash value would be computed as follows:
- *
- * long hash = ((sha[0] &gt;&gt;&gt; 24) &amp; 0xFF) |
- * ((sha[0] &gt;&gt;&gt; 16) &amp; 0xFF) &lt;&lt; 8 |
- * ((sha[0] &gt;&gt;&gt; 8) &amp; 0xFF) &lt;&lt; 16 |
- * ((sha[0] &gt;&gt;&gt; 0) &amp; 0xFF) &lt;&lt; 24 |
- * ((sha[1] &gt;&gt;&gt; 24) &amp; 0xFF) &lt;&lt; 32 |
- * ((sha[1] &gt;&gt;&gt; 16) &amp; 0xFF) &lt;&lt; 40 |
- * ((sha[1] &gt;&gt;&gt; 8) &amp; 0xFF) &lt;&lt; 48 |
- * ((sha[1] &gt;&gt;&gt; 0) &amp; 0xFF) &lt;&lt; 56;
- * </pre>
- *
- * @author Rajendra Inamdar, Vishal Vishnoi
- */
-public class SerialVersionUIDAdder extends ClassAdapter {
-
- /**
- * Flag that indicates if we need to compute SVUID.
- */
- protected boolean computeSVUID;
-
- /**
- * Set to true if the class already has SVUID.
- */
- protected boolean hasSVUID;
-
- /**
- * Classes access flags.
- */
- protected int access;
-
- /**
- * Internal name of the class
- */
- protected String name;
-
- /**
- * Interfaces implemented by the class.
- */
- protected String[] interfaces;
-
- /**
- * Collection of fields. (except private static and private transient
- * fields)
- */
- protected Collection svuidFields;
-
- /**
- * Set to true if the class has static initializer.
- */
- protected boolean hasStaticInitializer;
-
- /**
- * Collection of non-private constructors.
- */
- protected Collection svuidConstructors;
-
- /**
- * Collection of non-private methods.
- */
- protected Collection svuidMethods;
-
- /**
- * Creates a new {@link SerialVersionUIDAdder}.
- *
- * @param cv a {@link ClassVisitor} to which this visitor will delegate
- * calls.
- */
- public SerialVersionUIDAdder(final ClassVisitor cv) {
- super(cv);
- svuidFields = new ArrayList();
- svuidConstructors = new ArrayList();
- svuidMethods = new ArrayList();
- }
-
- // ------------------------------------------------------------------------
- // Overriden methods
- // ------------------------------------------------------------------------
-
- /*
- * Visit class header and get class name, access , and intefraces
- * informatoin (step 1,2, and 3) for SVUID computation.
- */
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- computeSVUID = (access & Opcodes.ACC_INTERFACE) == 0;
-
- if (computeSVUID) {
- this.name = name;
- this.access = access;
- this.interfaces = interfaces;
- }
-
- super.visit(version, access, name, signature, superName, interfaces);
- }
-
- /*
- * Visit the methods and get constructor and method information (step 5 and
- * 7). Also determince if there is a class initializer (step 6).
- */
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- if (computeSVUID) {
- if (name.equals("<clinit>")) {
- hasStaticInitializer = true;
- }
- /*
- * Remembers non private constructors and methods for SVUID
- * computation For constructor and method modifiers, only the
- * ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC, ACC_FINAL,
- * ACC_SYNCHRONIZED, ACC_NATIVE, ACC_ABSTRACT and ACC_STRICT flags
- * are used.
- */
- int mods = access
- & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE
- | Opcodes.ACC_PROTECTED | Opcodes.ACC_STATIC
- | Opcodes.ACC_FINAL | Opcodes.ACC_SYNCHRONIZED
- | Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT | Opcodes.ACC_STRICT);
-
- // all non private methods
- if ((access & Opcodes.ACC_PRIVATE) == 0) {
- if (name.equals("<init>")) {
- svuidConstructors.add(new Item(name, mods, desc));
- } else if (!name.equals("<clinit>")) {
- svuidMethods.add(new Item(name, mods, desc));
- }
- }
- }
-
- return cv.visitMethod(access, name, desc, signature, exceptions);
- }
-
- /*
- * Gets class field information for step 4 of the alogrithm. Also determines
- * if the class already has a SVUID.
- */
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- if (computeSVUID) {
- if (name.equals("serialVersionUID")) {
- // since the class already has SVUID, we won't be computing it.
- computeSVUID = false;
- hasSVUID = true;
- }
- /*
- * Remember field for SVUID computation For field modifiers, only
- * the ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED, ACC_STATIC,
- * ACC_FINAL, ACC_VOLATILE, and ACC_TRANSIENT flags are used when
- * computing serialVersionUID values.
- */
- int mods = access
- & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PRIVATE
- | Opcodes.ACC_PROTECTED | Opcodes.ACC_STATIC
- | Opcodes.ACC_FINAL | Opcodes.ACC_VOLATILE | Opcodes.ACC_TRANSIENT);
-
- if (((access & Opcodes.ACC_PRIVATE) == 0)
- || ((access & (Opcodes.ACC_STATIC | Opcodes.ACC_TRANSIENT)) == 0))
- {
- svuidFields.add(new Item(name, mods, desc));
- }
- }
-
- return super.visitField(access, name, desc, signature, value);
- }
-
- /*
- * Add the SVUID if class doesn't have one
- */
- public void visitEnd() {
- // compute SVUID and add it to the class
- if (computeSVUID && !hasSVUID) {
- try {
- cv.visitField(Opcodes.ACC_FINAL + Opcodes.ACC_STATIC,
- "serialVersionUID",
- "J",
- null,
- new Long(computeSVUID()));
- } catch (Throwable e) {
- throw new RuntimeException("Error while computing SVUID for "
- + name, e);
- }
- }
-
- super.visitEnd();
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Returns the value of SVUID if the class doesn't have one already. Please
- * note that 0 is returned if the class already has SVUID, thus use
- * <code>isHasSVUID</code> to determine if the class already had an SVUID.
- *
- * @return Returns the serial version UID
- * @throws IOException
- */
- protected long computeSVUID() throws IOException {
- if (hasSVUID) {
- return 0;
- }
-
- ByteArrayOutputStream bos = null;
- DataOutputStream dos = null;
- long svuid = 0;
-
- try {
- bos = new ByteArrayOutputStream();
- dos = new DataOutputStream(bos);
-
- /*
- * 1. The class name written using UTF encoding.
- */
- dos.writeUTF(name.replace('/', '.'));
-
- /*
- * 2. The class modifiers written as a 32-bit integer.
- */
- dos.writeInt(access
- & (Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL
- | Opcodes.ACC_INTERFACE | Opcodes.ACC_ABSTRACT));
-
- /*
- * 3. The name of each interface sorted by name written using UTF
- * encoding.
- */
- Arrays.sort(interfaces);
- for (int i = 0; i < interfaces.length; i++) {
- dos.writeUTF(interfaces[i].replace('/', '.'));
- }
-
- /*
- * 4. For each field of the class sorted by field name (except
- * private static and private transient fields):
- *
- * 1. The name of the field in UTF encoding. 2. The modifiers of the
- * field written as a 32-bit integer. 3. The descriptor of the field
- * in UTF encoding
- *
- * Note that field signatutes are not dot separated. Method and
- * constructor signatures are dot separated. Go figure...
- */
- writeItems(svuidFields, dos, false);
-
- /*
- * 5. If a class initializer exists, write out the following: 1. The
- * name of the method, <clinit>, in UTF encoding. 2. The modifier of
- * the method, java.lang.reflect.Modifier.STATIC, written as a
- * 32-bit integer. 3. The descriptor of the method, ()V, in UTF
- * encoding.
- */
- if (hasStaticInitializer) {
- dos.writeUTF("<clinit>");
- dos.writeInt(Opcodes.ACC_STATIC);
- dos.writeUTF("()V");
- } // if..
-
- /*
- * 6. For each non-private constructor sorted by method name and
- * signature: 1. The name of the method, <init>, in UTF encoding. 2.
- * The modifiers of the method written as a 32-bit integer. 3. The
- * descriptor of the method in UTF encoding.
- */
- writeItems(svuidConstructors, dos, true);
-
- /*
- * 7. For each non-private method sorted by method name and
- * signature: 1. The name of the method in UTF encoding. 2. The
- * modifiers of the method written as a 32-bit integer. 3. The
- * descriptor of the method in UTF encoding.
- */
- writeItems(svuidMethods, dos, true);
-
- dos.flush();
-
- /*
- * 8. The SHA-1 algorithm is executed on the stream of bytes
- * produced by DataOutputStream and produces five 32-bit values
- * sha[0..4].
- */
- byte[] hashBytes = computeSHAdigest(bos.toByteArray());
-
- /*
- * 9. The hash value is assembled from the first and second 32-bit
- * values of the SHA-1 message digest. If the result of the message
- * digest, the five 32-bit words H0 H1 H2 H3 H4, is in an array of
- * five int values named sha, the hash value would be computed as
- * follows:
- *
- * long hash = ((sha[0] >>> 24) & 0xFF) | ((sha[0] >>> 16) & 0xFF) <<
- * 8 | ((sha[0] >>> 8) & 0xFF) << 16 | ((sha[0] >>> 0) & 0xFF) <<
- * 24 | ((sha[1] >>> 24) & 0xFF) << 32 | ((sha[1] >>> 16) & 0xFF) <<
- * 40 | ((sha[1] >>> 8) & 0xFF) << 48 | ((sha[1] >>> 0) & 0xFF) <<
- * 56;
- */
- for (int i = Math.min(hashBytes.length, 8) - 1; i >= 0; i--) {
- svuid = (svuid << 8) | (hashBytes[i] & 0xFF);
- }
- } finally {
- // close the stream (if open)
- if (dos != null) {
- dos.close();
- }
- }
-
- return svuid;
- }
-
- /**
- * Returns the SHA-1 message digest of the given value.
- *
- * @param value the value whose SHA message digest must be computed.
- * @return the SHA-1 message digest of the given value.
- */
- protected byte[] computeSHAdigest(byte[] value) {
- try {
- return MessageDigest.getInstance("SHA").digest(value);
- } catch (Exception e) {
- throw new UnsupportedOperationException(e);
- }
- }
-
- /**
- * Sorts the items in the collection and writes it to the data output stream
- *
- * @param itemCollection collection of items
- * @param dos a <code>DataOutputStream</code> value
- * @param dotted a <code>boolean</code> value
- * @exception IOException if an error occurs
- */
- private void writeItems(
- final Collection itemCollection,
- final DataOutputStream dos,
- final boolean dotted) throws IOException
- {
- int size = itemCollection.size();
- Item items[] = (Item[]) itemCollection.toArray(new Item[size]);
- Arrays.sort(items);
- for (int i = 0; i < size; i++) {
- dos.writeUTF(items[i].name);
- dos.writeInt(items[i].access);
- dos.writeUTF(dotted
- ? items[i].desc.replace('/', '.')
- : items[i].desc);
- }
- }
-
- // ------------------------------------------------------------------------
- // Inner classes
- // ------------------------------------------------------------------------
-
- static class Item implements Comparable {
-
- String name;
-
- int access;
-
- String desc;
-
- Item(final String name, final int access, final String desc) {
- this.name = name;
- this.access = access;
- this.desc = desc;
- }
-
- public int compareTo(final Object o) {
- Item other = (Item) o;
- int retVal = name.compareTo(other.name);
- if (retVal == 0) {
- retVal = desc.compareTo(other.desc);
- }
- return retVal;
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/StaticInitMerger.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/StaticInitMerger.java
deleted file mode 100644
index 2af409e..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/StaticInitMerger.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.ClassAdapter;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassAdapter} that merges clinit methods into a single one.
- *
- * @author Eric Bruneton
- */
-public class StaticInitMerger extends ClassAdapter {
-
- private String name;
-
- private MethodVisitor clinit;
-
- private String prefix;
-
- private int counter;
-
- public StaticInitMerger(final String prefix, final ClassVisitor cv) {
- super(cv);
- this.prefix = prefix;
- }
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- cv.visit(version, access, name, signature, superName, interfaces);
- this.name = name;
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- MethodVisitor mv;
- if (name.equals("<clinit>")) {
- int a = Opcodes.ACC_PRIVATE + Opcodes.ACC_STATIC;
- String n = prefix + counter++;
- mv = cv.visitMethod(a, n, desc, signature, exceptions);
-
- if (clinit == null) {
- clinit = cv.visitMethod(a, name, desc, null, null);
- }
- clinit.visitMethodInsn(Opcodes.INVOKESTATIC, this.name, n, desc);
- } else {
- mv = cv.visitMethod(access, name, desc, signature, exceptions);
- }
- return mv;
- }
-
- public void visitEnd() {
- if (clinit != null) {
- clinit.visitInsn(Opcodes.RETURN);
- clinit.visitMaxs(0, 0);
- }
- cv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/TableSwitchGenerator.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/TableSwitchGenerator.java
deleted file mode 100644
index c90a9ca..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/commons/TableSwitchGenerator.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.commons;
-
-import org.objectweb.asm.Label;
-
-/**
- * A code generator for switch statements.
- *
- * @author Juozas Baliuka
- * @author Chris Nokleberg
- * @author Eric Bruneton
- */
-public interface TableSwitchGenerator {
-
- /**
- * Generates the code for a switch case.
- *
- * @param key the switch case key.
- * @param end a label that corresponds to the end of the switch statement.
- */
- void generateCase(int key, Label end);
-
- /**
- * Generates the code for the default switch case.
- */
- void generateDefault();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java
deleted file mode 100644
index 5bceca1..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/AnnotationConstantsCollector.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Type;
-
-/**
- * An {@link AnnotationVisitor} that collects the {@link Constant}s of the
- * annotations it visits.
- *
- * @author Eric Bruneton
- */
-public class AnnotationConstantsCollector implements AnnotationVisitor {
-
- private AnnotationVisitor av;
-
- private ConstantPool cp;
-
- public AnnotationConstantsCollector(
- final AnnotationVisitor av,
- final ConstantPool cp)
- {
- this.av = av;
- this.cp = cp;
- }
-
- public void visit(final String name, final Object value) {
- if (name != null) {
- cp.newUTF8(name);
- }
- if (value instanceof Byte) {
- cp.newInteger(((Byte) value).byteValue());
- } else if (value instanceof Boolean) {
- cp.newInteger(((Boolean) value).booleanValue() ? 1 : 0);
- } else if (value instanceof Character) {
- cp.newInteger(((Character) value).charValue());
- } else if (value instanceof Short) {
- cp.newInteger(((Short) value).shortValue());
- } else if (value instanceof Type) {
- cp.newUTF8(((Type) value).getDescriptor());
- } else if (value instanceof byte[]) {
- byte[] v = (byte[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newInteger(v[i]);
- }
- } else if (value instanceof boolean[]) {
- boolean[] v = (boolean[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newInteger(v[i] ? 1 : 0);
- }
- } else if (value instanceof short[]) {
- short[] v = (short[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newInteger(v[i]);
- }
- } else if (value instanceof char[]) {
- char[] v = (char[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newInteger(v[i]);
- }
- } else if (value instanceof int[]) {
- int[] v = (int[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newInteger(v[i]);
- }
- } else if (value instanceof long[]) {
- long[] v = (long[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newLong(v[i]);
- }
- } else if (value instanceof float[]) {
- float[] v = (float[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newFloat(v[i]);
- }
- } else if (value instanceof double[]) {
- double[] v = (double[]) value;
- for (int i = 0; i < v.length; i++) {
- cp.newDouble(v[i]);
- }
- } else {
- cp.newConst(value);
- }
- av.visit(name, value);
- }
-
- public void visitEnum(
- final String name,
- final String desc,
- final String value)
- {
- if (name != null) {
- cp.newUTF8(name);
- }
- cp.newUTF8(desc);
- cp.newUTF8(value);
- av.visitEnum(name, desc, value);
- }
-
- public AnnotationVisitor visitAnnotation(
- final String name,
- final String desc)
- {
- if (name != null) {
- cp.newUTF8(name);
- }
- cp.newUTF8(desc);
- return new AnnotationConstantsCollector(av.visitAnnotation(name, desc),
- cp);
- }
-
- public AnnotationVisitor visitArray(final String name) {
- if (name != null) {
- cp.newUTF8(name);
- }
- return new AnnotationConstantsCollector(av.visitArray(name), cp);
- }
-
- public void visitEnd() {
- av.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassConstantsCollector.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassConstantsCollector.java
deleted file mode 100644
index 4a6efe5..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassConstantsCollector.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassAdapter;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassVisitor} that collects the {@link Constant}s of the classes it
- * visits.
- *
- * @author Eric Bruneton
- */
-public class ClassConstantsCollector extends ClassAdapter {
-
- private ConstantPool cp;
-
- public ClassConstantsCollector(final ClassVisitor cv, final ConstantPool cp)
- {
- super(cv);
- this.cp = cp;
- }
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- cp.newUTF8("Deprecated");
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
- cp.newUTF8("Synthetic");
- }
- cp.newClass(name);
- if (signature != null) {
- cp.newUTF8("Signature");
- cp.newUTF8(signature);
- }
- if (superName != null) {
- cp.newClass(superName);
- }
- if (interfaces != null) {
- for (int i = 0; i < interfaces.length; ++i) {
- cp.newClass(interfaces[i]);
- }
- }
- cv.visit(version, access, name, signature, superName, interfaces);
- }
-
- public void visitSource(final String source, final String debug) {
- if (source != null) {
- cp.newUTF8("SourceFile");
- cp.newUTF8(source);
- }
- if (debug != null) {
- cp.newUTF8("SourceDebugExtension");
- }
- cv.visitSource(source, debug);
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- cp.newUTF8("EnclosingMethod");
- cp.newClass(owner);
- if (name != null && desc != null) {
- cp.newNameType(name, desc);
- }
- cv.visitOuterClass(owner, name, desc);
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- cp.newUTF8(desc);
- if (visible) {
- cp.newUTF8("RuntimeVisibleAnnotations");
- } else {
- cp.newUTF8("RuntimeInvisibleAnnotations");
- }
- return new AnnotationConstantsCollector(cv.visitAnnotation(desc,
- visible), cp);
- }
-
- public void visitAttribute(final Attribute attr) {
- // can do nothing
- cv.visitAttribute(attr);
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- cp.newUTF8("InnerClasses");
- if (name != null) {
- cp.newClass(name);
- }
- if (outerName != null) {
- cp.newClass(outerName);
- }
- if (innerName != null) {
- cp.newClass(innerName);
- }
- cv.visitInnerClass(name, outerName, innerName, access);
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
- cp.newUTF8("Synthetic");
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- cp.newUTF8("Deprecated");
- }
- cp.newUTF8(name);
- cp.newUTF8(desc);
- if (signature != null) {
- cp.newUTF8("Signature");
- cp.newUTF8(signature);
- }
- if (value != null) {
- cp.newConst(value);
- }
- return new FieldConstantsCollector(cv.visitField(access,
- name,
- desc,
- signature,
- value), cp);
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
- cp.newUTF8("Synthetic");
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- cp.newUTF8("Deprecated");
- }
- cp.newUTF8(name);
- cp.newUTF8(desc);
- if (signature != null) {
- cp.newUTF8("Signature");
- cp.newUTF8(signature);
- }
- if (exceptions != null) {
- cp.newUTF8("Exceptions");
- for (int i = 0; i < exceptions.length; ++i) {
- cp.newClass(exceptions[i]);
- }
- }
- return new MethodConstantsCollector(cv.visitMethod(access,
- name,
- desc,
- signature,
- exceptions), cp);
- }
-
- public void visitEnd() {
- cv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassOptimizer.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassOptimizer.java
deleted file mode 100644
index b9a1a42..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ClassOptimizer.java
+++ /dev/null
@@ -1,182 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassAdapter;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A {@link ClassAdapter} that renames fields and methods, and removes debug
- * info.
- *
- * @author Eric Bruneton
- */
-public class ClassOptimizer extends ClassAdapter {
-
- private NameMapping mapping;
-
- private String className;
-
- private String pkgName;
-
- public ClassOptimizer(final ClassVisitor cv, final NameMapping mapping) {
- super(cv);
- this.mapping = mapping;
- }
-
- public String getClassName() {
- return className;
- }
-
- // ------------------------------------------------------------------------
- // Overriden methods
- // ------------------------------------------------------------------------
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- className = name;
- pkgName = name.substring(0, name.lastIndexOf('/'));
- cv.visit(version,
- access,
- mapping.map(name),
- null,
- mapping.map(superName),
- interfaces);
- }
-
- public void visitSource(final String source, final String debug) {
- // remove debug info
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- // remove debug info
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- throw new UnsupportedOperationException();
- }
-
- public void visitAttribute(final Attribute attr) {
- // remove non standard attribute
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- // remove debug info
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- String s = className + "." + name;
- if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
- if ((access & Opcodes.ACC_FINAL) != 0
- && (access & Opcodes.ACC_STATIC) != 0 && desc.equals("I"))
- {
- return null;
- }
- if (pkgName.equals("org/objectweb/asm")
- && mapping.map(s).equals(name))
- {
- System.out.println("INFO: " + s + " could be renamed");
- }
- cv.visitField(access,
- mapping.map(s),
- mapping.fix(desc),
- null,
- value);
- } else {
- if (!mapping.map(s).equals(name)) {
- throw new RuntimeException("The public or protected field " + s
- + " must not be renamed.");
- }
- cv.visitField(access, name, desc, null, value);
- }
- return null; // remove debug info
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- String s = className + "." + name + desc;
- if ((access & (Opcodes.ACC_PUBLIC | Opcodes.ACC_PROTECTED)) == 0) {
- if (pkgName.equals("org/objectweb/asm") && !name.startsWith("<")
- && mapping.map(s).equals(name))
- {
- System.out.println("INFO: " + s + " could be renamed");
- }
- return new MethodOptimizer(cv.visitMethod(access,
- mapping.map(s),
- mapping.fix(desc),
- null,
- exceptions), mapping);
- } else {
- if (!mapping.map(s).equals(name)) {
- throw new RuntimeException("The public or protected method "
- + s + " must not be renamed.");
- }
- return new MethodOptimizer(cv.visitMethod(access,
- name,
- desc,
- null,
- exceptions), mapping);
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Constant.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Constant.java
deleted file mode 100644
index c07599d..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Constant.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.ClassWriter;
-
-/**
- * A constant pool item.
- *
- * @author Eric Bruneton
- */
-class Constant {
-
- /**
- * Type of this constant pool item. A single class is used to represent all
- * constant pool item types, in order to minimize the bytecode size of this
- * package. The value of this field is I, J, F, D, S, s, C, T, G, M, or N
- * (for Constant Integer, Long, Float, Double, STR, UTF8, Class, NameType,
- * Fieldref, Methodref, or InterfaceMethodref constant pool items
- * respectively).
- */
- char type;
-
- /**
- * Value of this item, for an integer item.
- */
- int intVal;
-
- /**
- * Value of this item, for a long item.
- */
- long longVal;
-
- /**
- * Value of this item, for a float item.
- */
- float floatVal;
-
- /**
- * Value of this item, for a double item.
- */
- double doubleVal;
-
- /**
- * First part of the value of this item, for items that do not hold a
- * primitive value.
- */
- String strVal1;
-
- /**
- * Second part of the value of this item, for items that do not hold a
- * primitive value.
- */
- String strVal2;
-
- /**
- * Third part of the value of this item, for items that do not hold a
- * primitive value.
- */
- String strVal3;
-
- /**
- * The hash code value of this constant pool item.
- */
- int hashCode;
-
- public Constant() {
- }
-
- public Constant(final Constant i) {
- type = i.type;
- intVal = i.intVal;
- longVal = i.longVal;
- floatVal = i.floatVal;
- doubleVal = i.doubleVal;
- strVal1 = i.strVal1;
- strVal2 = i.strVal2;
- strVal3 = i.strVal3;
- hashCode = i.hashCode;
- }
-
- /**
- * Sets this item to an integer item.
- *
- * @param intVal the value of this item.
- */
- void set(final int intVal) {
- this.type = 'I';
- this.intVal = intVal;
- this.hashCode = 0x7FFFFFFF & (type + intVal);
- }
-
- /**
- * Sets this item to a long item.
- *
- * @param longVal the value of this item.
- */
- void set(final long longVal) {
- this.type = 'J';
- this.longVal = longVal;
- this.hashCode = 0x7FFFFFFF & (type + (int) longVal);
- }
-
- /**
- * Sets this item to a float item.
- *
- * @param floatVal the value of this item.
- */
- void set(final float floatVal) {
- this.type = 'F';
- this.floatVal = floatVal;
- this.hashCode = 0x7FFFFFFF & (type + (int) floatVal);
- }
-
- /**
- * Sets this item to a double item.
- *
- * @param doubleVal the value of this item.
- */
- void set(final double doubleVal) {
- this.type = 'D';
- this.doubleVal = doubleVal;
- this.hashCode = 0x7FFFFFFF & (type + (int) doubleVal);
- }
-
- /**
- * Sets this item to an item that do not hold a primitive value.
- *
- * @param type the type of this item.
- * @param strVal1 first part of the value of this item.
- * @param strVal2 second part of the value of this item.
- * @param strVal3 third part of the value of this item.
- */
- void set(
- final char type,
- final String strVal1,
- final String strVal2,
- final String strVal3)
- {
- this.type = type;
- this.strVal1 = strVal1;
- this.strVal2 = strVal2;
- this.strVal3 = strVal3;
- switch (type) {
- case 's':
- case 'S':
- case 'C':
- hashCode = 0x7FFFFFFF & (type + strVal1.hashCode());
- return;
- case 'T':
- hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
- * strVal2.hashCode());
- return;
- // case 'G':
- // case 'M':
- // case 'N':
- default:
- hashCode = 0x7FFFFFFF & (type + strVal1.hashCode()
- * strVal2.hashCode() * strVal3.hashCode());
- }
- }
-
- void write(final ClassWriter cw) {
- switch (type) {
- case 'I':
- cw.newConst(new Integer(intVal));
- break;
- case 'J':
- cw.newConst(new Long(longVal));
- break;
- case 'F':
- cw.newConst(new Float(floatVal));
- break;
- case 'D':
- cw.newConst(new Double(doubleVal));
- break;
- case 'S':
- cw.newConst(strVal1);
- break;
- case 's':
- cw.newUTF8(strVal1);
- break;
- case 'C':
- cw.newClass(strVal1);
- break;
- case 'T':
- cw.newNameType(strVal1, strVal2);
- break;
- case 'G':
- cw.newField(strVal1, strVal2, strVal3);
- break;
- case 'M':
- cw.newMethod(strVal1, strVal2, strVal3, false);
- break;
- case 'N':
- cw.newMethod(strVal1, strVal2, strVal3, true);
- break;
- }
- }
-
- public boolean equals(final Object o) {
- if (!(o instanceof Constant)) {
- return false;
- }
- Constant c = (Constant) o;
- if (c.type == type) {
- switch (type) {
- case 'I':
- return c.intVal == intVal;
- case 'J':
- return c.longVal == longVal;
- case 'F':
- return c.floatVal == floatVal;
- case 'D':
- return c.doubleVal == doubleVal;
- case 's':
- case 'S':
- case 'C':
- return c.strVal1.equals(strVal1);
- case 'T':
- return c.strVal1.equals(strVal1)
- && c.strVal2.equals(strVal2);
- // case 'G':
- // case 'M':
- // case 'N':
- default:
- return c.strVal1.equals(strVal1)
- && c.strVal2.equals(strVal2)
- && c.strVal3.equals(strVal3);
- }
- }
- return false;
- }
-
- public int hashCode() {
- return hashCode;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ConstantPool.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ConstantPool.java
deleted file mode 100644
index dff17de..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/ConstantPool.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import java.util.HashMap;
-
-import org.objectweb.asm.Type;
-
-/**
- * A constant pool.
- *
- * @author Eric Bruneton
- */
-public class ConstantPool extends HashMap {
-
- private Constant key1 = new Constant();
-
- private Constant key2 = new Constant();
-
- private Constant key3 = new Constant();
-
- public Constant newInteger(final int value) {
- key1.set(value);
- Constant result = get(key1);
- if (result == null) {
- result = new Constant(key1);
- put(result);
- }
- return result;
- }
-
- public Constant newFloat(final float value) {
- key1.set(value);
- Constant result = get(key1);
- if (result == null) {
- result = new Constant(key1);
- put(result);
- }
- return result;
- }
-
- public Constant newLong(final long value) {
- key1.set(value);
- Constant result = get(key1);
- if (result == null) {
- result = new Constant(key1);
- put(result);
- }
- return result;
- }
-
- public Constant newDouble(final double value) {
- key1.set(value);
- Constant result = get(key1);
- if (result == null) {
- result = new Constant(key1);
- put(result);
- }
- return result;
- }
-
- public Constant newUTF8(final String value) {
- key1.set('s', value, null, null);
- Constant result = get(key1);
- if (result == null) {
- result = new Constant(key1);
- put(result);
- }
- return result;
- }
-
- private Constant newString(final String value) {
- key2.set('S', value, null, null);
- Constant result = get(key2);
- if (result == null) {
- newUTF8(value);
- result = new Constant(key2);
- put(result);
- }
- return result;
- }
-
- public Constant newClass(final String value) {
- key2.set('C', value, null, null);
- Constant result = get(key2);
- if (result == null) {
- newUTF8(value);
- result = new Constant(key2);
- put(result);
- }
- return result;
- }
-
- public Constant newConst(final Object cst) {
- if (cst instanceof Integer) {
- int val = ((Integer) cst).intValue();
- return newInteger(val);
- } else if (cst instanceof Float) {
- float val = ((Float) cst).floatValue();
- return newFloat(val);
- } else if (cst instanceof Long) {
- long val = ((Long) cst).longValue();
- return newLong(val);
- } else if (cst instanceof Double) {
- double val = ((Double) cst).doubleValue();
- return newDouble(val);
- } else if (cst instanceof String) {
- return newString((String) cst);
- } else if (cst instanceof Type) {
- Type t = (Type) cst;
- return newClass(t.getSort() == Type.OBJECT
- ? t.getInternalName()
- : t.getDescriptor());
- } else {
- throw new IllegalArgumentException("value " + cst);
- }
- }
-
- public Constant newField(
- final String owner,
- final String name,
- final String desc)
- {
- key3.set('G', owner, name, desc);
- Constant result = get(key3);
- if (result == null) {
- newClass(owner);
- newNameType(name, desc);
- result = new Constant(key3);
- put(result);
- }
- return result;
- }
-
- public Constant newMethod(
- final String owner,
- final String name,
- final String desc,
- final boolean itf)
- {
- key3.set(itf ? 'N' : 'M', owner, name, desc);
- Constant result = get(key3);
- if (result == null) {
- newClass(owner);
- newNameType(name, desc);
- result = new Constant(key3);
- put(result);
- }
- return result;
- }
-
- public Constant newNameType(final String name, final String desc) {
- key2.set('T', name, desc, null);
- Constant result = get(key2);
- if (result == null) {
- newUTF8(name);
- newUTF8(desc);
- result = new Constant(key2);
- put(result);
- }
- return result;
- }
-
- private Constant get(final Constant key) {
- return (Constant) get((Object) key);
- }
-
- private void put(final Constant cst) {
- put(cst, cst);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/FieldConstantsCollector.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/FieldConstantsCollector.java
deleted file mode 100644
index ac5d0d3..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/FieldConstantsCollector.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-
-/**
- * A {@link FieldVisitor} that collects the {@link Constant}s of the fields it
- * visits.
- *
- * @author Eric Bruneton
- */
-public class FieldConstantsCollector implements FieldVisitor {
-
- private FieldVisitor fv;
-
- private ConstantPool cp;
-
- public FieldConstantsCollector(final FieldVisitor fv, final ConstantPool cp)
- {
- this.fv = fv;
- this.cp = cp;
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- cp.newUTF8(desc);
- if (visible) {
- cp.newUTF8("RuntimeVisibleAnnotations");
- } else {
- cp.newUTF8("RuntimeInvisibleAnnotations");
- }
- return new AnnotationConstantsCollector(fv.visitAnnotation(desc,
- visible), cp);
- }
-
- public void visitAttribute(final Attribute attr) {
- // can do nothing
- fv.visitAttribute(attr);
- }
-
- public void visitEnd() {
- fv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/JarOptimizer.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/JarOptimizer.java
deleted file mode 100644
index 994b458..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/JarOptimizer.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Enumeration;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipOutputStream;
-
-/**
- * A Jar file optimizer.
- *
- * @author Eric Bruneton
- */
-public class JarOptimizer {
-
- public static void main(final String[] args) throws IOException {
- File f = new File(args[0]);
- optimize(f);
- }
-
- static void optimize(final File f) throws IOException {
- if (f.isDirectory()) {
- File[] files = f.listFiles();
- for (int i = 0; i < files.length; ++i) {
- optimize(files[i]);
- }
- } else if (f.getName().endsWith(".jar")) {
- File g = new File(f.getParentFile(), f.getName() + ".new");
- ZipFile zf = new ZipFile(f);
- ZipOutputStream out = new ZipOutputStream(new FileOutputStream(g));
- Enumeration e = zf.entries();
- byte[] buf = new byte[10000];
- while (e.hasMoreElements()) {
- ZipEntry ze = (ZipEntry) e.nextElement();
- if (ze.isDirectory()) {
- continue;
- }
- out.putNextEntry(ze);
- InputStream is = zf.getInputStream(ze);
- int n;
- do {
- n = is.read(buf, 0, buf.length);
- if (n != -1) {
- out.write(buf, 0, n);
- }
- } while (n != -1);
- out.closeEntry();
- }
- out.close();
- zf.close();
- f.delete();
- g.renameTo(f);
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodConstantsCollector.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodConstantsCollector.java
deleted file mode 100644
index 33d82e9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodConstantsCollector.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * An {@link MethodVisitor} that collects the {@link Constant}s of the methods
- * it visits.
- *
- * @author Eric Bruneton
- */
-public class MethodConstantsCollector extends MethodAdapter {
-
- private ConstantPool cp;
-
- public MethodConstantsCollector(
- final MethodVisitor mv,
- final ConstantPool cp)
- {
- super(mv);
- this.cp = cp;
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- cp.newUTF8("AnnotationDefault");
- return new AnnotationConstantsCollector(mv.visitAnnotationDefault(), cp);
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- cp.newUTF8(desc);
- if (visible) {
- cp.newUTF8("RuntimeVisibleAnnotations");
- } else {
- cp.newUTF8("RuntimeInvisibleAnnotations");
- }
- return new AnnotationConstantsCollector(mv.visitAnnotation(desc,
- visible), cp);
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- cp.newUTF8(desc);
- if (visible) {
- cp.newUTF8("RuntimeVisibleParameterAnnotations");
- } else {
- cp.newUTF8("RuntimeInvisibleParameterAnnotations");
- }
- return new AnnotationConstantsCollector(mv.visitParameterAnnotation(parameter,
- desc,
- visible),
- cp);
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- cp.newClass(desc);
- mv.visitTypeInsn(opcode, desc);
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- cp.newField(owner, name, desc);
- mv.visitFieldInsn(opcode, owner, name, desc);
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- boolean itf = opcode == Opcodes.INVOKEINTERFACE;
- cp.newMethod(owner, name, desc, itf);
- mv.visitMethodInsn(opcode, owner, name, desc);
- }
-
- public void visitLdcInsn(final Object cst) {
- cp.newConst(cst);
- mv.visitLdcInsn(cst);
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- cp.newClass(desc);
- mv.visitMultiANewArrayInsn(desc, dims);
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- if (type != null) {
- cp.newClass(type);
- }
- mv.visitTryCatchBlock(start, end, handler, type);
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- if (signature != null) {
- cp.newUTF8("LocalVariableTypeTable");
- cp.newUTF8(name);
- cp.newUTF8(signature);
- }
- cp.newUTF8("LocalVariableTable");
- cp.newUTF8(name);
- cp.newUTF8(desc);
- mv.visitLocalVariable(name, desc, signature, start, end, index);
- }
-
- public void visitLineNumber(final int line, final Label start) {
- cp.newUTF8("LineNumberTable");
- mv.visitLineNumber(line, start);
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- cp.newUTF8("Code");
- mv.visitMaxs(maxStack, maxLocals);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodOptimizer.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodOptimizer.java
deleted file mode 100644
index ea29274..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/MethodOptimizer.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A {@link MethodAdapter} that renames fields and methods, and removes debug
- * info.
- *
- * @author Eric Bruneton
- */
-public class MethodOptimizer extends MethodAdapter {
-
- private NameMapping mapping;
-
- public MethodOptimizer(final MethodVisitor mv, final NameMapping mapping) {
- super(mv);
- this.mapping = mapping;
- }
-
- // ------------------------------------------------------------------------
- // Overriden methods
- // ------------------------------------------------------------------------
-
- public AnnotationVisitor visitAnnotationDefault() {
- throw new UnsupportedOperationException();
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- throw new UnsupportedOperationException();
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- mv.visitTypeInsn(opcode, desc.startsWith("[")
- ? mapping.fix(desc)
- : mapping.map(desc));
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- mv.visitFieldInsn(opcode, mapping.map(owner), mapping.map(owner + "."
- + name), mapping.fix(desc));
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- mv.visitMethodInsn(opcode, mapping.map(owner), mapping.map(owner + "."
- + name + desc), mapping.fix(desc));
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- // remove debug info
- }
-
- public void visitLineNumber(final int line, final Label start) {
- // remove debug info
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/NameMapping.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/NameMapping.java
deleted file mode 100644
index 77a856b..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/NameMapping.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-
-import org.objectweb.asm.Type;
-
-/**
- * A mapping from names to names, used to rename classes, fields and methods.
- *
- * @author Eric Bruneton
- */
-public class NameMapping extends Properties {
-
- public final Set unused;
-
- public NameMapping(final String file) throws IOException {
- load(new FileInputStream(file));
- unused = new HashSet(keySet());
- }
-
- public String map(final String name) {
- String s = (String) get(name);
- if (s == null) {
- int p = name.indexOf('.');
- if (p != -1) {
- int q = name.indexOf('(');
- if (q != -1) {
- s = name.substring(p + 1, q);
- } else {
- s = name.substring(p + 1);
- }
- } else {
- s = name;
- }
- } else {
- unused.remove(name);
- }
- return s;
- }
-
- public String fix(final String desc) {
- if (desc.startsWith("(")) {
- Type[] arguments = Type.getArgumentTypes(desc);
- Type result = Type.getReturnType(desc);
- for (int i = 0; i < arguments.length; ++i) {
- arguments[i] = fix(arguments[i]);
- }
- result = fix(result);
- return Type.getMethodDescriptor(result, arguments);
- } else {
- return fix(Type.getType(desc)).getDescriptor();
- }
- }
-
- private Type fix(final Type t) {
- if (t.getSort() == Type.OBJECT) {
- return Type.getType("L" + map(t.getInternalName()) + ";");
- } else if (t.getSort() == Type.ARRAY) {
- String s = fix(t.getElementType()).getDescriptor();
- for (int i = 0; i < t.getDimensions(); ++i) {
- s = "[" + s;
- }
- return Type.getType(s);
- } else {
- return t;
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Shrinker.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Shrinker.java
deleted file mode 100644
index 86da307..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/Shrinker.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.optimizer;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.TreeSet;
-
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassWriter;
-
-/**
- * A class file shrinker utility.
- *
- * @author Eric Bruneton
- */
-public class Shrinker {
-
- public static void main(final String[] args) throws IOException {
- NameMapping mapping = new NameMapping(args[0]);
- File f = new File(args[1]);
- File d = new File(args[2]);
- optimize(f, d, mapping);
- Iterator i = mapping.unused.iterator();
- while (i.hasNext()) {
- System.out.println("INFO: unused mapping " + i.next());
- }
- }
-
- static void optimize(final File f, final File d, final NameMapping mapping)
- throws IOException
- {
- if (f.isDirectory()) {
- File[] files = f.listFiles();
- for (int i = 0; i < files.length; ++i) {
- optimize(files[i], d, mapping);
- }
- } else if (f.getName().endsWith(".class")) {
- ConstantPool cp = new ConstantPool();
- ClassReader cr = new ClassReader(new FileInputStream(f));
- ClassWriter cw = new ClassWriter(false);
- ClassConstantsCollector ccc = new ClassConstantsCollector(cw, cp);
- ClassOptimizer co = new ClassOptimizer(ccc, mapping);
- cr.accept(co, true);
-
- Set constants = new TreeSet(new ConstantComparator());
- constants.addAll(cp.values());
-
- cr = new ClassReader(cw.toByteArray());
- cw = new ClassWriter(false);
- Iterator i = constants.iterator();
- while (i.hasNext()) {
- Constant c = (Constant) i.next();
- c.write(cw);
- }
- cr.accept(cw, true);
-
- String n = mapping.map(co.getClassName());
- File g = new File(d, n + ".class");
- if (!g.exists() || g.lastModified() < f.lastModified()) {
- g.getParentFile().mkdirs();
- OutputStream os = new FileOutputStream(g);
- os.write(cw.toByteArray());
- os.close();
- }
- }
- }
-
- static class ConstantComparator implements Comparator {
-
- public int compare(final Object o1, final Object o2) {
- Constant c1 = (Constant) o1;
- Constant c2 = (Constant) o2;
- int d = getSort(c1) - getSort(c2);
- if (d == 0) {
- switch (c1.type) {
- case 'I':
- return new Integer(c1.intVal).compareTo(new Integer(c2.intVal));
- case 'J':
- return new Long(c1.longVal).compareTo(new Long(c2.longVal));
- case 'F':
- return new Float(c1.floatVal).compareTo(new Float(c2.floatVal));
- case 'D':
- return new Double(c1.doubleVal).compareTo(new Double(c2.doubleVal));
- case 's':
- case 'S':
- case 'C':
- return c1.strVal1.compareTo(c2.strVal1);
- case 'T':
- d = c1.strVal1.compareTo(c2.strVal1);
- if (d == 0) {
- d = c1.strVal2.compareTo(c2.strVal2);
- }
- break;
- default:
- d = c1.strVal1.compareTo(c2.strVal1);
- if (d == 0) {
- d = c1.strVal2.compareTo(c2.strVal2);
- if (d == 0) {
- d = c1.strVal3.compareTo(c2.strVal3);
- }
- }
- }
- }
- return d;
- }
-
- private int getSort(Constant c) {
- switch (c.type) {
- case 'I':
- return 0;
- case 'J':
- return 1;
- case 'F':
- return 2;
- case 'D':
- return 3;
- case 's':
- return 4;
- case 'S':
- return 5;
- case 'C':
- return 6;
- case 'T':
- return 7;
- case 'G':
- return 8;
- case 'M':
- return 9;
- default:
- return 10;
- }
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/shrink.properties b/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/shrink.properties
deleted file mode 100644
index 868780b..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/optimizer/shrink.properties
+++ /dev/null
@@ -1,225 +0,0 @@
-# class mappings
-
-#org/objectweb/asm/Edge=org/objectweb/asm/a
-#org/objectweb/asm/Item=org/objectweb/asm/b
-#org/objectweb/asm/FieldWriter=org/objectweb/asm/c
-#org/objectweb/asm/MethodWriter=org/objectweb/asm/d
-#org/objectweb/asm/AnnotationWriter=org/objectweb/asm/e
-
-# field mappings
-
-org/objectweb/asm/AnnotationWriter.cw=a
-org/objectweb/asm/AnnotationWriter.size=b
-org/objectweb/asm/AnnotationWriter.named=c
-org/objectweb/asm/AnnotationWriter.bv=d
-org/objectweb/asm/AnnotationWriter.parent=e
-org/objectweb/asm/AnnotationWriter.offset=f
-org/objectweb/asm/AnnotationWriter.next=g
-org/objectweb/asm/AnnotationWriter.prev=h
-
-org/objectweb/asm/Attribute.next=a
-org/objectweb/asm/Attribute.value=b
-
-org/objectweb/asm/ByteVector.data=a
-org/objectweb/asm/ByteVector.length=b
-
-org/objectweb/asm/ClassReader.items=a
-org/objectweb/asm/ClassReader.strings=c
-org/objectweb/asm/ClassReader.maxStringLength=d
-#org/objectweb/asm/ClassReader.header=e
-
-org/objectweb/asm/ClassWriter.TYPE=a
-org/objectweb/asm/ClassWriter.version=b
-org/objectweb/asm/ClassWriter.index=c
-org/objectweb/asm/ClassWriter.pool=d
-org/objectweb/asm/ClassWriter.items=e
-org/objectweb/asm/ClassWriter.threshold=f
-org/objectweb/asm/ClassWriter.key=g
-org/objectweb/asm/ClassWriter.key2=h
-org/objectweb/asm/ClassWriter.key3=i
-org/objectweb/asm/ClassWriter.access=j
-org/objectweb/asm/ClassWriter.name=k
-org/objectweb/asm/ClassWriter.signature=l
-org/objectweb/asm/ClassWriter.superName=m
-org/objectweb/asm/ClassWriter.interfaceCount=n
-org/objectweb/asm/ClassWriter.interfaces=o
-org/objectweb/asm/ClassWriter.sourceFile=p
-org/objectweb/asm/ClassWriter.sourceDebug=q
-org/objectweb/asm/ClassWriter.enclosingMethodOwner=r
-org/objectweb/asm/ClassWriter.enclosingMethod=s
-org/objectweb/asm/ClassWriter.anns=t
-org/objectweb/asm/ClassWriter.ianns=u
-org/objectweb/asm/ClassWriter.attrs=v
-org/objectweb/asm/ClassWriter.innerClassesCount=w
-org/objectweb/asm/ClassWriter.innerClasses=x
-org/objectweb/asm/ClassWriter.firstField=y
-org/objectweb/asm/ClassWriter.lastField=z
-org/objectweb/asm/ClassWriter.firstMethod=A
-org/objectweb/asm/ClassWriter.lastMethod=B
-org/objectweb/asm/ClassWriter.computeMaxs=C
-org/objectweb/asm/ClassWriter.cr=D
-
-org/objectweb/asm/Edge.stackSize=a
-org/objectweb/asm/Edge.successor=b
-org/objectweb/asm/Edge.next=c
-
-org/objectweb/asm/Handler.start=a
-org/objectweb/asm/Handler.end=b
-org/objectweb/asm/Handler.handler=c
-org/objectweb/asm/Handler.desc=d
-org/objectweb/asm/Handler.type=e
-org/objectweb/asm/Handler.next=f
-
-org/objectweb/asm/FieldWriter.next=a
-org/objectweb/asm/FieldWriter.cw=b
-org/objectweb/asm/FieldWriter.access=c
-org/objectweb/asm/FieldWriter.name=d
-org/objectweb/asm/FieldWriter.desc=e
-org/objectweb/asm/FieldWriter.signature=f
-org/objectweb/asm/FieldWriter.value=g
-org/objectweb/asm/FieldWriter.anns=h
-org/objectweb/asm/FieldWriter.ianns=i
-org/objectweb/asm/FieldWriter.attrs=j
-
-org/objectweb/asm/Item.index=a
-org/objectweb/asm/Item.type=b
-org/objectweb/asm/Item.intVal=c
-org/objectweb/asm/Item.longVal=d
-org/objectweb/asm/Item.floatVal=e
-org/objectweb/asm/Item.doubleVal=f
-org/objectweb/asm/Item.strVal1=g
-org/objectweb/asm/Item.strVal2=h
-org/objectweb/asm/Item.strVal3=i
-org/objectweb/asm/Item.hashCode=j
-org/objectweb/asm/Item.next=k
-
-org/objectweb/asm/Label.resolved=a
-org/objectweb/asm/Label.position=b
-org/objectweb/asm/Label.resized=c
-org/objectweb/asm/Label.referenceCount=d
-org/objectweb/asm/Label.srcAndRefPositions=e
-org/objectweb/asm/Label.beginStackSize=f
-org/objectweb/asm/Label.maxStackSize=g
-org/objectweb/asm/Label.successors=h
-org/objectweb/asm/Label.next=i
-org/objectweb/asm/Label.pushed=j
-org/objectweb/asm/Label.line=k
-
-org/objectweb/asm/MethodWriter.next=a
-org/objectweb/asm/MethodWriter.cw=b
-org/objectweb/asm/MethodWriter.access=c
-org/objectweb/asm/MethodWriter.name=d
-org/objectweb/asm/MethodWriter.desc=e
-org/objectweb/asm/MethodWriter.descriptor=f
-org/objectweb/asm/MethodWriter.signature=g
-org/objectweb/asm/MethodWriter.exceptionCount=h
-org/objectweb/asm/MethodWriter.exceptions=i
-org/objectweb/asm/MethodWriter.annd=j
-org/objectweb/asm/MethodWriter.anns=k
-org/objectweb/asm/MethodWriter.ianns=l
-org/objectweb/asm/MethodWriter.panns=m
-org/objectweb/asm/MethodWriter.ipanns=n
-org/objectweb/asm/MethodWriter.attrs=o
-org/objectweb/asm/MethodWriter.code=p
-org/objectweb/asm/MethodWriter.maxStack=q
-org/objectweb/asm/MethodWriter.maxLocals=r
-org/objectweb/asm/MethodWriter.catchCount=s
-org/objectweb/asm/MethodWriter.catchTable=t
-org/objectweb/asm/MethodWriter.localVarCount=u
-org/objectweb/asm/MethodWriter.localVar=v
-org/objectweb/asm/MethodWriter.localVarTypeCount=w
-org/objectweb/asm/MethodWriter.localVarType=x
-org/objectweb/asm/MethodWriter.lineNumberCount=y
-org/objectweb/asm/MethodWriter.lineNumber=z
-org/objectweb/asm/MethodWriter.cattrs=A
-org/objectweb/asm/MethodWriter.resize=B
-org/objectweb/asm/MethodWriter.computeMaxs=C
-org/objectweb/asm/MethodWriter.stackSize=D
-org/objectweb/asm/MethodWriter.maxStackSize=E
-org/objectweb/asm/MethodWriter.currentBlock=F
-org/objectweb/asm/MethodWriter.blockStack=G
-org/objectweb/asm/MethodWriter.SIZE=H
-org/objectweb/asm/MethodWriter.classReaderOffset=I
-org/objectweb/asm/MethodWriter.classReaderLength=J
-org/objectweb/asm/MethodWriter.lastHandler=K
-
-org/objectweb/asm/Type.sort=a
-org/objectweb/asm/Type.buf=b
-org/objectweb/asm/Type.off=c
-org/objectweb/asm/Type.len=d
-
-org/objectweb/asm/signature/SignatureReader.signature=a
-
-org/objectweb/asm/signature/SignatureWriter.buf=a
-org/objectweb/asm/signature/SignatureWriter.hasFormals=b
-org/objectweb/asm/signature/SignatureWriter.hasParameters=c
-org/objectweb/asm/signature/SignatureWriter.argumentStack=d
-
-# method mappings
-
-org/objectweb/asm/AnnotationWriter.getSize()I=a
-org/objectweb/asm/AnnotationWriter.put([Lorg/objectweb/asm/AnnotationWriter;Lorg/objectweb/asm/ByteVector;)V=a
-org/objectweb/asm/AnnotationWriter.put(Lorg/objectweb/asm/ByteVector;)V=a
-
-org/objectweb/asm/Attribute.getCount()I=a
-org/objectweb/asm/Attribute.getSize(Lorg/objectweb/asm/ClassWriter;[BIII)I=a
-org/objectweb/asm/Attribute.put(Lorg/objectweb/asm/ClassWriter;[BIIILorg/objectweb/asm/ByteVector;)V=a
-
-org/objectweb/asm/ByteVector.enlarge(I)V=a
-org/objectweb/asm/ByteVector.put11(II)Lorg/objectweb/asm/ByteVector;=a
-org/objectweb/asm/ByteVector.put12(II)Lorg/objectweb/asm/ByteVector;=b
-
-org/objectweb/asm/ClassReader.copyPool(Lorg/objectweb/asm/ClassWriter;)V=a
-org/objectweb/asm/ClassReader.readAnnotationValue(I[CLjava/lang/String;Lorg/objectweb/asm/AnnotationVisitor;)I=a
-org/objectweb/asm/ClassReader.readAnnotationValues(I[CLorg/objectweb/asm/AnnotationVisitor;)I=a
-org/objectweb/asm/ClassReader.readAttribute([Lorg/objectweb/asm/Attribute;Ljava/lang/String;II[CI[Lorg/objectweb/asm/Label;)Lorg/objectweb/asm/Attribute;=a
-org/objectweb/asm/ClassReader.readClass(Ljava/io/InputStream;)[B=a
-org/objectweb/asm/ClassReader.readParameterAnnotations(I[CZLorg/objectweb/asm/MethodVisitor;)V=a
-org/objectweb/asm/ClassReader.readUTF(II[C)Ljava/lang/String;=a
-
-org/objectweb/asm/ClassWriter.get(Lorg/objectweb/asm/Item;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newClassItem(Ljava/lang/String;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newConstItem(Ljava/lang/Object;)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newDouble(D)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newFloat(F)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newInteger(I)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newLong(J)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newMethodItem(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)Lorg/objectweb/asm/Item;=a
-org/objectweb/asm/ClassWriter.newString(Ljava/lang/String;)Lorg/objectweb/asm/Item;=b
-org/objectweb/asm/ClassWriter.put122(III)V=a
-org/objectweb/asm/ClassWriter.put(Lorg/objectweb/asm/Item;)V=b
-
-org/objectweb/asm/FieldWriter.getSize()I=a
-org/objectweb/asm/FieldWriter.put(Lorg/objectweb/asm/ByteVector;)V=a
-
-org/objectweb/asm/Item.isEqualTo(Lorg/objectweb/asm/Item;)Z=a
-org/objectweb/asm/Item.set(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V=a
-org/objectweb/asm/Item.set(D)V=a
-org/objectweb/asm/Item.set(F)V=a
-org/objectweb/asm/Item.set(I)V=a
-org/objectweb/asm/Item.set(J)V=a
-
-org/objectweb/asm/Label.addReference(II)V=a
-org/objectweb/asm/Label.put(Lorg/objectweb/asm/MethodWriter;Lorg/objectweb/asm/ByteVector;IZ)V=a
-org/objectweb/asm/Label.resolve(Lorg/objectweb/asm/MethodWriter;I[B)Z=a
-
-org/objectweb/asm/MethodWriter.addSuccessor(ILorg/objectweb/asm/Label;)V=a
-org/objectweb/asm/MethodWriter.getArgumentsAndReturnSizes(Ljava/lang/String;)I=a
-org/objectweb/asm/MethodWriter.getNewOffset([I[III)I=a
-org/objectweb/asm/MethodWriter.getSize()I=a
-org/objectweb/asm/MethodWriter.put(Lorg/objectweb/asm/ByteVector;)V=a
-org/objectweb/asm/MethodWriter.readInt([BI)I=a
-org/objectweb/asm/MethodWriter.readShort([BI)S=b
-org/objectweb/asm/MethodWriter.readUnsignedShort([BI)I=c
-org/objectweb/asm/MethodWriter.resizeInstructions([I[II)[I=a
-org/objectweb/asm/MethodWriter.writeShort([BII)V=a
-org/objectweb/asm/MethodWriter.getNewOffset([I[ILorg/objectweb/asm/Label;)V=a
-
-org/objectweb/asm/Type.getType([CI)Lorg/objectweb/asm/Type;=a
-org/objectweb/asm/Type.getDescriptor(Ljava/lang/StringBuffer;)V=a
-org/objectweb/asm/Type.getDescriptor(Ljava/lang/StringBuffer;Ljava/lang/Class;)V=a
-
-org/objectweb/asm/signature/SignatureReader.parseType(Ljava/lang/String;ILorg/objectweb/asm/signature/SignatureVisitor;)I=a
-
-org/objectweb/asm/signature/SignatureWriter.endFormals()V=a
-org/objectweb/asm/signature/SignatureWriter.endArguments()V=b
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureReader.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureReader.java
deleted file mode 100644
index a2f31f3..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureReader.java
+++ /dev/null
@@ -1,233 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.signature;
-
-/**
- * A type signature parser to make a signature visitor visit an existing
- * signature.
- *
- * @author Thomas Hallgren
- * @author Eric Bruneton
- */
-public class SignatureReader {
-
- /**
- * The signature to be read.
- */
- private final String signature;
-
- /**
- * Constructs a {@link SignatureReader} for the given signature.
- *
- * @param signature A <i>ClassSignature</i>, <i>MethodTypeSignature</i>,
- * or <i>FieldTypeSignature</i>.
- */
- public SignatureReader(final String signature) {
- this.signature = signature;
- }
-
- /**
- * Makes the given visitor visit the signature of this
- * {@link SignatureReader}. This signature is the one specified in the
- * constructor (see {@link #SignatureReader(String) SignatureReader}). This
- * method is intended to be called on a {@link SignatureReader} that was
- * created using a <i>ClassSignature</i> (such as the
- * <code>signature</code> parameter of the
- * {@link org.objectweb.asm.ClassVisitor#visit ClassVisitor.visit} method)
- * or a <i>MethodTypeSignature</i> (such as the <code>signature</code>
- * parameter of the
- * {@link org.objectweb.asm.ClassVisitor#visitMethod ClassVisitor.visitMethod}
- * method).
- *
- * @param v the visitor that must visit this signature.
- */
- public void accept(final SignatureVisitor v) {
- String signature = this.signature;
- int len = signature.length();
- int pos;
- char c;
-
- if (signature.charAt(0) == '<') {
- pos = 2;
- do {
- int end = signature.indexOf(':', pos);
- v.visitFormalTypeParameter(signature.substring(pos - 1, end));
- pos = end + 1;
-
- c = signature.charAt(pos);
- if (c == 'L' || c == '[' || c == 'T') {
- pos = parseType(signature, pos, v.visitClassBound());
- }
-
- for (;;) {
- if ((c = signature.charAt(pos++)) == ':') {
- pos = parseType(signature, pos, v.visitInterfaceBound());
- } else {
- break;
- }
- }
- } while (c != '>');
- } else {
- pos = 0;
- }
-
- if (signature.charAt(pos) == '(') {
- pos = pos + 1;
- while (signature.charAt(pos) != ')') {
- pos = parseType(signature, pos, v.visitParameterType());
- }
- pos = parseType(signature, pos + 1, v.visitReturnType());
- while (pos < len) {
- pos = parseType(signature, pos + 1, v.visitExceptionType());
- }
- } else {
- pos = parseType(signature, pos, v.visitSuperclass());
- while (pos < len) {
- pos = parseType(signature, pos, v.visitInterface());
- }
- }
- }
-
- /**
- * Makes the given visitor visit the signature of this
- * {@link SignatureReader}. This signature is the one specified in the
- * constructor (see {@link #SignatureReader(String) SignatureReader}). This
- * method is intended to be called on a {@link SignatureReader} that was
- * created using a <i>FieldTypeSignature</i>, such as the
- * <code>signature</code> parameter of the
- * {@link org.objectweb.asm.ClassVisitor#visitField
- * ClassVisitor.visitField} or {@link
- * org.objectweb.asm.MethodVisitor#visitLocalVariable
- * MethodVisitor.visitLocalVariable} methods.
- *
- * @param v the visitor that must visit this signature.
- */
- public void acceptType(final SignatureVisitor v) {
- parseType(this.signature, 0, v);
- }
-
- /**
- * Parses a field type signature and makes the given visitor visit it.
- *
- * @param signature a string containing the signature that must be parsed.
- * @param pos index of the first character of the signature to parsed.
- * @param v the visitor that must visit this signature.
- * @return the index of the first character after the parsed signature.
- */
- private static int parseType(
- final String signature,
- int pos,
- final SignatureVisitor v)
- {
- char c;
- int start, end;
- boolean visited, inner;
- String name;
-
- switch (c = signature.charAt(pos++)) {
- case 'Z':
- case 'C':
- case 'B':
- case 'S':
- case 'I':
- case 'F':
- case 'J':
- case 'D':
- case 'V':
- v.visitBaseType(c);
- return pos;
-
- case '[':
- return parseType(signature, pos, v.visitArrayType());
-
- case 'T':
- end = signature.indexOf(';', pos);
- v.visitTypeVariable(signature.substring(pos, end));
- return end + 1;
-
- default: // case 'L':
- start = pos;
- visited = false;
- inner = false;
- for (;;) {
- switch (c = signature.charAt(pos++)) {
- case '.':
- case ';':
- if (!visited) {
- name = signature.substring(start, pos - 1);
- if (inner) {
- v.visitInnerClassType(name);
- } else {
- v.visitClassType(name);
- }
- }
- if (c == ';') {
- v.visitEnd();
- return pos;
- }
- start = pos;
- visited = false;
- inner = true;
- break;
-
- case '<':
- name = signature.substring(start, pos - 1);
- if (inner) {
- v.visitInnerClassType(name);
- } else {
- v.visitClassType(name);
- }
- visited = true;
- top: for (;;) {
- switch (c = signature.charAt(pos)) {
- case '>':
- break top;
- case '*':
- ++pos;
- v.visitTypeArgument();
- break;
- case '+':
- case '-':
- pos = parseType(signature,
- pos + 1,
- v.visitTypeArgument(c));
- break;
- default:
- pos = parseType(signature,
- pos,
- v.visitTypeArgument('='));
- break;
- }
- }
- }
- }
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureVisitor.java
deleted file mode 100644
index 46df8c9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureVisitor.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.signature;
-
-/**
- * A visitor to visit a generic signature. The methods of this interface must be
- * called in one of the three following orders (the last one is the only valid
- * order for a {@link SignatureVisitor} that is returned by a method of this
- * interface): <ul> <li><i>ClassSignature</i> = (
- * <tt>visitFormalTypeParameter</tt>
- * <tt>visitClassBound</tt>?
- * <tt>visitInterfaceBound</tt>* )* ( <tt>visitSuperClass</tt>
- * <tt>visitInterface</tt>* )</li>
- * <li><i>MethodSignature</i> = ( <tt>visitFormalTypeParameter</tt>
- * <tt>visitClassBound</tt>?
- * <tt>visitInterfaceBound</tt>* )* ( <tt>visitParameterType</tt>*
- * <tt>visitReturnType</tt>
- * <tt>visitExceptionType</tt>* )</li> <li><i>TypeSignature</i> =
- * <tt>visitBaseType</tt> | <tt>visitTypeVariable</tt> |
- * <tt>visitArrayType</tt> | (
- * <tt>visitClassType</tt> <tt>visitTypeArgument</tt>* (
- * <tt>visitInnerClassType</tt> <tt>visitTypeArgument</tt>* )*
- * <tt>visitEnd</tt> ) )</li> </ul>
- *
- * @author Thomas Hallgren
- * @author Eric Bruneton
- */
-public interface SignatureVisitor {
-
- /**
- * Wildcard for an "extends" type argument.
- */
- char EXTENDS = '+';
-
- /**
- * Wildcard for a "super" type argument.
- */
- char SUPER = '-';
-
- /**
- * Wildcard for a normal type argument.
- */
- char INSTANCEOF = '=';
-
- /**
- * Visits a formal type parameter.
- *
- * @param name the name of the formal parameter.
- */
- void visitFormalTypeParameter(String name);
-
- /**
- * Visits the class bound of the last visited formal type parameter.
- *
- * @return a non null visitor to visit the signature of the class bound.
- */
- SignatureVisitor visitClassBound();
-
- /**
- * Visits an interface bound of the last visited formal type parameter.
- *
- * @return a non null visitor to visit the signature of the interface bound.
- */
- SignatureVisitor visitInterfaceBound();
-
- /**
- * Visits the type of the super class.
- *
- * @return a non null visitor to visit the signature of the super class
- * type.
- */
- SignatureVisitor visitSuperclass();
-
- /**
- * Visits the type of an interface implemented by the class.
- *
- * @return a non null visitor to visit the signature of the interface type.
- */
- SignatureVisitor visitInterface();
-
- /**
- * Visits the type of a method parameter.
- *
- * @return a non null visitor to visit the signature of the parameter type.
- */
- SignatureVisitor visitParameterType();
-
- /**
- * Visits the return type of the method.
- *
- * @return a non null visitor to visit the signature of the return type.
- */
- SignatureVisitor visitReturnType();
-
- /**
- * Visits the type of a method exception.
- *
- * @return a non null visitor to visit the signature of the exception type.
- */
- SignatureVisitor visitExceptionType();
-
- /**
- * Visits a signature corresponding to a primitive type.
- *
- * @param descriptor the descriptor of the primitive type, or 'V' for
- * <tt>void</tt>.
- */
- void visitBaseType(char descriptor);
-
- /**
- * Visits a signature corresponding to a type variable.
- *
- * @param name the name of the type variable.
- */
- void visitTypeVariable(String name);
-
- /**
- * Visits a signature corresponding to an array type.
- *
- * @return a non null visitor to visit the signature of the array element
- * type.
- */
- SignatureVisitor visitArrayType();
-
- /**
- * Starts the visit of a signature corresponding to a class or interface
- * type.
- *
- * @param name the internal name of the class or interface.
- */
- void visitClassType(String name);
-
- /**
- * Visits an inner class.
- *
- * @param name the local name of the inner class in its enclosing class.
- */
- void visitInnerClassType(String name);
-
- /**
- * Visits an unbounded type argument of the last visited class or inner
- * class type.
- */
- void visitTypeArgument();
-
- /**
- * Visits a type argument of the last visited class or inner class type.
- *
- * @param wildcard '+', '-' or '='.
- * @return a non null visitor to visit the signature of the type argument.
- */
- SignatureVisitor visitTypeArgument(char wildcard);
-
- /**
- * Ends the visit of a signature corresponding to a class or interface type.
- */
- void visitEnd();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureWriter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureWriter.java
deleted file mode 100644
index 833d688..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/signature/SignatureWriter.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.signature;
-
-/**
- * A signature visitor that generates signatures in string format.
- *
- * @author Thomas Hallgren
- * @author Eric Bruneton
- */
-public class SignatureWriter implements SignatureVisitor {
-
- /**
- * Buffer used to construct the signature.
- */
- private final StringBuffer buf = new StringBuffer();
-
- /**
- * Indicates if the signature contains formal type parameters.
- */
- private boolean hasFormals;
-
- /**
- * Indicates if the signature contains method parameter types.
- */
- private boolean hasParameters;
-
- /**
- * Stack used to keep track of class types that have arguments. Each element
- * of this stack is a boolean encoded in one bit. The top of the stack is
- * the lowest order bit. Pushing false = *2, pushing true = *2+1, popping =
- * /2.
- */
- private int argumentStack;
-
- /**
- * Constructs a new {@link SignatureWriter} object.
- */
- public SignatureWriter() {
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the SignatureVisitor interface
- // ------------------------------------------------------------------------
-
- public void visitFormalTypeParameter(String name) {
- if (!hasFormals) {
- hasFormals = true;
- buf.append('<');
- }
- buf.append(name);
- buf.append(':');
- }
-
- public SignatureVisitor visitClassBound() {
- return this;
- }
-
- public SignatureVisitor visitInterfaceBound() {
- buf.append(':');
- return this;
- }
-
- public SignatureVisitor visitSuperclass() {
- endFormals();
- return this;
- }
-
- public SignatureVisitor visitInterface() {
- return this;
- }
-
- public SignatureVisitor visitParameterType() {
- endFormals();
- if (!hasParameters) {
- hasParameters = true;
- buf.append('(');
- }
- return this;
- }
-
- public SignatureVisitor visitReturnType() {
- endFormals();
- if (!hasParameters) {
- buf.append('(');
- }
- buf.append(')');
- return this;
- }
-
- public SignatureVisitor visitExceptionType() {
- buf.append('^');
- return this;
- }
-
- public void visitBaseType(char descriptor) {
- buf.append(descriptor);
- }
-
- public void visitTypeVariable(String name) {
- buf.append('T');
- buf.append(name);
- buf.append(';');
- }
-
- public SignatureVisitor visitArrayType() {
- buf.append('[');
- return this;
- }
-
- public void visitClassType(String name) {
- buf.append('L');
- buf.append(name);
- argumentStack *= 2;
- }
-
- public void visitInnerClassType(String name) {
- endArguments();
- buf.append('.');
- buf.append(name);
- argumentStack *= 2;
- }
-
- public void visitTypeArgument() {
- if (argumentStack % 2 == 0) {
- ++argumentStack;
- buf.append('<');
- }
- buf.append('*');
- }
-
- public SignatureVisitor visitTypeArgument(char wildcard) {
- if (argumentStack % 2 == 0) {
- ++argumentStack;
- buf.append('<');
- }
- if (wildcard != '=') {
- buf.append(wildcard);
- }
- return this;
- }
-
- public void visitEnd() {
- endArguments();
- buf.append(';');
- }
-
- /**
- * Returns the signature that was built by this signature writer.
- *
- * @return the signature that was built by this signature writer.
- */
- public String toString() {
- return buf.toString();
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Ends the formal type parameters section of the signature.
- */
- private void endFormals() {
- if (hasFormals) {
- hasFormals = false;
- buf.append('>');
- }
- }
-
- /**
- * Ends the type arguments of a class or inner class type.
- */
- private void endArguments() {
- if (argumentStack % 2 == 1) {
- buf.append('>');
- }
- argumentStack /= 2;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AbstractInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AbstractInsnNode.java
deleted file mode 100644
index e0009da..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AbstractInsnNode.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a bytecode instruction.
- *
- * @author Eric Bruneton
- */
-public abstract class AbstractInsnNode {
-
- /**
- * The type of {@link InsnNode} instructions.
- */
- public final static int INSN = 0;
-
- /**
- * The type of {@link IntInsnNode} instructions.
- */
- public final static int INT_INSN = 1;
-
- /**
- * The type of {@link VarInsnNode} instructions.
- */
- public final static int VAR_INSN = 2;
-
- /**
- * The type of {@link TypeInsnNode} instructions.
- */
- public final static int TYPE_INSN = 3;
-
- /**
- * The type of {@link FieldInsnNode} instructions.
- */
- public final static int FIELD_INSN = 4;
-
- /**
- * The type of {@link MethodInsnNode} instructions.
- */
- public final static int METHOD_INSN = 5;
-
- /**
- * The type of {@link JumpInsnNode} instructions.
- */
- public final static int JUMP_INSN = 6;
-
- /**
- * The type of {@link LabelNode} "instructions".
- */
- public final static int LABEL = 7;
-
- /**
- * The type of {@link LdcInsnNode} instructions.
- */
- public final static int LDC_INSN = 8;
-
- /**
- * The type of {@link IincInsnNode} instructions.
- */
- public final static int IINC_INSN = 9;
-
- /**
- * The type of {@link TableSwitchInsnNode} instructions.
- */
- public final static int TABLESWITCH_INSN = 10;
-
- /**
- * The type of {@link LookupSwitchInsnNode} instructions.
- */
- public final static int LOOKUPSWITCH_INSN = 11;
-
- /**
- * The type of {@link MultiANewArrayInsnNode} instructions.
- */
- public final static int MULTIANEWARRAY_INSN = 12;
-
- /**
- * The opcode of this instruction.
- */
- protected int opcode;
-
- /**
- * Constructs a new {@link AbstractInsnNode}.
- *
- * @param opcode the opcode of the instruction to be constructed.
- */
- protected AbstractInsnNode(final int opcode) {
- this.opcode = opcode;
- }
-
- /**
- * Returns the opcode of this instruction.
- *
- * @return the opcode of this instruction.
- */
- public int getOpcode() {
- return opcode;
- }
-
- /**
- * Returns the type of this instruction.
- *
- * @return the type of this instruction, i.e. one the constants defined in
- * this class.
- */
- public abstract int getType();
-
- /**
- * Makes the given code visitor visit this instruction.
- *
- * @param cv a code visitor.
- */
- public abstract void accept(final MethodVisitor cv);
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AnnotationNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AnnotationNode.java
deleted file mode 100644
index c9c1cb9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/AnnotationNode.java
+++ /dev/null
@@ -1,187 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-
-/**
- * A node that represents an annotationn.
- *
- * @author Eric Bruneton
- */
-public class AnnotationNode implements AnnotationVisitor {
-
- /**
- * The class descriptor of the annotation class.
- */
- public String desc;
-
- /**
- * The name value pairs of this annotation. Each name value pair is stored
- * as two consecutive elements in the list. The name is a {@link String},
- * and the value may be a {@link Byte}, {@link Boolean}, {@link Character},
- * {@link Short}, {@link Integer}, {@link Long}, {@link Float},
- * {@link Double}, {@link String} or {@link org.objectweb.asm.Type}, or an
- * two elements String array (for enumeration values), a
- * {@link AnnotationNode}, or a {@link List} of values of one of the
- * preceding types. The list may be <tt>null</tt> if there is no name
- * value pair.
- */
- public List values;
-
- /**
- * Constructs a new {@link AnnotationNode}.
- *
- * @param desc the class descriptor of the annotation class.
- */
- public AnnotationNode(final String desc) {
- this.desc = desc;
- }
-
- /**
- * Constructs a new {@link AnnotationNode} to visit an array value.
- *
- * @param values where the visited values must be stored.
- */
- AnnotationNode(final List values) {
- this.values = values;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the AnnotationVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(final String name, final Object value) {
- if (values == null) {
- values = new ArrayList(this.desc != null ? 2 : 1);
- }
- if (this.desc != null) {
- values.add(name);
- }
- values.add(value);
- }
-
- public void visitEnum(
- final String name,
- final String desc,
- final String value)
- {
- if (values == null) {
- values = new ArrayList(this.desc != null ? 2 : 1);
- }
- if (this.desc != null) {
- values.add(name);
- }
- values.add(new String[] { desc, value });
- }
-
- public AnnotationVisitor visitAnnotation(
- final String name,
- final String desc)
- {
- if (values == null) {
- values = new ArrayList(this.desc != null ? 2 : 1);
- }
- if (this.desc != null) {
- values.add(name);
- }
- AnnotationNode annotation = new AnnotationNode(desc);
- values.add(annotation);
- return annotation;
- }
-
- public AnnotationVisitor visitArray(final String name) {
- if (values == null) {
- values = new ArrayList(this.desc != null ? 2 : 1);
- }
- if (this.desc != null) {
- values.add(name);
- }
- List array = new ArrayList();
- values.add(array);
- return new AnnotationNode(array);
- }
-
- public void visitEnd() {
- }
-
- // ------------------------------------------------------------------------
- // Accept methods
- // ------------------------------------------------------------------------
-
- /**
- * Makes the given visitor visit this annotation.
- *
- * @param av an annotation visitor.
- */
- public void accept(final AnnotationVisitor av) {
- if (values != null) {
- for (int i = 0; i < values.size(); i += 2) {
- String name = (String) values.get(i);
- Object value = values.get(i + 1);
- accept(av, name, value);
- }
- }
- av.visitEnd();
- }
-
- /**
- * Makes the given visitor visit a given annotation value.
- *
- * @param av an annotation visitor.
- * @param name the value name.
- * @param value the actual value.
- */
- static void accept(
- final AnnotationVisitor av,
- final String name,
- final Object value)
- {
- if (value instanceof String[]) {
- String[] typeconst = (String[]) value;
- av.visitEnum(name, typeconst[0], typeconst[1]);
- } else if (value instanceof AnnotationNode) {
- AnnotationNode an = (AnnotationNode) value;
- an.accept(av.visitAnnotation(name, an.desc));
- } else if (value instanceof List) {
- AnnotationVisitor v = av.visitArray(name);
- List array = (List) value;
- for (int j = 0; j < array.size(); ++j) {
- accept(v, null, array.get(j));
- }
- v.visitEnd();
- } else {
- av.visit(name, value);
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/ClassNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/ClassNode.java
deleted file mode 100644
index 85134e3..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/ClassNode.java
+++ /dev/null
@@ -1,283 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.FieldVisitor;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * A node that represents a class.
- *
- * @author Eric Bruneton
- */
-public class ClassNode extends MemberNode implements ClassVisitor {
-
- /**
- * The class version.
- */
- public int version;
-
- /**
- * The class's access flags (see {@link org.objectweb.asm.Opcodes}). This
- * field also indicates if the class is deprecated.
- */
- public int access;
-
- /**
- * The internal name of the class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- */
- public String name;
-
- /**
- * The signature of the class. Mayt be <tt>null</tt>.
- */
- public String signature;
-
- /**
- * The internal of name of the super class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}). For
- * interfaces, the super class is {@link Object}. May be <tt>null</tt>,
- * but only for the {@link Object} class.
- */
- public String superName;
-
- /**
- * The internal names of the class's interfaces (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}). This
- * list is a list of {@link String} objects.
- */
- public List interfaces;
-
- /**
- * The name of the source file from which this class was compiled. May be
- * <tt>null</tt>.
- */
- public String sourceFile;
-
- /**
- * Debug information to compute the correspondance between source and
- * compiled elements of the class. May be <tt>null</tt>.
- */
- public String sourceDebug;
-
- /**
- * The internal name of the enclosing class of the class. May be
- * <tt>null</tt>.
- */
- public String outerClass;
-
- /**
- * The name of the method that contains the class, or <tt>null</tt> if the
- * class is not enclosed in a method.
- */
- public String outerMethod;
-
- /**
- * The descriptor of the method that contains the class, or <tt>null</tt>
- * if the class is not enclosed in a method.
- */
- public String outerMethodDesc;
-
- /**
- * Informations about the inner classes of this class. This list is a list
- * of {@link InnerClassNode} objects.
- *
- * @associates org.objectweb.asm.tree.InnerClassNode
- */
- public List innerClasses;
-
- /**
- * The fields of this class. This list is a list of {@link FieldNode}
- * objects.
- *
- * @associates org.objectweb.asm.tree.FieldNode
- */
- public List fields;
-
- /**
- * The methods of this class. This list is a list of {@link MethodNode}
- * objects.
- *
- * @associates org.objectweb.asm.tree.MethodNode
- */
- public List methods;
-
- /**
- * Constructs a new {@link ClassNode}.
- */
- public ClassNode() {
- this.interfaces = new ArrayList();
- this.innerClasses = new ArrayList();
- this.fields = new ArrayList();
- this.methods = new ArrayList();
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the ClassVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- this.version = version;
- this.access = access;
- this.name = name;
- this.signature = signature;
- this.superName = superName;
- if (interfaces != null) {
- this.interfaces.addAll(Arrays.asList(interfaces));
- }
- }
-
- public void visitSource(final String file, final String debug) {
- sourceFile = file;
- sourceDebug = debug;
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- outerClass = owner;
- outerMethod = name;
- outerMethodDesc = desc;
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- InnerClassNode icn = new InnerClassNode(name,
- outerName,
- innerName,
- access);
- innerClasses.add(icn);
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- FieldNode fn = new FieldNode(access, name, desc, signature, value);
- fields.add(fn);
- return fn;
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- MethodNode mn = new MethodNode(access,
- name,
- desc,
- signature,
- exceptions);
- methods.add(mn);
- return mn;
- }
-
- public void visitEnd() {
- }
-
- // ------------------------------------------------------------------------
- // Accept method
- // ------------------------------------------------------------------------
-
- /**
- * Makes the given class visitor visit this class.
- *
- * @param cv a class visitor.
- */
- public void accept(final ClassVisitor cv) {
- // visits header
- String[] interfaces = new String[this.interfaces.size()];
- this.interfaces.toArray(interfaces);
- cv.visit(version, access, name, signature, superName, interfaces);
- // visits source
- if (sourceFile != null || sourceDebug != null) {
- cv.visitSource(sourceFile, sourceDebug);
- }
- // visits outer class
- if (outerClass != null) {
- cv.visitOuterClass(outerClass, outerMethod, outerMethodDesc);
- }
- // visits attributes
- int i, n;
- n = visibleAnnotations == null ? 0 : visibleAnnotations.size();
- for (i = 0; i < n; ++i) {
- AnnotationNode an = (AnnotationNode) visibleAnnotations.get(i);
- an.accept(cv.visitAnnotation(an.desc, true));
- }
- n = invisibleAnnotations == null ? 0 : invisibleAnnotations.size();
- for (i = 0; i < n; ++i) {
- AnnotationNode an = (AnnotationNode) invisibleAnnotations.get(i);
- an.accept(cv.visitAnnotation(an.desc, false));
- }
- n = attrs == null ? 0 : attrs.size();
- for (i = 0; i < n; ++i) {
- cv.visitAttribute((Attribute) attrs.get(i));
- }
- // visits inner classes
- for (i = 0; i < innerClasses.size(); ++i) {
- ((InnerClassNode) innerClasses.get(i)).accept(cv);
- }
- // visits fields
- for (i = 0; i < fields.size(); ++i) {
- ((FieldNode) fields.get(i)).accept(cv);
- }
- // visits methods
- for (i = 0; i < methods.size(); ++i) {
- ((MethodNode) methods.get(i)).accept(cv);
- }
- // visits end
- cv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldInsnNode.java
deleted file mode 100644
index 2ae5388..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldInsnNode.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a field instruction. A field instruction is an
- * instruction that loads or stores the value of a field of an object.
- *
- * @author Eric Bruneton
- */
-public class FieldInsnNode extends AbstractInsnNode {
-
- /**
- * The internal name of the field's owner class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- */
- public String owner;
-
- /**
- * The field's name.
- */
- public String name;
-
- /**
- * The field's descriptor (see {@link org.objectweb.asm.Type}).
- */
- public String desc;
-
- /**
- * Constructs a new {@link FieldInsnNode}.
- *
- * @param opcode the opcode of the type instruction to be constructed. This
- * opcode must be GETSTATIC, PUTSTATIC, GETFIELD or PUTFIELD.
- * @param owner the internal name of the field's owner class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- * @param name the field's name.
- * @param desc the field's descriptor (see {@link org.objectweb.asm.Type}).
- */
- public FieldInsnNode(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- super(opcode);
- this.owner = owner;
- this.name = name;
- this.desc = desc;
- }
-
- /**
- * Sets the opcode of this instruction.
- *
- * @param opcode the new instruction opcode. This opcode must be GETSTATIC,
- * PUTSTATIC, GETFIELD or PUTFIELD.
- */
- public void setOpcode(final int opcode) {
- this.opcode = opcode;
- }
-
- public void accept(final MethodVisitor cv) {
- cv.visitFieldInsn(opcode, owner, name, desc);
- }
-
- public int getType() {
- return FIELD_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldNode.java
deleted file mode 100644
index 8a97b1c..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/FieldNode.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-
-/**
- * A node that represents a field.
- *
- * @author Eric Bruneton
- */
-public class FieldNode extends MemberNode implements FieldVisitor {
-
- /**
- * The field's access flags (see {@link org.objectweb.asm.Opcodes}). This
- * field also indicates if the field is synthetic and/or deprecated.
- */
- public int access;
-
- /**
- * The field's name.
- */
- public String name;
-
- /**
- * The field's descriptor (see {@link org.objectweb.asm.Type}).
- */
- public String desc;
-
- /**
- * The field's signature. May be <tt>null</tt>.
- */
- public String signature;
-
- /**
- * The field's initial value. This field, which may be <tt>null</tt> if
- * the field does not have an initial value, must be an {@link Integer}, a
- * {@link Float}, a {@link Long}, a {@link Double} or a {@link String}.
- */
- public Object value;
-
- /**
- * Constructs a new {@link FieldNode}.
- *
- * @param access the field's access flags (see
- * {@link org.objectweb.asm.Opcodes}). This parameter also indicates
- * if the field is synthetic and/or deprecated.
- * @param name the field's name.
- * @param desc the field's descriptor (see {@link org.objectweb.asm.Type}).
- * @param signature the field's signature.
- * @param value the field's initial value. This parameter, which may be
- * <tt>null</tt> if the field does not have an initial value, must
- * be an {@link Integer}, a {@link Float}, a {@link Long}, a
- * {@link Double} or a {@link String}.
- */
- public FieldNode(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- this.access = access;
- this.name = name;
- this.desc = desc;
- this.signature = signature;
- this.value = value;
- }
-
- /**
- * Makes the given class visitor visit this field.
- *
- * @param cv a class visitor.
- */
- public void accept(final ClassVisitor cv) {
- FieldVisitor fv = cv.visitField(access, name, desc, signature, value);
- int i, n;
- n = visibleAnnotations == null ? 0 : visibleAnnotations.size();
- for (i = 0; i < n; ++i) {
- AnnotationNode an = (AnnotationNode) visibleAnnotations.get(i);
- an.accept(fv.visitAnnotation(an.desc, true));
- }
- n = invisibleAnnotations == null ? 0 : invisibleAnnotations.size();
- for (i = 0; i < n; ++i) {
- AnnotationNode an = (AnnotationNode) invisibleAnnotations.get(i);
- an.accept(fv.visitAnnotation(an.desc, false));
- }
- n = attrs == null ? 0 : attrs.size();
- for (i = 0; i < n; ++i) {
- fv.visitAttribute((Attribute) attrs.get(i));
- }
- fv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IincInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IincInsnNode.java
deleted file mode 100644
index b5399b0..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IincInsnNode.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents an IINC instruction.
- *
- * @author Eric Bruneton
- */
-public class IincInsnNode extends AbstractInsnNode {
-
- /**
- * Index of the local variable to be incremented.
- */
- public int var;
-
- /**
- * Amount to increment the local variable by.
- */
- public int incr;
-
- /**
- * Constructs a new {@link IincInsnNode}.
- *
- * @param var index of the local variable to be incremented.
- * @param incr increment amount to increment the local variable by.
- */
- public IincInsnNode(final int var, final int incr) {
- super(Opcodes.IINC);
- this.var = var;
- this.incr = incr;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitIincInsn(var, incr);
- }
-
- public int getType() {
- return IINC_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InnerClassNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InnerClassNode.java
deleted file mode 100644
index 6af060e..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InnerClassNode.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.ClassVisitor;
-
-/**
- * A node that represents an inner class.
- *
- * @author Eric Bruneton
- */
-public class InnerClassNode {
-
- /**
- * The internal name of an inner class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- */
- public String name;
-
- /**
- * The internal name of the class to which the inner class belongs (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}). May
- * be <tt>null</tt>.
- */
- public String outerName;
-
- /**
- * The (simple) name of the inner class inside its enclosing class. May be
- * <tt>null</tt> for anonymous inner classes.
- */
- public String innerName;
-
- /**
- * The access flags of the inner class as originally declared in the
- * enclosing class.
- */
- public int access;
-
- /**
- * Constructs a new {@link InnerClassNode}.
- *
- * @param name the internal name of an inner class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- * @param outerName the internal name of the class to which the inner class
- * belongs (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- * May be <tt>null</tt>.
- * @param innerName the (simple) name of the inner class inside its
- * enclosing class. May be <tt>null</tt> for anonymous inner
- * classes.
- * @param access the access flags of the inner class as originally declared
- * in the enclosing class.
- */
- public InnerClassNode(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- this.name = name;
- this.outerName = outerName;
- this.innerName = innerName;
- this.access = access;
- }
-
- /**
- * Makes the given class visitor visit this inner class.
- *
- * @param cv a class visitor.
- */
- public void accept(final ClassVisitor cv) {
- cv.visitInnerClass(name, outerName, innerName, access);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InsnNode.java
deleted file mode 100644
index 7182726..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/InsnNode.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a zero operand instruction.
- *
- * @author Eric Bruneton
- */
-public class InsnNode extends AbstractInsnNode {
-
- private final static InsnNode[] INSNS;
-
- static {
- INSNS = new InsnNode[255];
- for (int i = 0; i < INSNS.length; ++i) {
- INSNS[i] = new InsnNode(i);
- }
- }
-
- /**
- * Returns the {@link InsnNode} corresponding to the given opcode.
- *
- * @deprecated uses the constructor instead.
- *
- * @param opcode an instruction opcode.
- * @return the {@link InsnNode} corresponding to the given opcode.
- */
- public final static InsnNode getByOpcode(final int opcode) {
- return INSNS[opcode];
- }
-
- /**
- * Constructs a new {@link InsnNode}.
- *
- * @param opcode the opcode of the instruction to be constructed. This
- * opcode must be NOP, ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1,
- * ICONST_2, ICONST_3, ICONST_4, ICONST_5, LCONST_0, LCONST_1,
- * FCONST_0, FCONST_1, FCONST_2, DCONST_0, DCONST_1, IALOAD, LALOAD,
- * FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IASTORE, LASTORE,
- * FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE, POP, POP2,
- * DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP, IADD, LADD,
- * FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV,
- * LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, INEG, LNEG, FNEG, DNEG,
- * ISHL, LSHL, ISHR, LSHR, IUSHR, LUSHR, IAND, LAND, IOR, LOR, IXOR,
- * LXOR, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L, F2D, D2I, D2L, D2F,
- * I2B, I2C, I2S, LCMP, FCMPL, FCMPG, DCMPL, DCMPG, IRETURN, LRETURN,
- * FRETURN, DRETURN, ARETURN, RETURN, ARRAYLENGTH, ATHROW,
- * MONITORENTER, or MONITOREXIT.
- */
- public InsnNode(final int opcode) {
- super(opcode);
- }
-
- /**
- * Makes the given visitor visit this instruction.
- *
- * @param mv a method visitor.
- */
- public void accept(final MethodVisitor mv) {
- mv.visitInsn(opcode);
- }
-
- public int getType() {
- return INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IntInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IntInsnNode.java
deleted file mode 100644
index b9b02e3..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/IntInsnNode.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents an instruction with a single int operand.
- *
- * @author Eric Bruneton
- */
-public class IntInsnNode extends AbstractInsnNode {
-
- /**
- * The operand of this instruction.
- */
- public int operand;
-
- /**
- * Constructs a new {@link IntInsnNode}.
- *
- * @param opcode the opcode of the instruction to be constructed. This
- * opcode must be BIPUSH, SIPUSH or NEWARRAY.
- * @param operand the operand of the instruction to be constructed.
- */
- public IntInsnNode(final int opcode, final int operand) {
- super(opcode);
- this.operand = operand;
- }
-
- /**
- * Sets the opcode of this instruction.
- *
- * @param opcode the new instruction opcode. This opcode must be BIPUSH,
- * SIPUSH or NEWARRAY.
- */
- public void setOpcode(final int opcode) {
- this.opcode = opcode;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitIntInsn(opcode, operand);
- }
-
- public int getType() {
- return INT_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/JumpInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/JumpInsnNode.java
deleted file mode 100644
index 7dccf32..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/JumpInsnNode.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a jump instruction. A jump instruction is an
- * instruction that may jump to another instruction.
- *
- * @author Eric Bruneton
- */
-public class JumpInsnNode extends AbstractInsnNode {
-
- /**
- * The operand of this instruction. This operand is a label that designates
- * the instruction to which this instruction may jump.
- */
- public Label label;
-
- /**
- * Constructs a new {@link JumpInsnNode}.
- *
- * @param opcode the opcode of the type instruction to be constructed. This
- * opcode must be IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ,
- * IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ,
- * IF_ACMPNE, GOTO, JSR, IFNULL or IFNONNULL.
- * @param label the operand of the instruction to be constructed. This
- * operand is a label that designates the instruction to which the
- * jump instruction may jump.
- */
- public JumpInsnNode(final int opcode, final Label label) {
- super(opcode);
- this.label = label;
- }
-
- /**
- * Sets the opcode of this instruction.
- *
- * @param opcode the new instruction opcode. This opcode must be IFEQ, IFNE,
- * IFLT, IFGE, IFGT, IFLE, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT,
- * IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ACMPEQ, IF_ACMPNE, GOTO, JSR,
- * IFNULL or IFNONNULL.
- */
- public void setOpcode(final int opcode) {
- this.opcode = opcode;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitJumpInsn(opcode, label);
- }
-
- public int getType() {
- return JUMP_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LabelNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LabelNode.java
deleted file mode 100644
index 0f8c933..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LabelNode.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * An {@link AbstractInsnNode} that encapsulates a {@link Label}.
- */
-public class LabelNode extends AbstractInsnNode {
-
- public Label label;
-
- public LabelNode(final Label label) {
- super(-1);
- this.label = label;
- }
-
- public void accept(final MethodVisitor cv) {
- cv.visitLabel(label);
- }
-
- public int getType() {
- return LABEL;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LdcInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LdcInsnNode.java
deleted file mode 100644
index 234b41f..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LdcInsnNode.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-
-/**
- * A node that represents an LDC instruction.
- *
- * @author Eric Bruneton
- */
-public class LdcInsnNode extends AbstractInsnNode {
-
- /**
- * The constant to be loaded on the stack. This parameter must be a non null
- * {@link Integer}, a {@link Float}, a {@link Long}, a {@link Double}, a
- * {@link String} or a {@link org.objectweb.asm.Type}.
- */
- public Object cst;
-
- /**
- * Constructs a new {@link LdcInsnNode}.
- *
- * @param cst the constant to be loaded on the stack. This parameter must be
- * a non null {@link Integer}, a {@link Float}, a {@link Long}, a
- * {@link Double} or a {@link String}.
- */
- public LdcInsnNode(final Object cst) {
- super(Opcodes.LDC);
- this.cst = cst;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitLdcInsn(cst);
- }
-
- public int getType() {
- return LDC_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LineNumberNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LineNumberNode.java
deleted file mode 100644
index 2a34988..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LineNumberNode.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a line number declaration.
- *
- * @author Eric Bruneton
- */
-public class LineNumberNode {
-
- /**
- * A line number. This number refers to the source file from which the class
- * was compiled.
- */
- public int line;
-
- /**
- * The first instruction corresponding to this line number.
- */
- public Label start;
-
- /**
- * Constructs a new {@link LineNumberNode}.
- *
- * @param line a line number. This number refers to the source file from
- * which the class was compiled.
- * @param start the first instruction corresponding to this line number.
- */
- public LineNumberNode(final int line, final Label start) {
- this.line = line;
- this.start = start;
- }
-
- /**
- * Makes the given visitor visit this line number declaration.
- *
- * @param mv a method visitor.
- */
- public void accept(final MethodVisitor mv) {
- mv.visitLineNumber(line, start);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LocalVariableNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LocalVariableNode.java
deleted file mode 100644
index 511dcf9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LocalVariableNode.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Label;
-
-/**
- * A node that represents a local variable declaration.
- *
- * @author Eric Bruneton
- */
-public class LocalVariableNode {
-
- /**
- * The name of a local variable.
- */
- public String name;
-
- /**
- * The type descriptor of this local variable.
- */
- public String desc;
-
- /**
- * The signature of this local variable. May be <tt>null</tt>.
- */
- public String signature;
-
- /**
- * The first instruction corresponding to the scope of this local variable
- * (inclusive).
- */
- public Label start;
-
- /**
- * The last instruction corresponding to the scope of this local variable
- * (exclusive).
- */
- public Label end;
-
- /**
- * The local variable's index.
- */
- public int index;
-
- /**
- * Constructs a new {@link LocalVariableNode}.
- *
- * @param name the name of a local variable.
- * @param desc the type descriptor of this local variable.
- * @param signature the signature of this local variable. May be
- * <tt>null</tt>.
- * @param start the first instruction corresponding to the scope of this
- * local variable (inclusive).
- * @param end the last instruction corresponding to the scope of this local
- * variable (exclusive).
- * @param index the local variable's index.
- */
- public LocalVariableNode(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- this.name = name;
- this.desc = desc;
- this.signature = signature;
- this.start = start;
- this.end = end;
- this.index = index;
- }
-
- /**
- * Makes the given visitor visit this local variable declaration.
- *
- * @param mv a method visitor.
- */
- public void accept(final MethodVisitor mv) {
- mv.visitLocalVariable(name, desc, signature, start, end, index);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LookupSwitchInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LookupSwitchInsnNode.java
deleted file mode 100644
index 31eb234..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/LookupSwitchInsnNode.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.MethodVisitor;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * A node that represents a LOOKUPSWITCH instruction.
- *
- * @author Eric Bruneton
- */
-public class LookupSwitchInsnNode extends AbstractInsnNode {
-
- /**
- * Beginning of the default handler block.
- */
- public Label dflt;
-
- /**
- * The values of the keys. This list is a list of {@link Integer} objects.
- */
- public List keys;
-
- /**
- * Beginnings of the handler blocks. This list is a list of {@link Label}
- * objects.
- */
- public List labels;
-
- /**
- * Constructs a new {@link LookupSwitchInsnNode}.
- *
- * @param dflt beginning of the default handler block.
- * @param keys the values of the keys.
- * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
- * the beginning of the handler block for the <tt>keys[i]</tt> key.
- */
- public LookupSwitchInsnNode(
- final Label dflt,
- final int[] keys,
- final Label[] labels)
- {
- super(Opcodes.LOOKUPSWITCH);
- this.dflt = dflt;
- this.keys = new ArrayList(keys == null ? 0 : keys.length);
- this.labels = new ArrayList(labels == null ? 0 : labels.length);
- if (keys != null) {
- for (int i = 0; i < keys.length; ++i) {
- this.keys.add(new Integer(keys[i]));
- }
- }
- if (labels != null) {
- this.labels.addAll(Arrays.asList(labels));
- }
- }
-
- public void accept(final MethodVisitor mv) {
- int[] keys = new int[this.keys.size()];
- for (int i = 0; i < keys.length; ++i) {
- keys[i] = ((Integer) this.keys.get(i)).intValue();
- }
- Label[] labels = new Label[this.labels.size()];
- this.labels.toArray(labels);
- mv.visitLookupSwitchInsn(dflt, keys, labels);
- }
-
- public int getType() {
- return LOOKUPSWITCH_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MemberNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MemberNode.java
deleted file mode 100644
index 11dfad8..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MemberNode.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-
-/**
- * An abstract class, field or method node.
- *
- * @author Eric Bruneton
- */
-public abstract class MemberNode {
-
- /**
- * The runtime visible annotations of this class, field or method. This list
- * is a list of {@link AnnotationNode} objects. May be <tt>null</tt>.
- *
- * @associates org.objectweb.asm.tree.AnnotationNode
- * @label visible
- */
- public List visibleAnnotations;
-
- /**
- * The runtime invisible annotations of this class, field or method. This
- * list is a list of {@link AnnotationNode} objects. May be <tt>null</tt>.
- *
- * @associates org.objectweb.asm.tree.AnnotationNode
- * @label invisible
- */
- public List invisibleAnnotations;
-
- /**
- * The non standard attributes of this class, field or method. This list is
- * a list of {@link Attribute} objects. May be <tt>null</tt>.
- *
- * @associates org.objectweb.asm.Attribute
- */
- public List attrs;
-
- /**
- * Constructs a new {@link MemberNode}.
- */
- public MemberNode() {
- }
-
- /**
- * Visits an annotation of this class, field or method.
- *
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a visitor to visit the annotation values.
- */
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- AnnotationNode an = new AnnotationNode(desc);
- if (visible) {
- if (visibleAnnotations == null) {
- visibleAnnotations = new ArrayList(1);
- }
- visibleAnnotations.add(an);
- } else {
- if (invisibleAnnotations == null) {
- invisibleAnnotations = new ArrayList(1);
- }
- invisibleAnnotations.add(an);
- }
- return an;
- }
-
- /**
- * Visits a non standard attribute of this class, field or method.
- *
- * @param attr an attribute.
- */
- public void visitAttribute(final Attribute attr) {
- if (attrs == null) {
- attrs = new ArrayList(1);
- }
- attrs.add(attr);
- }
-
- /**
- * Visits the end of this class, field or method.
- */
- public void visitEnd() {
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodInsnNode.java
deleted file mode 100644
index f227447..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodInsnNode.java
+++ /dev/null
@@ -1,98 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a method instruction. A method instruction is an
- * instruction that invokes a method.
- *
- * @author Eric Bruneton
- */
-public class MethodInsnNode extends AbstractInsnNode {
-
- /**
- * The internal name of the method's owner class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- */
- public String owner;
-
- /**
- * The method's name.
- */
- public String name;
-
- /**
- * The method's descriptor (see {@link org.objectweb.asm.Type}).
- */
- public String desc;
-
- /**
- * Constructs a new {@link MethodInsnNode}.
- *
- * @param opcode the opcode of the type instruction to be constructed. This
- * opcode must be INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or
- * INVOKEINTERFACE.
- * @param owner the internal name of the method's owner class (see
- * {@link org.objectweb.asm.Type#getInternalName() getInternalName}).
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link org.objectweb.asm.Type}).
- */
- public MethodInsnNode(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- super(opcode);
- this.owner = owner;
- this.name = name;
- this.desc = desc;
- }
-
- /**
- * Sets the opcode of this instruction.
- *
- * @param opcode the new instruction opcode. This opcode must be
- * INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC or INVOKEINTERFACE.
- */
- public void setOpcode(final int opcode) {
- this.opcode = opcode;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitMethodInsn(opcode, owner, name, desc);
- }
-
- public int getType() {
- return METHOD_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodNode.java
deleted file mode 100644
index 9d0b2e9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MethodNode.java
+++ /dev/null
@@ -1,439 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * A node that represents a method.
- *
- * @author Eric Bruneton
- */
-public class MethodNode extends MemberNode implements MethodVisitor {
-
- /**
- * The method's access flags (see {@link Opcodes}). This field also
- * indicates if the method is synthetic and/or deprecated.
- */
- public int access;
-
- /**
- * The method's name.
- */
- public String name;
-
- /**
- * The method's descriptor (see {@link Type}).
- */
- public String desc;
-
- /**
- * The method's signature. May be <tt>null</tt>.
- */
- public String signature;
-
- /**
- * The internal names of the method's exception classes (see
- * {@link Type#getInternalName() getInternalName}). This list is a list of
- * {@link String} objects.
- */
- public List exceptions;
-
- /**
- * The default value of this annotation interface method. This field must be
- * a {@link Byte}, {@link Boolean}, {@link Character}, {@link Short},
- * {@link Integer}, {@link Long}, {@link Float}, {@link Double},
- * {@link String} or {@link Type}, or an two elements String array (for
- * enumeration values), a {@link AnnotationNode}, or a {@link List} of
- * values of one of the preceding types. May be <tt>null</tt>.
- */
- public Object annotationDefault;
-
- /**
- * The runtime visible parameter annotations of this method. These lists are
- * lists of {@link AnnotationNode} objects. May be <tt>null</tt>.
- *
- * @associates org.objectweb.asm.tree.AnnotationNode
- * @label invisible parameters
- */
- public List[] visibleParameterAnnotations;
-
- /**
- * The runtime invisible parameter annotations of this method. These lists
- * are lists of {@link AnnotationNode} objects. May be <tt>null</tt>.
- *
- * @associates org.objectweb.asm.tree.AnnotationNode
- * @label visible parameters
- */
- public List[] invisibleParameterAnnotations;
-
- /**
- * The instructions of this method. This list is a list of
- * {@link AbstractInsnNode} objects.
- *
- * @associates org.objectweb.asm.tree.AbstractInsnNode
- * @label instructions
- */
- public List instructions;
-
- /**
- * The try catch blocks of this method. This list is a list of
- * {@link TryCatchBlockNode} objects.
- *
- * @associates org.objectweb.asm.tree.TryCatchBlockNode
- */
- public List tryCatchBlocks;
-
- /**
- * The maximum stack size of this method.
- */
- public int maxStack;
-
- /**
- * The maximum number of local variables of this method.
- */
- public int maxLocals;
-
- /**
- * The local variables of this method. This list is a list of
- * {@link LocalVariableNode} objects. May be <tt>null</tt>
- *
- * @associates org.objectweb.asm.tree.LocalVariableNode
- */
- public List localVariables;
-
- /**
- * The line numbers of this method. This list is a list of
- * {@link LineNumberNode} objects. May be <tt>null</tt>
- *
- * @associates org.objectweb.asm.tree.LineNumberNode
- */
- public List lineNumbers;
-
- /**
- * Constructs a new {@link MethodNode}.
- *
- * @param access the method's access flags (see {@link Opcodes}). This
- * parameter also indicates if the method is synthetic and/or
- * deprecated.
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type}).
- * @param signature the method's signature. May be <tt>null</tt>.
- * @param exceptions the internal names of the method's exception classes
- * (see {@link Type#getInternalName() getInternalName}). May be
- * <tt>null</tt>.
- */
- public MethodNode(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- this.access = access;
- this.name = name;
- this.desc = desc;
- this.signature = signature;
- this.exceptions = new ArrayList(exceptions == null
- ? 0
- : exceptions.length);
- boolean isAbstract = (access & Opcodes.ACC_ABSTRACT) != 0;
- this.instructions = new ArrayList(isAbstract ? 0 : 24);
- if (!isAbstract) {
- this.localVariables = new ArrayList(5);
- this.lineNumbers = new ArrayList(5);
- }
- this.tryCatchBlocks = new ArrayList();
- if (exceptions != null) {
- this.exceptions.addAll(Arrays.asList(exceptions));
- }
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the MethodVisitor interface
- // ------------------------------------------------------------------------
-
- public AnnotationVisitor visitAnnotationDefault() {
- return new AnnotationNode(new ArrayList(0) {
- public boolean add(Object o) {
- annotationDefault = o;
- return super.add(o);
- }
- });
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- AnnotationNode an = new AnnotationNode(desc);
- if (visible) {
- if (visibleParameterAnnotations == null) {
- int params = Type.getArgumentTypes(this.desc).length;
- visibleParameterAnnotations = new List[params];
- }
- if (visibleParameterAnnotations[parameter] == null) {
- visibleParameterAnnotations[parameter] = new ArrayList(1);
- }
- visibleParameterAnnotations[parameter].add(an);
- } else {
- if (invisibleParameterAnnotations == null) {
- int params = Type.getArgumentTypes(this.desc).length;
- invisibleParameterAnnotations = new List[params];
- }
- if (invisibleParameterAnnotations[parameter] == null) {
- invisibleParameterAnnotations[parameter] = new ArrayList(1);
- }
- invisibleParameterAnnotations[parameter].add(an);
- }
- return an;
- }
-
- public void visitCode() {
- }
-
- public void visitInsn(final int opcode) {
- instructions.add(new InsnNode(opcode));
- }
-
- public void visitIntInsn(final int opcode, final int operand) {
- instructions.add(new IntInsnNode(opcode, operand));
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- instructions.add(new VarInsnNode(opcode, var));
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- instructions.add(new TypeInsnNode(opcode, desc));
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- instructions.add(new FieldInsnNode(opcode, owner, name, desc));
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- instructions.add(new MethodInsnNode(opcode, owner, name, desc));
- }
-
- public void visitJumpInsn(final int opcode, final Label label) {
- instructions.add(new JumpInsnNode(opcode, label));
- }
-
- public void visitLabel(final Label label) {
- instructions.add(new LabelNode(label));
- }
-
- public void visitLdcInsn(final Object cst) {
- instructions.add(new LdcInsnNode(cst));
- }
-
- public void visitIincInsn(final int var, final int increment) {
- instructions.add(new IincInsnNode(var, increment));
- }
-
- public void visitTableSwitchInsn(
- final int min,
- final int max,
- final Label dflt,
- final Label[] labels)
- {
- instructions.add(new TableSwitchInsnNode(min, max, dflt, labels));
- }
-
- public void visitLookupSwitchInsn(
- final Label dflt,
- final int[] keys,
- final Label[] labels)
- {
- instructions.add(new LookupSwitchInsnNode(dflt, keys, labels));
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- instructions.add(new MultiANewArrayInsnNode(desc, dims));
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- tryCatchBlocks.add(new TryCatchBlockNode(start, end, handler, type));
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- localVariables.add(new LocalVariableNode(name,
- desc,
- signature,
- start,
- end,
- index));
- }
-
- public void visitLineNumber(final int line, final Label start) {
- lineNumbers.add(new LineNumberNode(line, start));
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- this.maxStack = maxStack;
- this.maxLocals = maxLocals;
- }
-
- // ------------------------------------------------------------------------
- // Accept method
- // ------------------------------------------------------------------------
-
- /**
- * Makes the given class visitor visit this method.
- *
- * @param cv a class visitor.
- */
- public void accept(final ClassVisitor cv) {
- String[] exceptions = new String[this.exceptions.size()];
- this.exceptions.toArray(exceptions);
- MethodVisitor mv = cv.visitMethod(access,
- name,
- desc,
- signature,
- exceptions);
- if (mv != null) {
- accept(mv);
- }
- }
-
- /**
- * Makes the given method visitor visit this method.
- *
- * @param mv a method visitor.
- */
- public void accept(final MethodVisitor mv) {
- // visits the method attributes
- int i, j, n;
- if (annotationDefault != null) {
- AnnotationVisitor av = mv.visitAnnotationDefault();
- AnnotationNode.accept(av, null, annotationDefault);
- av.visitEnd();
- }
- n = visibleAnnotations == null ? 0 : visibleAnnotations.size();
- for (i = 0; i < n; ++i) {
- AnnotationNode an = (AnnotationNode) visibleAnnotations.get(i);
- an.accept(mv.visitAnnotation(an.desc, true));
- }
- n = invisibleAnnotations == null ? 0 : invisibleAnnotations.size();
- for (i = 0; i < n; ++i) {
- AnnotationNode an = (AnnotationNode) invisibleAnnotations.get(i);
- an.accept(mv.visitAnnotation(an.desc, false));
- }
- n = visibleParameterAnnotations == null
- ? 0
- : visibleParameterAnnotations.length;
- for (i = 0; i < n; ++i) {
- List l = visibleParameterAnnotations[i];
- if (l == null) {
- continue;
- }
- for (j = 0; j < l.size(); ++j) {
- AnnotationNode an = (AnnotationNode) l.get(j);
- an.accept(mv.visitParameterAnnotation(i, an.desc, true));
- }
- }
- n = invisibleParameterAnnotations == null
- ? 0
- : invisibleParameterAnnotations.length;
- for (i = 0; i < n; ++i) {
- List l = invisibleParameterAnnotations[i];
- if (l == null) {
- continue;
- }
- for (j = 0; j < l.size(); ++j) {
- AnnotationNode an = (AnnotationNode) l.get(j);
- an.accept(mv.visitParameterAnnotation(i, an.desc, false));
- }
- }
- n = attrs == null ? 0 : attrs.size();
- for (i = 0; i < n; ++i) {
- mv.visitAttribute((Attribute) attrs.get(i));
- }
- // visits the method's code
- if (instructions.size() > 0) {
- mv.visitCode();
- // visits try catch blocks
- for (i = 0; i < tryCatchBlocks.size(); ++i) {
- ((TryCatchBlockNode) tryCatchBlocks.get(i)).accept(mv);
- }
- // visits instructions
- for (i = 0; i < instructions.size(); ++i) {
- ((AbstractInsnNode) instructions.get(i)).accept(mv);
- }
- // visits local variables
- n = localVariables == null ? 0 : localVariables.size();
- for (i = 0; i < n; ++i) {
- ((LocalVariableNode) localVariables.get(i)).accept(mv);
- }
- // visits line numbers
- n = lineNumbers == null ? 0 : lineNumbers.size();
- for (i = 0; i < n; ++i) {
- ((LineNumberNode) lineNumbers.get(i)).accept(mv);
- }
- // visits maxs
- mv.visitMaxs(maxStack, maxLocals);
- }
- mv.visitEnd();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MultiANewArrayInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MultiANewArrayInsnNode.java
deleted file mode 100644
index ed81347..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/MultiANewArrayInsnNode.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a MULTIANEWARRAY instruction.
- *
- * @author Eric Bruneton
- */
-public class MultiANewArrayInsnNode extends AbstractInsnNode {
-
- /**
- * An array type descriptor (see {@link org.objectweb.asm.Type}).
- */
- public String desc;
-
- /**
- * Number of dimensions of the array to allocate.
- */
- public int dims;
-
- /**
- * Constructs a new {@link MultiANewArrayInsnNode}.
- *
- * @param desc an array type descriptor (see {@link org.objectweb.asm.Type}).
- * @param dims number of dimensions of the array to allocate.
- */
- public MultiANewArrayInsnNode(final String desc, final int dims) {
- super(Opcodes.MULTIANEWARRAY);
- this.desc = desc;
- this.dims = dims;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitMultiANewArrayInsn(desc, dims);
- }
-
- public int getType() {
- return MULTIANEWARRAY_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TableSwitchInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TableSwitchInsnNode.java
deleted file mode 100644
index 840309d..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TableSwitchInsnNode.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.MethodVisitor;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * A node that represents a TABLESWITCH instruction.
- *
- * @author Eric Bruneton
- */
-public class TableSwitchInsnNode extends AbstractInsnNode {
-
- /**
- * The minimum key value.
- */
- public int min;
-
- /**
- * The maximum key value.
- */
- public int max;
-
- /**
- * Beginning of the default handler block.
- */
- public Label dflt;
-
- /**
- * Beginnings of the handler blocks. This list is a list of {@link Label}
- * objects.
- */
- public List labels;
-
- /**
- * Constructs a new {@link TableSwitchInsnNode}.
- *
- * @param min the minimum key value.
- * @param max the maximum key value.
- * @param dflt beginning of the default handler block.
- * @param labels beginnings of the handler blocks. <tt>labels[i]</tt> is
- * the beginning of the handler block for the <tt>min + i</tt> key.
- */
- public TableSwitchInsnNode(
- final int min,
- final int max,
- final Label dflt,
- final Label[] labels)
- {
- super(Opcodes.TABLESWITCH);
- this.min = min;
- this.max = max;
- this.dflt = dflt;
- this.labels = new ArrayList();
- if (labels != null) {
- this.labels.addAll(Arrays.asList(labels));
- }
- }
-
- public void accept(final MethodVisitor mv) {
- Label[] labels = new Label[this.labels.size()];
- this.labels.toArray(labels);
- mv.visitTableSwitchInsn(min, max, dflt, labels);
- }
-
- public int getType() {
- return TABLESWITCH_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TryCatchBlockNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TryCatchBlockNode.java
deleted file mode 100644
index 56b1465..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TryCatchBlockNode.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a try catch block.
- *
- * @author Eric Bruneton
- */
-public class TryCatchBlockNode {
-
- /**
- * Beginning of the exception handler's scope (inclusive).
- */
- public Label start;
-
- /**
- * End of the exception handler's scope (exclusive).
- */
- public Label end;
-
- /**
- * Beginning of the exception handler's code.
- */
- public Label handler;
-
- /**
- * Internal name of the type of exceptions handled by the handler. May be
- * <tt>null</tt> to catch any exceptions (for "finally" blocks).
- */
- public String type;
-
- /**
- * Constructs a new {@link TryCatchBlockNode}.
- *
- * @param start beginning of the exception handler's scope (inclusive).
- * @param end end of the exception handler's scope (exclusive).
- * @param handler beginning of the exception handler's code.
- * @param type internal name of the type of exceptions handled by the
- * handler, or <tt>null</tt> to catch any exceptions (for "finally"
- * blocks).
- */
- public TryCatchBlockNode(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- this.start = start;
- this.end = end;
- this.handler = handler;
- this.type = type;
- }
-
- /**
- * Makes the given visitor visit this try catch block.
- *
- * @param mv a method visitor.
- */
- public void accept(final MethodVisitor mv) {
- mv.visitTryCatchBlock(start, end, handler, type);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TypeInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TypeInsnNode.java
deleted file mode 100644
index 9f830b4..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/TypeInsnNode.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a type instruction. A type instruction is an
- * instruction that takes a type descriptor as parameter.
- *
- * @author Eric Bruneton
- */
-public class TypeInsnNode extends AbstractInsnNode {
-
- /**
- * The operand of this instruction. This operand is a type descriptor (see
- * {@link org.objectweb.asm.Type}).
- */
- public String desc;
-
- /**
- * Constructs a new {@link TypeInsnNode}.
- *
- * @param opcode the opcode of the type instruction to be constructed. This
- * opcode must be NEW, ANEWARRAY, CHECKCAST or INSTANCEOF.
- * @param desc the operand of the instruction to be constructed. This
- * operand is a type descriptor (see {@link org.objectweb.asm.Type}).
- */
- public TypeInsnNode(final int opcode, final String desc) {
- super(opcode);
- this.desc = desc;
- }
-
- /**
- * Sets the opcode of this instruction.
- *
- * @param opcode the new instruction opcode. This opcode must be NEW,
- * ANEWARRAY, CHECKCAST or INSTANCEOF.
- */
- public void setOpcode(final int opcode) {
- this.opcode = opcode;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitTypeInsn(opcode, desc);
- }
-
- public int getType() {
- return TYPE_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/VarInsnNode.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/VarInsnNode.java
deleted file mode 100644
index 92e28de..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/VarInsnNode.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * A node that represents a local variable instruction. A local variable
- * instruction is an instruction that loads or stores the value of a local
- * variable.
- *
- * @author Eric Bruneton
- */
-public class VarInsnNode extends AbstractInsnNode {
-
- /**
- * The operand of this instruction. This operand is the index of a local
- * variable.
- */
- public int var;
-
- /**
- * Constructs a new {@link VarInsnNode}.
- *
- * @param opcode the opcode of the local variable instruction to be
- * constructed. This opcode must be ILOAD, LLOAD, FLOAD, DLOAD,
- * ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE or RET.
- * @param var the operand of the instruction to be constructed. This operand
- * is the index of a local variable.
- */
- public VarInsnNode(final int opcode, final int var) {
- super(opcode);
- this.var = var;
- }
-
- /**
- * Sets the opcode of this instruction.
- *
- * @param opcode the new instruction opcode. This opcode must be ILOAD,
- * LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE, ASTORE
- * or RET.
- */
- public void setOpcode(final int opcode) {
- this.opcode = opcode;
- }
-
- public void accept(final MethodVisitor mv) {
- mv.visitVarInsn(opcode, var);
- }
-
- public int getType() {
- return VAR_INSN;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Analyzer.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Analyzer.java
deleted file mode 100644
index cfd4814..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Analyzer.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.JumpInsnNode;
-import org.objectweb.asm.tree.LabelNode;
-import org.objectweb.asm.tree.LookupSwitchInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.TableSwitchInsnNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-import org.objectweb.asm.tree.VarInsnNode;
-
-/**
- * A semantic bytecode analyzer.
- *
- * @author Eric Bruneton
- */
-public class Analyzer implements Opcodes {
-
- private Interpreter interpreter;
-
- private int n;
-
- private IntMap indexes;
-
- private List[] handlers;
-
- private Frame[] frames;
-
- private Subroutine[] subroutines;
-
- private boolean[] queued;
-
- private int[] queue;
-
- private int top;
-
- private boolean jsr;
-
- /**
- * Constructs a new {@link Analyzer}.
- *
- * @param interpreter the interpreter to be used to symbolically interpret
- * the bytecode instructions.
- */
- public Analyzer(final Interpreter interpreter) {
- this.interpreter = interpreter;
- }
-
- /**
- * Analyzes the given method.
- *
- * @param owner the internal name of the class to which the method belongs.
- * @param m the method to be analyzed.
- * @return the symbolic state of the execution stack frame at each bytecode
- * instruction of the method. The size of the returned array is
- * equal to the number of instructions (and labels) of the method. A
- * given frame is <tt>null</tt> if and only if the corresponding
- * instruction cannot be reached (dead code).
- * @throws AnalyzerException if a problem occurs during the analysis.
- */
- public Frame[] analyze(final String owner, final MethodNode m)
- throws AnalyzerException
- {
- n = m.instructions.size();
- indexes = new IntMap(2 * n);
- handlers = new List[n];
- frames = new Frame[n];
- subroutines = new Subroutine[n];
- queued = new boolean[n];
- queue = new int[n];
- top = 0;
-
- // computes instruction indexes
- for (int i = 0; i < n; ++i) {
- Object insn = m.instructions.get(i);
- if (insn instanceof LabelNode) {
- insn = ((LabelNode) insn).label;
- }
- indexes.put(insn, i);
- }
-
- // computes exception handlers for each instruction
- for (int i = 0; i < m.tryCatchBlocks.size(); ++i) {
- TryCatchBlockNode tcb = (TryCatchBlockNode) m.tryCatchBlocks.get(i);
- int begin = indexes.get(tcb.start);
- int end = indexes.get(tcb.end);
- for (int j = begin; j < end; ++j) {
- List insnHandlers = handlers[j];
- if (insnHandlers == null) {
- insnHandlers = new ArrayList();
- handlers[j] = insnHandlers;
- }
- insnHandlers.add(tcb);
- }
- }
-
- // initializes the data structures for the control flow analysis
- // algorithm
- Frame current = newFrame(m.maxLocals, m.maxStack);
- Frame handler = newFrame(m.maxLocals, m.maxStack);
- Type[] args = Type.getArgumentTypes(m.desc);
- int local = 0;
- if ((m.access & ACC_STATIC) == 0) {
- Type ctype = Type.getType("L" + owner + ";");
- current.setLocal(local++, interpreter.newValue(ctype));
- }
- for (int i = 0; i < args.length; ++i) {
- current.setLocal(local++, interpreter.newValue(args[i]));
- if (args[i].getSize() == 2) {
- current.setLocal(local++, interpreter.newValue(null));
- }
- }
- while (local < m.maxLocals) {
- current.setLocal(local++, interpreter.newValue(null));
- }
- merge(0, current, null);
-
- // control flow analysis
- while (top > 0) {
- int insn = queue[--top];
- Frame f = frames[insn];
- Subroutine subroutine = subroutines[insn];
- queued[insn] = false;
-
- try {
- Object o = m.instructions.get(insn);
- jsr = false;
-
- if (o instanceof LabelNode) {
- merge(insn + 1, f, subroutine);
- } else {
- AbstractInsnNode insnNode = (AbstractInsnNode) o;
- int insnOpcode = insnNode.getOpcode();
-
- current.init(f).execute(insnNode, interpreter);
- subroutine = subroutine == null ? null : subroutine.copy();
-
- if (insnNode instanceof JumpInsnNode) {
- JumpInsnNode j = (JumpInsnNode) insnNode;
- if (insnOpcode != GOTO && insnOpcode != JSR) {
- merge(insn + 1, current, subroutine);
- }
- if (insnOpcode == JSR) {
- jsr = true;
- merge(indexes.get(j.label),
- current,
- new Subroutine(j.label, m.maxLocals, j));
- } else {
- merge(indexes.get(j.label), current, subroutine);
- }
- } else if (insnNode instanceof LookupSwitchInsnNode) {
- LookupSwitchInsnNode lsi = (LookupSwitchInsnNode) insnNode;
- merge(indexes.get(lsi.dflt), current, subroutine);
- for (int j = 0; j < lsi.labels.size(); ++j) {
- Label label = (Label) lsi.labels.get(j);
- merge(indexes.get(label), current, subroutine);
- }
- } else if (insnNode instanceof TableSwitchInsnNode) {
- TableSwitchInsnNode tsi = (TableSwitchInsnNode) insnNode;
- merge(indexes.get(tsi.dflt), current, subroutine);
- for (int j = 0; j < tsi.labels.size(); ++j) {
- Label label = (Label) tsi.labels.get(j);
- merge(indexes.get(label), current, subroutine);
- }
- } else if (insnOpcode == RET) {
- if (subroutine == null) {
- throw new AnalyzerException("RET instruction outside of a sub routine");
- }
- for (int i = 0; i < subroutine.callers.size(); ++i) {
- int caller = indexes.get(subroutine.callers.get(i));
- merge(caller + 1,
- frames[caller],
- current,
- subroutines[caller],
- subroutine.access);
- }
- } else if (insnOpcode != ATHROW
- && (insnOpcode < IRETURN || insnOpcode > RETURN))
- {
- if (subroutine != null) {
- if (insnNode instanceof VarInsnNode) {
- int var = ((VarInsnNode) insnNode).var;
- subroutine.access[var] = true;
- if (insnOpcode == LLOAD || insnOpcode == DLOAD
- || insnOpcode == LSTORE
- || insnOpcode == DSTORE)
- {
- subroutine.access[var + 1] = true;
- }
- } else if (insnNode instanceof IincInsnNode) {
- int var = ((IincInsnNode) insnNode).var;
- subroutine.access[var] = true;
- }
- }
- merge(insn + 1, current, subroutine);
- }
- }
-
- List insnHandlers = handlers[insn];
- if (insnHandlers != null) {
- for (int i = 0; i < insnHandlers.size(); ++i) {
- TryCatchBlockNode tcb = (TryCatchBlockNode) insnHandlers.get(i);
- Type type;
- if (tcb.type == null) {
- type = Type.getType("Ljava/lang/Throwable;");
- } else {
- type = Type.getType("L" + tcb.type + ";");
- }
- handler.init(f);
- handler.clearStack();
- handler.push(interpreter.newValue(type));
- merge(indexes.get(tcb.handler), handler, subroutine);
- }
- }
- } catch (AnalyzerException e) {
- throw new AnalyzerException("Error at instruction " + insn
- + ": " + e.getMessage(), e);
- } catch(Exception e) {
- throw new AnalyzerException("Error at instruction " + insn
- + ": " + e.getMessage(), e);
- }
- }
-
- return frames;
- }
-
- /**
- * Returns the symbolic stack frame for each instruction of the last
- * recently analyzed method.
- *
- * @return the symbolic state of the execution stack frame at each bytecode
- * instruction of the method. The size of the returned array is
- * equal to the number of instructions (and labels) of the method. A
- * given frame is <tt>null</tt> if the corresponding instruction
- * cannot be reached, or if an error occured during the analysis of
- * the method.
- */
- public Frame[] getFrames() {
- return frames;
- }
-
- /**
- * Returns the index of the given instruction.
- *
- * @param insn a {@link Label} or {@link AbstractInsnNode} of the last
- * recently analyzed method.
- * @return the index of the given instruction of the last recently analyzed
- * method.
- */
- public int getIndex(final Object insn) {
- return indexes.get(insn);
- }
-
- /**
- * Returns the exception handlers for the given instruction.
- *
- * @param insn the index of an instruction of the last recently analyzed
- * method.
- * @return a list of {@link TryCatchBlockNode} objects.
- */
- public List getHandlers(final int insn) {
- return handlers[insn];
- }
-
- /**
- * Constructs a new frame with the given size.
- *
- * @param nLocals the maximum number of local variables of the frame.
- * @param nStack the maximum stack size of the frame.
- * @return the created frame.
- */
- protected Frame newFrame(final int nLocals, final int nStack) {
- return new Frame(nLocals, nStack);
- }
-
- /**
- * Constructs a new frame that is identical to the given frame.
- *
- * @param src a frame.
- * @return the created frame.
- */
- protected Frame newFrame(final Frame src) {
- return new Frame(src);
- }
-
- /**
- * Creates a control flow graph edge. The default implementation of this
- * method does nothing. It can be overriden in order to construct the
- * control flow graph of a method (this method is called by the
- * {@link #analyze analyze} method during its visit of the method's code).
- *
- * @param frame the frame corresponding to an instruction.
- * @param successor the frame corresponding to a successor instruction.
- */
- protected void newControlFlowEdge(final Frame frame, final Frame successor)
- {
- }
-
- // -------------------------------------------------------------------------
-
- private void merge(
- final int insn,
- final Frame frame,
- final Subroutine subroutine) throws AnalyzerException
- {
- if (insn > n - 1) {
- throw new AnalyzerException("Execution can fall off end of the code");
- }
-
- Frame oldFrame = frames[insn];
- Subroutine oldSubroutine = subroutines[insn];
- boolean changes = false;
-
- if (oldFrame == null) {
- frames[insn] = newFrame(frame);
- changes = true;
- } else {
- changes |= oldFrame.merge(frame, interpreter);
- }
-
- newControlFlowEdge(frame, oldFrame);
-
- if (oldSubroutine == null) {
- if (subroutine != null) {
- subroutines[insn] = subroutine.copy();
- changes = true;
- }
- } else {
- if (subroutine != null) {
- changes |= oldSubroutine.merge(subroutine, !jsr);
- }
- }
- if (changes && !queued[insn]) {
- queued[insn] = true;
- queue[top++] = insn;
- }
- }
-
- private void merge(
- final int insn,
- final Frame beforeJSR,
- final Frame afterRET,
- final Subroutine subroutineBeforeJSR,
- final boolean[] access) throws AnalyzerException
- {
- if (insn > n - 1) {
- throw new AnalyzerException("Execution can fall off end of the code");
- }
-
- Frame oldFrame = frames[insn];
- Subroutine oldSubroutine = subroutines[insn];
- boolean changes = false;
-
- afterRET.merge(beforeJSR, access);
-
- if (oldFrame == null) {
- frames[insn] = newFrame(afterRET);
- changes = true;
- } else {
- changes |= oldFrame.merge(afterRET, access);
- }
-
- newControlFlowEdge(afterRET, oldFrame);
-
- if (oldSubroutine == null) {
- if (subroutineBeforeJSR != null) {
- subroutines[insn] = subroutineBeforeJSR.copy();
- changes = true;
- }
- } else {
- if (subroutineBeforeJSR != null) {
- changes |= oldSubroutine.merge(subroutineBeforeJSR, !jsr);
- }
- }
- if (changes && !queued[insn]) {
- queued[insn] = true;
- queue[top++] = insn;
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/AnalyzerException.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/AnalyzerException.java
deleted file mode 100644
index c024fba..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/AnalyzerException.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-/**
- * Thrown if a problem occurs during the analysis of a method.
- *
- * @author Bing Ran
- * @author Eric Bruneton
- */
-public class AnalyzerException extends Exception {
-
- public AnalyzerException(final String msg) {
- super(msg);
- }
-
- public AnalyzerException(final String msg, final Throwable exception) {
- super(msg, exception);
- }
-
- public AnalyzerException(
- final String msg,
- final Object expected,
- final Value encountered)
- {
- super((msg == null ? "Expected " : msg + ": expected ") + expected
- + ", but found " + encountered);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicInterpreter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicInterpreter.java
deleted file mode 100644
index 5e0c702..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicInterpreter.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.IntInsnNode;
-import org.objectweb.asm.tree.LdcInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MultiANewArrayInsnNode;
-import org.objectweb.asm.tree.TypeInsnNode;
-
-/**
- * An {@link Interpreter} for {@link BasicValue} values.
- *
- * @author Eric Bruneton
- * @author Bing Ran
- */
-public class BasicInterpreter implements Opcodes, Interpreter {
-
- public Value newValue(final Type type) {
- if (type == null) {
- return BasicValue.UNINITIALIZED_VALUE;
- }
- switch (type.getSort()) {
- case Type.VOID:
- return null;
- case Type.BOOLEAN:
- case Type.CHAR:
- case Type.BYTE:
- case Type.SHORT:
- case Type.INT:
- return BasicValue.INT_VALUE;
- case Type.FLOAT:
- return BasicValue.FLOAT_VALUE;
- case Type.LONG:
- return BasicValue.LONG_VALUE;
- case Type.DOUBLE:
- return BasicValue.DOUBLE_VALUE;
- case Type.ARRAY:
- case Type.OBJECT:
- return BasicValue.REFERENCE_VALUE;
- default:
- throw new RuntimeException("Internal error.");
- }
- }
-
- public Value newOperation(final AbstractInsnNode insn) {
- switch (insn.getOpcode()) {
- case ACONST_NULL:
- return newValue(Type.getType("Lnull;"));
- case ICONST_M1:
- case ICONST_0:
- case ICONST_1:
- case ICONST_2:
- case ICONST_3:
- case ICONST_4:
- case ICONST_5:
- return BasicValue.INT_VALUE;
- case LCONST_0:
- case LCONST_1:
- return BasicValue.LONG_VALUE;
- case FCONST_0:
- case FCONST_1:
- case FCONST_2:
- return BasicValue.FLOAT_VALUE;
- case DCONST_0:
- case DCONST_1:
- return BasicValue.DOUBLE_VALUE;
- case BIPUSH:
- case SIPUSH:
- return BasicValue.INT_VALUE;
- case LDC:
- Object cst = ((LdcInsnNode) insn).cst;
- if (cst instanceof Integer) {
- return BasicValue.INT_VALUE;
- } else if (cst instanceof Float) {
- return BasicValue.FLOAT_VALUE;
- } else if (cst instanceof Long) {
- return BasicValue.LONG_VALUE;
- } else if (cst instanceof Double) {
- return BasicValue.DOUBLE_VALUE;
- } else if (cst instanceof Type) {
- return newValue(Type.getType("Ljava/lang/Class;"));
- } else {
- return newValue(Type.getType(cst.getClass()));
- }
- case JSR:
- return BasicValue.RETURNADDRESS_VALUE;
- case GETSTATIC:
- return newValue(Type.getType(((FieldInsnNode) insn).desc));
- case NEW:
- return newValue(Type.getType("L" + ((TypeInsnNode) insn).desc
- + ";"));
- default:
- throw new RuntimeException("Internal error.");
- }
- }
-
- public Value copyOperation(final AbstractInsnNode insn, final Value value)
- throws AnalyzerException
- {
- return value;
- }
-
- public Value unaryOperation(final AbstractInsnNode insn, final Value value)
- throws AnalyzerException
- {
- switch (insn.getOpcode()) {
- case INEG:
- case IINC:
- case L2I:
- case F2I:
- case D2I:
- case I2B:
- case I2C:
- case I2S:
- return BasicValue.INT_VALUE;
- case FNEG:
- case I2F:
- case L2F:
- case D2F:
- return BasicValue.FLOAT_VALUE;
- case LNEG:
- case I2L:
- case F2L:
- case D2L:
- return BasicValue.LONG_VALUE;
- case DNEG:
- case I2D:
- case L2D:
- case F2D:
- return BasicValue.DOUBLE_VALUE;
- case IFEQ:
- case IFNE:
- case IFLT:
- case IFGE:
- case IFGT:
- case IFLE:
- case TABLESWITCH:
- case LOOKUPSWITCH:
- case IRETURN:
- case LRETURN:
- case FRETURN:
- case DRETURN:
- case ARETURN:
- case PUTSTATIC:
- return null;
- case GETFIELD:
- return newValue(Type.getType(((FieldInsnNode) insn).desc));
- case NEWARRAY:
- switch (((IntInsnNode) insn).operand) {
- case T_BOOLEAN:
- return newValue(Type.getType("[Z"));
- case T_CHAR:
- return newValue(Type.getType("[C"));
- case T_BYTE:
- return newValue(Type.getType("[B"));
- case T_SHORT:
- return newValue(Type.getType("[S"));
- case T_INT:
- return newValue(Type.getType("[I"));
- case T_FLOAT:
- return newValue(Type.getType("[F"));
- case T_DOUBLE:
- return newValue(Type.getType("[D"));
- case T_LONG:
- return newValue(Type.getType("[J"));
- default:
- throw new AnalyzerException("Invalid array type");
- }
- case ANEWARRAY:
- String desc = ((TypeInsnNode) insn).desc;
- if (desc.charAt(0) == '[') {
- return newValue(Type.getType("[" + desc));
- } else {
- return newValue(Type.getType("[L" + desc + ";"));
- }
- case ARRAYLENGTH:
- return BasicValue.INT_VALUE;
- case ATHROW:
- return null;
- case CHECKCAST:
- desc = ((TypeInsnNode) insn).desc;
- if (desc.charAt(0) == '[') {
- return newValue(Type.getType(desc));
- } else {
- return newValue(Type.getType("L" + desc + ";"));
- }
- case INSTANCEOF:
- return BasicValue.INT_VALUE;
- case MONITORENTER:
- case MONITOREXIT:
- case IFNULL:
- case IFNONNULL:
- return null;
- default:
- throw new RuntimeException("Internal error.");
- }
- }
-
- public Value binaryOperation(
- final AbstractInsnNode insn,
- final Value value1,
- final Value value2) throws AnalyzerException
- {
- switch (insn.getOpcode()) {
- case IALOAD:
- case BALOAD:
- case CALOAD:
- case SALOAD:
- case IADD:
- case ISUB:
- case IMUL:
- case IDIV:
- case IREM:
- case ISHL:
- case ISHR:
- case IUSHR:
- case IAND:
- case IOR:
- case IXOR:
- return BasicValue.INT_VALUE;
- case FALOAD:
- case FADD:
- case FSUB:
- case FMUL:
- case FDIV:
- case FREM:
- return BasicValue.FLOAT_VALUE;
- case LALOAD:
- case LADD:
- case LSUB:
- case LMUL:
- case LDIV:
- case LREM:
- case LSHL:
- case LSHR:
- case LUSHR:
- case LAND:
- case LOR:
- case LXOR:
- return BasicValue.LONG_VALUE;
- case DALOAD:
- case DADD:
- case DSUB:
- case DMUL:
- case DDIV:
- case DREM:
- return BasicValue.DOUBLE_VALUE;
- case AALOAD:
- Type t = ((BasicValue) value1).getType();
- if (t != null && t.getSort() == Type.ARRAY) {
- return newValue(t.getElementType());
- } else {
- return BasicValue.REFERENCE_VALUE;
- }
- case LCMP:
- case FCMPL:
- case FCMPG:
- case DCMPL:
- case DCMPG:
- return BasicValue.INT_VALUE;
- case IF_ICMPEQ:
- case IF_ICMPNE:
- case IF_ICMPLT:
- case IF_ICMPGE:
- case IF_ICMPGT:
- case IF_ICMPLE:
- case IF_ACMPEQ:
- case IF_ACMPNE:
- case PUTFIELD:
- return null;
- default:
- throw new RuntimeException("Internal error.");
- }
- }
-
- public Value ternaryOperation(
- final AbstractInsnNode insn,
- final Value value1,
- final Value value2,
- final Value value3) throws AnalyzerException
- {
- return null;
- }
-
- public Value naryOperation(final AbstractInsnNode insn, final List values)
- throws AnalyzerException
- {
- if (insn.getOpcode() == MULTIANEWARRAY) {
- return newValue(Type.getType(((MultiANewArrayInsnNode) insn).desc));
- } else {
- return newValue(Type.getReturnType(((MethodInsnNode) insn).desc));
- }
- }
-
- public Value merge(final Value v, final Value w) {
- if (!v.equals(w)) {
- return BasicValue.UNINITIALIZED_VALUE;
- }
- return v;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicValue.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicValue.java
deleted file mode 100644
index 46b8cf4..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicValue.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import org.objectweb.asm.Type;
-
-/**
- * A {@link Value} that is represented by its type in a seven types type sytem.
- * This type system distinguishes the UNINITIALZED, INT, FLOAT, LONG, DOUBLE,
- * REFERENCE and RETURNADDRESS types.
- *
- * @author Eric Bruneton
- */
-public class BasicValue implements Value {
-
- public final static Value UNINITIALIZED_VALUE = new BasicValue(null);
-
- public final static Value INT_VALUE = new BasicValue(Type.INT_TYPE);
-
- public final static Value FLOAT_VALUE = new BasicValue(Type.FLOAT_TYPE);
-
- public final static Value LONG_VALUE = new BasicValue(Type.LONG_TYPE);
-
- public final static Value DOUBLE_VALUE = new BasicValue(Type.DOUBLE_TYPE);
-
- public final static Value REFERENCE_VALUE = new BasicValue(Type.getType("Ljava/lang/Object;"));
-
- public final static Value RETURNADDRESS_VALUE = new BasicValue(null);
-
- private Type type;
-
- public BasicValue(final Type type) {
- this.type = type;
- }
-
- public Type getType() {
- return type;
- }
-
- public int getSize() {
- return type == Type.LONG_TYPE || type == Type.DOUBLE_TYPE ? 2 : 1;
- }
-
- public boolean isReference() {
- return type != null
- && (type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY);
- }
-
- public boolean equals(final Object value) {
- if (value == this) {
- return true;
- } else if (value instanceof BasicValue) {
- if (type == null) {
- return ((BasicValue) value).type == null;
- } else {
- return type.equals(((BasicValue) value).type);
- }
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return type == null ? 0 : type.hashCode();
- }
-
- public String toString() {
- if (this == UNINITIALIZED_VALUE) {
- return ".";
- } else if (this == RETURNADDRESS_VALUE) {
- return "A";
- } else if (this == REFERENCE_VALUE) {
- return "R";
- } else {
- return type.getDescriptor();
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicVerifier.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicVerifier.java
deleted file mode 100644
index f65b56d..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/BasicVerifier.java
+++ /dev/null
@@ -1,428 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-
-/**
- * An extended {@link BasicInterpreter} that checks that bytecode instructions
- * are correctly used.
- *
- * @author Eric Bruneton
- * @author Bing Ran
- */
-public class BasicVerifier extends BasicInterpreter {
-
- public Value copyOperation(final AbstractInsnNode insn, final Value value)
- throws AnalyzerException
- {
- Value expected;
- switch (insn.getOpcode()) {
- case ILOAD:
- case ISTORE:
- expected = BasicValue.INT_VALUE;
- break;
- case FLOAD:
- case FSTORE:
- expected = BasicValue.FLOAT_VALUE;
- break;
- case LLOAD:
- case LSTORE:
- expected = BasicValue.LONG_VALUE;
- break;
- case DLOAD:
- case DSTORE:
- expected = BasicValue.DOUBLE_VALUE;
- break;
- case ALOAD:
- if (!((BasicValue) value).isReference()) {
- throw new AnalyzerException(null,
- "an object reference",
- value);
- }
- return value;
- case ASTORE:
- if (!((BasicValue) value).isReference()
- && value != BasicValue.RETURNADDRESS_VALUE)
- {
- throw new AnalyzerException(null,
- "an object reference or a return address",
- value);
- }
- return value;
- default:
- return value;
- }
- // type is necessarily a primitive type here,
- // so value must be == to expected value
- if (value != expected) {
- throw new AnalyzerException(null, expected, value);
- }
- return value;
- }
-
- public Value unaryOperation(final AbstractInsnNode insn, Value value)
- throws AnalyzerException
- {
- Value expected;
- switch (insn.getOpcode()) {
- case INEG:
- case IINC:
- case I2F:
- case I2L:
- case I2D:
- case I2B:
- case I2C:
- case I2S:
- case IFEQ:
- case IFNE:
- case IFLT:
- case IFGE:
- case IFGT:
- case IFLE:
- case TABLESWITCH:
- case LOOKUPSWITCH:
- case IRETURN:
- case NEWARRAY:
- case ANEWARRAY:
- expected = BasicValue.INT_VALUE;
- break;
- case FNEG:
- case F2I:
- case F2L:
- case F2D:
- case FRETURN:
- expected = BasicValue.FLOAT_VALUE;
- break;
- case LNEG:
- case L2I:
- case L2F:
- case L2D:
- case LRETURN:
- expected = BasicValue.LONG_VALUE;
- break;
- case DNEG:
- case D2I:
- case D2F:
- case D2L:
- case DRETURN:
- expected = BasicValue.DOUBLE_VALUE;
- break;
- case GETFIELD:
- expected = newValue(Type.getType("L"
- + ((FieldInsnNode) insn).owner + ";"));
- break;
- case CHECKCAST:
- if (!((BasicValue) value).isReference()) {
- throw new AnalyzerException(null,
- "an object reference",
- value);
- }
- return super.unaryOperation(insn, value);
- case ARRAYLENGTH:
- if (!isArrayValue(value)) {
- throw new AnalyzerException(null,
- "an array reference",
- value);
- }
- return super.unaryOperation(insn, value);
- case ARETURN:
- case ATHROW:
- case INSTANCEOF:
- case MONITORENTER:
- case MONITOREXIT:
- case IFNULL:
- case IFNONNULL:
- if (!((BasicValue) value).isReference()) {
- throw new AnalyzerException(null,
- "an object reference",
- value);
- }
- return super.unaryOperation(insn, value);
- case PUTSTATIC:
- expected = newValue(Type.getType(((FieldInsnNode) insn).desc));
- break;
- default:
- throw new RuntimeException("Internal error.");
- }
- if (!isSubTypeOf(value, expected)) {
- throw new AnalyzerException(null, expected, value);
- }
- return super.unaryOperation(insn, value);
- }
-
- public Value binaryOperation(
- final AbstractInsnNode insn,
- final Value value1,
- final Value value2) throws AnalyzerException
- {
- Value expected1;
- Value expected2;
- switch (insn.getOpcode()) {
- case IALOAD:
- expected1 = newValue(Type.getType("[I"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case BALOAD:
- if (!isSubTypeOf(value1, newValue(Type.getType("[Z")))) {
- expected1 = newValue(Type.getType("[B"));
- } else {
- expected1 = newValue(Type.getType("[Z"));
- }
- expected2 = BasicValue.INT_VALUE;
- break;
- case CALOAD:
- expected1 = newValue(Type.getType("[C"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case SALOAD:
- expected1 = newValue(Type.getType("[S"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case LALOAD:
- expected1 = newValue(Type.getType("[J"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case FALOAD:
- expected1 = newValue(Type.getType("[F"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case DALOAD:
- expected1 = newValue(Type.getType("[D"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case AALOAD:
- expected1 = newValue(Type.getType("[Ljava/lang/Object;"));
- expected2 = BasicValue.INT_VALUE;
- break;
- case IADD:
- case ISUB:
- case IMUL:
- case IDIV:
- case IREM:
- case ISHL:
- case ISHR:
- case IUSHR:
- case IAND:
- case IOR:
- case IXOR:
- case IF_ICMPEQ:
- case IF_ICMPNE:
- case IF_ICMPLT:
- case IF_ICMPGE:
- case IF_ICMPGT:
- case IF_ICMPLE:
- expected1 = BasicValue.INT_VALUE;
- expected2 = BasicValue.INT_VALUE;
- break;
- case FADD:
- case FSUB:
- case FMUL:
- case FDIV:
- case FREM:
- case FCMPL:
- case FCMPG:
- expected1 = BasicValue.FLOAT_VALUE;
- expected2 = BasicValue.FLOAT_VALUE;
- break;
- case LADD:
- case LSUB:
- case LMUL:
- case LDIV:
- case LREM:
- case LAND:
- case LOR:
- case LXOR:
- case LCMP:
- expected1 = BasicValue.LONG_VALUE;
- expected2 = BasicValue.LONG_VALUE;
- break;
- case LSHL:
- case LSHR:
- case LUSHR:
- expected1 = BasicValue.LONG_VALUE;
- expected2 = BasicValue.INT_VALUE;
- break;
- case DADD:
- case DSUB:
- case DMUL:
- case DDIV:
- case DREM:
- case DCMPL:
- case DCMPG:
- expected1 = BasicValue.DOUBLE_VALUE;
- expected2 = BasicValue.DOUBLE_VALUE;
- break;
- case IF_ACMPEQ:
- case IF_ACMPNE:
- expected1 = BasicValue.REFERENCE_VALUE;
- expected2 = BasicValue.REFERENCE_VALUE;
- break;
- case PUTFIELD:
- FieldInsnNode fin = (FieldInsnNode) insn;
- expected1 = newValue(Type.getType("L" + fin.owner + ";"));
- expected2 = newValue(Type.getType(fin.desc));
- break;
- default:
- throw new RuntimeException("Internal error.");
- }
- if (!isSubTypeOf(value1, expected1)) {
- throw new AnalyzerException("First argument", expected1, value1);
- } else if (!isSubTypeOf(value2, expected2)) {
- throw new AnalyzerException("Second argument", expected2, value2);
- }
- if (insn.getOpcode() == AALOAD) {
- return getElementValue(value1);
- } else {
- return super.binaryOperation(insn, value1, value2);
- }
- }
-
- public Value ternaryOperation(
- final AbstractInsnNode insn,
- final Value value1,
- final Value value2,
- final Value value3) throws AnalyzerException
- {
- Value expected1;
- Value expected3;
- switch (insn.getOpcode()) {
- case IASTORE:
- expected1 = newValue(Type.getType("[I"));
- expected3 = BasicValue.INT_VALUE;
- break;
- case BASTORE:
- if (!isSubTypeOf(value1, newValue(Type.getType("[Z")))) {
- expected1 = newValue(Type.getType("[B"));
- } else {
- expected1 = newValue(Type.getType("[Z"));
- }
- expected3 = BasicValue.INT_VALUE;
- break;
- case CASTORE:
- expected1 = newValue(Type.getType("[C"));
- expected3 = BasicValue.INT_VALUE;
- break;
- case SASTORE:
- expected1 = newValue(Type.getType("[S"));
- expected3 = BasicValue.INT_VALUE;
- break;
- case LASTORE:
- expected1 = newValue(Type.getType("[J"));
- expected3 = BasicValue.LONG_VALUE;
- break;
- case FASTORE:
- expected1 = newValue(Type.getType("[F"));
- expected3 = BasicValue.FLOAT_VALUE;
- break;
- case DASTORE:
- expected1 = newValue(Type.getType("[D"));
- expected3 = BasicValue.DOUBLE_VALUE;
- break;
- case AASTORE:
- expected1 = value1;
- expected3 = BasicValue.REFERENCE_VALUE;
- break;
- default:
- throw new RuntimeException("Internal error.");
- }
- if (!isSubTypeOf(value1, expected1)) {
- throw new AnalyzerException("First argument", "a " + expected1
- + " array reference", value1);
- } else if (value2 != BasicValue.INT_VALUE) {
- throw new AnalyzerException("Second argument",
- BasicValue.INT_VALUE,
- value2);
- } else if (!isSubTypeOf(value3, expected3)) {
- throw new AnalyzerException("Third argument", expected3, value3);
- }
- return null;
- }
-
- public Value naryOperation(final AbstractInsnNode insn, final List values)
- throws AnalyzerException
- {
- int opcode = insn.getOpcode();
- if (opcode == MULTIANEWARRAY) {
- for (int i = 0; i < values.size(); ++i) {
- if (values.get(i) != BasicValue.INT_VALUE) {
- throw new AnalyzerException(null,
- BasicValue.INT_VALUE,
- (Value) values.get(i));
- }
- }
- } else {
- int i = 0;
- int j = 0;
- if (opcode != INVOKESTATIC) {
- String own = ((MethodInsnNode) insn).owner;
- if (own.charAt(0) != '[') { // can happen with JDK1.5 clone()
- own = "L" + own + ";";
- }
- Type owner = Type.getType(own);
- if (!isSubTypeOf((Value) values.get(i++), newValue(owner))) {
- throw new AnalyzerException("Method owner",
- newValue(owner),
- (Value) values.get(0));
- }
- }
- Type[] args = Type.getArgumentTypes(((MethodInsnNode) insn).desc);
- while (i < values.size()) {
- Value expected = newValue(args[j++]);
- Value encountered = (Value) values.get(i++);
- if (!isSubTypeOf(encountered, expected)) {
- throw new AnalyzerException("Argument " + j,
- expected,
- encountered);
- }
- }
- }
- return super.naryOperation(insn, values);
- }
-
- protected boolean isArrayValue(final Value value) {
- return ((BasicValue) value).isReference();
- }
-
- protected Value getElementValue(final Value objectArrayValue)
- throws AnalyzerException
- {
- return BasicValue.REFERENCE_VALUE;
- }
-
- protected boolean isSubTypeOf(final Value value, final Value expected) {
- return value == expected;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowInterpreter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowInterpreter.java
deleted file mode 100644
index 3847d49..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowInterpreter.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.FieldInsnNode;
-import org.objectweb.asm.tree.LdcInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-
-/**
- * An {@link Interpreter} for {@link DataflowValue} values.
- *
- * @author Eric Bruneton
- */
-public class DataflowInterpreter implements Opcodes, Interpreter {
-
- public Value newValue(final Type type) {
- return new DataflowValue(type == null ? 1 : type.getSize());
- }
-
- public Value newOperation(final AbstractInsnNode insn) {
- int size;
- switch (insn.getOpcode()) {
- case LCONST_0:
- case LCONST_1:
- case DCONST_0:
- case DCONST_1:
- size = 2;
- break;
- case LDC:
- Object cst = ((LdcInsnNode) insn).cst;
- size = cst instanceof Long || cst instanceof Double ? 2 : 1;
- break;
- case GETSTATIC:
- size = Type.getType(((FieldInsnNode) insn).desc).getSize();
- break;
- default:
- size = 1;
- }
- return new DataflowValue(size, insn);
- }
-
- public Value copyOperation(final AbstractInsnNode insn, final Value value) {
- return new DataflowValue(value.getSize(), insn);
- }
-
- public Value unaryOperation(final AbstractInsnNode insn, final Value value)
- {
- int size;
- switch (insn.getOpcode()) {
- case LNEG:
- case DNEG:
- case I2L:
- case I2D:
- case L2D:
- case F2L:
- case F2D:
- case D2L:
- size = 2;
- break;
- case GETFIELD:
- size = Type.getType(((FieldInsnNode) insn).desc).getSize();
- break;
- default:
- size = 1;
- }
- return new DataflowValue(size, insn);
- }
-
- public Value binaryOperation(
- final AbstractInsnNode insn,
- final Value value1,
- final Value value2)
- {
- int size;
- switch (insn.getOpcode()) {
- case LALOAD:
- case DALOAD:
- case LADD:
- case DADD:
- case LSUB:
- case DSUB:
- case LMUL:
- case DMUL:
- case LDIV:
- case DDIV:
- case LREM:
- case DREM:
- case LSHL:
- case LSHR:
- case LUSHR:
- case LAND:
- case LOR:
- case LXOR:
- size = 2;
- break;
- default:
- size = 1;
- }
- return new DataflowValue(size, insn);
- }
-
- public Value ternaryOperation(
- final AbstractInsnNode insn,
- final Value value1,
- final Value value2,
- final Value value3)
- {
- return new DataflowValue(1, insn);
- }
-
- public Value naryOperation(final AbstractInsnNode insn, final List values) {
- int size;
- if (insn.getOpcode() == MULTIANEWARRAY) {
- size = 1;
- } else {
- size = Type.getReturnType(((MethodInsnNode) insn).desc).getSize();
- }
- return new DataflowValue(size, insn);
- }
-
- public Value merge(final Value v, final Value w) {
- DataflowValue dv = (DataflowValue) v;
- DataflowValue dw = (DataflowValue) w;
- if (dv.insns instanceof SmallSet && dw.insns instanceof SmallSet) {
- Set s = ((SmallSet) dv.insns).union((SmallSet) dw.insns);
- if (s == dv.insns && dv.size == dw.size) {
- return v;
- } else {
- return new DataflowValue(Math.min(dv.size, dw.size), s);
- }
- }
- if (dv.size != dw.size || !dv.insns.containsAll(dw.insns)) {
- Set s = new HashSet();
- s.addAll(dv.insns);
- s.addAll(dw.insns);
- return new DataflowValue(Math.min(dv.size, dw.size), s);
- }
- return v;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowValue.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowValue.java
deleted file mode 100644
index 7b7756f..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/DataflowValue.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.Set;
-
-import org.objectweb.asm.tree.AbstractInsnNode;
-
-/**
- * A {@link Value} that is represented by its type in a two types type system.
- * This type system distinguishes the ONEWORD and TWOWORDS types.
- *
- * @author Eric Bruneton
- */
-public class DataflowValue implements Value {
-
- /**
- * The size of this value.
- */
- public final int size;
-
- /**
- * The instructions that can produce this value. For example, for the Java
- * code below, the instructions that can produce the value of <tt>i</tt>
- * at line 5 are the txo ISTORE instructions at line 1 and 3:
- *
- * <pre>
- * 1: i = 0;
- * 2: if (...) {
- * 3: i = 1;
- * 4: }
- * 5: return i;
- * </pre>
- *
- * This field is a set of {@link AbstractInsnNode} objects.
- */
- public final Set insns;
-
- public DataflowValue(final int size) {
- this(size, SmallSet.EMPTY_SET);
- }
-
- public DataflowValue(final int size, final AbstractInsnNode insn) {
- this.size = size;
- this.insns = new SmallSet(insn, null);
- }
-
- public DataflowValue(final int size, final Set insns) {
- this.size = size;
- this.insns = insns;
- }
-
- public int getSize() {
- return size;
- }
-
- public boolean equals(final Object value) {
- DataflowValue v = (DataflowValue) value;
- return size == v.size && insns.equals(v.insns);
- }
-
- public int hashCode() {
- return insns.hashCode();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Frame.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Frame.java
deleted file mode 100644
index 1edf40c..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Frame.java
+++ /dev/null
@@ -1,670 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.IincInsnNode;
-import org.objectweb.asm.tree.MethodInsnNode;
-import org.objectweb.asm.tree.MultiANewArrayInsnNode;
-import org.objectweb.asm.tree.VarInsnNode;
-
-/**
- * A symbolic execution stack frame. A stack frame contains a set of local
- * variable slots, and an operand stack. Warning: long and double values are
- * represented by <i>two</i> slots in local variables, and by <i>one</i> slot
- * in the operand stack.
- *
- * @author Eric Bruneton
- */
-public class Frame {
-
- /**
- * The local variables and operand stack of this frame.
- */
- private Value[] values;
-
- /**
- * The number of local variables of this frame.
- */
- private int locals;
-
- /**
- * The number of elements in the operand stack.
- */
- private int top;
-
- /**
- * Constructs a new frame with the given size.
- *
- * @param nLocals the maximum number of local variables of the frame.
- * @param nStack the maximum stack size of the frame.
- */
- public Frame(final int nLocals, final int nStack) {
- this.values = new Value[nLocals + nStack];
- this.locals = nLocals;
- }
-
- /**
- * Constructs a new frame that is identical to the given frame.
- *
- * @param src a frame.
- */
- public Frame(final Frame src) {
- this(src.locals, src.values.length - src.locals);
- init(src);
- }
-
- /**
- * Copies the state of the given frame into this frame.
- *
- * @param src a frame.
- * @return this frame.
- */
- public Frame init(final Frame src) {
- System.arraycopy(src.values, 0, values, 0, values.length);
- top = src.top;
- return this;
- }
-
- /**
- * Returns the maximum number of local variables of this frame.
- *
- * @return the maximum number of local variables of this frame.
- */
- public int getLocals() {
- return locals;
- }
-
- /**
- * Returns the value of the given local variable.
- *
- * @param i a local variable index.
- * @return the value of the given local variable.
- * @throws IndexOutOfBoundsException if the variable does not exist.
- */
- public Value getLocal(final int i) throws IndexOutOfBoundsException {
- if (i >= locals) {
- throw new IndexOutOfBoundsException("Trying to access an inexistant local variable");
- }
- return values[i];
- }
-
- /**
- * Sets the value of the given local variable.
- *
- * @param i a local variable index.
- * @param value the new value of this local variable.
- * @throws IndexOutOfBoundsException if the variable does not exist.
- */
- public void setLocal(final int i, final Value value)
- throws IndexOutOfBoundsException
- {
- if (i >= locals) {
- throw new IndexOutOfBoundsException("Trying to access an inexistant local variable");
- }
- values[i] = value;
- }
-
- /**
- * Returns the number of values in the operand stack of this frame. Long and
- * double values are treated as single values.
- *
- * @return the number of values in the operand stack of this frame.
- */
- public int getStackSize() {
- return top;
- }
-
- /**
- * Returns the value of the given operand stack slot.
- *
- * @param i the index of an operand stack slot.
- * @return the value of the given operand stack slot.
- * @throws IndexOutOfBoundsException if the operand stack slot does not
- * exist.
- */
- public Value getStack(final int i) throws IndexOutOfBoundsException {
- if (i >= top) {
- throw new IndexOutOfBoundsException("Trying to access an inexistant stack element");
- }
- return values[i + locals];
- }
-
- /**
- * Clears the operand stack of this frame.
- */
- public void clearStack() {
- top = 0;
- }
-
- /**
- * Pops a value from the operand stack of this frame.
- *
- * @return the value that has been popped from the stack.
- * @throws IndexOutOfBoundsException if the operand stack is empty.
- */
- public Value pop() throws IndexOutOfBoundsException {
- if (top == 0) {
- throw new IndexOutOfBoundsException("Cannot pop operand off an empty stack.");
- }
- return values[--top + locals];
- }
-
- /**
- * Pushes a value into the operand stack of this frame.
- *
- * @param value the value that must be pushed into the stack.
- * @throws IndexOutOfBoundsException if the operand stack is full.
- */
- public void push(final Value value) throws IndexOutOfBoundsException {
- if (top + locals >= values.length) {
- throw new IndexOutOfBoundsException("Insufficient maximum stack size.");
- }
- values[top++ + locals] = value;
- }
-
- public void execute(
- final AbstractInsnNode insn,
- final Interpreter interpreter) throws AnalyzerException
- {
- Value value1, value2, value3, value4;
- List values;
- int var;
-
- switch (insn.getOpcode()) {
- case Opcodes.NOP:
- break;
- case Opcodes.ACONST_NULL:
- case Opcodes.ICONST_M1:
- case Opcodes.ICONST_0:
- case Opcodes.ICONST_1:
- case Opcodes.ICONST_2:
- case Opcodes.ICONST_3:
- case Opcodes.ICONST_4:
- case Opcodes.ICONST_5:
- case Opcodes.LCONST_0:
- case Opcodes.LCONST_1:
- case Opcodes.FCONST_0:
- case Opcodes.FCONST_1:
- case Opcodes.FCONST_2:
- case Opcodes.DCONST_0:
- case Opcodes.DCONST_1:
- case Opcodes.BIPUSH:
- case Opcodes.SIPUSH:
- case Opcodes.LDC:
- push(interpreter.newOperation(insn));
- break;
- case Opcodes.ILOAD:
- case Opcodes.LLOAD:
- case Opcodes.FLOAD:
- case Opcodes.DLOAD:
- case Opcodes.ALOAD:
- push(interpreter.copyOperation(insn,
- getLocal(((VarInsnNode) insn).var)));
- break;
- case Opcodes.IALOAD:
- case Opcodes.LALOAD:
- case Opcodes.FALOAD:
- case Opcodes.DALOAD:
- case Opcodes.AALOAD:
- case Opcodes.BALOAD:
- case Opcodes.CALOAD:
- case Opcodes.SALOAD:
- value2 = pop();
- value1 = pop();
- push(interpreter.binaryOperation(insn, value1, value2));
- break;
- case Opcodes.ISTORE:
- case Opcodes.LSTORE:
- case Opcodes.FSTORE:
- case Opcodes.DSTORE:
- case Opcodes.ASTORE:
- value1 = interpreter.copyOperation(insn, pop());
- var = ((VarInsnNode) insn).var;
- setLocal(var, value1);
- if (value1.getSize() == 2) {
- setLocal(var + 1, interpreter.newValue(null));
- }
- if (var > 0) {
- Value local = getLocal(var - 1);
- if (local != null && local.getSize() == 2) {
- setLocal(var + 1, interpreter.newValue(null));
- }
- }
- break;
- case Opcodes.IASTORE:
- case Opcodes.LASTORE:
- case Opcodes.FASTORE:
- case Opcodes.DASTORE:
- case Opcodes.AASTORE:
- case Opcodes.BASTORE:
- case Opcodes.CASTORE:
- case Opcodes.SASTORE:
- value3 = pop();
- value2 = pop();
- value1 = pop();
- interpreter.ternaryOperation(insn, value1, value2, value3);
- break;
- case Opcodes.POP:
- if (pop().getSize() == 2) {
- throw new AnalyzerException("Illegal use of POP");
- }
- break;
- case Opcodes.POP2:
- if (pop().getSize() == 1) {
- if (pop().getSize() != 1) {
- throw new AnalyzerException("Illegal use of POP2");
- }
- }
- break;
- case Opcodes.DUP:
- value1 = pop();
- if (value1.getSize() != 1) {
- throw new AnalyzerException("Illegal use of DUP");
- }
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value1));
- break;
- case Opcodes.DUP_X1:
- value1 = pop();
- value2 = pop();
- if (value1.getSize() != 1 || value2.getSize() != 1) {
- throw new AnalyzerException("Illegal use of DUP_X1");
- }
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- case Opcodes.DUP_X2:
- value1 = pop();
- if (value1.getSize() == 1) {
- value2 = pop();
- if (value2.getSize() == 1) {
- value3 = pop();
- if (value3.getSize() == 1) {
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value3));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- } else {
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- }
- throw new AnalyzerException("Illegal use of DUP_X2");
- case Opcodes.DUP2:
- value1 = pop();
- if (value1.getSize() == 1) {
- value2 = pop();
- if (value2.getSize() == 1) {
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- } else {
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- throw new AnalyzerException("Illegal use of DUP2");
- case Opcodes.DUP2_X1:
- value1 = pop();
- if (value1.getSize() == 1) {
- value2 = pop();
- if (value2.getSize() == 1) {
- value3 = pop();
- if (value3.getSize() == 1) {
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value3));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- }
- } else {
- value2 = pop();
- if (value2.getSize() == 1) {
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- }
- throw new AnalyzerException("Illegal use of DUP2_X1");
- case Opcodes.DUP2_X2:
- value1 = pop();
- if (value1.getSize() == 1) {
- value2 = pop();
- if (value2.getSize() == 1) {
- value3 = pop();
- if (value3.getSize() == 1) {
- value4 = pop();
- if (value4.getSize() == 1) {
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value4));
- push(interpreter.copyOperation(insn, value3));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- } else {
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value3));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- }
- } else {
- value2 = pop();
- if (value2.getSize() == 1) {
- value3 = pop();
- if (value3.getSize() == 1) {
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value3));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- } else {
- push(interpreter.copyOperation(insn, value1));
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- }
- }
- throw new AnalyzerException("Illegal use of DUP2_X2");
- case Opcodes.SWAP:
- value2 = pop();
- value1 = pop();
- if (value1.getSize() != 1 || value2.getSize() != 1) {
- throw new AnalyzerException("Illegal use of SWAP");
- }
- push(interpreter.copyOperation(insn, value2));
- push(interpreter.copyOperation(insn, value1));
- break;
- case Opcodes.IADD:
- case Opcodes.LADD:
- case Opcodes.FADD:
- case Opcodes.DADD:
- case Opcodes.ISUB:
- case Opcodes.LSUB:
- case Opcodes.FSUB:
- case Opcodes.DSUB:
- case Opcodes.IMUL:
- case Opcodes.LMUL:
- case Opcodes.FMUL:
- case Opcodes.DMUL:
- case Opcodes.IDIV:
- case Opcodes.LDIV:
- case Opcodes.FDIV:
- case Opcodes.DDIV:
- case Opcodes.IREM:
- case Opcodes.LREM:
- case Opcodes.FREM:
- case Opcodes.DREM:
- value2 = pop();
- value1 = pop();
- push(interpreter.binaryOperation(insn, value1, value2));
- break;
- case Opcodes.INEG:
- case Opcodes.LNEG:
- case Opcodes.FNEG:
- case Opcodes.DNEG:
- push(interpreter.unaryOperation(insn, pop()));
- break;
- case Opcodes.ISHL:
- case Opcodes.LSHL:
- case Opcodes.ISHR:
- case Opcodes.LSHR:
- case Opcodes.IUSHR:
- case Opcodes.LUSHR:
- case Opcodes.IAND:
- case Opcodes.LAND:
- case Opcodes.IOR:
- case Opcodes.LOR:
- case Opcodes.IXOR:
- case Opcodes.LXOR:
- value2 = pop();
- value1 = pop();
- push(interpreter.binaryOperation(insn, value1, value2));
- break;
- case Opcodes.IINC:
- var = ((IincInsnNode) insn).var;
- setLocal(var, interpreter.unaryOperation(insn, getLocal(var)));
- break;
- case Opcodes.I2L:
- case Opcodes.I2F:
- case Opcodes.I2D:
- case Opcodes.L2I:
- case Opcodes.L2F:
- case Opcodes.L2D:
- case Opcodes.F2I:
- case Opcodes.F2L:
- case Opcodes.F2D:
- case Opcodes.D2I:
- case Opcodes.D2L:
- case Opcodes.D2F:
- case Opcodes.I2B:
- case Opcodes.I2C:
- case Opcodes.I2S:
- push(interpreter.unaryOperation(insn, pop()));
- break;
- case Opcodes.LCMP:
- case Opcodes.FCMPL:
- case Opcodes.FCMPG:
- case Opcodes.DCMPL:
- case Opcodes.DCMPG:
- value2 = pop();
- value1 = pop();
- push(interpreter.binaryOperation(insn, value1, value2));
- break;
- case Opcodes.IFEQ:
- case Opcodes.IFNE:
- case Opcodes.IFLT:
- case Opcodes.IFGE:
- case Opcodes.IFGT:
- case Opcodes.IFLE:
- interpreter.unaryOperation(insn, pop());
- break;
- case Opcodes.IF_ICMPEQ:
- case Opcodes.IF_ICMPNE:
- case Opcodes.IF_ICMPLT:
- case Opcodes.IF_ICMPGE:
- case Opcodes.IF_ICMPGT:
- case Opcodes.IF_ICMPLE:
- case Opcodes.IF_ACMPEQ:
- case Opcodes.IF_ACMPNE:
- value2 = pop();
- value1 = pop();
- interpreter.binaryOperation(insn, value1, value2);
- break;
- case Opcodes.GOTO:
- break;
- case Opcodes.JSR:
- push(interpreter.newOperation(insn));
- break;
- case Opcodes.RET:
- break;
- case Opcodes.TABLESWITCH:
- case Opcodes.LOOKUPSWITCH:
- case Opcodes.IRETURN:
- case Opcodes.LRETURN:
- case Opcodes.FRETURN:
- case Opcodes.DRETURN:
- case Opcodes.ARETURN:
- interpreter.unaryOperation(insn, pop());
- break;
- case Opcodes.RETURN:
- break;
- case Opcodes.GETSTATIC:
- push(interpreter.newOperation(insn));
- break;
- case Opcodes.PUTSTATIC:
- interpreter.unaryOperation(insn, pop());
- break;
- case Opcodes.GETFIELD:
- push(interpreter.unaryOperation(insn, pop()));
- break;
- case Opcodes.PUTFIELD:
- value2 = pop();
- value1 = pop();
- interpreter.binaryOperation(insn, value1, value2);
- break;
- case Opcodes.INVOKEVIRTUAL:
- case Opcodes.INVOKESPECIAL:
- case Opcodes.INVOKESTATIC:
- case Opcodes.INVOKEINTERFACE:
- values = new ArrayList();
- String desc = ((MethodInsnNode) insn).desc;
- for (int i = Type.getArgumentTypes(desc).length; i > 0; --i) {
- values.add(0, pop());
- }
- if (insn.getOpcode() != Opcodes.INVOKESTATIC) {
- values.add(0, pop());
- }
- if (Type.getReturnType(desc) == Type.VOID_TYPE) {
- interpreter.naryOperation(insn, values);
- } else {
- push(interpreter.naryOperation(insn, values));
- }
- break;
- case Opcodes.NEW:
- push(interpreter.newOperation(insn));
- break;
- case Opcodes.NEWARRAY:
- case Opcodes.ANEWARRAY:
- case Opcodes.ARRAYLENGTH:
- push(interpreter.unaryOperation(insn, pop()));
- break;
- case Opcodes.ATHROW:
- interpreter.unaryOperation(insn, pop());
- break;
- case Opcodes.CHECKCAST:
- case Opcodes.INSTANCEOF:
- push(interpreter.unaryOperation(insn, pop()));
- break;
- case Opcodes.MONITORENTER:
- case Opcodes.MONITOREXIT:
- interpreter.unaryOperation(insn, pop());
- break;
- case Opcodes.MULTIANEWARRAY:
- values = new ArrayList();
- for (int i = ((MultiANewArrayInsnNode) insn).dims; i > 0; --i) {
- values.add(0, pop());
- }
- push(interpreter.naryOperation(insn, values));
- break;
- case Opcodes.IFNULL:
- case Opcodes.IFNONNULL:
- interpreter.unaryOperation(insn, pop());
- break;
- default:
- throw new RuntimeException("Illegal opcode");
- }
- }
-
- /**
- * Merges this frame with the given frame.
- *
- * @param frame a frame.
- * @param interpreter the interpreter used to merge values.
- * @return <tt>true</tt> if this frame has been changed as a result of the
- * merge operation, or <tt>false</tt> otherwise.
- * @throws AnalyzerException if the frames have incompatible sizes.
- */
- public boolean merge(final Frame frame, final Interpreter interpreter)
- throws AnalyzerException
- {
- if (top != frame.top) {
- throw new AnalyzerException("Incompatible stack heights");
- }
- boolean changes = false;
- for (int i = 0; i < locals + top; ++i) {
- Value v = interpreter.merge(values[i], frame.values[i]);
- if (v != values[i]) {
- values[i] = v;
- changes |= true;
- }
- }
- return changes;
- }
-
- /**
- * Merges this frame with the given frame (case of a RET instruction).
- *
- * @param frame a frame
- * @param access the local variables that have been accessed by the
- * subroutine to which the RET instruction corresponds.
- * @return <tt>true</tt> if this frame has been changed as a result of the
- * merge operation, or <tt>false</tt> otherwise.
- */
- public boolean merge(final Frame frame, final boolean[] access) {
- boolean changes = false;
- for (int i = 0; i < locals; ++i) {
- if (!access[i] && !values[i].equals(frame.values[i])) {
- values[i] = frame.values[i];
- changes = true;
- }
- }
- return changes;
- }
-
- /**
- * Returns a string representation of this frame.
- *
- * @return a string representation of this frame.
- */
- public String toString() {
- StringBuffer b = new StringBuffer();
- for (int i = 0; i < locals; ++i) {
- b.append(values[i]).append(' ');
- }
- b.append(' ');
- for (int i = 0; i < top; ++i) {
- b.append(values[i + locals].toString()).append(' ');
- }
- return b.toString();
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/IntMap.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/IntMap.java
deleted file mode 100644
index cac091c..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/IntMap.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-/**
- * A fixed size map of integer values.
- *
- * @author Eric Bruneton
- */
-class IntMap {
-
- private int size;
-
- private Object[] keys;
-
- private int[] values;
-
- public IntMap(final int size) {
- this.size = size;
- this.keys = new Object[size];
- this.values = new int[size];
- }
-
- public int get(final Object key) {
- int n = size;
- int h = (key.hashCode() & 0x7FFFFFFF) % n;
- int i = h;
- while (keys[i] != key) {
- i = (i + 1) % n;
- if (i == h) {
- throw new RuntimeException("Cannot find index of " + key);
- }
- }
- return values[i];
- }
-
- public void put(final Object key, final int value) {
- int n = size;
- int i = (key.hashCode() & 0x7FFFFFFF) % n;
- while (keys[i] != null) {
- i = (i + 1) % n;
- }
- keys[i] = key;
- values[i] = value;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Interpreter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Interpreter.java
deleted file mode 100644
index f989f4b..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Interpreter.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-
-/**
- * A semantic bytecode interpreter. More precisely, this interpreter only
- * manages the computation of values from other values: it does not manage the
- * transfer of values to or from the stack, and to or from the local variables.
- * This separation allows a generic bytecode {@link Analyzer} to work with
- * various semantic interpreters, without needing to duplicate the code to
- * simulate the transfer of values.
- *
- * @author Eric Bruneton
- */
-public interface Interpreter {
-
- /**
- * Creates a new value that represents the given type.
- *
- * Called for method parameters (including <code>this</code>),
- * exception handler variable and with <code>null</code> type
- * for variables reserved by long and double types.
- *
- * @param type a primitive or reference type, or <tt>null</tt> to
- * represent an uninitialized value.
- * @return a value that represents the given type. The size of the returned
- * value must be equal to the size of the given type.
- */
- Value newValue(Type type);
-
- /**
- * Interprets a bytecode instruction without arguments. This method is
- * called for the following opcodes:
- *
- * ACONST_NULL, ICONST_M1, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4,
- * ICONST_5, LCONST_0, LCONST_1, FCONST_0, FCONST_1, FCONST_2, DCONST_0,
- * DCONST_1, BIPUSH, SIPUSH, LDC, JSR, GETSTATIC, NEW
- *
- * @param insn the bytecode instruction to be interpreted.
- * @return the result of the interpretation of the given instruction.
- * @throws AnalyzerException if an error occured during the interpretation.
- */
- Value newOperation(AbstractInsnNode insn) throws AnalyzerException;
-
- /**
- * Interprets a bytecode instruction that moves a value on the stack or to
- * or from local variables. This method is called for the following opcodes:
- *
- * ILOAD, LLOAD, FLOAD, DLOAD, ALOAD, ISTORE, LSTORE, FSTORE, DSTORE,
- * ASTORE, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, SWAP
- *
- * @param insn the bytecode instruction to be interpreted.
- * @param value the value that must be moved by the instruction.
- * @return the result of the interpretation of the given instruction. The
- * returned value must be <tt>equal</tt> to the given value.
- * @throws AnalyzerException if an error occured during the interpretation.
- */
- Value copyOperation(AbstractInsnNode insn, Value value)
- throws AnalyzerException;
-
- /**
- * Interprets a bytecode instruction with a single argument. This method is
- * called for the following opcodes:
- *
- * INEG, LNEG, FNEG, DNEG, IINC, I2L, I2F, I2D, L2I, L2F, L2D, F2I, F2L,
- * F2D, D2I, D2L, D2F, I2B, I2C, I2S, IFEQ, IFNE, IFLT, IFGE, IFGT, IFLE,
- * TABLESWITCH, LOOKUPSWITCH, IRETURN, LRETURN, FRETURN, DRETURN, ARETURN,
- * PUTSTATIC, GETFIELD, NEWARRAY, ANEWARRAY, ARRAYLENGTH, ATHROW, CHECKCAST,
- * INSTANCEOF, MONITORENTER, MONITOREXIT, IFNULL, IFNONNULL
- *
- * @param insn the bytecode instruction to be interpreted.
- * @param value the argument of the instruction to be interpreted.
- * @return the result of the interpretation of the given instruction.
- * @throws AnalyzerException if an error occured during the interpretation.
- */
- Value unaryOperation(AbstractInsnNode insn, Value value)
- throws AnalyzerException;
-
- /**
- * Interprets a bytecode instruction with two arguments. This method is
- * called for the following opcodes:
- *
- * IALOAD, LALOAD, FALOAD, DALOAD, AALOAD, BALOAD, CALOAD, SALOAD, IADD,
- * LADD, FADD, DADD, ISUB, LSUB, FSUB, DSUB, IMUL, LMUL, FMUL, DMUL, IDIV,
- * LDIV, FDIV, DDIV, IREM, LREM, FREM, DREM, ISHL, LSHL, ISHR, LSHR, IUSHR,
- * LUSHR, IAND, LAND, IOR, LOR, IXOR, LXOR, LCMP, FCMPL, FCMPG, DCMPL,
- * DCMPG, IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE,
- * IF_ACMPEQ, IF_ACMPNE, PUTFIELD
- *
- * @param insn the bytecode instruction to be interpreted.
- * @param value1 the first argument of the instruction to be interpreted.
- * @param value2 the second argument of the instruction to be interpreted.
- * @return the result of the interpretation of the given instruction.
- * @throws AnalyzerException if an error occured during the interpretation.
- */
- Value binaryOperation(AbstractInsnNode insn, Value value1, Value value2)
- throws AnalyzerException;
-
- /**
- * Interprets a bytecode instruction with three arguments. This method is
- * called for the following opcodes:
- *
- * IASTORE, LASTORE, FASTORE, DASTORE, AASTORE, BASTORE, CASTORE, SASTORE
- *
- * @param insn the bytecode instruction to be interpreted.
- * @param value1 the first argument of the instruction to be interpreted.
- * @param value2 the second argument of the instruction to be interpreted.
- * @param value3 the third argument of the instruction to be interpreted.
- * @return the result of the interpretation of the given instruction.
- * @throws AnalyzerException if an error occured during the interpretation.
- */
- Value ternaryOperation(
- AbstractInsnNode insn,
- Value value1,
- Value value2,
- Value value3) throws AnalyzerException;
-
- /**
- * Interprets a bytecode instruction with a variable number of arguments.
- * This method is called for the following opcodes:
- *
- * INVOKEVIRTUAL, INVOKESPECIAL, INVOKESTATIC, INVOKEINTERFACE,
- * MULTIANEWARRAY
- *
- * @param insn the bytecode instruction to be interpreted.
- * @param values the arguments of the instruction to be interpreted.
- * @return the result of the interpretation of the given instruction.
- * @throws AnalyzerException if an error occured during the interpretation.
- */
- Value naryOperation(AbstractInsnNode insn, List values)
- throws AnalyzerException;
-
- /**
- * Merges two values. The merge operation must return a value that
- * represents both values (for instance, if the two values are two types,
- * the merged value must be a common super type of the two types. If the two
- * values are integer intervals, the merged value must be an interval that
- * contains the previous ones. Likewise for other types of values).
- *
- * @param v a value.
- * @param w another value.
- * @return the merged value. If the merged value is equal to <tt>v</tt>,
- * this method <i>must</i> return <tt>v</tt>.
- */
- Value merge(Value v, Value w);
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SimpleVerifier.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SimpleVerifier.java
deleted file mode 100644
index 1329f77..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SimpleVerifier.java
+++ /dev/null
@@ -1,266 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.List;
-
-import org.objectweb.asm.Type;
-
-/**
- * An extended {@link BasicVerifier} that performs more precise verifications.
- * This verifier computes exact class types, instead of using a single "object
- * reference" type (as done in the {@link BasicVerifier}).
- *
- * @author Eric Bruneton
- * @author Bing Ran
- */
-public class SimpleVerifier extends BasicVerifier {
-
- /**
- * The class that is verified.
- */
- private final Type currentClass;
-
- /**
- * The super class of the class that is verified.
- */
- private final Type currentSuperClass;
-
- /**
- * The interfaces implemented by the class that is verified.
- */
- private final List currentClassInterfaces;
-
- /**
- * If the class that is verified is an interface.
- */
- private final boolean isInterface;
-
- /**
- * Constructs a new {@link SimpleVerifier}.
- */
- public SimpleVerifier() {
- this(null, null, false);
- }
-
- /**
- * Constructs a new {@link SimpleVerifier} to verify a specific class. This
- * class will not be loaded into the JVM since it may be incorrect.
- *
- * @param currentClass the class that is verified.
- * @param currentSuperClass the super class of the class that is verified.
- * @param isInterface if the class that is verified is an interface.
- */
- public SimpleVerifier(
- final Type currentClass,
- final Type currentSuperClass,
- final boolean isInterface)
- {
- this(currentClass, currentSuperClass, null, isInterface);
- }
-
- /**
- * Constructs a new {@link SimpleVerifier} to verify a specific class. This
- * class will not be loaded into the JVM since it may be incorrect.
- *
- * @param currentClass the class that is verified.
- * @param currentSuperClass the super class of the class that is verified.
- * @param currentClassInterfaces the interfaces implemented by the class
- * that is verified.
- * @param isInterface if the class that is verified is an interface.
- */
- public SimpleVerifier(
- final Type currentClass,
- final Type currentSuperClass,
- final List currentClassInterfaces,
- final boolean isInterface)
- {
- this.currentClass = currentClass;
- this.currentSuperClass = currentSuperClass;
- this.currentClassInterfaces = currentClassInterfaces;
- this.isInterface = isInterface;
- }
-
- public Value newValue(final Type type) {
- Value v = super.newValue(type);
- if (v == BasicValue.REFERENCE_VALUE) {
- v = new BasicValue(type);
- }
- return v;
- }
-
- protected boolean isArrayValue(final Value value) {
- Type t = ((BasicValue) value).getType();
- if (t != null) {
- return t.getDescriptor().equals("Lnull;")
- || t.getSort() == Type.ARRAY;
- }
- return false;
- }
-
- protected Value getElementValue(final Value objectArrayValue)
- throws AnalyzerException
- {
- Type arrayType = ((BasicValue) objectArrayValue).getType();
- if (arrayType != null) {
- if (arrayType.getSort() == Type.ARRAY) {
- return newValue(Type.getType(arrayType.getDescriptor()
- .substring(1)));
- } else if (arrayType.getDescriptor().equals("Lnull;")) {
- return objectArrayValue;
- }
- }
- throw new AnalyzerException("Not an array type");
- }
-
- protected boolean isSubTypeOf(final Value value, final Value expected) {
- Type expectedType = ((BasicValue) expected).getType();
- Type type = ((BasicValue) value).getType();
- if (expectedType == null) {
- return type == null;
- }
- switch (expectedType.getSort()) {
- case Type.INT:
- case Type.FLOAT:
- case Type.LONG:
- case Type.DOUBLE:
- return type == expectedType;
- case Type.ARRAY:
- case Type.OBJECT:
- if (expectedType.getDescriptor().equals("Lnull;")) {
- return type.getSort() == Type.OBJECT
- || type.getSort() == Type.ARRAY;
- }
- if (type.getDescriptor().equals("Lnull;")) {
- return true;
- } else if (type.getSort() == Type.OBJECT
- || type.getSort() == Type.ARRAY)
- {
- return isAssignableFrom(expectedType, type);
- } else {
- return false;
- }
- default:
- throw new RuntimeException("Internal error");
- }
- }
-
- public Value merge(final Value v, final Value w) {
- if (!v.equals(w)) {
- Type t = ((BasicValue) v).getType();
- Type u = ((BasicValue) w).getType();
- if (t != null
- && (t.getSort() == Type.OBJECT || t.getSort() == Type.ARRAY))
- {
- if (u != null
- && (u.getSort() == Type.OBJECT || u.getSort() == Type.ARRAY))
- {
- if (t.getDescriptor().equals("Lnull;")) {
- return w;
- }
- if (u.getDescriptor().equals("Lnull;")) {
- return v;
- }
- if (isAssignableFrom(t, u)) {
- return v;
- }
- if (isAssignableFrom(u, t)) {
- return w;
- }
- // TODO case of array classes of the same dimension
- // TODO should we look also for a common super interface?
- // problem: there may be several possible common super
- // interfaces
- do {
- if (t == null || isInterface(t)) {
- return BasicValue.REFERENCE_VALUE;
- }
- t = getSuperClass(t);
- if (isAssignableFrom(t, u)) {
- return newValue(t);
- }
- } while (true);
- }
- }
- return BasicValue.UNINITIALIZED_VALUE;
- }
- return v;
- }
-
- private boolean isInterface(final Type t) {
- if (currentClass != null && t.equals(currentClass)) {
- return isInterface;
- }
- return getClass(t).isInterface();
- }
-
- private Type getSuperClass(final Type t) {
- if (currentClass != null && t.equals(currentClass)) {
- return currentSuperClass;
- }
- Class c = getClass(t).getSuperclass();
- return c == null ? null : Type.getType(c);
- }
-
- private boolean isAssignableFrom(final Type t, final Type u) {
- if (t.equals(u)) {
- return true;
- }
- if (currentClass != null && t.equals(currentClass)) {
- return isAssignableFrom(t, getSuperClass(u));
- }
- if (currentClass != null && u.equals(currentClass)) {
- if (isAssignableFrom(t, currentSuperClass)) {
- return true;
- }
- if (currentClassInterfaces != null) {
- for (int i = 0; i < currentClassInterfaces.size(); ++i) {
- Type v = (Type) currentClassInterfaces.get(i);
- if (isAssignableFrom(t, v)) {
- return true;
- }
- }
- }
- return false;
- }
- return getClass(t).isAssignableFrom(getClass(u));
- }
-
- protected Class getClass(final Type t) {
- try {
- if (t.getSort() == Type.ARRAY) {
- return Class.forName(t.getDescriptor().replace('/', '.'));
- }
- return Class.forName(t.getClassName());
- } catch (ClassNotFoundException e) {
- throw new RuntimeException(e.toString());
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SmallSet.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SmallSet.java
deleted file mode 100644
index 3049d5a..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/SmallSet.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.AbstractSet;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-/**
- * A set of at most two elements.
- *
- * @author Eric Bruneton
- */
-class SmallSet extends AbstractSet implements Iterator {
-
- // if e1 is null, e2 must be null; otherwise e2 must be different from e1
-
- Object e1, e2;
-
- final static SmallSet EMPTY_SET = new SmallSet(null, null);
-
- SmallSet(Object e1, Object e2) {
- this.e1 = e1;
- this.e2 = e2;
- }
-
- // -------------------------------------------------------------------------
- // Implementation of inherited abstract methods
- // -------------------------------------------------------------------------
-
- public Iterator iterator() {
- return new SmallSet(e1, e2);
- }
-
- public int size() {
- return e1 == null ? 0 : (e2 == null ? 1 : 2);
- }
-
- // -------------------------------------------------------------------------
- // Implementation of the Iterator interface
- // -------------------------------------------------------------------------
-
- public boolean hasNext() {
- return e1 != null;
- }
-
- public Object next() {
- Object e = e1;
- e1 = e2;
- e2 = null;
- return e;
- }
-
- public void remove() {
- }
-
- // -------------------------------------------------------------------------
- // Utility methods
- // -------------------------------------------------------------------------
-
- Set union(SmallSet s) {
- if ((s.e1 == e1 && s.e2 == e2) || (s.e1 == e2 && s.e2 == e1)) {
- return this; // if the two sets are equal, return this
- }
- if (s.e1 == null) {
- return this; // if s is empty, return this
- }
- if (e1 == null) {
- return s; // if this is empty, return s
- }
- if (s.e2 == null) { // s contains exactly one element
- if (e2 == null) {
- return new SmallSet(e1, s.e1); // necessarily e1 != s.e1
- } else if (s.e1 == e1 || s.e1 == e2) { // s is included in this
- return this;
- }
- }
- if (e2 == null) { // this contains exactly one element
- // if (s.e2 == null) { // cannot happen
- // return new SmallSet(e1, s.e1); // necessarily e1 != s.e1
- // } else
- if (e1 == s.e1 || e1 == s.e2) { // this in included in s
- return s;
- }
- }
- // here we know that there are at least 3 distinct elements
- HashSet r = new HashSet(4);
- r.add(e1);
- if (e2 != null) {
- r.add(e2);
- }
- r.add(s.e1);
- if (s.e2 != null) {
- r.add(s.e2);
- }
- return r;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Subroutine.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Subroutine.java
deleted file mode 100644
index 5ae0109..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Subroutine.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.Label;
-import org.objectweb.asm.tree.JumpInsnNode;
-
-/**
- * A method subroutine (corresponds to a JSR instruction).
- *
- * @author Eric Bruneton
- */
-class Subroutine {
-
- Label start;
-
- boolean[] access;
-
- List callers;
-
- private Subroutine() {
- }
-
- public Subroutine(
- final Label start,
- final int maxLocals,
- final JumpInsnNode caller)
- {
- this.start = start;
- this.access = new boolean[maxLocals];
- this.callers = new ArrayList();
- callers.add(caller);
- }
-
- public Subroutine copy() {
- Subroutine result = new Subroutine();
- result.start = start;
- result.access = new boolean[access.length];
- System.arraycopy(access, 0, result.access, 0, access.length);
- result.callers = new ArrayList(callers);
- return result;
- }
-
- public boolean merge(final Subroutine subroutine, boolean checkOverlap)
- throws AnalyzerException
- {
- if (checkOverlap && subroutine.start != start) {
- throw new AnalyzerException("Overlapping sub routines");
- }
- boolean changes = false;
- for (int i = 0; i < access.length; ++i) {
- if (subroutine.access[i] && !access[i]) {
- access[i] = true;
- changes = true;
- }
- }
- for (int i = 0; i < subroutine.callers.size(); ++i) {
- Object caller = subroutine.callers.get(i);
- if (!callers.contains(caller)) {
- callers.add(caller);
- changes = true;
- }
- }
- return changes;
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Value.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Value.java
deleted file mode 100644
index 4baf1b4..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/tree/analysis/Value.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.tree.analysis;
-
-/**
- * An immutable symbolic value for semantic interpretation of bytecode.
- *
- * @author Eric Bruneton
- */
-public interface Value {
-
- /**
- * Returns the size of this value in words.
- *
- * @return either 1 or 2.
- */
- int getSize();
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAbstractVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAbstractVisitor.java
deleted file mode 100644
index 940bc11..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAbstractVisitor.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import java.util.HashMap;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.util.attrs.ASMifiable;
-
-/**
- * An abstract ASMifier visitor.
- *
- * @author Eric Bruneton
- */
-public class ASMifierAbstractVisitor extends AbstractVisitor {
-
- /**
- * The name of the variable for this visitor in the produced code.
- */
- protected String name;
-
- /**
- * The label names. This map associates String values to Label keys. It is
- * used only in ASMifierMethodVisitor.
- */
- HashMap labelNames;
-
- /**
- * Constructs a new {@link ASMifierAbstractVisitor}.
- *
- * @param name the name of the variable for this visitor in the produced
- * code.
- */
- protected ASMifierAbstractVisitor(final String name) {
- this.name = name;
- }
-
- /**
- * Prints the ASM code that generates the given annotation.
- *
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a visitor to visit the annotation values.
- */
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- buf.setLength(0);
- buf.append("{\n")
- .append("av0 = ")
- .append(name)
- .append(".visitAnnotation(");
- appendConstant(desc);
- buf.append(", ").append(visible).append(");\n");
- text.add(buf.toString());
- ASMifierAnnotationVisitor av = new ASMifierAnnotationVisitor(0);
- text.add(av.getText());
- text.add("}\n");
- return av;
- }
-
- /**
- * Prints the ASM code that generates the given attribute.
- *
- * @param attr an attribute.
- */
- public void visitAttribute(final Attribute attr) {
- buf.setLength(0);
- if (attr instanceof ASMifiable) {
- buf.append("{\n");
- buf.append("// ATTRIBUTE\n");
- ((ASMifiable) attr).asmify(buf, "attr", labelNames);
- buf.append(name).append(".visitAttribute(attr);\n");
- buf.append("}\n");
- } else {
- buf.append("// WARNING! skipped a non standard attribute of type \"");
- buf.append(attr.type).append("\"\n");
- }
- text.add(buf.toString());
- }
-
- /**
- * Prints the ASM code to end the visit.
- */
- public void visitEnd() {
- buf.setLength(0);
- buf.append(name).append(".visitEnd();\n");
- text.add(buf.toString());
- }
-
- /**
- * Appends a string representation of the given constant to the given
- * buffer.
- *
- * @param cst an {@link Integer}, {@link Float}, {@link Long},
- * {@link Double} or {@link String} object. May be <tt>null</tt>.
- */
- void appendConstant(final Object cst) {
- appendConstant(buf, cst);
- }
-
- /**
- * Appends a string representation of the given constant to the given
- * buffer.
- *
- * @param buf a string buffer.
- * @param cst an {@link Integer}, {@link Float}, {@link Long},
- * {@link Double} or {@link String} object. May be <tt>null</tt>.
- */
- static void appendConstant(final StringBuffer buf, final Object cst) {
- if (cst == null) {
- buf.append("null");
- } else if (cst instanceof String) {
- appendString(buf, (String) cst);
- } else if (cst instanceof Type) {
- buf.append("Type.getType(\"");
- buf.append(((Type) cst).getDescriptor());
- buf.append("\")");
- } else if (cst instanceof Byte) {
- buf.append("new Byte((byte)").append(cst).append(")");
- } else if (cst instanceof Boolean) {
- buf.append("new Boolean(").append(cst).append(")");
- } else if (cst instanceof Short) {
- buf.append("new Short((short)").append(cst).append(")");
- } else if (cst instanceof Character) {
- int c = ((Character) cst).charValue();
- buf.append("new Character((char)").append(c).append(")");
- } else if (cst instanceof Integer) {
- buf.append("new Integer(").append(cst).append(")");
- } else if (cst instanceof Float) {
- buf.append("new Float(\"").append(cst).append("\")");
- } else if (cst instanceof Long) {
- buf.append("new Long(").append(cst).append("L)");
- } else if (cst instanceof Double) {
- buf.append("new Double(\"").append(cst).append("\")");
- } else if (cst instanceof byte[]) {
- byte[] v = (byte[]) cst;
- buf.append("new byte[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append(v[i]);
- }
- buf.append("}");
- } else if (cst instanceof boolean[]) {
- boolean[] v = (boolean[]) cst;
- buf.append("new boolean[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append(v[i]);
- }
- buf.append("}");
- } else if (cst instanceof short[]) {
- short[] v = (short[]) cst;
- buf.append("new short[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append("(short)").append(v[i]);
- }
- buf.append("}");
- } else if (cst instanceof char[]) {
- char[] v = (char[]) cst;
- buf.append("new char[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",")
- .append("(char)")
- .append((int) v[i]);
- }
- buf.append("}");
- } else if (cst instanceof int[]) {
- int[] v = (int[]) cst;
- buf.append("new int[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append(v[i]);
- }
- buf.append("}");
- } else if (cst instanceof long[]) {
- long[] v = (long[]) cst;
- buf.append("new long[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append(v[i]).append("L");
- }
- buf.append("}");
- } else if (cst instanceof float[]) {
- float[] v = (float[]) cst;
- buf.append("new float[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append(v[i]).append("f");
- }
- buf.append("}");
- } else if (cst instanceof double[]) {
- double[] v = (double[]) cst;
- buf.append("new double[] {");
- for (int i = 0; i < v.length; i++) {
- buf.append(i == 0 ? "" : ",").append(v[i]).append("d");
- }
- buf.append("}");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAnnotationVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAnnotationVisitor.java
deleted file mode 100644
index 0f766b3..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierAnnotationVisitor.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-
-/**
- * An {@link AnnotationVisitor} that prints the ASM code that generates the
- * annotations it visits.
- *
- * @author Eric Bruneton
- */
-public class ASMifierAnnotationVisitor extends AbstractVisitor implements
- AnnotationVisitor
-{
-
- /**
- * Identifier of the annotation visitor variable in the produced code.
- */
- protected final int id;
-
- /**
- * Constructs a new {@link ASMifierAnnotationVisitor}.
- *
- * @param id identifier of the annotation visitor variable in the produced
- * code.
- */
- public ASMifierAnnotationVisitor(final int id) {
- this.id = id;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the AnnotationVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(final String name, final Object value) {
- buf.setLength(0);
- buf.append("av").append(id).append(".visit(");
- ASMifierAbstractVisitor.appendConstant(buf, name);
- buf.append(", ");
- ASMifierAbstractVisitor.appendConstant(buf, value);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitEnum(
- final String name,
- final String desc,
- final String value)
- {
- buf.setLength(0);
- buf.append("av").append(id).append(".visitEnum(");
- ASMifierAbstractVisitor.appendConstant(buf, name);
- buf.append(", ");
- ASMifierAbstractVisitor.appendConstant(buf, desc);
- buf.append(", ");
- ASMifierAbstractVisitor.appendConstant(buf, value);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public AnnotationVisitor visitAnnotation(
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append("{\n");
- buf.append("AnnotationVisitor av").append(id + 1).append(" = av");
- buf.append(id).append(".visitAnnotation(");
- ASMifierAbstractVisitor.appendConstant(buf, name);
- buf.append(", ");
- ASMifierAbstractVisitor.appendConstant(buf, desc);
- buf.append(");\n");
- text.add(buf.toString());
- ASMifierAnnotationVisitor av = new ASMifierAnnotationVisitor(id + 1);
- text.add(av.getText());
- text.add("}\n");
- return av;
- }
-
- public AnnotationVisitor visitArray(final String name) {
- buf.setLength(0);
- buf.append("{\n");
- buf.append("AnnotationVisitor av").append(id + 1).append(" = av");
- buf.append(id).append(".visitArray(");
- ASMifierAbstractVisitor.appendConstant(buf, name);
- buf.append(");\n");
- text.add(buf.toString());
- ASMifierAnnotationVisitor av = new ASMifierAnnotationVisitor(id + 1);
- text.add(av.getText());
- text.add("}\n");
- return av;
- }
-
- public void visitEnd() {
- buf.setLength(0);
- buf.append("av").append(id).append(".visitEnd();\n");
- text.add(buf.toString());
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierClassVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierClassVisitor.java
deleted file mode 100644
index d7b73fb7..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierClassVisitor.java
+++ /dev/null
@@ -1,607 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-
-/**
- * A {@link ClassVisitor} that prints the ASM code that generates the classes it
- * visits. This class visitor can be used to quickly write ASM code to generate
- * some given bytecode: <ul> <li>write the Java source code equivalent to the
- * bytecode you want to generate;</li> <li>compile it with <tt>javac</tt>;</li>
- * <li>make a {@link ASMifierClassVisitor} visit this compiled class (see the
- * {@link #main main} method);</li> <li>edit the generated source code, if
- * necessary.</li> </ul> The source code printed when visiting the
- * <tt>Hello</tt> class is the following: <p> <blockquote>
- *
- * <pre>
- * import org.objectweb.asm.*;
- *
- * public class HelloDump implements Opcodes {
- *
- * public static byte[] dump() throws Exception {
- *
- * ClassWriter cw = new ClassWriter(false);
- * FieldVisitor fv;
- * MethodVisitor mv;
- * AnnotationVisitor av0;
- *
- * cw.visit(49,
- * ACC_PUBLIC + ACC_SUPER,
- * &quot;Hello&quot;,
- * null,
- * &quot;java/lang/Object&quot;,
- * null);
- *
- * cw.visitSource(&quot;Hello.java&quot;, null);
- *
- * {
- * mv = cw.visitMethod(ACC_PUBLIC, &quot;&lt;init&gt;&quot;, &quot;()V&quot;, null, null);
- * mv.visitVarInsn(ALOAD, 0);
- * mv.visitMethodInsn(INVOKESPECIAL,
- * &quot;java/lang/Object&quot;,
- * &quot;&lt;init&gt;&quot;,
- * &quot;()V&quot;);
- * mv.visitInsn(RETURN);
- * mv.visitMaxs(1, 1);
- * mv.visitEnd();
- * }
- * {
- * mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC,
- * &quot;main&quot;,
- * &quot;([Ljava/lang/String;)V&quot;,
- * null,
- * null);
- * mv.visitFieldInsn(GETSTATIC,
- * &quot;java/lang/System&quot;,
- * &quot;out&quot;,
- * &quot;Ljava/io/PrintStream;&quot;);
- * mv.visitLdcInsn(&quot;hello&quot;);
- * mv.visitMethodInsn(INVOKEVIRTUAL,
- * &quot;java/io/PrintStream&quot;,
- * &quot;println&quot;,
- * &quot;(Ljava/lang/String;)V&quot;);
- * mv.visitInsn(RETURN);
- * mv.visitMaxs(2, 1);
- * mv.visitEnd();
- * }
- * cw.visitEnd();
- *
- * return cw.toByteArray();
- * }
- * }
- *
- * </pre>
- *
- * </blockquote> where <tt>Hello</tt> is defined by: <p> <blockquote>
- *
- * <pre>
- * public class Hello {
- *
- * public static void main(String[] args) {
- * System.out.println(&quot;hello&quot;);
- * }
- * }
- * </pre>
- *
- * </blockquote>
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ASMifierClassVisitor extends ASMifierAbstractVisitor implements
- ClassVisitor
-{
-
- /**
- * Pseudo access flag used to distinguish class access flags.
- */
- private final static int ACCESS_CLASS = 262144;
-
- /**
- * Pseudo access flag used to distinguish field access flags.
- */
- private final static int ACCESS_FIELD = 524288;
-
- /**
- * Pseudo access flag used to distinguish inner class flags.
- */
- private static final int ACCESS_INNER = 1048576;
-
- /**
- * The print writer to be used to print the class.
- */
- protected final PrintWriter pw;
-
- /**
- * Prints the ASM source code to generate the given class to the standard
- * output. <p> Usage: ASMifierClassVisitor [-debug] &lt;fully qualified
- * class name or class file name&gt;
- *
- * @param args the command line arguments.
- *
- * @throws Exception if the class cannot be found, or if an IO exception
- * occurs.
- */
- public static void main(final String[] args) throws Exception {
- int i = 0;
- boolean skipDebug = true;
-
- boolean ok = true;
- if (args.length < 1 || args.length > 2) {
- ok = false;
- }
- if (ok && args[0].equals("-debug")) {
- i = 1;
- skipDebug = false;
- if (args.length != 2) {
- ok = false;
- }
- }
- if (!ok) {
- System.err.println("Prints the ASM code to generate the given class.");
- System.err.println("Usage: ASMifierClassVisitor [-debug] "
- + "<fully qualified class name or class file name>");
- return;
- }
- ClassReader cr;
- if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1
- || args[i].indexOf('/') > -1) {
- cr = new ClassReader(new FileInputStream(args[i]));
- } else {
- cr = new ClassReader(args[i]);
- }
- cr.accept(new ASMifierClassVisitor(new PrintWriter(System.out)),
- getDefaultAttributes(),
- skipDebug);
- }
-
- /**
- * Constructs a new {@link ASMifierClassVisitor} object.
- *
- * @param pw the print writer to be used to print the class.
- */
- public ASMifierClassVisitor(final PrintWriter pw) {
- super("cw");
- this.pw = pw;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the ClassVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- String simpleName;
- int n = name.lastIndexOf('/');
- if (n != -1) {
- text.add("package asm." + name.substring(0, n).replace('/', '.')
- + ";\n");
- simpleName = name.substring(n + 1);
- } else {
- simpleName = name;
- }
- text.add("import java.util.*;\n");
- text.add("import org.objectweb.asm.*;\n");
- text.add("import org.objectweb.asm.attrs.*;\n");
- text.add("public class " + simpleName + "Dump implements Opcodes {\n\n");
- text.add("public static byte[] dump () throws Exception {\n\n");
- text.add("ClassWriter cw = new ClassWriter(false);\n");
- text.add("FieldVisitor fv;\n");
- text.add("MethodVisitor mv;\n");
- text.add("AnnotationVisitor av0;\n\n");
-
- buf.setLength(0);
- buf.append("cw.visit(");
- switch (version) {
- case Opcodes.V1_1:
- buf.append("V1_1");
- break;
- case Opcodes.V1_2:
- buf.append("V1_2");
- break;
- case Opcodes.V1_3:
- buf.append("V1_3");
- break;
- case Opcodes.V1_4:
- buf.append("V1_4");
- break;
- case Opcodes.V1_5:
- buf.append("V1_5");
- break;
- case Opcodes.V1_6:
- buf.append("V1_6");
- break;
- default:
- buf.append(version);
- break;
- }
- buf.append(", ");
- appendAccess(access | ACCESS_CLASS);
- buf.append(", ");
- appendConstant(name);
- buf.append(", ");
- appendConstant(signature);
- buf.append(", ");
- appendConstant(superName);
- buf.append(", ");
- if (interfaces != null && interfaces.length > 0) {
- buf.append("new String[] {");
- for (int i = 0; i < interfaces.length; ++i) {
- buf.append(i == 0 ? " " : ", ");
- appendConstant(interfaces[i]);
- }
- buf.append(" }");
- } else {
- buf.append("null");
- }
- buf.append(");\n\n");
- text.add(buf.toString());
- }
-
- public void visitSource(final String file, final String debug) {
- buf.setLength(0);
- buf.append("cw.visitSource(");
- appendConstant(file);
- buf.append(", ");
- appendConstant(debug);
- buf.append(");\n\n");
- text.add(buf.toString());
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append("cw.visitOuterClass(");
- appendConstant(owner);
- buf.append(", ");
- appendConstant(name);
- buf.append(", ");
- appendConstant(desc);
- buf.append(");\n\n");
- text.add(buf.toString());
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- buf.setLength(0);
- buf.append("cw.visitInnerClass(");
- appendConstant(name);
- buf.append(", ");
- appendConstant(outerName);
- buf.append(", ");
- appendConstant(innerName);
- buf.append(", ");
- appendAccess(access | ACCESS_INNER);
- buf.append(");\n\n");
- text.add(buf.toString());
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- buf.setLength(0);
- buf.append("{\n");
- buf.append("fv = cw.visitField(");
- appendAccess(access | ACCESS_FIELD);
- buf.append(", ");
- appendConstant(name);
- buf.append(", ");
- appendConstant(desc);
- buf.append(", ");
- appendConstant(signature);
- buf.append(", ");
- appendConstant(value);
- buf.append(");\n");
- text.add(buf.toString());
- ASMifierFieldVisitor aav = new ASMifierFieldVisitor();
- text.add(aav.getText());
- text.add("}\n");
- return aav;
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- buf.setLength(0);
- buf.append("{\n");
- buf.append("mv = cw.visitMethod(");
- appendAccess(access);
- buf.append(", ");
- appendConstant(name);
- buf.append(", ");
- appendConstant(desc);
- buf.append(", ");
- appendConstant(signature);
- buf.append(", ");
- if (exceptions != null && exceptions.length > 0) {
- buf.append("new String[] {");
- for (int i = 0; i < exceptions.length; ++i) {
- buf.append(i == 0 ? " " : ", ");
- appendConstant(exceptions[i]);
- }
- buf.append(" }");
- } else {
- buf.append("null");
- }
- buf.append(");\n");
- text.add(buf.toString());
- ASMifierMethodVisitor acv = new ASMifierMethodVisitor();
- text.add(acv.getText());
- text.add("}\n");
- return acv;
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- buf.setLength(0);
- buf.append("{\n");
- buf.append("av0 = cw.visitAnnotation(");
- appendConstant(desc);
- buf.append(", ");
- buf.append(visible);
- buf.append(");\n");
- text.add(buf.toString());
- ASMifierAnnotationVisitor av = new ASMifierAnnotationVisitor(0);
- text.add(av.getText());
- text.add("}\n");
- return av;
- }
-
- public void visitEnd() {
- text.add("cw.visitEnd();\n\n");
- text.add("return cw.toByteArray();\n");
- text.add("}\n");
- text.add("}\n");
- printList(pw, text);
- pw.flush();
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Appends a string representation of the given access modifiers to {@link
- * #buf buf}.
- *
- * @param access some access modifiers.
- */
- void appendAccess(final int access) {
- boolean first = true;
- if ((access & Opcodes.ACC_PUBLIC) != 0) {
- buf.append("ACC_PUBLIC");
- first = false;
- }
- if ((access & Opcodes.ACC_PRIVATE) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_PRIVATE");
- first = false;
- }
- if ((access & Opcodes.ACC_PROTECTED) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_PROTECTED");
- first = false;
- }
- if ((access & Opcodes.ACC_FINAL) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_FINAL");
- first = false;
- }
- if ((access & Opcodes.ACC_STATIC) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_STATIC");
- first = false;
- }
- if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- if ((access & ACCESS_CLASS) != 0) {
- buf.append("ACC_SUPER");
- } else {
- buf.append("ACC_SYNCHRONIZED");
- }
- first = false;
- }
- if ((access & Opcodes.ACC_VOLATILE) != 0
- && (access & ACCESS_FIELD) != 0)
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_VOLATILE");
- first = false;
- }
- if ((access & Opcodes.ACC_BRIDGE) != 0 && (access & ACCESS_CLASS) == 0
- && (access & ACCESS_FIELD) == 0)
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_BRIDGE");
- first = false;
- }
- if ((access & Opcodes.ACC_VARARGS) != 0 && (access & ACCESS_CLASS) == 0
- && (access & ACCESS_FIELD) == 0)
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_VARARGS");
- first = false;
- }
- if ((access & Opcodes.ACC_TRANSIENT) != 0
- && (access & ACCESS_FIELD) != 0)
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_TRANSIENT");
- first = false;
- }
- if ((access & Opcodes.ACC_NATIVE) != 0 && (access & ACCESS_CLASS) == 0
- && (access & ACCESS_FIELD) == 0)
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_NATIVE");
- first = false;
- }
- if ((access & Opcodes.ACC_ENUM) != 0
- && ((access & ACCESS_CLASS) != 0
- || (access & ACCESS_FIELD) != 0 || (access & ACCESS_INNER) != 0))
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_ENUM");
- first = false;
- }
- if ((access & Opcodes.ACC_ANNOTATION) != 0
- && ((access & ACCESS_CLASS) != 0))
- {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_ANNOTATION");
- first = false;
- }
- if ((access & Opcodes.ACC_ABSTRACT) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_ABSTRACT");
- first = false;
- }
- if ((access & Opcodes.ACC_INTERFACE) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_INTERFACE");
- first = false;
- }
- if ((access & Opcodes.ACC_STRICT) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_STRICT");
- first = false;
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_SYNTHETIC");
- first = false;
- }
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- if (!first) {
- buf.append(" + ");
- }
- buf.append("ACC_DEPRECATED");
- first = false;
- }
- if (first) {
- buf.append("0");
- }
- }
-
- /**
- * Appends a string representation of the given constant to the given
- * buffer.
- *
- * @param buf a string buffer.
- * @param cst an {@link java.lang.Integer Integer}, {@link java.lang.Float
- * Float}, {@link java.lang.Long Long},
- * {@link java.lang.Double Double} or {@link String String} object.
- * May be <tt>null</tt>.
- */
- static void appendConstant(final StringBuffer buf, final Object cst) {
- if (cst == null) {
- buf.append("null");
- } else if (cst instanceof String) {
- AbstractVisitor.appendString(buf, (String) cst);
- } else if (cst instanceof Type) {
- buf.append("Type.getType(\"")
- .append(((Type) cst).getDescriptor())
- .append("\")");
- } else if (cst instanceof Integer) {
- buf.append("new Integer(").append(cst).append(")");
- } else if (cst instanceof Float) {
- buf.append("new Float(\"").append(cst).append("\")");
- } else if (cst instanceof Long) {
- buf.append("new Long(").append(cst).append("L)");
- } else if (cst instanceof Double) {
- buf.append("new Double(\"").append(cst).append("\")");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierFieldVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierFieldVisitor.java
deleted file mode 100644
index 6732179..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierFieldVisitor.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.FieldVisitor;
-
-/**
- * A {@link FieldVisitor} that prints the ASM code that generates the fields it
- * visits.
- *
- * @author Eric Bruneton
- */
-public class ASMifierFieldVisitor extends ASMifierAbstractVisitor implements
- FieldVisitor
-{
-
- /**
- * Constructs a new {@link ASMifierFieldVisitor}.
- */
- public ASMifierFieldVisitor() {
- super("fv");
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierMethodVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierMethodVisitor.java
deleted file mode 100644
index 57c55ee..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/ASMifierMethodVisitor.java
+++ /dev/null
@@ -1,347 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-
-import java.util.HashMap;
-
-/**
- * A {@link MethodVisitor} that prints the ASM code that generates the methods
- * it visits.
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class ASMifierMethodVisitor extends ASMifierAbstractVisitor implements
- MethodVisitor
-{
-
- /**
- * Constructs a new {@link ASMifierMethodVisitor} object.
- */
- public ASMifierMethodVisitor() {
- super("mv");
- this.labelNames = new HashMap();
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- buf.setLength(0);
- buf.append("{\n").append("av0 = mv.visitAnnotationDefault();\n");
- text.add(buf.toString());
- ASMifierAnnotationVisitor av = new ASMifierAnnotationVisitor(0);
- text.add(av.getText());
- text.add("}\n");
- return av;
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- buf.setLength(0);
- buf.append("{\n")
- .append("av0 = mv.visitParameterAnnotation(")
- .append(parameter)
- .append(", ");
- appendConstant(desc);
- buf.append(", ").append(visible).append(");\n");
- text.add(buf.toString());
- ASMifierAnnotationVisitor av = new ASMifierAnnotationVisitor(0);
- text.add(av.getText());
- text.add("}\n");
- return av;
- }
-
- public void visitCode() {
- text.add("mv.visitCode();\n");
- }
-
- public void visitInsn(final int opcode) {
- buf.setLength(0);
- buf.append("mv.visitInsn(").append(OPCODES[opcode]).append(");\n");
- text.add(buf.toString());
- }
-
- public void visitIntInsn(final int opcode, final int operand) {
- buf.setLength(0);
- buf.append("mv.visitIntInsn(")
- .append(OPCODES[opcode])
- .append(", ")
- .append(opcode == Opcodes.NEWARRAY
- ? TYPES[operand]
- : Integer.toString(operand))
- .append(");\n");
- text.add(buf.toString());
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- buf.setLength(0);
- buf.append("mv.visitVarInsn(")
- .append(OPCODES[opcode])
- .append(", ")
- .append(var)
- .append(");\n");
- text.add(buf.toString());
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- buf.setLength(0);
- buf.append("mv.visitTypeInsn(").append(OPCODES[opcode]).append(", ");
- appendConstant(desc);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append("mv.visitFieldInsn(").append(OPCODES[opcode]).append(", ");
- appendConstant(owner);
- buf.append(", ");
- appendConstant(name);
- buf.append(", ");
- appendConstant(desc);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append("mv.visitMethodInsn(").append(OPCODES[opcode]).append(", ");
- appendConstant(owner);
- buf.append(", ");
- appendConstant(name);
- buf.append(", ");
- appendConstant(desc);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitJumpInsn(final int opcode, final Label label) {
- buf.setLength(0);
- declareLabel(label);
- buf.append("mv.visitJumpInsn(").append(OPCODES[opcode]).append(", ");
- appendLabel(label);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitLabel(final Label label) {
- buf.setLength(0);
- declareLabel(label);
- buf.append("mv.visitLabel(");
- appendLabel(label);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitLdcInsn(final Object cst) {
- buf.setLength(0);
- buf.append("mv.visitLdcInsn(");
- appendConstant(cst);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitIincInsn(final int var, final int increment) {
- buf.setLength(0);
- buf.append("mv.visitIincInsn(")
- .append(var)
- .append(", ")
- .append(increment)
- .append(");\n");
- text.add(buf.toString());
- }
-
- public void visitTableSwitchInsn(
- final int min,
- final int max,
- final Label dflt,
- final Label labels[])
- {
- buf.setLength(0);
- for (int i = 0; i < labels.length; ++i) {
- declareLabel(labels[i]);
- }
- declareLabel(dflt);
-
- buf.append("mv.visitTableSwitchInsn(")
- .append(min)
- .append(", ")
- .append(max)
- .append(", ");
- appendLabel(dflt);
- buf.append(", new Label[] {");
- for (int i = 0; i < labels.length; ++i) {
- buf.append(i == 0 ? " " : ", ");
- appendLabel(labels[i]);
- }
- buf.append(" });\n");
- text.add(buf.toString());
- }
-
- public void visitLookupSwitchInsn(
- final Label dflt,
- final int keys[],
- final Label labels[])
- {
- buf.setLength(0);
- for (int i = 0; i < labels.length; ++i) {
- declareLabel(labels[i]);
- }
- declareLabel(dflt);
-
- buf.append("mv.visitLookupSwitchInsn(");
- appendLabel(dflt);
- buf.append(", new int[] {");
- for (int i = 0; i < keys.length; ++i) {
- buf.append(i == 0 ? " " : ", ").append(keys[i]);
- }
- buf.append(" }, new Label[] {");
- for (int i = 0; i < labels.length; ++i) {
- buf.append(i == 0 ? " " : ", ");
- appendLabel(labels[i]);
- }
- buf.append(" });\n");
- text.add(buf.toString());
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- buf.setLength(0);
- buf.append("mv.visitMultiANewArrayInsn(");
- appendConstant(desc);
- buf.append(", ").append(dims).append(");\n");
- text.add(buf.toString());
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- buf.setLength(0);
- declareLabel(start);
- declareLabel(end);
- declareLabel(handler);
- buf.append("mv.visitTryCatchBlock(");
- appendLabel(start);
- buf.append(", ");
- appendLabel(end);
- buf.append(", ");
- appendLabel(handler);
- buf.append(", ");
- appendConstant(type);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- buf.setLength(0);
- buf.append("mv.visitLocalVariable(");
- appendConstant(name);
- buf.append(", ");
- appendConstant(desc);
- buf.append(", ");
- appendConstant(signature);
- buf.append(", ");
- appendLabel(start);
- buf.append(", ");
- appendLabel(end);
- buf.append(", ").append(index).append(");\n");
- text.add(buf.toString());
- }
-
- public void visitLineNumber(final int line, final Label start) {
- buf.setLength(0);
- buf.append("mv.visitLineNumber(").append(line).append(", ");
- appendLabel(start);
- buf.append(");\n");
- text.add(buf.toString());
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- buf.setLength(0);
- buf.append("mv.visitMaxs(")
- .append(maxStack)
- .append(", ")
- .append(maxLocals)
- .append(");\n");
- text.add(buf.toString());
- }
-
- /**
- * Appends a declaration of the given label to {@link #buf buf}. This
- * declaration is of the form "Label lXXX = new Label();". Does nothing if
- * the given label has already been declared.
- *
- * @param l a label.
- */
- private void declareLabel(final Label l) {
- String name = (String) labelNames.get(l);
- if (name == null) {
- name = "l" + labelNames.size();
- labelNames.put(l, name);
- buf.append("Label ").append(name).append(" = new Label();\n");
- }
- }
-
- /**
- * Appends the name of the given label to {@link #buf buf}. The given label
- * <i>must</i> already have a name. One way to ensure this is to always
- * call {@link #declareLabel declared} before calling this method.
- *
- * @param l a label.
- */
- private void appendLabel(final Label l) {
- buf.append((String) labelNames.get(l));
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/AbstractVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/AbstractVisitor.java
deleted file mode 100644
index 557d5c8..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/AbstractVisitor.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.util.attrs.ASMStackMapAttribute;
-import org.objectweb.asm.util.attrs.ASMStackMapTableAttribute;
-
-/**
- * An abstract visitor.
- *
- * @author Eric Bruneton
- */
-public abstract class AbstractVisitor {
-
- /**
- * The names of the Java Virtual Machine opcodes.
- */
- public final static String[] OPCODES;
- /**
- * Types for <code>operand</code> parameter of the
- * {@link org.objectweb.asm.MethodVisitor#visitIntInsn} method when
- * <code>opcode</code> is <code>NEWARRAY</code>.
- */
- public final static String[] TYPES;
-
- static {
- String s = "NOP,ACONST_NULL,ICONST_M1,ICONST_0,ICONST_1,ICONST_2,"
- + "ICONST_3,ICONST_4,ICONST_5,LCONST_0,LCONST_1,FCONST_0,"
- + "FCONST_1,FCONST_2,DCONST_0,DCONST_1,BIPUSH,SIPUSH,LDC,,,"
- + "ILOAD,LLOAD,FLOAD,DLOAD,ALOAD,,,,,,,,,,,,,,,,,,,,,IALOAD,"
- + "LALOAD,FALOAD,DALOAD,AALOAD,BALOAD,CALOAD,SALOAD,ISTORE,"
- + "LSTORE,FSTORE,DSTORE,ASTORE,,,,,,,,,,,,,,,,,,,,,IASTORE,"
- + "LASTORE,FASTORE,DASTORE,AASTORE,BASTORE,CASTORE,SASTORE,POP,"
- + "POP2,DUP,DUP_X1,DUP_X2,DUP2,DUP2_X1,DUP2_X2,SWAP,IADD,LADD,"
- + "FADD,DADD,ISUB,LSUB,FSUB,DSUB,IMUL,LMUL,FMUL,DMUL,IDIV,LDIV,"
- + "FDIV,DDIV,IREM,LREM,FREM,DREM,INEG,LNEG,FNEG,DNEG,ISHL,LSHL,"
- + "ISHR,LSHR,IUSHR,LUSHR,IAND,LAND,IOR,LOR,IXOR,LXOR,IINC,I2L,"
- + "I2F,I2D,L2I,L2F,L2D,F2I,F2L,F2D,D2I,D2L,D2F,I2B,I2C,I2S,LCMP,"
- + "FCMPL,FCMPG,DCMPL,DCMPG,IFEQ,IFNE,IFLT,IFGE,IFGT,IFLE,"
- + "IF_ICMPEQ,IF_ICMPNE,IF_ICMPLT,IF_ICMPGE,IF_ICMPGT,IF_ICMPLE,"
- + "IF_ACMPEQ,IF_ACMPNE,GOTO,JSR,RET,TABLESWITCH,LOOKUPSWITCH,"
- + "IRETURN,LRETURN,FRETURN,DRETURN,ARETURN,RETURN,GETSTATIC,"
- + "PUTSTATIC,GETFIELD,PUTFIELD,INVOKEVIRTUAL,INVOKESPECIAL,"
- + "INVOKESTATIC,INVOKEINTERFACE,,NEW,NEWARRAY,ANEWARRAY,"
- + "ARRAYLENGTH,ATHROW,CHECKCAST,INSTANCEOF,MONITORENTER,"
- + "MONITOREXIT,,MULTIANEWARRAY,IFNULL,IFNONNULL,";
- OPCODES = new String[200];
- int i = 0;
- int j = 0;
- int l;
- while ((l = s.indexOf(',', j)) > 0) {
- OPCODES[i++] = j + 1 == l ? null : s.substring(j, l);
- j = l + 1;
- }
-
- s = "T_BOOLEAN,T_CHAR,T_FLOAT,T_DOUBLE,T_BYTE,T_SHORT,T_INT,T_LONG,";
- TYPES = new String[12];
- j = 0;
- i = 4;
- while ((l = s.indexOf(',', j)) > 0) {
- TYPES[i++] = s.substring(j, l);
- j = l + 1;
- }
- }
-
- /**
- * The text to be printed. Since the code of methods is not necessarily
- * visited in sequential order, one method after the other, but can be
- * interlaced (some instructions from method one, then some instructions
- * from method two, then some instructions from method one again...), it is
- * not possible to print the visited instructions directly to a sequential
- * stream. A class is therefore printed in a two steps process: a string
- * tree is constructed during the visit, and printed to a sequential stream
- * at the end of the visit. This string tree is stored in this field, as a
- * string list that can contain other string lists, which can themselves
- * contain other string lists, and so on.
- */
- public final List text;
-
- /**
- * A buffer that can be used to create strings.
- */
- protected final StringBuffer buf;
-
- /**
- * Constructs a new {@link AbstractVisitor}.
- */
- protected AbstractVisitor() {
- this.text = new ArrayList();
- this.buf = new StringBuffer();
- }
-
- /**
- * Returns the text printed by this visitor.
- *
- * @return the text printed by this visitor.
- */
- public List getText() {
- return text;
- }
-
- /**
- * Appends a quoted string to a given buffer.
- *
- * @param buf the buffer where the string must be added.
- * @param s the string to be added.
- */
- public static void appendString(final StringBuffer buf, final String s) {
- buf.append("\"");
- for (int i = 0; i < s.length(); ++i) {
- char c = s.charAt(i);
- if (c == '\n') {
- buf.append("\\n");
- } else if (c == '\r') {
- buf.append("\\r");
- } else if (c == '\\') {
- buf.append("\\\\");
- } else if (c == '"') {
- buf.append("\\\"");
- } else if (c < 0x20 || c > 0x7f) {
- buf.append("\\u");
- if (c < 0x10) {
- buf.append("000");
- } else if (c < 0x100) {
- buf.append("00");
- } else if (c < 0x1000) {
- buf.append("0");
- }
- buf.append(Integer.toString(c, 16));
- } else {
- buf.append(c);
- }
- }
- buf.append("\"");
- }
-
- /**
- * Prints the given string tree.
- *
- * @param pw the writer to be used to print the tree.
- * @param l a string tree, i.e., a string list that can contain other string
- * lists, and so on recursively.
- */
- void printList(final PrintWriter pw, final List l) {
- for (int i = 0; i < l.size(); ++i) {
- Object o = l.get(i);
- if (o instanceof List) {
- printList(pw, (List) o);
- } else {
- pw.print(o.toString());
- }
- }
- }
-
- /**
- * Returns the default {@link ASMifiable} prototypes.
- *
- * @return the default {@link ASMifiable} prototypes.
- */
- public static Attribute[] getDefaultAttributes() {
- try {
- return new Attribute[] {
- new ASMStackMapAttribute(),
- new ASMStackMapTableAttribute() };
- } catch (Exception e) {
- return new Attribute[0];
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckAnnotationAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckAnnotationAdapter.java
deleted file mode 100644
index 228ff04..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckAnnotationAdapter.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Type;
-
-/**
- * An {@link AnnotationVisitor} that checks that its methods are properly used.
- *
- * @author Eric Bruneton
- */
-public class CheckAnnotationAdapter implements AnnotationVisitor {
-
- private AnnotationVisitor av;
-
- private boolean named;
-
- private boolean end;
-
- public CheckAnnotationAdapter(final AnnotationVisitor av) {
- this(av, true);
- }
-
- CheckAnnotationAdapter(
- final AnnotationVisitor av,
- final boolean named)
- {
- this.av = av;
- this.named = named;
- }
-
- public void visit(final String name, final Object value) {
- checkEnd();
- checkName(name);
- if (!(value instanceof Byte || value instanceof Boolean
- || value instanceof Character || value instanceof Short
- || value instanceof Integer || value instanceof Long
- || value instanceof Float || value instanceof Double
- || value instanceof String || value instanceof Type
- || value instanceof byte[] || value instanceof boolean[]
- || value instanceof char[] || value instanceof short[]
- || value instanceof int[] || value instanceof long[]
- || value instanceof float[] || value instanceof double[]))
- {
- throw new IllegalArgumentException("Invalid annotation value");
- }
- av.visit(name, value);
- }
-
- public void visitEnum(
- final String name,
- final String desc,
- final String value)
- {
- checkEnd();
- checkName(name);
- CheckMethodAdapter.checkDesc(desc, false);
- if (value == null) {
- throw new IllegalArgumentException("Invalid enum value");
- }
- av.visitEnum(name, desc, value);
- }
-
- public AnnotationVisitor visitAnnotation(
- final String name,
- final String desc)
- {
- checkEnd();
- checkName(name);
- CheckMethodAdapter.checkDesc(desc, false);
- return new CheckAnnotationAdapter(av.visitAnnotation(name, desc));
- }
-
- public AnnotationVisitor visitArray(final String name) {
- checkEnd();
- checkName(name);
- return new CheckAnnotationAdapter(av.visitArray(name), false);
- }
-
- public void visitEnd() {
- checkEnd();
- end = true;
- av.visitEnd();
- }
-
- private void checkEnd() {
- if (end) {
- throw new IllegalStateException("Cannot call a visit method after visitEnd has been called");
- }
- }
-
- private void checkName(final String name) {
- if (named && name == null) {
- throw new IllegalArgumentException("Annotation value name must not be null");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckClassAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckClassAdapter.java
deleted file mode 100644
index 1ca97ad..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckClassAdapter.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-import java.util.List;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.ClassAdapter;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.tree.AbstractInsnNode;
-import org.objectweb.asm.tree.MethodNode;
-import org.objectweb.asm.tree.ClassNode;
-import org.objectweb.asm.tree.TryCatchBlockNode;
-import org.objectweb.asm.tree.analysis.Analyzer;
-import org.objectweb.asm.tree.analysis.SimpleVerifier;
-import org.objectweb.asm.tree.analysis.Frame;
-
-/**
- * A {@link ClassAdapter} that checks that its methods are properly used. More
- * precisely this class adapter checks each method call individually, based
- * <i>only</i> on its arguments, but does <i>not</i> check the <i>sequence</i>
- * of method calls. For example, the invalid sequence
- * <tt>visitField(ACC_PUBLIC, "i", "I", null)</tt> <tt>visitField(ACC_PUBLIC,
- * "i", "D", null)</tt>
- * will <i>not</i> be detected by this class adapter.
- *
- * @author Eric Bruneton
- */
-public class CheckClassAdapter extends ClassAdapter {
-
- /**
- * <tt>true</tt> if the visit method has been called.
- */
- private boolean start;
-
- /**
- * <tt>true</tt> if the visitSource method has been called.
- */
- private boolean source;
-
- /**
- * <tt>true</tt> if the visitOuterClass method has been called.
- */
- private boolean outer;
-
- /**
- * <tt>true</tt> if the visitEnd method has been called.
- */
- private boolean end;
-
- /**
- * Checks a given class. <p> Usage: CheckClassAdapter &lt;fully qualified
- * class name or class file name&gt;
- *
- * @param args the command line arguments.
- *
- * @throws Exception if the class cannot be found, or if an IO exception
- * occurs.
- */
- public static void main(final String[] args) throws Exception {
- if (args.length != 1) {
- System.err.println("Verifies the given class.");
- System.err.println("Usage: CheckClassAdapter "
- + "<fully qualified class name or class file name>");
- return;
- }
- ClassReader cr;
- if (args[0].endsWith(".class")) {
- cr = new ClassReader(new FileInputStream(args[0]));
- } else {
- cr = new ClassReader(args[0]);
- }
-
- verify(cr, false, new PrintWriter(System.err));
- }
-
- /**
- * Checks a given class
- *
- * @param cr a <code>ClassReader</code> that contains bytecode for the analysis.
- * @param dump true if bytecode should be printed out not only when errors are found.
- * @param pw write where results going to be printed
- */
- public static void verify(ClassReader cr, boolean dump, PrintWriter pw) {
- ClassNode cn = new ClassNode();
- cr.accept(new CheckClassAdapter(cn), true);
-
- List methods = cn.methods;
- for (int i = 0; i < methods.size(); ++i) {
- MethodNode method = (MethodNode) methods.get(i);
- if (method.instructions.size() > 0) {
- Analyzer a = new Analyzer(new SimpleVerifier(Type.getType("L"
- + cn.name + ";"),
- Type.getType("L" + cn.superName + ";"),
- (cn.access & Opcodes.ACC_INTERFACE) != 0));
- try {
- a.analyze(cn.name, method);
- if (!dump) {
- continue;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- Frame[] frames = a.getFrames();
-
- TraceMethodVisitor mv = new TraceMethodVisitor();
-
- pw.println(method.name + method.desc);
- for (int j = 0; j < method.instructions.size(); ++j) {
- ((AbstractInsnNode) method.instructions.get(j)).accept(mv);
-
- StringBuffer s = new StringBuffer();
- Frame f = frames[j];
- if (f == null) {
- s.append('?');
- } else {
- for (int k = 0; k < f.getLocals(); ++k) {
- s.append(getShortName(f.getLocal(k).toString()))
- .append(' ');
- }
- s.append(" : ");
- for (int k = 0; k < f.getStackSize(); ++k) {
- s.append(getShortName(f.getStack(k).toString()))
- .append(' ');
- }
- }
- while (s.length() < method.maxStack + method.maxLocals + 1)
- {
- s.append(' ');
- }
- pw.print(Integer.toString(j + 100000).substring(1));
- pw.print(" " + s + " : " + mv.buf); // mv.text.get(j));
- }
- for (int j = 0; j < method.tryCatchBlocks.size(); ++j) {
- ((TryCatchBlockNode) method.tryCatchBlocks.get(j)).accept(mv);
- pw.print(" " + mv.buf);
- }
- pw.println();
- }
- }
- }
-
- private static String getShortName(String name) {
- int n = name.lastIndexOf('/');
- int k = name.length();
- if(name.charAt(k-1)==';') k--;
- return n==-1 ? name : name.substring(n+1, k);
- }
-
- /**
- * Constructs a new {@link CheckClassAdapter}.
- *
- * @param cv the class visitor to which this adapter must delegate calls.
- */
- public CheckClassAdapter(final ClassVisitor cv) {
- super(cv);
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the ClassVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- if (start) {
- throw new IllegalStateException("visit must be called only once");
- } else {
- start = true;
- }
- checkState();
- checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL
- + Opcodes.ACC_SUPER + Opcodes.ACC_INTERFACE
- + Opcodes.ACC_ABSTRACT + Opcodes.ACC_SYNTHETIC
- + Opcodes.ACC_ANNOTATION + Opcodes.ACC_ENUM
- + Opcodes.ACC_DEPRECATED);
- CheckMethodAdapter.checkInternalName(name, "class name");
- if ("java/lang/Object".equals(name)) {
- if (superName != null) {
- throw new IllegalArgumentException("The super class name of the Object class must be 'null'");
- }
- } else {
- CheckMethodAdapter.checkInternalName(superName, "super class name");
- }
- if (signature != null) {
- // TODO
- }
- if ((access & Opcodes.ACC_INTERFACE) != 0) {
- if (!"java/lang/Object".equals(superName)) {
- throw new IllegalArgumentException("The super class name of interfaces must be 'java/lang/Object'");
- }
- }
- if (interfaces != null) {
- for (int i = 0; i < interfaces.length; ++i) {
- CheckMethodAdapter.checkInternalName(interfaces[i],
- "interface name at index " + i);
- }
- }
- cv.visit(version, access, name, signature, superName, interfaces);
- }
-
- public void visitSource(final String file, final String debug) {
- checkState();
- if (source) {
- throw new IllegalStateException("visitSource can be called only once.");
- }
- source = true;
- cv.visitSource(file, debug);
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- checkState();
- if (outer) {
- throw new IllegalStateException("visitSource can be called only once.");
- }
- outer = true;
- if (owner == null) {
- throw new IllegalArgumentException("Illegal outer class owner");
- }
- if (desc != null) {
- CheckMethodAdapter.checkMethodDesc(desc);
- }
- cv.visitOuterClass(owner, name, desc);
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- checkState();
- CheckMethodAdapter.checkInternalName(name, "class name");
- if (outerName != null) {
- CheckMethodAdapter.checkInternalName(outerName, "outer class name");
- }
- if (innerName != null) {
- CheckMethodAdapter.checkIdentifier(innerName, "inner class name");
- }
- checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_PRIVATE
- + Opcodes.ACC_PROTECTED + Opcodes.ACC_STATIC
- + Opcodes.ACC_FINAL + Opcodes.ACC_INTERFACE
- + Opcodes.ACC_ABSTRACT + Opcodes.ACC_SYNTHETIC
- + Opcodes.ACC_ANNOTATION + Opcodes.ACC_ENUM);
- cv.visitInnerClass(name, outerName, innerName, access);
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- checkState();
- checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_PRIVATE
- + Opcodes.ACC_PROTECTED + Opcodes.ACC_STATIC
- + Opcodes.ACC_FINAL + Opcodes.ACC_VOLATILE
- + Opcodes.ACC_TRANSIENT + Opcodes.ACC_SYNTHETIC
- + Opcodes.ACC_ENUM + Opcodes.ACC_DEPRECATED);
- CheckMethodAdapter.checkIdentifier(name, "field name");
- CheckMethodAdapter.checkDesc(desc, false);
- if (signature != null) {
- // TODO
- }
- if (value != null) {
- CheckMethodAdapter.checkConstant(value);
- }
- FieldVisitor av = cv.visitField(access, name, desc, signature, value);
- return new CheckFieldAdapter(av);
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- checkState();
- checkAccess(access, Opcodes.ACC_PUBLIC + Opcodes.ACC_PRIVATE
- + Opcodes.ACC_PROTECTED + Opcodes.ACC_STATIC
- + Opcodes.ACC_FINAL + Opcodes.ACC_SYNCHRONIZED
- + Opcodes.ACC_BRIDGE + Opcodes.ACC_VARARGS + Opcodes.ACC_NATIVE
- + Opcodes.ACC_ABSTRACT + Opcodes.ACC_STRICT
- + Opcodes.ACC_SYNTHETIC + Opcodes.ACC_DEPRECATED);
- CheckMethodAdapter.checkMethodIdentifier(name, "method name");
- CheckMethodAdapter.checkMethodDesc(desc);
- if (signature != null) {
- // TODO
- }
- if (exceptions != null) {
- for (int i = 0; i < exceptions.length; ++i) {
- CheckMethodAdapter.checkInternalName(exceptions[i],
- "exception name at index " + i);
- }
- }
- return new CheckMethodAdapter(cv.visitMethod(access,
- name,
- desc,
- signature,
- exceptions));
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- checkState();
- CheckMethodAdapter.checkDesc(desc, false);
- return new CheckAnnotationAdapter(cv.visitAnnotation(desc, visible));
- }
-
- public void visitAttribute(final Attribute attr) {
- checkState();
- if (attr == null) {
- throw new IllegalArgumentException("Invalid attribute (must not be null)");
- }
- cv.visitAttribute(attr);
- }
-
- public void visitEnd() {
- checkState();
- end = true;
- cv.visitEnd();
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Checks that the visit method has been called and that visitEnd has not
- * been called.
- */
- private void checkState() {
- if (!start) {
- throw new IllegalStateException("Cannot visit member before visit has been called.");
- }
- if (end) {
- throw new IllegalStateException("Cannot visit member after visitEnd has been called.");
- }
- }
-
- /**
- * Checks that the given access flags do not contain invalid flags. This
- * method also checks that mutually incompatible flags are not set
- * simultaneously.
- *
- * @param access the access flags to be checked
- * @param possibleAccess the valid access flags.
- */
- static void checkAccess(final int access, final int possibleAccess) {
- if ((access & ~possibleAccess) != 0) {
- throw new IllegalArgumentException("Invalid access flags: "
- + access);
- }
- int pub = ((access & Opcodes.ACC_PUBLIC) != 0 ? 1 : 0);
- int pri = ((access & Opcodes.ACC_PRIVATE) != 0 ? 1 : 0);
- int pro = ((access & Opcodes.ACC_PROTECTED) != 0 ? 1 : 0);
- if (pub + pri + pro > 1) {
- throw new IllegalArgumentException("public private and protected are mutually exclusive: "
- + access);
- }
- int fin = ((access & Opcodes.ACC_FINAL) != 0 ? 1 : 0);
- int abs = ((access & Opcodes.ACC_ABSTRACT) != 0 ? 1 : 0);
- if (fin + abs > 1) {
- throw new IllegalArgumentException("final and abstract are mutually exclusive: "
- + access);
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckFieldAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckFieldAdapter.java
deleted file mode 100644
index 3e7c113..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckFieldAdapter.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-
-/**
- * A {@link FieldVisitor} that checks that its methods are properly used.
- */
-public class CheckFieldAdapter implements FieldVisitor {
-
- private FieldVisitor fv;
-
- private boolean end;
-
- public CheckFieldAdapter(final FieldVisitor fv) {
- this.fv = fv;
- }
-
- public AnnotationVisitor visitAnnotation(final String desc, boolean visible)
- {
- checkEnd();
- CheckMethodAdapter.checkDesc(desc, false);
- return new CheckAnnotationAdapter(fv.visitAnnotation(desc, visible));
- }
-
- public void visitAttribute(final Attribute attr) {
- checkEnd();
- if (attr == null) {
- throw new IllegalArgumentException("Invalid attribute (must not be null)");
- }
- fv.visitAttribute(attr);
- }
-
- public void visitEnd() {
- checkEnd();
- end = true;
- fv.visitEnd();
- }
-
- private void checkEnd() {
- if (end) {
- throw new IllegalStateException("Cannot call a visit method after visitEnd has been called");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckMethodAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckMethodAdapter.java
deleted file mode 100644
index 0123eee..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/CheckMethodAdapter.java
+++ /dev/null
@@ -1,942 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.MethodAdapter;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.Type;
-
-import java.util.HashMap;
-
-/**
- * A {@link MethodAdapter} that checks that its methods are properly used. More
- * precisely this code adapter checks each instruction individually (i.e., each
- * visit method checks some preconditions based <i>only</i> on its arguments -
- * such as the fact that the given opcode is correct for a given visit method),
- * but does <i>not</i> check the <i>sequence</i> of instructions. For example,
- * in a method whose signature is <tt>void m ()</tt>, the invalid instruction
- * IRETURN, or the invalid sequence IADD L2I will <i>not</i> be detected by
- * this code adapter.
- *
- * @author Eric Bruneton
- */
-public class CheckMethodAdapter extends MethodAdapter {
-
- /**
- * <tt>true</tt> if the visitCode method has been called.
- */
- private boolean startCode;
-
- /**
- * <tt>true</tt> if the visitMaxs method has been called.
- */
- private boolean endCode;
-
- /**
- * <tt>true</tt> if the visitEnd method has been called.
- */
- private boolean endMethod;
-
- /**
- * The already visited labels. This map associate Integer values to Label
- * keys.
- */
- private HashMap labels;
-
- /**
- * Code of the visit method to be used for each opcode.
- */
- private final static int[] TYPE;
-
- static {
- String s = "BBBBBBBBBBBBBBBBCCIAADDDDDAAAAAAAAAAAAAAAAAAAABBBBBBBBDD"
- + "DDDAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
- + "BBBBBBBBBBBBBBBBBBBJBBBBBBBBBBBBBBBBBBBBHHHHHHHHHHHHHHHHD"
- + "KLBBBBBBFFFFGGGGAECEBBEEBBAMHHAA";
- TYPE = new int[s.length()];
- for (int i = 0; i < TYPE.length; ++i) {
- TYPE[i] = (s.charAt(i) - 'A' - 1);
- }
- }
-
- // code to generate the above string
- // public static void main (String[] args) {
- // int[] TYPE = new int[] {
- // 0, //NOP
- // 0, //ACONST_NULL
- // 0, //ICONST_M1
- // 0, //ICONST_0
- // 0, //ICONST_1
- // 0, //ICONST_2
- // 0, //ICONST_3
- // 0, //ICONST_4
- // 0, //ICONST_5
- // 0, //LCONST_0
- // 0, //LCONST_1
- // 0, //FCONST_0
- // 0, //FCONST_1
- // 0, //FCONST_2
- // 0, //DCONST_0
- // 0, //DCONST_1
- // 1, //BIPUSH
- // 1, //SIPUSH
- // 7, //LDC
- // -1, //LDC_W
- // -1, //LDC2_W
- // 2, //ILOAD
- // 2, //LLOAD
- // 2, //FLOAD
- // 2, //DLOAD
- // 2, //ALOAD
- // -1, //ILOAD_0
- // -1, //ILOAD_1
- // -1, //ILOAD_2
- // -1, //ILOAD_3
- // -1, //LLOAD_0
- // -1, //LLOAD_1
- // -1, //LLOAD_2
- // -1, //LLOAD_3
- // -1, //FLOAD_0
- // -1, //FLOAD_1
- // -1, //FLOAD_2
- // -1, //FLOAD_3
- // -1, //DLOAD_0
- // -1, //DLOAD_1
- // -1, //DLOAD_2
- // -1, //DLOAD_3
- // -1, //ALOAD_0
- // -1, //ALOAD_1
- // -1, //ALOAD_2
- // -1, //ALOAD_3
- // 0, //IALOAD
- // 0, //LALOAD
- // 0, //FALOAD
- // 0, //DALOAD
- // 0, //AALOAD
- // 0, //BALOAD
- // 0, //CALOAD
- // 0, //SALOAD
- // 2, //ISTORE
- // 2, //LSTORE
- // 2, //FSTORE
- // 2, //DSTORE
- // 2, //ASTORE
- // -1, //ISTORE_0
- // -1, //ISTORE_1
- // -1, //ISTORE_2
- // -1, //ISTORE_3
- // -1, //LSTORE_0
- // -1, //LSTORE_1
- // -1, //LSTORE_2
- // -1, //LSTORE_3
- // -1, //FSTORE_0
- // -1, //FSTORE_1
- // -1, //FSTORE_2
- // -1, //FSTORE_3
- // -1, //DSTORE_0
- // -1, //DSTORE_1
- // -1, //DSTORE_2
- // -1, //DSTORE_3
- // -1, //ASTORE_0
- // -1, //ASTORE_1
- // -1, //ASTORE_2
- // -1, //ASTORE_3
- // 0, //IASTORE
- // 0, //LASTORE
- // 0, //FASTORE
- // 0, //DASTORE
- // 0, //AASTORE
- // 0, //BASTORE
- // 0, //CASTORE
- // 0, //SASTORE
- // 0, //POP
- // 0, //POP2
- // 0, //DUP
- // 0, //DUP_X1
- // 0, //DUP_X2
- // 0, //DUP2
- // 0, //DUP2_X1
- // 0, //DUP2_X2
- // 0, //SWAP
- // 0, //IADD
- // 0, //LADD
- // 0, //FADD
- // 0, //DADD
- // 0, //ISUB
- // 0, //LSUB
- // 0, //FSUB
- // 0, //DSUB
- // 0, //IMUL
- // 0, //LMUL
- // 0, //FMUL
- // 0, //DMUL
- // 0, //IDIV
- // 0, //LDIV
- // 0, //FDIV
- // 0, //DDIV
- // 0, //IREM
- // 0, //LREM
- // 0, //FREM
- // 0, //DREM
- // 0, //INEG
- // 0, //LNEG
- // 0, //FNEG
- // 0, //DNEG
- // 0, //ISHL
- // 0, //LSHL
- // 0, //ISHR
- // 0, //LSHR
- // 0, //IUSHR
- // 0, //LUSHR
- // 0, //IAND
- // 0, //LAND
- // 0, //IOR
- // 0, //LOR
- // 0, //IXOR
- // 0, //LXOR
- // 8, //IINC
- // 0, //I2L
- // 0, //I2F
- // 0, //I2D
- // 0, //L2I
- // 0, //L2F
- // 0, //L2D
- // 0, //F2I
- // 0, //F2L
- // 0, //F2D
- // 0, //D2I
- // 0, //D2L
- // 0, //D2F
- // 0, //I2B
- // 0, //I2C
- // 0, //I2S
- // 0, //LCMP
- // 0, //FCMPL
- // 0, //FCMPG
- // 0, //DCMPL
- // 0, //DCMPG
- // 6, //IFEQ
- // 6, //IFNE
- // 6, //IFLT
- // 6, //IFGE
- // 6, //IFGT
- // 6, //IFLE
- // 6, //IF_ICMPEQ
- // 6, //IF_ICMPNE
- // 6, //IF_ICMPLT
- // 6, //IF_ICMPGE
- // 6, //IF_ICMPGT
- // 6, //IF_ICMPLE
- // 6, //IF_ACMPEQ
- // 6, //IF_ACMPNE
- // 6, //GOTO
- // 6, //JSR
- // 2, //RET
- // 9, //TABLESWITCH
- // 10, //LOOKUPSWITCH
- // 0, //IRETURN
- // 0, //LRETURN
- // 0, //FRETURN
- // 0, //DRETURN
- // 0, //ARETURN
- // 0, //RETURN
- // 4, //GETSTATIC
- // 4, //PUTSTATIC
- // 4, //GETFIELD
- // 4, //PUTFIELD
- // 5, //INVOKEVIRTUAL
- // 5, //INVOKESPECIAL
- // 5, //INVOKESTATIC
- // 5, //INVOKEINTERFACE
- // -1, //UNUSED
- // 3, //NEW
- // 1, //NEWARRAY
- // 3, //ANEWARRAY
- // 0, //ARRAYLENGTH
- // 0, //ATHROW
- // 3, //CHECKCAST
- // 3, //INSTANCEOF
- // 0, //MONITORENTER
- // 0, //MONITOREXIT
- // -1, //WIDE
- // 11, //MULTIANEWARRAY
- // 6, //IFNULL
- // 6, //IFNONNULL
- // -1, //GOTO_W
- // -1 //JSR_W
- // };
- // for (int i = 0; i < TYPE.length; ++i) {
- // System.out.print((char)(TYPE[i] + 1 + 'A'));
- // }
- // System.out.println();
- // }
-
- /**
- * Constructs a new {@link CheckMethodAdapter} object.
- *
- * @param cv the code visitor to which this adapter must delegate calls.
- */
- public CheckMethodAdapter(final MethodVisitor cv) {
- super(cv);
- this.labels = new HashMap();
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- checkEndMethod();
- checkDesc(desc, false);
- return new CheckAnnotationAdapter(mv.visitAnnotation(desc, visible));
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- checkEndMethod();
- return new CheckAnnotationAdapter(mv.visitAnnotationDefault(), false);
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- checkEndMethod();
- checkDesc(desc, false);
- return new CheckAnnotationAdapter(mv.visitParameterAnnotation(parameter,
- desc,
- visible));
- }
-
- public void visitAttribute(final Attribute attr) {
- checkEndMethod();
- if (attr == null) {
- throw new IllegalArgumentException("Invalid attribute (must not be null)");
- }
- mv.visitAttribute(attr);
- }
-
- public void visitCode() {
- startCode = true;
- mv.visitCode();
- }
-
- public void visitInsn(final int opcode) {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 0);
- mv.visitInsn(opcode);
- }
-
- public void visitIntInsn(final int opcode, final int operand) {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 1);
- switch (opcode) {
- case Opcodes.BIPUSH:
- checkSignedByte(operand, "Invalid operand");
- break;
- case Opcodes.SIPUSH:
- checkSignedShort(operand, "Invalid operand");
- break;
- // case Constants.NEWARRAY:
- default:
- if (operand < Opcodes.T_BOOLEAN || operand > Opcodes.T_LONG) {
- throw new IllegalArgumentException("Invalid operand (must be an array type code T_...): "
- + operand);
- }
- }
- mv.visitIntInsn(opcode, operand);
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 2);
- checkUnsignedShort(var, "Invalid variable index");
- mv.visitVarInsn(opcode, var);
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 3);
- if (desc != null && desc.length() > 0 && desc.charAt(0) == '[') {
- checkDesc(desc, false);
- } else {
- checkInternalName(desc, "type");
- }
- if (opcode == Opcodes.NEW && desc.charAt(0) == '[') {
- throw new IllegalArgumentException("NEW cannot be used to create arrays: "
- + desc);
- }
- mv.visitTypeInsn(opcode, desc);
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 4);
- checkInternalName(owner, "owner");
- checkIdentifier(name, "name");
- checkDesc(desc, false);
- mv.visitFieldInsn(opcode, owner, name, desc);
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 5);
- checkMethodIdentifier(name, "name");
- if (!name.equals("clone")) {
- // In JDK1.5, clone method can be called on array class descriptors
- checkInternalName(owner, "owner");
- }
- checkMethodDesc(desc);
- mv.visitMethodInsn(opcode, owner, name, desc);
- }
-
- public void visitJumpInsn(final int opcode, final Label label) {
- checkStartCode();
- checkEndCode();
- checkOpcode(opcode, 6);
- checkLabel(label, false, "label");
- mv.visitJumpInsn(opcode, label);
- }
-
- public void visitLabel(final Label label) {
- checkStartCode();
- checkEndCode();
- checkLabel(label, false, "label");
- if (labels.get(label) != null) {
- throw new IllegalArgumentException("Already visited label");
- } else {
- labels.put(label, new Integer(labels.size()));
- }
- mv.visitLabel(label);
- }
-
- public void visitLdcInsn(final Object cst) {
- checkStartCode();
- checkEndCode();
- if (!(cst instanceof Type)) {
- checkConstant(cst);
- }
- mv.visitLdcInsn(cst);
- }
-
- public void visitIincInsn(final int var, final int increment) {
- checkStartCode();
- checkEndCode();
- checkUnsignedShort(var, "Invalid variable index");
- checkSignedShort(increment, "Invalid increment");
- mv.visitIincInsn(var, increment);
- }
-
- public void visitTableSwitchInsn(
- final int min,
- final int max,
- final Label dflt,
- final Label labels[])
- {
- checkStartCode();
- checkEndCode();
- if (max < min) {
- throw new IllegalArgumentException("Max = " + max
- + " must be greater than or equal to min = " + min);
- }
- checkLabel(dflt, false, "default label");
- if (labels == null || labels.length != max - min + 1) {
- throw new IllegalArgumentException("There must be max - min + 1 labels");
- }
- for (int i = 0; i < labels.length; ++i) {
- checkLabel(labels[i], false, "label at index " + i);
- }
- mv.visitTableSwitchInsn(min, max, dflt, labels);
- }
-
- public void visitLookupSwitchInsn(
- final Label dflt,
- final int keys[],
- final Label labels[])
- {
- checkEndCode();
- checkStartCode();
- checkLabel(dflt, false, "default label");
- if (keys == null || labels == null || keys.length != labels.length) {
- throw new IllegalArgumentException("There must be the same number of keys and labels");
- }
- for (int i = 0; i < labels.length; ++i) {
- checkLabel(labels[i], false, "label at index " + i);
- }
- mv.visitLookupSwitchInsn(dflt, keys, labels);
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- checkStartCode();
- checkEndCode();
- checkDesc(desc, false);
- if (desc.charAt(0) != '[') {
- throw new IllegalArgumentException("Invalid descriptor (must be an array type descriptor): "
- + desc);
- }
- if (dims < 1) {
- throw new IllegalArgumentException("Invalid dimensions (must be greater than 0): "
- + dims);
- }
- if (dims > desc.lastIndexOf('[') + 1) {
- throw new IllegalArgumentException("Invalid dimensions (must not be greater than dims(desc)): "
- + dims);
- }
- mv.visitMultiANewArrayInsn(desc, dims);
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- checkStartCode();
- checkEndCode();
- if (type != null) {
- checkInternalName(type, "type");
- }
- mv.visitTryCatchBlock(start, end, handler, type);
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- checkStartCode();
- checkEndCode();
- checkIdentifier(name, "name");
- checkDesc(desc, false);
- checkLabel(start, true, "start label");
- checkLabel(end, true, "end label");
- checkUnsignedShort(index, "Invalid variable index");
- int s = ((Integer) labels.get(start)).intValue();
- int e = ((Integer) labels.get(end)).intValue();
- if (e < s) {
- throw new IllegalArgumentException("Invalid start and end labels (end must be greater than start)");
- }
- mv.visitLocalVariable(name, desc, signature, start, end, index);
- }
-
- public void visitLineNumber(final int line, final Label start) {
- checkStartCode();
- checkEndCode();
- checkUnsignedShort(line, "Invalid line number");
- checkLabel(start, true, "start label");
- mv.visitLineNumber(line, start);
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- checkStartCode();
- checkEndCode();
- endCode = true;
- checkUnsignedShort(maxStack, "Invalid max stack");
- checkUnsignedShort(maxLocals, "Invalid max locals");
- mv.visitMaxs(maxStack, maxLocals);
- }
-
- public void visitEnd() {
- checkEndMethod();
- endMethod = true;
- mv.visitEnd();
- }
-
- // -------------------------------------------------------------------------
-
- /**
- * Checks that the visitCode method has been called.
- */
- void checkStartCode() {
- if (!startCode) {
- throw new IllegalStateException("Cannot visit instructions before visitCode has been called.");
- }
- }
-
- /**
- * Checks that the visitMaxs method has not been called.
- */
- void checkEndCode() {
- if (endCode) {
- throw new IllegalStateException("Cannot visit instructions after visitMaxs has been called.");
- }
- }
-
- /**
- * Checks that the visitEnd method has not been called.
- */
- void checkEndMethod() {
- if (endMethod) {
- throw new IllegalStateException("Cannot visit elements after visitEnd has been called.");
- }
- }
-
- /**
- * Checks that the type of the given opcode is equal to the given type.
- *
- * @param opcode the opcode to be checked.
- * @param type the expected opcode type.
- */
- static void checkOpcode(final int opcode, final int type) {
- if (opcode < 0 || opcode > 199 || TYPE[opcode] != type) {
- throw new IllegalArgumentException("Invalid opcode: " + opcode);
- }
- }
-
- /**
- * Checks that the given value is a signed byte.
- *
- * @param value the value to be checked.
- * @param msg an message to be used in case of error.
- */
- static void checkSignedByte(final int value, final String msg) {
- if (value < Byte.MIN_VALUE || value > Byte.MAX_VALUE) {
- throw new IllegalArgumentException(msg
- + " (must be a signed byte): " + value);
- }
- }
-
- /**
- * Checks that the given value is a signed short.
- *
- * @param value the value to be checked.
- * @param msg an message to be used in case of error.
- */
- static void checkSignedShort(final int value, final String msg) {
- if (value < Short.MIN_VALUE || value > Short.MAX_VALUE) {
- throw new IllegalArgumentException(msg
- + " (must be a signed short): " + value);
- }
- }
-
- /**
- * Checks that the given value is an unsigned short.
- *
- * @param value the value to be checked.
- * @param msg an message to be used in case of error.
- */
- static void checkUnsignedShort(final int value, final String msg) {
- if (value < 0 || value > 65535) {
- throw new IllegalArgumentException(msg
- + " (must be an unsigned short): " + value);
- }
- }
-
- /**
- * Checks that the given value is an {@link Integer}, a{@link Float}, a
- * {@link Long}, a {@link Double} or a {@link String}.
- *
- * @param cst the value to be checked.
- */
- static void checkConstant(final Object cst) {
- if (!(cst instanceof Integer) && !(cst instanceof Float)
- && !(cst instanceof Long) && !(cst instanceof Double)
- && !(cst instanceof String))
- {
- throw new IllegalArgumentException("Invalid constant: " + cst);
- }
- }
-
- /**
- * Checks that the given string is a valid Java identifier.
- *
- * @param name the string to be checked.
- * @param msg a message to be used in case of error.
- */
- static void checkIdentifier(final String name, final String msg) {
- checkIdentifier(name, 0, -1, msg);
- }
-
- /**
- * Checks that the given substring is a valid Java identifier.
- *
- * @param name the string to be checked.
- * @param start index of the first character of the identifier (inclusive).
- * @param end index of the last character of the identifier (exclusive). -1
- * is equivalent to <tt>name.length()</tt> if name is not
- * <tt>null</tt>.
- * @param msg a message to be used in case of error.
- */
- static void checkIdentifier(
- final String name,
- final int start,
- final int end,
- final String msg)
- {
- if (name == null || (end == -1 ? name.length() <= start : end <= start))
- {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must not be null or empty)");
- }
- if (!Character.isJavaIdentifierStart(name.charAt(start))) {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must be a valid Java identifier): " + name);
- }
- int max = (end == -1 ? name.length() : end);
- for (int i = start + 1; i < max; ++i) {
- if (!Character.isJavaIdentifierPart(name.charAt(i))) {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must be a valid Java identifier): " + name);
- }
- }
- }
-
- /**
- * Checks that the given string is a valid Java identifier or is equal to
- * '&lt;init&gt;' or '&lt;clinit&gt;'.
- *
- * @param name the string to be checked.
- * @param msg a message to be used in case of error.
- */
- static void checkMethodIdentifier(final String name, final String msg) {
- if (name == null || name.length() == 0) {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must not be null or empty)");
- }
- if (name.equals("<init>") || name.equals("<clinit>")) {
- return;
- }
- if (!Character.isJavaIdentifierStart(name.charAt(0))) {
- throw new IllegalArgumentException("Invalid "
- + msg
- + " (must be a '<init>', '<clinit>' or a valid Java identifier): "
- + name);
- }
- for (int i = 1; i < name.length(); ++i) {
- if (!Character.isJavaIdentifierPart(name.charAt(i))) {
- throw new IllegalArgumentException("Invalid "
- + msg
- + " (must be '<init>' or '<clinit>' or a valid Java identifier): "
- + name);
- }
- }
- }
-
- /**
- * Checks that the given string is a valid internal class name.
- *
- * @param name the string to be checked.
- * @param msg a message to be used in case of error.
- */
- static void checkInternalName(final String name, final String msg) {
- checkInternalName(name, 0, -1, msg);
- }
-
- /**
- * Checks that the given substring is a valid internal class name.
- *
- * @param name the string to be checked.
- * @param start index of the first character of the identifier (inclusive).
- * @param end index of the last character of the identifier (exclusive). -1
- * is equivalent to <tt>name.length()</tt> if name is not
- * <tt>null</tt>.
- * @param msg a message to be used in case of error.
- */
- static void checkInternalName(
- final String name,
- final int start,
- final int end,
- final String msg)
- {
- if (name == null || name.length() == 0) {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must not be null or empty)");
- }
- int max = (end == -1 ? name.length() : end);
- try {
- int begin = start;
- int slash;
- do {
- slash = name.indexOf('/', begin + 1);
- if (slash == -1 || slash > max) {
- slash = max;
- }
- checkIdentifier(name, begin, slash, null);
- begin = slash + 1;
- } while (slash != max);
- } catch (IllegalArgumentException _) {
- throw new IllegalArgumentException("Invalid "
- + msg
- + " (must be a fully qualified class name in internal form): "
- + name);
- }
- }
-
- /**
- * Checks that the given string is a valid type descriptor.
- *
- * @param desc the string to be checked.
- * @param canBeVoid <tt>true</tt> if <tt>V</tt> can be considered valid.
- */
- static void checkDesc(final String desc, final boolean canBeVoid) {
- int end = checkDesc(desc, 0, canBeVoid);
- if (end != desc.length()) {
- throw new IllegalArgumentException("Invalid descriptor: " + desc);
- }
- }
-
- /**
- * Checks that a the given substring is a valid type descriptor.
- *
- * @param desc the string to be checked.
- * @param start index of the first character of the identifier (inclusive).
- * @param canBeVoid <tt>true</tt> if <tt>V</tt> can be considered valid.
- * @return the index of the last character of the type decriptor, plus one.
- */
- static int checkDesc(
- final String desc,
- final int start,
- final boolean canBeVoid)
- {
- if (desc == null || start >= desc.length()) {
- throw new IllegalArgumentException("Invalid type descriptor (must not be null or empty)");
- }
- int index;
- switch (desc.charAt(start)) {
- case 'V':
- if (canBeVoid) {
- return start + 1;
- } else {
- throw new IllegalArgumentException("Invalid descriptor: "
- + desc);
- }
- case 'Z':
- case 'C':
- case 'B':
- case 'S':
- case 'I':
- case 'F':
- case 'J':
- case 'D':
- return start + 1;
- case '[':
- index = start + 1;
- while (index < desc.length() && desc.charAt(index) == '[') {
- ++index;
- }
- if (index < desc.length()) {
- return checkDesc(desc, index, false);
- } else {
- throw new IllegalArgumentException("Invalid descriptor: "
- + desc);
- }
- case 'L':
- index = desc.indexOf(';', start);
- if (index == -1 || index - start < 2) {
- throw new IllegalArgumentException("Invalid descriptor: "
- + desc);
- }
- try {
- checkInternalName(desc, start + 1, index, null);
- } catch (IllegalArgumentException _) {
- throw new IllegalArgumentException("Invalid descriptor: "
- + desc);
- }
- return index + 1;
- default:
- throw new IllegalArgumentException("Invalid descriptor: "
- + desc);
- }
- }
-
- /**
- * Checks that the given string is a valid method descriptor.
- *
- * @param desc the string to be checked.
- */
- static void checkMethodDesc(final String desc) {
- if (desc == null || desc.length() == 0) {
- throw new IllegalArgumentException("Invalid method descriptor (must not be null or empty)");
- }
- if (desc.charAt(0) != '(' || desc.length() < 3) {
- throw new IllegalArgumentException("Invalid descriptor: " + desc);
- }
- int start = 1;
- if (desc.charAt(start) != ')') {
- do {
- if (desc.charAt(start) == 'V') {
- throw new IllegalArgumentException("Invalid descriptor: "
- + desc);
- }
- start = checkDesc(desc, start, false);
- } while (start < desc.length() && desc.charAt(start) != ')');
- }
- start = checkDesc(desc, start + 1, true);
- if (start != desc.length()) {
- throw new IllegalArgumentException("Invalid descriptor: " + desc);
- }
- }
-
- /**
- * Checks that the given label is not null. This method can also check that
- * the label has been visited.
- *
- * @param label the label to be checked.
- * @param checkVisited <tt>true</tt> to check that the label has been
- * visited.
- * @param msg a message to be used in case of error.
- */
- void checkLabel(
- final Label label,
- final boolean checkVisited,
- final String msg)
- {
- if (label == null) {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must not be null)");
- }
- if (checkVisited && labels.get(label) == null) {
- throw new IllegalArgumentException("Invalid " + msg
- + " (must be visited first)");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAbstractVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAbstractVisitor.java
deleted file mode 100644
index 8a3d4d0..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAbstractVisitor.java
+++ /dev/null
@@ -1,180 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.util.attrs.Traceable;
-
-/**
- * An abstract trace visitor.
- *
- * @author Eric Bruneton
- */
-public abstract class TraceAbstractVisitor extends AbstractVisitor {
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for internal
- * type names in bytecode notation.
- */
- public final static int INTERNAL_NAME = 0;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for field
- * descriptors, formatted in bytecode notation
- */
- public final static int FIELD_DESCRIPTOR = 1;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for field
- * signatures, formatted in bytecode notation
- */
- public final static int FIELD_SIGNATURE = 2;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for method
- * descriptors, formatted in bytecode notation
- */
- public final static int METHOD_DESCRIPTOR = 3;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for method
- * signatures, formatted in bytecode notation
- */
- public final static int METHOD_SIGNATURE = 4;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for class
- * signatures, formatted in bytecode notation
- */
- public final static int CLASS_SIGNATURE = 5;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for field or
- * method return value signatures, formatted in default Java notation
- * (non-bytecode)
- */
- public final static int TYPE_DECLARATION = 6;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for class
- * signatures, formatted in default Java notation (non-bytecode)
- */
- public final static int CLASS_DECLARATION = 7;
-
- /**
- * Constant used in {@link #appendDescriptor appendDescriptor} for method
- * parameter signatures, formatted in default Java notation (non-bytecode)
- */
- public final static int PARAMETERS_DECLARATION = 8;
-
- /**
- * Tab for class members.
- */
- protected String tab = " ";
-
- /**
- * Prints a disassembled view of the given annotation.
- *
- * @param desc the class descriptor of the annotation class.
- * @param visible <tt>true</tt> if the annotation is visible at runtime.
- * @return a visitor to visit the annotation values.
- */
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- buf.setLength(0);
- buf.append(tab).append('@');
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append('(');
- text.add(buf.toString());
- TraceAnnotationVisitor tav = createTraceAnnotationVisitor();
- text.add(tav.getText());
- text.add(visible ? ")\n" : ") // invisible\n");
- return tav;
- }
-
- /**
- * Prints a disassembled view of the given attribute.
- *
- * @param attr an attribute.
- */
- public void visitAttribute(final Attribute attr) {
- buf.setLength(0);
- buf.append(tab).append("ATTRIBUTE ");
- appendDescriptor(-1, attr.type);
-
- if (attr instanceof Traceable) {
- ((Traceable) attr).trace(buf, null);
- } else {
- buf.append(" : ").append(attr.toString()).append("\n");
- }
-
- text.add(buf.toString());
- }
-
- /**
- * Does nothing.
- */
- public void visitEnd() {
- // does nothing
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- protected TraceAnnotationVisitor createTraceAnnotationVisitor() {
- return new TraceAnnotationVisitor();
- }
-
- /**
- * Appends an internal name, a type descriptor or a type signature to
- * {@link #buf buf}.
- *
- * @param type indicates if desc is an internal name, a field descriptor, a
- * method descriptor, a class signature, ...
- * @param desc an internal name, type descriptor, or type signature. May be
- * <tt>null</tt>.
- */
- protected void appendDescriptor(final int type, final String desc) {
- if (type == CLASS_SIGNATURE || type == FIELD_SIGNATURE
- || type == METHOD_SIGNATURE)
- {
- if (desc != null) {
- buf.append("// signature ").append(desc).append('\n');
- }
- } else {
- buf.append(desc);
- }
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAnnotationVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAnnotationVisitor.java
deleted file mode 100644
index ae812d8..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceAnnotationVisitor.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Type;
-
-/**
- * An {@link AnnotationVisitor} that prints a disassembled view of the
- * annotations it visits.
- *
- * @author Eric Bruneton
- */
-public class TraceAnnotationVisitor extends TraceAbstractVisitor implements
- AnnotationVisitor
-{
-
- /**
- * The {@link AnnotationVisitor} to which this visitor delegates calls. May
- * be <tt>null</tt>.
- */
- protected AnnotationVisitor av;
-
- private int valueNumber = 0;
-
- /**
- * Constructs a new {@link TraceAnnotationVisitor}.
- */
- public TraceAnnotationVisitor() {
- // ignore
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the AnnotationVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(final String name, final Object value) {
- buf.setLength(0);
- appendComa(valueNumber++);
-
- if (name != null) {
- buf.append(name).append('=');
- }
-
- if (value instanceof String) {
- visitString((String) value);
- } else if (value instanceof Type) {
- visitType((Type) value);
- } else if (value instanceof Byte) {
- visitByte(((Byte) value).byteValue());
- } else if (value instanceof Boolean) {
- visitBoolean(((Boolean) value).booleanValue());
- } else if (value instanceof Short) {
- visitShort(((Short) value).shortValue());
- } else if (value instanceof Character) {
- visitChar(((Character) value).charValue());
- } else if (value instanceof Integer) {
- visitInt(((Integer) value).intValue());
- } else if (value instanceof Float) {
- visitFloat(((Float) value).floatValue());
- } else if (value instanceof Long) {
- visitLong(((Long) value).longValue());
- } else if (value instanceof Double) {
- visitDouble(((Double) value).doubleValue());
- } else if (value.getClass().isArray()) {
- buf.append('{');
- if (value instanceof byte[]) {
- byte[] v = (byte[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitByte(v[i]);
- }
- } else if (value instanceof boolean[]) {
- boolean[] v = (boolean[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitBoolean(v[i]);
- }
- } else if (value instanceof short[]) {
- short[] v = (short[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitShort(v[i]);
- }
- } else if (value instanceof char[]) {
- char[] v = (char[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitChar(v[i]);
- }
- } else if (value instanceof int[]) {
- int[] v = (int[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitInt(v[i]);
- }
- } else if (value instanceof long[]) {
- long[] v = (long[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitLong(v[i]);
- }
- } else if (value instanceof float[]) {
- float[] v = (float[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitFloat(v[i]);
- }
- } else if (value instanceof double[]) {
- double[] v = (double[]) value;
- for (int i = 0; i < v.length; i++) {
- appendComa(i);
- visitDouble(v[i]);
- }
- }
- buf.append('}');
- } else {
- buf.append(value);
- }
-
- text.add(buf.toString());
-
- if (av != null) {
- av.visit(name, value);
- }
- }
-
- private void visitInt(int value) {
- buf.append(value);
- }
-
- private void visitLong(long value) {
- buf.append(value).append('L');
- }
-
- private void visitFloat(float value) {
- buf.append(value).append('F');
- }
-
- private void visitDouble(double value) {
- buf.append(value).append('D');
- }
-
- private void visitChar(char value) {
- buf.append("(char)").append((int) value);
- }
-
- private void visitShort(short value) {
- buf.append("(short)").append(value);
- }
-
- private void visitByte(byte value) {
- buf.append("(byte)").append(value);
- }
-
- private void visitBoolean(boolean value) {
- buf.append(value);
- }
-
- private void visitString(String value) {
- appendString(buf, value);
- }
-
- private void visitType(Type value) {
- buf.append(value.getClassName()).append(".class");
- }
-
- public void visitEnum(
- final String name,
- final String desc,
- final String value)
- {
- buf.setLength(0);
- appendComa(valueNumber++);
- if (name != null) {
- buf.append(name).append('=');
- }
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append('.').append(value);
- text.add(buf.toString());
-
- if (av != null) {
- av.visitEnum(name, desc, value);
- }
- }
-
- public AnnotationVisitor visitAnnotation(
- final String name,
- final String desc)
- {
- buf.setLength(0);
- appendComa(valueNumber++);
- if (name != null) {
- buf.append(name).append('=');
- }
- buf.append('@');
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append('(');
- text.add(buf.toString());
- TraceAnnotationVisitor tav = createTraceAnnotationVisitor();
- text.add(tav.getText());
- text.add(")");
- if (av != null) {
- tav.av = av.visitAnnotation(name, desc);
- }
- return tav;
- }
-
- public AnnotationVisitor visitArray(final String name) {
- buf.setLength(0);
- appendComa(valueNumber++);
- if (name != null) {
- buf.append(name).append('=');
- }
- buf.append('{');
- text.add(buf.toString());
- TraceAnnotationVisitor tav = createTraceAnnotationVisitor();
- text.add(tav.getText());
- text.add("}");
- if (av != null) {
- tav.av = av.visitArray(name);
- }
- return tav;
- }
-
- public void visitEnd() {
- if (av != null) {
- av.visitEnd();
- }
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- protected TraceAnnotationVisitor createTraceAnnotationVisitor() {
- return new TraceAnnotationVisitor();
- }
-
- private void appendComa(int i) {
- if (i != 0) {
- buf.append(", ");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceClassVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceClassVisitor.java
deleted file mode 100644
index bbadc91..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceClassVisitor.java
+++ /dev/null
@@ -1,534 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import java.io.FileInputStream;
-import java.io.PrintWriter;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.signature.SignatureReader;
-
-/**
- * A {@link ClassVisitor} that prints a disassembled view of the classes it
- * visits. This class visitor can be used alone (see the {@link #main main}
- * method) to disassemble a class. It can also be used in the middle of class
- * visitor chain to trace the class that is visited at a given point in this
- * chain. This may be uselful for debugging purposes. <p> The trace printed when
- * visiting the <tt>Hello</tt> class is the following: <p> <blockquote>
- *
- * <pre>
- * // class version 49.0 (49)
- * // access flags 33
- * public class Hello {
- *
- * // compiled from: Hello.java
- *
- * // access flags 1
- * public &lt;init&gt; ()V
- * ALOAD 0
- * INVOKESPECIAL java/lang/Object &lt;init&gt; ()V
- * RETURN
- * MAXSTACK = 1
- * MAXLOCALS = 1
- *
- * // access flags 9
- * public static main ([Ljava/lang/String;)V
- * GETSTATIC java/lang/System out Ljava/io/PrintStream;
- * LDC &quot;hello&quot;
- * INVOKEVIRTUAL java/io/PrintStream println (Ljava/lang/String;)V
- * RETURN
- * MAXSTACK = 2
- * MAXLOCALS = 1
- * }
- * </pre>
- *
- * </blockquote> where <tt>Hello</tt> is defined by: <p> <blockquote>
- *
- * <pre>
- * public class Hello {
- *
- * public static void main(String[] args) {
- * System.out.println(&quot;hello&quot;);
- * }
- * }
- * </pre>
- *
- * </blockquote>
- *
- * @author Eric Bruneton
- * @author Eugene Kuleshov
- */
-public class TraceClassVisitor extends TraceAbstractVisitor implements
- ClassVisitor
-{
-
- /**
- * The {@link ClassVisitor} to which this visitor delegates calls. May be
- * <tt>null</tt>.
- */
- protected final ClassVisitor cv;
-
- /**
- * The print writer to be used to print the class.
- */
- protected final PrintWriter pw;
-
- /**
- * Prints a disassembled view of the given class to the standard output. <p>
- * Usage: TraceClassVisitor [-debug] &lt;fully qualified class name or class
- * file name &gt;
- *
- * @param args the command line arguments.
- *
- * @throws Exception if the class cannot be found, or if an IO exception
- * occurs.
- */
- public static void main(final String[] args) throws Exception {
- int i = 0;
- boolean skipDebug = true;
-
- boolean ok = true;
- if (args.length < 1 || args.length > 2) {
- ok = false;
- }
- if (ok && args[0].equals("-debug")) {
- i = 1;
- skipDebug = false;
- if (args.length != 2) {
- ok = false;
- }
- }
- if (!ok) {
- System.err.println("Prints a disassembled view of the given class.");
- System.err.println("Usage: TraceClassVisitor [-debug] "
- + "<fully qualified class name or class file name>");
- return;
- }
- ClassReader cr;
- if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1
- || args[i].indexOf('/') > -1)
- {
- cr = new ClassReader(new FileInputStream(args[i]));
- } else {
- cr = new ClassReader(args[i]);
- }
- cr.accept(new TraceClassVisitor(new PrintWriter(System.out)),
- getDefaultAttributes(),
- skipDebug);
- }
-
- /**
- * Constructs a new {@link TraceClassVisitor}.
- *
- * @param pw the print writer to be used to print the class.
- */
- public TraceClassVisitor(final PrintWriter pw) {
- this(null, pw);
- }
-
- /**
- * Constructs a new {@link TraceClassVisitor}.
- *
- * @param cv the {@link ClassVisitor} to which this visitor delegates calls.
- * May be <tt>null</tt>.
- * @param pw the print writer to be used to print the class.
- */
- public TraceClassVisitor(final ClassVisitor cv, final PrintWriter pw) {
- this.cv = cv;
- this.pw = pw;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the ClassVisitor interface
- // ------------------------------------------------------------------------
-
- public void visit(
- final int version,
- final int access,
- final String name,
- final String signature,
- final String superName,
- final String[] interfaces)
- {
- int major = version & 0xFFFF;
- int minor = version >>> 16;
- buf.setLength(0);
- buf.append("// class version ")
- .append(major)
- .append('.')
- .append(minor)
- .append(" (")
- .append(version)
- .append(")\n");
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- buf.append("// DEPRECATED\n");
- }
- buf.append("// access flags ").append(access).append('\n');
-
- appendDescriptor(CLASS_SIGNATURE, signature);
- if (signature != null) {
- TraceSignatureVisitor sv = new TraceSignatureVisitor(access);
- SignatureReader r = new SignatureReader(signature);
- r.accept(sv);
- buf.append("// declaration: ")
- .append(name)
- .append(sv.getDeclaration())
- .append('\n');
- }
-
- appendAccess(access & ~Opcodes.ACC_SUPER);
- if ((access & Opcodes.ACC_ANNOTATION) != 0) {
- buf.append("@interface ");
- } else if ((access & Opcodes.ACC_INTERFACE) != 0) {
- buf.append("interface ");
- } else if ((access & Opcodes.ACC_ENUM) != 0) {
- buf.append("enum ");
- } else {
- buf.append("class ");
- }
- appendDescriptor(INTERNAL_NAME, name);
-
- if (superName != null && !superName.equals("java/lang/Object")) {
- buf.append(" extends ");
- appendDescriptor(INTERNAL_NAME, superName);
- buf.append(' ');
- }
- if (interfaces != null && interfaces.length > 0) {
- buf.append(" implements ");
- for (int i = 0; i < interfaces.length; ++i) {
- appendDescriptor(INTERNAL_NAME, interfaces[i]);
- buf.append(' ');
- }
- }
- buf.append(" {\n\n");
-
- text.add(buf.toString());
-
- if (cv != null) {
- cv.visit(version, access, name, signature, superName, interfaces);
- }
- }
-
- public void visitSource(final String file, final String debug) {
- buf.setLength(0);
- if (file != null) {
- buf.append(tab)
- .append("// compiled from: ")
- .append(file)
- .append('\n');
- }
- if (debug != null) {
- buf.append(tab)
- .append("// debug info: ")
- .append(debug)
- .append('\n');
- }
- if (buf.length() > 0) {
- text.add(buf.toString());
- }
-
- if (cv != null) {
- cv.visitSource(file, debug);
- }
- }
-
- public void visitOuterClass(
- final String owner,
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append(tab).append("OUTERCLASS ");
- appendDescriptor(INTERNAL_NAME, owner);
- // if enclosing name is null, so why should we show this info?
- if (name != null) {
- buf.append(' ').append(name).append(' ');
- } else {
- buf.append(' ');
- }
- appendDescriptor(METHOD_DESCRIPTOR, desc);
- buf.append('\n');
- text.add(buf.toString());
-
- if (cv != null) {
- cv.visitOuterClass(owner, name, desc);
- }
- }
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- text.add("\n");
- AnnotationVisitor tav = super.visitAnnotation(desc, visible);
- if (cv != null) {
- ((TraceAnnotationVisitor) tav).av = cv.visitAnnotation(desc,
- visible);
- }
- return tav;
- }
-
- public void visitAttribute(final Attribute attr) {
- text.add("\n");
- super.visitAttribute(attr);
-
- if (cv != null) {
- cv.visitAttribute(attr);
- }
- }
-
- public void visitInnerClass(
- final String name,
- final String outerName,
- final String innerName,
- final int access)
- {
- buf.setLength(0);
- buf.append(tab).append("// access flags ").append(access
- & ~Opcodes.ACC_SUPER).append('\n');
- buf.append(tab);
- appendAccess(access);
- buf.append("INNERCLASS ");
- if ((access & Opcodes.ACC_ENUM) != 0) {
- buf.append("enum ");
- }
- appendDescriptor(INTERNAL_NAME, name);
- buf.append(' ');
- appendDescriptor(INTERNAL_NAME, outerName);
- buf.append(' ');
- appendDescriptor(INTERNAL_NAME, innerName);
- buf.append('\n');
- text.add(buf.toString());
-
- if (cv != null) {
- cv.visitInnerClass(name, outerName, innerName, access);
- }
- }
-
- public FieldVisitor visitField(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final Object value)
- {
- buf.setLength(0);
- buf.append('\n');
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- buf.append(tab).append("// DEPRECATED\n");
- }
- buf.append(tab).append("// access flags ").append(access).append('\n');
- if (signature != null) {
- buf.append(tab);
- appendDescriptor(FIELD_SIGNATURE, signature);
-
- TraceSignatureVisitor sv = new TraceSignatureVisitor(0);
- SignatureReader r = new SignatureReader(signature);
- r.acceptType(sv);
- buf.append(tab)
- .append("// declaration: ")
- .append(sv.getDeclaration())
- .append('\n');
- }
-
- buf.append(tab);
- appendAccess(access);
- if ((access & Opcodes.ACC_ENUM) != 0) {
- buf.append("enum ");
- }
-
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append(' ').append(name);
- if (value != null) {
- buf.append(" = ");
- if (value instanceof String) {
- buf.append("\"").append(value).append("\"");
- } else {
- buf.append(value);
- }
- }
-
- buf.append('\n');
- text.add(buf.toString());
-
- TraceFieldVisitor tav = createTraceFieldVisitor();
- text.add(tav.getText());
-
- if (cv != null) {
- tav.fv = cv.visitField(access, name, desc, signature, value);
- }
-
- return tav;
- }
-
- public MethodVisitor visitMethod(
- final int access,
- final String name,
- final String desc,
- final String signature,
- final String[] exceptions)
- {
- buf.setLength(0);
- buf.append('\n');
- if ((access & Opcodes.ACC_DEPRECATED) != 0) {
- buf.append(tab).append("// DEPRECATED\n");
- }
- buf.append(tab).append("// access flags ").append(access).append('\n');
- buf.append(tab);
- appendDescriptor(METHOD_SIGNATURE, signature);
-
- if (signature != null) {
- TraceSignatureVisitor v = new TraceSignatureVisitor(0);
- SignatureReader r = new SignatureReader(signature);
- r.accept(v);
- String genericDecl = v.getDeclaration();
- String genericReturn = v.getReturnType();
- String genericExceptions = v.getExceptions();
-
- buf.append(tab)
- .append("// declaration: ")
- .append(genericReturn)
- .append(' ')
- .append(name)
- .append(genericDecl);
- if (genericExceptions != null) {
- buf.append(" throws ").append(genericExceptions);
- }
- buf.append('\n');
- }
-
- appendAccess(access);
- if ((access & Opcodes.ACC_NATIVE) != 0) {
- buf.append("native ");
- }
- if ((access & Opcodes.ACC_VARARGS) != 0) {
- buf.append("varargs ");
- }
- if ((access & Opcodes.ACC_BRIDGE) != 0) {
- buf.append("bridge ");
- }
-
- buf.append(name);
- appendDescriptor(METHOD_DESCRIPTOR, desc);
- if (exceptions != null && exceptions.length > 0) {
- buf.append(" throws ");
- for (int i = 0; i < exceptions.length; ++i) {
- appendDescriptor(INTERNAL_NAME, exceptions[i]);
- buf.append(' ');
- }
- }
-
- buf.append('\n');
- text.add(buf.toString());
-
- TraceMethodVisitor tcv = createTraceMethodVisitor();
- text.add(tcv.getText());
-
- if (cv != null) {
- tcv.mv = cv.visitMethod(access, name, desc, signature, exceptions);
- }
-
- return tcv;
- }
-
- public void visitEnd() {
- text.add("}\n");
-
- printList(pw, text);
- pw.flush();
-
- if (cv != null) {
- cv.visitEnd();
- }
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- protected TraceFieldVisitor createTraceFieldVisitor() {
- return new TraceFieldVisitor();
- }
-
- protected TraceMethodVisitor createTraceMethodVisitor() {
- return new TraceMethodVisitor();
- }
-
- /**
- * Appends a string representation of the given access modifiers to {@link
- * #buf buf}.
- *
- * @param access some access modifiers.
- */
- private void appendAccess(final int access) {
- if ((access & Opcodes.ACC_PUBLIC) != 0) {
- buf.append("public ");
- }
- if ((access & Opcodes.ACC_PRIVATE) != 0) {
- buf.append("private ");
- }
- if ((access & Opcodes.ACC_PROTECTED) != 0) {
- buf.append("protected ");
- }
- if ((access & Opcodes.ACC_FINAL) != 0) {
- buf.append("final ");
- }
- if ((access & Opcodes.ACC_STATIC) != 0) {
- buf.append("static ");
- }
- if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
- buf.append("synchronized ");
- }
- if ((access & Opcodes.ACC_VOLATILE) != 0) {
- buf.append("volatile ");
- }
- if ((access & Opcodes.ACC_TRANSIENT) != 0) {
- buf.append("transient ");
- }
- // if ((access & Constants.ACC_NATIVE) != 0) {
- // buf.append("native ");
- // }
- if ((access & Opcodes.ACC_ABSTRACT) != 0) {
- buf.append("abstract ");
- }
- if ((access & Opcodes.ACC_STRICT) != 0) {
- buf.append("strictfp ");
- }
- if ((access & Opcodes.ACC_SYNTHETIC) != 0) {
- buf.append("synthetic ");
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceFieldVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceFieldVisitor.java
deleted file mode 100644
index 4d20efd..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceFieldVisitor.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-
-/**
- * A {@link FieldVisitor} that prints a disassembled view of the fields it
- * visits.
- *
- * @author Eric Bruneton
- */
-public class TraceFieldVisitor extends TraceAbstractVisitor implements
- FieldVisitor
-{
-
- /**
- * The {@link FieldVisitor} to which this visitor delegates calls. May be
- * <tt>null</tt>.
- */
- protected FieldVisitor fv;
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- AnnotationVisitor av = super.visitAnnotation(desc, visible);
- if (fv != null) {
- ((TraceAnnotationVisitor) av).av = fv.visitAnnotation(desc, visible);
- }
- return av;
- }
-
- public void visitAttribute(final Attribute attr) {
- super.visitAttribute(attr);
-
- if (fv != null) {
- fv.visitAttribute(attr);
- }
- }
-
- public void visitEnd() {
- super.visitEnd();
-
- if (fv != null) {
- fv.visitEnd();
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceMethodVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceMethodVisitor.java
deleted file mode 100644
index 73a511b..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceMethodVisitor.java
+++ /dev/null
@@ -1,486 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.signature.SignatureReader;
-import org.objectweb.asm.util.attrs.Traceable;
-
-import java.util.HashMap;
-
-/**
- * A {@link MethodVisitor} that prints a disassembled view of the methods it
- * visits.
- *
- * @author Eric Bruneton
- */
-public class TraceMethodVisitor extends TraceAbstractVisitor implements
- MethodVisitor
-{
-
- /**
- * The {@link MethodVisitor} to which this visitor delegates calls. May be
- * <tt>null</tt>.
- */
- protected MethodVisitor mv;
-
- /**
- * Tab for bytecode instructions.
- */
- protected String tab2 = " ";
-
- /**
- * Tab for table and lookup switch instructions.
- */
- protected String tab3 = " ";
-
- /**
- * Tab for labels.
- */
- protected String ltab = " ";
-
- /**
- * The label names. This map associate String values to Label keys.
- */
- protected final HashMap labelNames;
-
- /**
- * Constructs a new {@link TraceMethodVisitor}.
- */
- public TraceMethodVisitor() {
- this(null);
- }
-
- /**
- * Constructs a new {@link TraceMethodVisitor}.
- *
- * @param mv the {@link MethodVisitor} to which this visitor delegates
- * calls. May be <tt>null</tt>.
- */
- public TraceMethodVisitor(final MethodVisitor mv) {
- this.labelNames = new HashMap();
- this.mv = mv;
- }
-
- // ------------------------------------------------------------------------
- // Implementation of the MethodVisitor interface
- // ------------------------------------------------------------------------
-
- public AnnotationVisitor visitAnnotation(
- final String desc,
- final boolean visible)
- {
- AnnotationVisitor av = super.visitAnnotation(desc, visible);
- if (mv != null) {
- ((TraceAnnotationVisitor) av).av = mv.visitAnnotation(desc, visible);
- }
- return av;
- }
-
- public void visitAttribute(final Attribute attr) {
- buf.setLength(0);
- buf.append(tab).append("ATTRIBUTE ");
- appendDescriptor(-1, attr.type);
-
- if (attr instanceof Traceable) {
- ((Traceable) attr).trace(buf, labelNames);
- } else {
- buf.append(" : ").append(attr.toString()).append("\n");
- }
-
- text.add(buf.toString());
- if (mv != null) {
- mv.visitAttribute(attr);
- }
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- text.add(tab2 + "default=");
- TraceAnnotationVisitor tav = new TraceAnnotationVisitor();
- text.add(tav.getText());
- text.add("\n");
- if (mv != null) {
- tav.av = mv.visitAnnotationDefault();
- }
- return tav;
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- final int parameter,
- final String desc,
- final boolean visible)
- {
- buf.setLength(0);
- buf.append(tab2).append('@');
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append('(');
- text.add(buf.toString());
- TraceAnnotationVisitor tav = new TraceAnnotationVisitor();
- text.add(tav.getText());
- text.add(visible ? ") // parameter " : ") // invisible, parameter ");
- text.add(new Integer(parameter));
- text.add("\n");
- if (mv != null) {
- tav.av = mv.visitParameterAnnotation(parameter, desc, visible);
- }
- return tav;
- }
-
- public void visitCode() {
- if (mv != null) {
- mv.visitCode();
- }
- }
-
- public void visitInsn(final int opcode) {
- buf.setLength(0);
- buf.append(tab2).append(OPCODES[opcode]).append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitInsn(opcode);
- }
- }
-
- public void visitIntInsn(final int opcode, final int operand) {
- buf.setLength(0);
- buf.append(tab2)
- .append(OPCODES[opcode])
- .append(' ')
- .append(opcode == Opcodes.NEWARRAY
- ? TYPES[operand]
- : Integer.toString(operand))
- .append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitIntInsn(opcode, operand);
- }
- }
-
- public void visitVarInsn(final int opcode, final int var) {
- buf.setLength(0);
- buf.append(tab2)
- .append(OPCODES[opcode])
- .append(' ')
- .append(var)
- .append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitVarInsn(opcode, var);
- }
- }
-
- public void visitTypeInsn(final int opcode, final String desc) {
- buf.setLength(0);
- buf.append(tab2).append(OPCODES[opcode]).append(' ');
- if (desc.startsWith("[")) {
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- } else {
- appendDescriptor(INTERNAL_NAME, desc);
- }
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitTypeInsn(opcode, desc);
- }
- }
-
- public void visitFieldInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append(tab2).append(OPCODES[opcode]).append(' ');
- appendDescriptor(INTERNAL_NAME, owner);
- buf.append('.').append(name).append(" : ");
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitFieldInsn(opcode, owner, name, desc);
- }
- }
-
- public void visitMethodInsn(
- final int opcode,
- final String owner,
- final String name,
- final String desc)
- {
- buf.setLength(0);
- buf.append(tab2).append(OPCODES[opcode]).append(' ');
- appendDescriptor(INTERNAL_NAME, owner);
- buf.append('.').append(name).append(' ');
- appendDescriptor(METHOD_DESCRIPTOR, desc);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitMethodInsn(opcode, owner, name, desc);
- }
- }
-
- public void visitJumpInsn(final int opcode, final Label label) {
- buf.setLength(0);
- buf.append(tab2).append(OPCODES[opcode]).append(' ');
- appendLabel(label);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitJumpInsn(opcode, label);
- }
- }
-
- public void visitLabel(final Label label) {
- buf.setLength(0);
- buf.append(ltab);
- appendLabel(label);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitLabel(label);
- }
- }
-
- public void visitLdcInsn(final Object cst) {
- buf.setLength(0);
- buf.append(tab2).append("LDC ");
- if (cst instanceof String) {
- AbstractVisitor.appendString(buf, (String) cst);
- } else if (cst instanceof Type) {
- buf.append(((Type) cst).getDescriptor() + ".class");
- } else {
- buf.append(cst);
- }
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitLdcInsn(cst);
- }
- }
-
- public void visitIincInsn(final int var, final int increment) {
- buf.setLength(0);
- buf.append(tab2)
- .append("IINC ")
- .append(var)
- .append(' ')
- .append(increment)
- .append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitIincInsn(var, increment);
- }
- }
-
- public void visitTableSwitchInsn(
- final int min,
- final int max,
- final Label dflt,
- final Label labels[])
- {
- buf.setLength(0);
- buf.append(tab2).append("TABLESWITCH\n");
- for (int i = 0; i < labels.length; ++i) {
- buf.append(tab3).append(min + i).append(": ");
- appendLabel(labels[i]);
- buf.append('\n');
- }
- buf.append(tab3).append("default: ");
- appendLabel(dflt);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitTableSwitchInsn(min, max, dflt, labels);
- }
- }
-
- public void visitLookupSwitchInsn(
- final Label dflt,
- final int keys[],
- final Label labels[])
- {
- buf.setLength(0);
- buf.append(tab2).append("LOOKUPSWITCH\n");
- for (int i = 0; i < labels.length; ++i) {
- buf.append(tab3).append(keys[i]).append(": ");
- appendLabel(labels[i]);
- buf.append('\n');
- }
- buf.append(tab3).append("default: ");
- appendLabel(dflt);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitLookupSwitchInsn(dflt, keys, labels);
- }
- }
-
- public void visitMultiANewArrayInsn(final String desc, final int dims) {
- buf.setLength(0);
- buf.append(tab2).append("MULTIANEWARRAY ");
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append(' ').append(dims).append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitMultiANewArrayInsn(desc, dims);
- }
- }
-
- public void visitTryCatchBlock(
- final Label start,
- final Label end,
- final Label handler,
- final String type)
- {
- buf.setLength(0);
- buf.append(tab2).append("TRYCATCHBLOCK ");
- appendLabel(start);
- buf.append(' ');
- appendLabel(end);
- buf.append(' ');
- appendLabel(handler);
- buf.append(' ');
- appendDescriptor(INTERNAL_NAME, type);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitTryCatchBlock(start, end, handler, type);
- }
- }
-
- public void visitLocalVariable(
- final String name,
- final String desc,
- final String signature,
- final Label start,
- final Label end,
- final int index)
- {
- buf.setLength(0);
- buf.append(tab2).append("LOCALVARIABLE ").append(name).append(' ');
- appendDescriptor(FIELD_DESCRIPTOR, desc);
- buf.append(' ');
- appendLabel(start);
- buf.append(' ');
- appendLabel(end);
- buf.append(' ').append(index).append('\n');
-
- if (signature != null) {
- buf.append(tab2);
- appendDescriptor(FIELD_SIGNATURE, signature);
-
- TraceSignatureVisitor sv = new TraceSignatureVisitor(0);
- SignatureReader r = new SignatureReader(signature);
- r.acceptType(sv);
- buf.append(tab2)
- .append("// declaration: ")
- .append(sv.getDeclaration())
- .append('\n');
- }
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitLocalVariable(name, desc, signature, start, end, index);
- }
- }
-
- public void visitLineNumber(final int line, final Label start) {
- buf.setLength(0);
- buf.append(tab2).append("LINENUMBER ").append(line).append(' ');
- appendLabel(start);
- buf.append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitLineNumber(line, start);
- }
- }
-
- public void visitMaxs(final int maxStack, final int maxLocals) {
- buf.setLength(0);
- buf.append(tab2).append("MAXSTACK = ").append(maxStack).append('\n');
- text.add(buf.toString());
-
- buf.setLength(0);
- buf.append(tab2).append("MAXLOCALS = ").append(maxLocals).append('\n');
- text.add(buf.toString());
-
- if (mv != null) {
- mv.visitMaxs(maxStack, maxLocals);
- }
- }
-
- public void visitEnd() {
- super.visitEnd();
-
- if (mv != null) {
- mv.visitEnd();
- }
- }
-
- // ------------------------------------------------------------------------
- // Utility methods
- // ------------------------------------------------------------------------
-
- /**
- * Appends the name of the given label to {@link #buf buf}. Creates a new
- * label name if the given label does not yet have one.
- *
- * @param l a label.
- */
- public void appendLabel(final Label l) {
- String name = (String) labelNames.get(l);
- if (name == null) {
- name = "L" + labelNames.size();
- labelNames.put(l, name);
- }
- buf.append(name);
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceSignatureVisitor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceSignatureVisitor.java
deleted file mode 100644
index e8346c6..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/TraceSignatureVisitor.java
+++ /dev/null
@@ -1,300 +0,0 @@
-/***
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util;
-
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.signature.SignatureVisitor;
-
-/**
- * A {@link SignatureVisitor} that prints a disassembled view of the signature
- * it visits.
- *
- * @author Eugene Kuleshov
- * @author Eric Bruneton
- */
-public class TraceSignatureVisitor implements SignatureVisitor {
-
- private StringBuffer declaration;
-
- private boolean isInterface;
-
- private boolean seenFormalParameter;
-
- private boolean seenInterfaceBound;
-
- private boolean seenParameter;
-
- private boolean seenInterface;
-
- private StringBuffer returnType;
-
- private StringBuffer exceptions;
-
- /**
- * Stack used to keep track of class types that have arguments. Each element
- * of this stack is a boolean encoded in one bit. The top of the stack is
- * the lowest order bit. Pushing false = *2, pushing true = *2+1, popping =
- * /2.
- */
- private int argumentStack;
-
- /**
- * Stack used to keep track of array class types. Each element of this stack
- * is a boolean encoded in one bit. The top of the stack is the lowest order
- * bit. Pushing false = *2, pushing true = *2+1, popping = /2.
- */
- private int arrayStack;
-
- private String separator = "";
-
- public TraceSignatureVisitor(int access) {
- isInterface = (access & Opcodes.ACC_INTERFACE) != 0;
- this.declaration = new StringBuffer();
- }
-
- private TraceSignatureVisitor(StringBuffer buf) {
- this.declaration = buf;
- }
-
- public void visitFormalTypeParameter(String name) {
- declaration.append(seenFormalParameter ? ", " : "<").append(name);
- seenFormalParameter = true;
- seenInterfaceBound = false;
- }
-
- public SignatureVisitor visitClassBound() {
- separator = " extends ";
- startType();
- return this;
- }
-
- public SignatureVisitor visitInterfaceBound() {
- separator = seenInterfaceBound ? ", " : " extends ";
- seenInterfaceBound = true;
- startType();
- return this;
- }
-
- public SignatureVisitor visitSuperclass() {
- endFormals();
- separator = " extends ";
- startType();
- return this;
- }
-
- public SignatureVisitor visitInterface() {
- separator = seenInterface ? ", " : (isInterface
- ? " extends "
- : " implements ");
- seenInterface = true;
- startType();
- return this;
- }
-
- public SignatureVisitor visitParameterType() {
- endFormals();
- if (!seenParameter) {
- seenParameter = true;
- declaration.append('(');
- } else {
- declaration.append(", ");
- }
- startType();
- return this;
- }
-
- public SignatureVisitor visitReturnType() {
- endFormals();
- if (!seenParameter) {
- declaration.append('(');
- } else {
- seenParameter = false;
- }
- declaration.append(')');
- returnType = new StringBuffer();
- return new TraceSignatureVisitor(returnType);
- }
-
- public SignatureVisitor visitExceptionType() {
- if (exceptions == null) {
- exceptions = new StringBuffer();
- } else {
- exceptions.append(", ");
- }
- // startType();
- return new TraceSignatureVisitor(exceptions);
- }
-
- public void visitBaseType(char descriptor) {
- switch (descriptor) {
- case 'V':
- declaration.append("void");
- break;
- case 'B':
- declaration.append("byte");
- break;
- case 'J':
- declaration.append("long");
- break;
- case 'Z':
- declaration.append("boolean");
- break;
- case 'I':
- declaration.append("int");
- break;
- case 'S':
- declaration.append("short");
- break;
- case 'C':
- declaration.append("char");
- break;
- case 'F':
- declaration.append("float");
- break;
- // case 'D':
- default:
- declaration.append("double");
- break;
- }
- endType();
- }
-
- public void visitTypeVariable(String name) {
- declaration.append(name);
- endType();
- }
-
- public SignatureVisitor visitArrayType() {
- startType();
- arrayStack |= 1;
- return this;
- }
-
- public void visitClassType(String name) {
- if (!"java/lang/Object".equals(name)) {
- declaration.append(separator).append(name.replace('/', '.'));
- } else {
- // Map<java.lang.Object,java.util.List>
- // or
- // abstract public V get(Object key); (seen in Dictionary.class)
- // should have Object
- // but java.lang.String extends java.lang.Object is unnecessary
- boolean needObjectClass = argumentStack % 2 == 1 || seenParameter;
- if (needObjectClass) {
- declaration.append(separator).append(name.replace('/', '.'));
- }
- }
- separator = "";
- argumentStack *= 2;
- }
-
- public void visitInnerClassType(String name) {
- if (argumentStack % 2 == 1) {
- declaration.append('>');
- }
- argumentStack /= 2;
- declaration.append('.');
- declaration.append(separator).append(name.replace('/', '.'));
- separator = "";
- argumentStack *= 2;
- }
-
- public void visitTypeArgument() {
- if (argumentStack % 2 == 0) {
- ++argumentStack;
- declaration.append('<');
- } else {
- declaration.append(", ");
- }
- declaration.append('?');
- }
-
- public SignatureVisitor visitTypeArgument(char tag) {
- if (argumentStack % 2 == 0) {
- ++argumentStack;
- declaration.append('<');
- } else {
- declaration.append(", ");
- }
-
- if (tag == SignatureVisitor.EXTENDS) {
- declaration.append("? extends ");
- } else if (tag == SignatureVisitor.SUPER) {
- declaration.append("? super ");
- }
-
- startType();
- return this;
- }
-
- public void visitEnd() {
- if (argumentStack % 2 == 1) {
- declaration.append('>');
- }
- argumentStack /= 2;
- endType();
- }
-
- public String getDeclaration() {
- return declaration.toString();
- }
-
- public String getReturnType() {
- return returnType == null ? null : returnType.toString();
- }
-
- public String getExceptions() {
- return exceptions == null ? null : exceptions.toString();
- }
-
- // -----------------------------------------------
-
- private void endFormals() {
- if (seenFormalParameter) {
- declaration.append('>');
- seenFormalParameter = false;
- }
- }
-
- private void startType() {
- arrayStack *= 2;
- }
-
- private void endType() {
- if (arrayStack % 2 == 1) {
- while (arrayStack % 2 == 1) {
- arrayStack /= 2;
- declaration.append("[]");
- }
- } else {
- arrayStack /= 2;
- }
- }
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapAttribute.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapAttribute.java
deleted file mode 100644
index e71e116..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapAttribute.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util.attrs;
-
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.attrs.StackMapAttribute;
-import org.objectweb.asm.attrs.StackMapFrame;
-import org.objectweb.asm.attrs.StackMapType;
-
-/**
- * An {@link ASMifiable} {@link StackMapAttribute} sub class.
- *
- * @author Eugene Kuleshov
- */
-public class ASMStackMapAttribute extends StackMapAttribute implements
- ASMifiable,
- Traceable
-{
- /**
- * Length of the attribute used for comparison
- */
- private int len;
-
- public ASMStackMapAttribute() {
- super();
- }
-
- public ASMStackMapAttribute(List frames, int len) {
- super(frames);
- this.len = len;
- }
-
- protected Attribute read(
- ClassReader cr,
- int off,
- int len,
- char[] buf,
- int codeOff,
- Label[] labels)
- {
- StackMapAttribute attr = (StackMapAttribute) super.read(cr,
- off,
- len,
- buf,
- codeOff,
- labels);
-
- return new ASMStackMapAttribute(attr.getFrames(), len);
- }
-
- public void asmify(StringBuffer buf, String varName, Map labelNames) {
- List frames = getFrames();
- buf.append("{\n");
- buf.append("StackMapAttribute ").append(varName).append("Attr");
- buf.append(" = new StackMapAttribute();\n");
- if (frames.size() > 0) {
- for (int i = 0; i < frames.size(); i++) {
- asmify((StackMapFrame) frames.get(i), buf, varName + "frame"
- + i, labelNames);
- }
- }
- buf.append(varName).append(".visitAttribute(").append(varName);
- buf.append("Attr);\n}\n");
- }
-
- void asmify(
- StackMapFrame f,
- StringBuffer buf,
- String varName,
- Map labelNames)
- {
- declareLabel(buf, labelNames, f.label);
- buf.append("{\n");
-
- buf.append("StackMapFrame ")
- .append(varName)
- .append(" = new StackMapFrame();\n");
-
- buf.append(varName)
- .append(".label = ")
- .append(labelNames.get(f.label))
- .append(";\n");
-
- asmifyTypeInfo(buf, varName, labelNames, f.locals, "locals");
- asmifyTypeInfo(buf, varName, labelNames, f.stack, "stack");
-
- buf.append("cvAttr.frames.add(").append(varName).append(");\n");
- buf.append("}\n");
- }
-
- void asmifyTypeInfo(
- StringBuffer buf,
- String varName,
- Map labelNames,
- List infos,
- String field)
- {
- if (infos.size() > 0) {
- buf.append("{\n");
- for (int i = 0; i < infos.size(); i++) {
- StackMapType typeInfo = (StackMapType) infos.get(i);
- String localName = varName + "Info" + i;
- int type = typeInfo.getType();
- buf.append("StackMapType ")
- .append(localName)
- .append(" = StackMapType.getTypeInfo( StackMapType.ITEM_")
- .append(StackMapType.ITEM_NAMES[type])
- .append(");\n");
-
- switch (type) {
- case StackMapType.ITEM_Object: //
- buf.append(localName)
- .append(".setObject(\"")
- .append(typeInfo.getObject())
- .append("\");\n");
- break;
-
- case StackMapType.ITEM_Uninitialized: //
- declareLabel(buf, labelNames, typeInfo.getLabel());
- buf.append(localName)
- .append(".setLabel(")
- .append(labelNames.get(typeInfo.getLabel()))
- .append(");\n");
- break;
- }
- buf.append(varName)
- .append(".")
- .append(field)
- .append(".add(")
- .append(localName)
- .append(");\n");
- }
- buf.append("}\n");
- }
- }
-
- static void declareLabel(StringBuffer buf, Map labelNames, Label l) {
- String name = (String) labelNames.get(l);
- if (name == null) {
- name = "l" + labelNames.size();
- labelNames.put(l, name);
- buf.append("Label ").append(name).append(" = new Label();\n");
- }
- }
-
- public void trace(StringBuffer buf, Map labelNames) {
- List frames = getFrames();
- buf.append("[\n");
- for (int i = 0; i < frames.size(); i++) {
- StackMapFrame f = (StackMapFrame) frames.get(i);
-
- buf.append(" Frame:");
- appendLabel(buf, labelNames, f.label);
-
- buf.append(" locals[");
- traceTypeInfo(buf, labelNames, f.locals);
- buf.append("]");
- buf.append(" stack[");
- traceTypeInfo(buf, labelNames, f.stack);
- buf.append("]\n");
- }
- buf.append(" ] length:").append(len).append("\n");
- }
-
- private void traceTypeInfo(StringBuffer buf, Map labelNames, List infos) {
- String sep = "";
- for (int i = 0; i < infos.size(); i++) {
- StackMapType t = (StackMapType) infos.get(i);
-
- buf.append(sep).append(StackMapType.ITEM_NAMES[t.getType()]);
- sep = ", ";
- if (t.getType() == StackMapType.ITEM_Object) {
- buf.append(":").append(t.getObject());
- }
- if (t.getType() == StackMapType.ITEM_Uninitialized) {
- buf.append(":");
- appendLabel(buf, labelNames, t.getLabel());
- }
- }
- }
-
- protected void appendLabel(StringBuffer buf, Map labelNames, Label l) {
- String name = (String) labelNames.get(l);
- if (name == null) {
- name = "L" + labelNames.size();
- labelNames.put(l, name);
- }
- buf.append(name);
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapTableAttribute.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapTableAttribute.java
deleted file mode 100644
index e591cb9..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMStackMapTableAttribute.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util.attrs;
-
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassReader;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.attrs.StackMapTableAttribute;
-import org.objectweb.asm.attrs.StackMapFrame;
-import org.objectweb.asm.attrs.StackMapType;
-
-/**
- * An {@link ASMifiable} {@link StackMapTableAttribute} sub class.
- *
- * @author Eugene Kuleshov
- */
-public class ASMStackMapTableAttribute extends StackMapTableAttribute implements
- ASMifiable,
- Traceable
-{
- /**
- * Length of the attribute used for comparison
- */
- private int len;
-
- public ASMStackMapTableAttribute() {
- super();
- }
-
- public ASMStackMapTableAttribute(List frames, int len) {
- super(frames);
- this.len = len;
- }
-
- protected Attribute read(
- ClassReader cr,
- int off,
- int len,
- char[] buf,
- int codeOff,
- Label[] labels)
- {
- StackMapTableAttribute attr = (StackMapTableAttribute) super.read(cr,
- off,
- len,
- buf,
- codeOff,
- labels);
-
- return new ASMStackMapTableAttribute(attr.getFrames(), len);
- }
-
- public void asmify(StringBuffer buf, String varName, Map labelNames) {
- List frames = getFrames();
- if (frames.size() == 0) {
- buf.append("List frames = Collections.EMPTY_LIST;\n");
- } else {
- buf.append("List frames = new ArrayList();\n");
- for (int i = 0; i < frames.size(); i++) {
- buf.append("{\n");
- StackMapFrame f = (StackMapFrame) frames.get(i);
- declareLabel(buf, labelNames, f.label);
-
- String frameVar = varName + "frame" + i;
- asmifyTypeInfo(buf, frameVar, labelNames, f.locals, "locals");
- asmifyTypeInfo(buf, frameVar, labelNames, f.stack, "stack");
-
- buf.append("StackMapFrame ")
- .append(frameVar)
- .append(" = new StackMapFrame(")
- .append(labelNames.get(f.label))
- .append(", locals, stack);\n");
- buf.append("frames.add(").append(frameVar).append(");\n");
- buf.append("}\n");
- }
- }
- buf.append("StackMapTableAttribute ").append(varName);
- buf.append(" = new StackMapTableAttribute(frames);\n");
- }
-
- void asmifyTypeInfo(
- StringBuffer buf,
- String varName,
- Map labelNames,
- List infos,
- String field)
- {
- if (infos.size() == 0) {
- buf.append("List ")
- .append(field)
- .append(" = Collections.EMPTY_LIST;\n");
- } else {
- buf.append("List ").append(field).append(" = new ArrayList();\n");
- buf.append("{\n");
- for (int i = 0; i < infos.size(); i++) {
- StackMapType typeInfo = (StackMapType) infos.get(i);
- String localName = varName + "Info" + i;
- int type = typeInfo.getType();
- buf.append("StackMapType ")
- .append(localName)
- .append(" = StackMapType.getTypeInfo( StackMapType.ITEM_")
- .append(StackMapType.ITEM_NAMES[type])
- .append(");\n");
-
- switch (type) {
- case StackMapType.ITEM_Object: //
- buf.append(localName)
- .append(".setObject(\"")
- .append(typeInfo.getObject())
- .append("\");\n");
- break;
-
- case StackMapType.ITEM_Uninitialized: //
- declareLabel(buf, labelNames, typeInfo.getLabel());
- buf.append(localName)
- .append(".setLabel(")
- .append(labelNames.get(typeInfo.getLabel()))
- .append(");\n");
- break;
- }
- buf.append(field)
- .append(".add(")
- .append(localName)
- .append(");\n");
- }
- buf.append("}\n");
- }
- }
-
- static void declareLabel(StringBuffer buf, Map labelNames, Label l) {
- String name = (String) labelNames.get(l);
- if (name == null) {
- name = "l" + labelNames.size();
- labelNames.put(l, name);
- buf.append("Label ").append(name).append(" = new Label();\n");
- }
- }
-
- public void trace(StringBuffer buf, Map labelNames) {
- List frames = getFrames();
- buf.append("[\n");
- for (int i = 0; i < frames.size(); i++) {
- StackMapFrame f = (StackMapFrame) frames.get(i);
-
- buf.append(" Frame:");
- appendLabel(buf, labelNames, f.label);
-
- buf.append(" locals[");
- traceTypeInfo(buf, labelNames, f.locals);
- buf.append("]");
- buf.append(" stack[");
- traceTypeInfo(buf, labelNames, f.stack);
- buf.append("]\n");
- }
- buf.append(" ] length:").append(len).append("\n");
- }
-
- private void traceTypeInfo(StringBuffer buf, Map labelNames, List infos) {
- String sep = "";
- for (int i = 0; i < infos.size(); i++) {
- StackMapType t = (StackMapType) infos.get(i);
-
- buf.append(sep).append(StackMapType.ITEM_NAMES[t.getType()]);
- sep = ", ";
- if (t.getType() == StackMapType.ITEM_Object) {
- buf.append(":").append(t.getObject());
- }
- if (t.getType() == StackMapType.ITEM_Uninitialized) {
- buf.append(":");
- appendLabel(buf, labelNames, t.getLabel());
- }
- }
- }
-
- protected void appendLabel(StringBuffer buf, Map labelNames, Label l) {
- String name = (String) labelNames.get(l);
- if (name == null) {
- name = "L" + labelNames.size();
- labelNames.put(l, name);
- }
- buf.append(name);
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMifiable.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMifiable.java
deleted file mode 100644
index f9067bf..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/ASMifiable.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util.attrs;
-
-import java.util.Map;
-
-/**
- * An attribute that can print the ASM code to create an equivalent attribute.
- *
- * Implementation should print the ASM code that generates attribute data
- * structures for current attribute state.
- *
- * @author Eugene Kuleshov
- */
-public interface ASMifiable {
-
- /**
- * Prints the ASM code to create an attribute equal to this attribute.
- *
- * @param buf A buffer used for printing Java code.
- * @param varName name of the variable in a printed code used to store
- * attribute instance.
- * @param labelNames map of label instances to their names.
- */
- void asmify(StringBuffer buf, String varName, Map labelNames);
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/Traceable.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/Traceable.java
deleted file mode 100644
index 44680b5..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/util/attrs/Traceable.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * ASM: a very small and fast Java bytecode manipulation framework
- * Copyright (c) 2000-2005 INRIA, France Telecom
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.util.attrs;
-
-import java.util.Map;
-
-/**
- * An attribute that can print eadable representation of the attribute.
- *
- * Implementation should construct readable output from an attribute data
- * structures for current attribute state. Such representation could be used in
- * unit test assertions.
- *
- * @author Eugene Kuleshov
- */
-public interface Traceable {
-
- /**
- * Build a human readable representation of the attribute.
- *
- * @param buf A buffer used for printing Java code.
- * @param labelNames map of label instances to their names.
- */
- void trace(StringBuffer buf, Map labelNames);
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/ASMContentHandler.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/ASMContentHandler.java
deleted file mode 100644
index 826a7fe..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/ASMContentHandler.java
+++ /dev/null
@@ -1,1215 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.ClassWriter;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Type;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * A {@link org.xml.sax.ContentHandler ContentHandler} that transforms XML
- * document into Java class file. This class can be feeded by any kind of SAX
- * 2.0 event producers, e.g. XML parser, XSLT or XPath engines, or custom code.
- *
- * @see org.objectweb.asm.xml.SAXClassAdapter
- * @see org.objectweb.asm.xml.Processor
- *
- * @author Eugene Kuleshov
- */
-public class ASMContentHandler extends DefaultHandler implements Opcodes {
- /**
- * Stack of the intermediate processing contexts.
- */
- private List stack = new ArrayList();
-
- /**
- * Complete name of the current element.
- */
- private String match = "";
-
- /**
- * <tt>true</tt> if the maximum stack size and number of local variables
- * must be automatically computed.
- */
- protected boolean computeMax;
-
- /**
- * Output stream to write result bytecode.
- */
- protected OutputStream os;
-
- /**
- * Current instance of the {@link ClassWriter ClassWriter} used to write
- * class bytecode.
- */
- protected ClassWriter cw;
-
- /**
- * Map of the active {@link Label Label} instances for current method.
- */
- protected Map labels;
-
- private static final String BASE = "class";
-
- private final RuleSet RULES = new RuleSet();
- {
- RULES.add(BASE, new ClassRule());
- RULES.add(BASE + "/interfaces/interface", new InterfaceRule());
- RULES.add(BASE + "/interfaces", new InterfacesRule());
- RULES.add(BASE + "/outerclass", new OuterClassRule());
- RULES.add(BASE + "/innerclass", new InnerClassRule());
- RULES.add(BASE + "/source", new SourceRule());
- RULES.add(BASE + "/field", new FieldRule());
-
- RULES.add(BASE + "/method", new MethodRule());
- RULES.add(BASE + "/method/exceptions/exception", new ExceptionRule());
- RULES.add(BASE + "/method/exceptions", new ExceptionsRule());
-
- RULES.add(BASE + "/method/annotationDefault",
- new AnnotationDefaultRule());
-
- RULES.add(BASE + "/method/code/*", new OpcodesRule()); // opcodes
-
- RULES.add(BASE + "/method/code/TABLESWITCH", new TableSwitchRule());
- RULES.add(BASE + "/method/code/TABLESWITCH/label",
- new TableSwitchLabelRule());
- RULES.add(BASE + "/method/code/LOOKUPSWITCH", new LookupSwitchRule());
- RULES.add(BASE + "/method/code/LOOKUPSWITCH/label",
- new LookupSwitchLabelRule());
-
- RULES.add(BASE + "/method/code/Label", new LabelRule());
- RULES.add(BASE + "/method/code/TryCatch", new TryCatchRule());
- RULES.add(BASE + "/method/code/LineNumber", new LineNumberRule());
- RULES.add(BASE + "/method/code/LocalVar", new LocalVarRule());
- RULES.add(BASE + "/method/code/Max", new MaxRule());
-
- RULES.add("*/annotation", new AnnotationRule());
- RULES.add("*/parameterAnnotation", new AnnotationParameterRule());
- RULES.add("*/annotationValue", new AnnotationValueRule());
- RULES.add("*/annotationValueAnnotation",
- new AnnotationValueAnnotationRule());
- RULES.add("*/annotationValueEnum", new AnnotationValueEnumRule());
- RULES.add("*/annotationValueArray", new AnnotationValueArrayRule());
- }
-
- private static interface OpcodeGroup {
- public static final int INSN = 0;
- public static final int INSN_INT = 1;
- public static final int INSN_VAR = 2;
- public static final int INSN_TYPE = 3;
- public static final int INSN_FIELD = 4;
- public static final int INSN_METHOD = 5;
- public static final int INSN_JUMP = 6;
- public static final int INSN_LDC = 7;
- public static final int INSN_IINC = 8;
- public static final int INSN_MULTIANEWARRAY = 9;
- }
-
- /**
- * Map of the opcode names to opcode and opcode group
- */
- static final Map OPCODES = new HashMap();
- static {
- OPCODES.put("NOP", new Opcode(NOP, OpcodeGroup.INSN));
- OPCODES.put("ACONST_NULL", new Opcode(ACONST_NULL, OpcodeGroup.INSN));
- OPCODES.put("ICONST_M1", new Opcode(ICONST_M1, OpcodeGroup.INSN));
- OPCODES.put("ICONST_0", new Opcode(ICONST_0, OpcodeGroup.INSN));
- OPCODES.put("ICONST_1", new Opcode(ICONST_1, OpcodeGroup.INSN));
- OPCODES.put("ICONST_2", new Opcode(ICONST_2, OpcodeGroup.INSN));
- OPCODES.put("ICONST_3", new Opcode(ICONST_3, OpcodeGroup.INSN));
- OPCODES.put("ICONST_4", new Opcode(ICONST_4, OpcodeGroup.INSN));
- OPCODES.put("ICONST_5", new Opcode(ICONST_5, OpcodeGroup.INSN));
- OPCODES.put("LCONST_0", new Opcode(LCONST_0, OpcodeGroup.INSN));
- OPCODES.put("LCONST_1", new Opcode(LCONST_1, OpcodeGroup.INSN));
- OPCODES.put("FCONST_0", new Opcode(FCONST_0, OpcodeGroup.INSN));
- OPCODES.put("FCONST_1", new Opcode(FCONST_1, OpcodeGroup.INSN));
- OPCODES.put("FCONST_2", new Opcode(FCONST_2, OpcodeGroup.INSN));
- OPCODES.put("DCONST_0", new Opcode(DCONST_0, OpcodeGroup.INSN));
- OPCODES.put("DCONST_1", new Opcode(DCONST_1, OpcodeGroup.INSN));
- OPCODES.put("BIPUSH", new Opcode(BIPUSH, OpcodeGroup.INSN_INT));
- OPCODES.put("SIPUSH", new Opcode(SIPUSH, OpcodeGroup.INSN_INT));
- OPCODES.put("LDC", new Opcode(LDC, OpcodeGroup.INSN_LDC));
- OPCODES.put("ILOAD", new Opcode(ILOAD, OpcodeGroup.INSN_VAR));
- OPCODES.put("LLOAD", new Opcode(LLOAD, OpcodeGroup.INSN_VAR));
- OPCODES.put("FLOAD", new Opcode(FLOAD, OpcodeGroup.INSN_VAR));
- OPCODES.put("DLOAD", new Opcode(DLOAD, OpcodeGroup.INSN_VAR));
- OPCODES.put("ALOAD", new Opcode(ALOAD, OpcodeGroup.INSN_VAR));
- OPCODES.put("IALOAD", new Opcode(IALOAD, OpcodeGroup.INSN));
- OPCODES.put("LALOAD", new Opcode(LALOAD, OpcodeGroup.INSN));
- OPCODES.put("FALOAD", new Opcode(FALOAD, OpcodeGroup.INSN));
- OPCODES.put("DALOAD", new Opcode(DALOAD, OpcodeGroup.INSN));
- OPCODES.put("AALOAD", new Opcode(AALOAD, OpcodeGroup.INSN));
- OPCODES.put("BALOAD", new Opcode(BALOAD, OpcodeGroup.INSN));
- OPCODES.put("CALOAD", new Opcode(CALOAD, OpcodeGroup.INSN));
- OPCODES.put("SALOAD", new Opcode(SALOAD, OpcodeGroup.INSN));
- OPCODES.put("ISTORE", new Opcode(ISTORE, OpcodeGroup.INSN_VAR));
- OPCODES.put("LSTORE", new Opcode(LSTORE, OpcodeGroup.INSN_VAR));
- OPCODES.put("FSTORE", new Opcode(FSTORE, OpcodeGroup.INSN_VAR));
- OPCODES.put("DSTORE", new Opcode(DSTORE, OpcodeGroup.INSN_VAR));
- OPCODES.put("ASTORE", new Opcode(ASTORE, OpcodeGroup.INSN_VAR));
- OPCODES.put("IASTORE", new Opcode(IASTORE, OpcodeGroup.INSN));
- OPCODES.put("LASTORE", new Opcode(LASTORE, OpcodeGroup.INSN));
- OPCODES.put("FASTORE", new Opcode(FASTORE, OpcodeGroup.INSN));
- OPCODES.put("DASTORE", new Opcode(DASTORE, OpcodeGroup.INSN));
- OPCODES.put("AASTORE", new Opcode(AASTORE, OpcodeGroup.INSN));
- OPCODES.put("BASTORE", new Opcode(BASTORE, OpcodeGroup.INSN));
- OPCODES.put("CASTORE", new Opcode(CASTORE, OpcodeGroup.INSN));
- OPCODES.put("SASTORE", new Opcode(SASTORE, OpcodeGroup.INSN));
- OPCODES.put("POP", new Opcode(POP, OpcodeGroup.INSN));
- OPCODES.put("POP2", new Opcode(POP2, OpcodeGroup.INSN));
- OPCODES.put("DUP", new Opcode(DUP, OpcodeGroup.INSN));
- OPCODES.put("DUP_X1", new Opcode(DUP_X1, OpcodeGroup.INSN));
- OPCODES.put("DUP_X2", new Opcode(DUP_X2, OpcodeGroup.INSN));
- OPCODES.put("DUP2", new Opcode(DUP2, OpcodeGroup.INSN));
- OPCODES.put("DUP2_X1", new Opcode(DUP2_X1, OpcodeGroup.INSN));
- OPCODES.put("DUP2_X2", new Opcode(DUP2_X2, OpcodeGroup.INSN));
- OPCODES.put("SWAP", new Opcode(SWAP, OpcodeGroup.INSN));
- OPCODES.put("IADD", new Opcode(IADD, OpcodeGroup.INSN));
- OPCODES.put("LADD", new Opcode(LADD, OpcodeGroup.INSN));
- OPCODES.put("FADD", new Opcode(FADD, OpcodeGroup.INSN));
- OPCODES.put("DADD", new Opcode(DADD, OpcodeGroup.INSN));
- OPCODES.put("ISUB", new Opcode(ISUB, OpcodeGroup.INSN));
- OPCODES.put("LSUB", new Opcode(LSUB, OpcodeGroup.INSN));
- OPCODES.put("FSUB", new Opcode(FSUB, OpcodeGroup.INSN));
- OPCODES.put("DSUB", new Opcode(DSUB, OpcodeGroup.INSN));
- OPCODES.put("IMUL", new Opcode(IMUL, OpcodeGroup.INSN));
- OPCODES.put("LMUL", new Opcode(LMUL, OpcodeGroup.INSN));
- OPCODES.put("FMUL", new Opcode(FMUL, OpcodeGroup.INSN));
- OPCODES.put("DMUL", new Opcode(DMUL, OpcodeGroup.INSN));
- OPCODES.put("IDIV", new Opcode(IDIV, OpcodeGroup.INSN));
- OPCODES.put("LDIV", new Opcode(LDIV, OpcodeGroup.INSN));
- OPCODES.put("FDIV", new Opcode(FDIV, OpcodeGroup.INSN));
- OPCODES.put("DDIV", new Opcode(DDIV, OpcodeGroup.INSN));
- OPCODES.put("IREM", new Opcode(IREM, OpcodeGroup.INSN));
- OPCODES.put("LREM", new Opcode(LREM, OpcodeGroup.INSN));
- OPCODES.put("FREM", new Opcode(FREM, OpcodeGroup.INSN));
- OPCODES.put("DREM", new Opcode(DREM, OpcodeGroup.INSN));
- OPCODES.put("INEG", new Opcode(INEG, OpcodeGroup.INSN));
- OPCODES.put("LNEG", new Opcode(LNEG, OpcodeGroup.INSN));
- OPCODES.put("FNEG", new Opcode(FNEG, OpcodeGroup.INSN));
- OPCODES.put("DNEG", new Opcode(DNEG, OpcodeGroup.INSN));
- OPCODES.put("ISHL", new Opcode(ISHL, OpcodeGroup.INSN));
- OPCODES.put("LSHL", new Opcode(LSHL, OpcodeGroup.INSN));
- OPCODES.put("ISHR", new Opcode(ISHR, OpcodeGroup.INSN));
- OPCODES.put("LSHR", new Opcode(LSHR, OpcodeGroup.INSN));
- OPCODES.put("IUSHR", new Opcode(IUSHR, OpcodeGroup.INSN));
- OPCODES.put("LUSHR", new Opcode(LUSHR, OpcodeGroup.INSN));
- OPCODES.put("IAND", new Opcode(IAND, OpcodeGroup.INSN));
- OPCODES.put("LAND", new Opcode(LAND, OpcodeGroup.INSN));
- OPCODES.put("IOR", new Opcode(IOR, OpcodeGroup.INSN));
- OPCODES.put("LOR", new Opcode(LOR, OpcodeGroup.INSN));
- OPCODES.put("IXOR", new Opcode(IXOR, OpcodeGroup.INSN));
- OPCODES.put("LXOR", new Opcode(LXOR, OpcodeGroup.INSN));
- OPCODES.put("IINC", new Opcode(IINC, OpcodeGroup.INSN_IINC));
- OPCODES.put("I2L", new Opcode(I2L, OpcodeGroup.INSN));
- OPCODES.put("I2F", new Opcode(I2F, OpcodeGroup.INSN));
- OPCODES.put("I2D", new Opcode(I2D, OpcodeGroup.INSN));
- OPCODES.put("L2I", new Opcode(L2I, OpcodeGroup.INSN));
- OPCODES.put("L2F", new Opcode(L2F, OpcodeGroup.INSN));
- OPCODES.put("L2D", new Opcode(L2D, OpcodeGroup.INSN));
- OPCODES.put("F2I", new Opcode(F2I, OpcodeGroup.INSN));
- OPCODES.put("F2L", new Opcode(F2L, OpcodeGroup.INSN));
- OPCODES.put("F2D", new Opcode(F2D, OpcodeGroup.INSN));
- OPCODES.put("D2I", new Opcode(D2I, OpcodeGroup.INSN));
- OPCODES.put("D2L", new Opcode(D2L, OpcodeGroup.INSN));
- OPCODES.put("D2F", new Opcode(D2F, OpcodeGroup.INSN));
- OPCODES.put("I2B", new Opcode(I2B, OpcodeGroup.INSN));
- OPCODES.put("I2C", new Opcode(I2C, OpcodeGroup.INSN));
- OPCODES.put("I2S", new Opcode(I2S, OpcodeGroup.INSN));
- OPCODES.put("LCMP", new Opcode(LCMP, OpcodeGroup.INSN));
- OPCODES.put("FCMPL", new Opcode(FCMPL, OpcodeGroup.INSN));
- OPCODES.put("FCMPG", new Opcode(FCMPG, OpcodeGroup.INSN));
- OPCODES.put("DCMPL", new Opcode(DCMPL, OpcodeGroup.INSN));
- OPCODES.put("DCMPG", new Opcode(DCMPG, OpcodeGroup.INSN));
- OPCODES.put("IFEQ", new Opcode(IFEQ, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IFNE", new Opcode(IFNE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IFLT", new Opcode(IFLT, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IFGE", new Opcode(IFGE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IFGT", new Opcode(IFGT, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IFLE", new Opcode(IFLE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ICMPEQ", new Opcode(IF_ICMPEQ, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ICMPNE", new Opcode(IF_ICMPNE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ICMPLT", new Opcode(IF_ICMPLT, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ICMPGE", new Opcode(IF_ICMPGE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ICMPGT", new Opcode(IF_ICMPGT, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ICMPLE", new Opcode(IF_ICMPLE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ACMPEQ", new Opcode(IF_ACMPEQ, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IF_ACMPNE", new Opcode(IF_ACMPNE, OpcodeGroup.INSN_JUMP));
- OPCODES.put("GOTO", new Opcode(GOTO, OpcodeGroup.INSN_JUMP));
- OPCODES.put("JSR", new Opcode(JSR, OpcodeGroup.INSN_JUMP));
- OPCODES.put("RET", new Opcode(RET, OpcodeGroup.INSN_VAR));
- // OPCODES.put( "TABLESWITCH", new Opcode( TABLESWITCH,
- // "visiTableSwitchInsn"));
- // OPCODES.put( "LOOKUPSWITCH", new Opcode( LOOKUPSWITCH,
- // "visitLookupSwitch"));
- OPCODES.put("IRETURN", new Opcode(IRETURN, OpcodeGroup.INSN));
- OPCODES.put("LRETURN", new Opcode(LRETURN, OpcodeGroup.INSN));
- OPCODES.put("FRETURN", new Opcode(FRETURN, OpcodeGroup.INSN));
- OPCODES.put("DRETURN", new Opcode(DRETURN, OpcodeGroup.INSN));
- OPCODES.put("ARETURN", new Opcode(ARETURN, OpcodeGroup.INSN));
- OPCODES.put("RETURN", new Opcode(RETURN, OpcodeGroup.INSN));
- OPCODES.put("GETSTATIC", new Opcode(GETSTATIC, OpcodeGroup.INSN_FIELD));
- OPCODES.put("PUTSTATIC", new Opcode(PUTSTATIC, OpcodeGroup.INSN_FIELD));
- OPCODES.put("GETFIELD", new Opcode(GETFIELD, OpcodeGroup.INSN_FIELD));
- OPCODES.put("PUTFIELD", new Opcode(PUTFIELD, OpcodeGroup.INSN_FIELD));
- OPCODES.put("INVOKEVIRTUAL", new Opcode(INVOKEVIRTUAL,
- OpcodeGroup.INSN_METHOD));
- OPCODES.put("INVOKESPECIAL", new Opcode(INVOKESPECIAL,
- OpcodeGroup.INSN_METHOD));
- OPCODES.put("INVOKESTATIC", new Opcode(INVOKESTATIC,
- OpcodeGroup.INSN_METHOD));
- OPCODES.put("INVOKEINTERFACE", new Opcode(INVOKEINTERFACE,
- OpcodeGroup.INSN_METHOD));
- OPCODES.put("NEW", new Opcode(NEW, OpcodeGroup.INSN_TYPE));
- OPCODES.put("NEWARRAY", new Opcode(NEWARRAY, OpcodeGroup.INSN_INT));
- OPCODES.put("ANEWARRAY", new Opcode(ANEWARRAY, OpcodeGroup.INSN_TYPE));
- OPCODES.put("ARRAYLENGTH", new Opcode(ARRAYLENGTH, OpcodeGroup.INSN));
- OPCODES.put("ATHROW", new Opcode(ATHROW, OpcodeGroup.INSN));
- OPCODES.put("CHECKCAST", new Opcode(CHECKCAST, OpcodeGroup.INSN_TYPE));
- OPCODES.put("INSTANCEOF", new Opcode(INSTANCEOF, OpcodeGroup.INSN_TYPE));
- OPCODES.put("MONITORENTER", new Opcode(MONITORENTER, OpcodeGroup.INSN));
- OPCODES.put("MONITOREXIT", new Opcode(MONITOREXIT, OpcodeGroup.INSN));
- OPCODES.put("MULTIANEWARRAY", new Opcode(MULTIANEWARRAY,
- OpcodeGroup.INSN_MULTIANEWARRAY));
- OPCODES.put("IFNULL", new Opcode(IFNULL, OpcodeGroup.INSN_JUMP));
- OPCODES.put("IFNONNULL", new Opcode(IFNONNULL, OpcodeGroup.INSN_JUMP));
- }
-
- /**
- * Constructs a new {@link ASMContentHandler ASMContentHandler} object.
- *
- * @param os output stream to write generated class.
- * @param computeMax <tt>true</tt> if the maximum stack size and the
- * maximum number of local variables must be automatically computed.
- * This value is passed to {@link ClassWriter ClassWriter} instance.
- */
- public ASMContentHandler(OutputStream os, boolean computeMax) {
- this.os = os;
- this.computeMax = computeMax;
- }
-
- /**
- * Returns the bytecode of the class that was build with underneath class
- * writer.
- *
- * @return the bytecode of the class that was build with underneath class
- * writer or null if there are no classwriter created.
- */
- public byte[] toByteArray() {
- return cw == null ? null : cw.toByteArray();
- }
-
- /**
- * Process notification of the start of an XML element being reached.
- *
- * @param ns - The Namespace URI, or the empty string if the element has no
- * Namespace URI or if Namespace processing is not being performed.
- * @param localName - The local name (without prefix), or the empty string
- * if Namespace processing is not being performed.
- * @param qName - The qualified name (with prefix), or the empty string if
- * qualified names are not available.
- * @param list - The attributes attached to the element. If there are no
- * attributes, it shall be an empty Attributes object.
- * @exception SAXException if a parsing error is to be reported
- */
- public final void startElement(
- String ns,
- String localName,
- String qName,
- Attributes list) throws SAXException
- {
- // the actual element name is either in localName or qName, depending
- // on whether the parser is namespace aware
- String name = localName;
- if (name == null || name.length() < 1) {
- name = qName;
- }
-
- // Compute the current matching rule
- StringBuffer sb = new StringBuffer(match);
- if (match.length() > 0) {
- sb.append('/');
- }
- sb.append(name);
- match = sb.toString();
-
- // Fire "begin" events for all relevant rules
- Rule r = (Rule) RULES.match(match);
- if (r != null)
- r.begin(name, list);
- }
-
- /**
- * Process notification of the end of an XML element being reached.
- *
- * @param ns - The Namespace URI, or the empty string if the element has no
- * Namespace URI or if Namespace processing is not being performed.
- * @param localName - The local name (without prefix), or the empty string
- * if Namespace processing is not being performed.
- * @param qName - The qualified XML 1.0 name (with prefix), or the empty
- * string if qualified names are not available.
- *
- * @exception SAXException if a parsing error is to be reported
- */
- public final void endElement(String ns, String localName, String qName)
- throws SAXException
- {
- // the actual element name is either in localName or qName, depending
- // on whether the parser is namespace aware
- String name = localName;
- if (name == null || name.length() < 1) {
- name = qName;
- }
-
- // Fire "end" events for all relevant rules in reverse order
- Rule r = (Rule) RULES.match(match);
- if (r != null)
- r.end(name);
-
- // Recover the previous match expression
- int slash = match.lastIndexOf('/');
- if (slash >= 0) {
- match = match.substring(0, slash);
- } else {
- match = "";
- }
- }
-
- /**
- * Process notification of the end of a document and write generated
- * bytecode into output stream.
- *
- * @exception SAXException if parsing or writing error is to be reported.
- */
- public final void endDocument() throws SAXException {
- try {
- os.write(cw.toByteArray());
- } catch (IOException ex) {
- throw new SAXException(ex.toString(), ex);
- }
- }
-
- /**
- * Return the top object on the stack without removing it. If there are no
- * objects on the stack, return <code>null</code>.
- *
- * @return the top object on the stack without removing it.
- */
- final Object peek() {
- return stack.size() == 0 ? null : stack.get(stack.size() - 1);
- }
-
- /**
- * Return the n'th object down the stack, where 0 is the top element and
- * [getCount()-1] is the bottom element. If the specified index is out of
- * range, return <code>null</code>.
- *
- * @param n Index of the desired element, where 0 is the top of the stack, 1
- * is the next element down, and so on.
- * @return the n'th object down the stack.
- */
- final Object peek(int n) {
- return stack.size() < (n + 1) ? null : stack.get(n);
- }
-
- /**
- * Pop the top object off of the stack, and return it. If there are no
- * objects on the stack, return <code>null</code>.
- *
- * @return the top object off of the stack.
- */
- final Object pop() {
- return stack.size() == 0 ? null : stack.remove(stack.size() - 1);
- }
-
- /**
- * Push a new object onto the top of the object stack.
- *
- * @param object The new object
- */
- final void push(Object object) {
- stack.add(object);
- }
-
- private static final class RuleSet {
- private Map rules = new HashMap();
-
- private List lpatterns = new ArrayList();
-
- private List rpatterns = new ArrayList();
-
- public void add(String path, Object rule) {
- String pattern = path;
- if (path.startsWith("*/")) {
- pattern = path.substring(1);
- lpatterns.add(pattern);
- } else if (path.endsWith("/*")) {
- pattern = path.substring(0, path.length() - 1);
- rpatterns.add(pattern);
- }
- rules.put(pattern, rule);
- }
-
- public Object match(String path) {
- if (rules.containsKey(path)) {
- return rules.get(path);
- }
-
- int n = path.lastIndexOf('/');
- for (Iterator it = lpatterns.iterator(); it.hasNext();) {
- String pattern = (String) it.next();
- if (path.substring(n).endsWith(pattern)) {
- return rules.get(pattern);
- }
- }
-
- for (Iterator it = rpatterns.iterator(); it.hasNext();) {
- String pattern = (String) it.next();
- if (path.startsWith(pattern)) {
- return rules.get(pattern);
- }
- }
-
- return null;
- }
-
- }
-
- /**
- * Rule
- */
- protected abstract class Rule {
-
- public void begin(String name, Attributes attrs) {
- }
-
- public void end(String name) {
- }
-
- protected final Object getValue(String desc, String val) {
- Object value = null;
- if (val != null) {
- if (desc.equals("Ljava/lang/String;")) {
- value = decode(val);
- } else if ("Ljava/lang/Integer;".equals(desc)
- || "I".equals(desc) || "S".equals(desc)
- || "B".equals(desc) || "C".equals(desc)
- || desc.equals("Z"))
- {
- value = new Integer(val);
-
- } else if ("Ljava/lang/Short;".equals(desc)) {
- value = new Short(val);
-
- } else if ("Ljava/lang/Byte;".equals(desc)) {
- value = new Byte(val);
-
- } else if ("Ljava/lang/Character;".equals(desc)) {
- value = new Character(decode(val).charAt(0));
-
- } else if ("Ljava/lang/Boolean;".equals(desc)) {
- value = Boolean.valueOf(val);
-
- // } else if ("Ljava/lang/Integer;".equals(desc)
- // || desc.equals("I"))
- // {
- // value = new Integer(val);
- // } else if ("Ljava/lang/Character;".equals(desc)
- // || desc.equals("C"))
- // {
- // value = new Character(decode(val).charAt(0));
- // } else if ("Ljava/lang/Short;".equals(desc) ||
- // desc.equals("S"))
- // {
- // value = Short.valueOf(val);
- // } else if ("Ljava/lang/Byte;".equals(desc) ||
- // desc.equals("B"))
- // {
- // value = Byte.valueOf(val);
-
- } else if ("Ljava/lang/Long;".equals(desc) || desc.equals("J"))
- {
- value = new Long(val);
- } else if ("Ljava/lang/Float;".equals(desc) || desc.equals("F"))
- {
- value = new Float(val);
- } else if ("Ljava/lang/Double;".equals(desc)
- || desc.equals("D"))
- {
- value = new Double(val);
- } else if (Type.getDescriptor(Type.class).equals(desc)) {
- value = Type.getType(val);
-
- // } else if ("[I".equals(desc)) {
- // value = new int[0]; // TODO
- // } else if ("[C".equals(desc)) {
- // value = new char[0]; // TODO
- // } else if ("[Z".equals(desc)) {
- // value = new boolean[0]; // TODO
- // } else if ("[S".equals(desc)) {
- // value = new short[0]; // TODO
- // } else if ("[B".equals(desc)) {
- // value = new byte[0]; // TODO
- // } else if ("[J".equals(desc)) {
- // value = new long[0]; // TODO
- // } else if ("[F".equals(desc)) {
- // value = new float[0]; // TODO
- // } else if ("[D".equals(desc)) {
- // value = new double[0]; // TODO
-
- } else {
- throw new RuntimeException("Invalid value:" + val
- + " desc:" + desc + " ctx:" + this);
- }
- }
- return value;
- }
-
- private final String decode(String val) {
- StringBuffer sb = new StringBuffer(val.length());
- try {
- int n = 0;
- while (n < val.length()) {
- char c = val.charAt(n);
- if (c == '\\') {
- n++;
- c = val.charAt(n);
- if (c == '\\') {
- sb.append('\\');
- } else {
- n++; // skip 'u'
- sb.append((char) Integer.parseInt(val.substring(n,
- n + 4), 16));
- n += 3;
- }
- } else {
- sb.append(c);
- }
- n++;
- }
-
- } catch (RuntimeException ex) {
- System.err.println(val + "\n" + ex.toString());
- ex.printStackTrace();
- throw ex;
- }
- return sb.toString();
- }
-
- protected final Label getLabel(Object label) {
- Label lbl = (Label) labels.get(label);
- if (lbl == null) {
- lbl = new Label();
- labels.put(label, lbl);
- }
- return lbl;
- }
-
- // TODO verify move to stack
- protected final MethodVisitor getCodeVisitor() {
- return (MethodVisitor) peek();
- }
-
- protected final int getAccess(String s) {
- int access = 0;
- if (s.indexOf("public") != -1)
- access |= Opcodes.ACC_PUBLIC;
- if (s.indexOf("private") != -1)
- access |= Opcodes.ACC_PRIVATE;
- if (s.indexOf("protected") != -1)
- access |= Opcodes.ACC_PROTECTED;
- if (s.indexOf("static") != -1)
- access |= Opcodes.ACC_STATIC;
- if (s.indexOf("final") != -1)
- access |= Opcodes.ACC_FINAL;
- if (s.indexOf("super") != -1)
- access |= Opcodes.ACC_SUPER;
- if (s.indexOf("synchronized") != -1)
- access |= Opcodes.ACC_SYNCHRONIZED;
- if (s.indexOf("volatile") != -1)
- access |= Opcodes.ACC_VOLATILE;
- if (s.indexOf("bridge") != -1)
- access |= Opcodes.ACC_BRIDGE;
- if (s.indexOf("varargs") != -1)
- access |= Opcodes.ACC_VARARGS;
- if (s.indexOf("transient") != -1)
- access |= Opcodes.ACC_TRANSIENT;
- if (s.indexOf("native") != -1)
- access |= Opcodes.ACC_NATIVE;
- if (s.indexOf("interface") != -1)
- access |= Opcodes.ACC_INTERFACE;
- if (s.indexOf("abstract") != -1)
- access |= Opcodes.ACC_ABSTRACT;
- if (s.indexOf("strict") != -1)
- access |= Opcodes.ACC_STRICT;
- if (s.indexOf("synthetic") != -1)
- access |= Opcodes.ACC_SYNTHETIC;
- if (s.indexOf("annotation") != -1)
- access |= Opcodes.ACC_ANNOTATION;
- if (s.indexOf("enum") != -1)
- access |= Opcodes.ACC_ENUM;
- if (s.indexOf("deprecated") != -1)
- access |= Opcodes.ACC_DEPRECATED;
- return access;
- }
-
- }
-
- /**
- * ClassRule
- */
- private final class ClassRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- int major = Integer.parseInt(attrs.getValue("major"));
- int minor = Integer.parseInt(attrs.getValue("minor"));
- cw = new ClassWriter(computeMax);
- Map vals = new HashMap();
- vals.put("version", new Integer(minor << 16 | major));
- vals.put("access", attrs.getValue("access"));
- vals.put("name", attrs.getValue("name"));
- vals.put("parent", attrs.getValue("parent"));
- vals.put("source", attrs.getValue("source"));
- vals.put("signature", attrs.getValue("signature"));
- vals.put("interfaces", new ArrayList());
- push(vals);
- // values will be extracted in InterfacesRule.end();
- }
-
- }
-
- private final class SourceRule extends Rule {
-
- public void begin(String name, Attributes attrs) {
- String file = attrs.getValue("file");
- String debug = attrs.getValue("debug");
- cw.visitSource(file, debug);
- }
-
- }
-
- /**
- * InterfaceRule
- */
- private final class InterfaceRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- ((List) ((Map) peek()).get("interfaces")).add(attrs.getValue("name"));
- }
-
- }
-
- /**
- * InterfacesRule
- */
- private final class InterfacesRule extends Rule {
-
- public final void end(String element) {
- Map vals = (Map) pop();
- int version = ((Integer) vals.get("version")).intValue();
- int access = getAccess((String) vals.get("access"));
- String name = (String) vals.get("name");
- String signature = (String) vals.get("signature");
- String parent = (String) vals.get("parent");
- List infs = (List) vals.get("interfaces");
- String[] interfaces = (String[]) infs.toArray(new String[infs.size()]);
- cw.visit(version, access, name, signature, parent, interfaces);
- push(cw);
- }
-
- }
-
- /**
- * OuterClassRule
- */
- private final class OuterClassRule extends Rule {
-
- public final void begin(String element, Attributes attrs) {
- String owner = attrs.getValue("owner");
- String name = attrs.getValue("name");
- String desc = attrs.getValue("desc");
- cw.visitOuterClass(owner, name, desc);
- }
-
- }
-
- /**
- * InnerClassRule
- */
- private final class InnerClassRule extends Rule {
-
- public final void begin(String element, Attributes attrs) {
- int access = getAccess(attrs.getValue("access"));
- String name = attrs.getValue("name");
- String outerName = attrs.getValue("outerName");
- String innerName = attrs.getValue("innerName");
- cw.visitInnerClass(name, outerName, innerName, access);
- }
-
- }
-
- /**
- * FieldRule
- */
- private final class FieldRule extends Rule {
-
- public final void begin(String element, Attributes attrs) {
- int access = getAccess(attrs.getValue("access"));
- String name = attrs.getValue("name");
- String signature = attrs.getValue("signature");
- String desc = attrs.getValue("desc");
- Object value = getValue(desc, attrs.getValue("value"));
- push(cw.visitField(access, name, desc, signature, value));
- }
-
- public void end(String name) {
- ((FieldVisitor) pop()).visitEnd();
- }
-
- }
-
- /**
- * MethodRule
- */
- private final class MethodRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- labels = new HashMap();
- Map vals = new HashMap();
- vals.put("access", attrs.getValue("access"));
- vals.put("name", attrs.getValue("name"));
- vals.put("desc", attrs.getValue("desc"));
- vals.put("signature", attrs.getValue("signature"));
- vals.put("exceptions", new ArrayList());
- push(vals);
- // values will be extracted in ExceptionsRule.end();
- }
-
- public final void end(String name) {
- ((MethodVisitor) pop()).visitEnd();
- labels = null;
- }
-
- }
-
- /**
- * ExceptionRule
- */
- private final class ExceptionRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- ((List) ((Map) peek()).get("exceptions")).add(attrs.getValue("name"));
- }
-
- }
-
- /**
- * ExceptionsRule
- */
- private final class ExceptionsRule extends Rule {
-
- public final void end(String element) {
- Map vals = (Map) pop();
- int access = getAccess((String) vals.get("access"));
- String name = (String) vals.get("name");
- String desc = (String) vals.get("desc");
- String signature = (String) vals.get("signature");
- List excs = (List) vals.get("exceptions");
- String[] exceptions = (String[]) excs.toArray(new String[excs.size()]);
-
- push(cw.visitMethod(access, name, desc, signature, exceptions));
- }
-
- }
-
- /**
- * TableSwitchRule
- */
- private class TableSwitchRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- Map vals = new HashMap();
- vals.put("min", attrs.getValue("min"));
- vals.put("max", attrs.getValue("max"));
- vals.put("dflt", attrs.getValue("dflt"));
- vals.put("labels", new ArrayList());
- push(vals);
- }
-
- public final void end(String name) {
- Map vals = (Map) pop();
- int min = Integer.parseInt((String) vals.get("min"));
- int max = Integer.parseInt((String) vals.get("max"));
- Label dflt = getLabel(vals.get("dflt"));
- List lbls = (List) vals.get("labels");
- Label[] labels = (Label[]) lbls.toArray(new Label[lbls.size()]);
- getCodeVisitor().visitTableSwitchInsn(min, max, dflt, labels);
- }
-
- }
-
- /**
- * TableSwitchLabelRule
- */
- private final class TableSwitchLabelRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- ((List) ((Map) peek()).get("labels")).add(getLabel(attrs.getValue("name")));
- }
-
- }
-
- /**
- * LookupSwitchRule
- */
- private final class LookupSwitchRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- Map vals = new HashMap();
- vals.put("dflt", attrs.getValue("dflt"));
- vals.put("labels", new ArrayList());
- vals.put("keys", new ArrayList());
- push(vals);
- }
-
- public final void end(String name) {
- Map vals = (Map) pop();
- Label dflt = getLabel(vals.get("dflt"));
- List keyList = (List) vals.get("keys");
- List lbls = (List) vals.get("labels");
- Label[] labels = (Label[]) lbls.toArray(new Label[lbls.size()]);
- int[] keys = new int[keyList.size()];
- for (int i = 0; i < keys.length; i++) {
- keys[i] = Integer.parseInt((String) keyList.get(i));
- }
- getCodeVisitor().visitLookupSwitchInsn(dflt, keys, labels);
- }
-
- }
-
- /**
- * LookupSwitchLabelRule
- */
- private final class LookupSwitchLabelRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- Map vals = (Map) peek();
- ((List) vals.get("labels")).add(getLabel(attrs.getValue("name")));
- ((List) vals.get("keys")).add(attrs.getValue("key"));
- }
-
- }
-
- /**
- * LabelRule
- */
- private final class LabelRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- getCodeVisitor().visitLabel(getLabel(attrs.getValue("name")));
- }
-
- }
-
- /**
- * TryCatchRule
- */
- private final class TryCatchRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- Label start = getLabel(attrs.getValue("start"));
- Label end = getLabel(attrs.getValue("end"));
- Label handler = getLabel(attrs.getValue("handler"));
- String type = attrs.getValue("type");
- getCodeVisitor().visitTryCatchBlock(start, end, handler, type);
- }
-
- }
-
- /**
- * LineNumberRule
- */
- private final class LineNumberRule extends Rule {
-
- public final void begin(String name, Attributes attrs) {
- int line = Integer.parseInt(attrs.getValue("line"));
- Label start = getLabel(attrs.getValue("start"));
- getCodeVisitor().visitLineNumber(line, start);
- }
-
- }
-
- /**
- * LocalVarRule
- */
- private final class LocalVarRule extends Rule {
-
- public final void begin(String element, Attributes attrs) {
- String name = attrs.getValue("name");
- String desc = attrs.getValue("desc");
- String signature = attrs.getValue("signature");
- Label start = getLabel(attrs.getValue("start"));
- Label end = getLabel(attrs.getValue("end"));
- int var = Integer.parseInt(attrs.getValue("var"));
- getCodeVisitor().visitLocalVariable(name,
- desc,
- signature,
- start,
- end,
- var);
- }
-
- }
-
- /**
- * OpcodesRule
- */
- private final class OpcodesRule extends Rule {
-
- // public boolean match( String match, String element) {
- // return match.startsWith( path) && OPCODES.containsKey( element);
- // }
-
- public final void begin(String element, Attributes attrs) {
- Opcode o = ((Opcode) OPCODES.get(element));
- if (o == null)
- return;
-
- switch (o.type) {
- case OpcodeGroup.INSN:
- getCodeVisitor().visitInsn(o.opcode);
- break;
-
- case OpcodeGroup.INSN_FIELD:
- getCodeVisitor().visitFieldInsn(o.opcode,
- attrs.getValue("owner"),
- attrs.getValue("name"),
- attrs.getValue("desc"));
- break;
-
- case OpcodeGroup.INSN_INT:
- getCodeVisitor().visitIntInsn(o.opcode,
- Integer.parseInt(attrs.getValue("value")));
- break;
-
- case OpcodeGroup.INSN_JUMP:
- getCodeVisitor().visitJumpInsn(o.opcode,
- getLabel(attrs.getValue("label")));
- break;
-
- case OpcodeGroup.INSN_METHOD:
- getCodeVisitor().visitMethodInsn(o.opcode,
- attrs.getValue("owner"),
- attrs.getValue("name"),
- attrs.getValue("desc"));
- break;
-
- case OpcodeGroup.INSN_TYPE:
- getCodeVisitor().visitTypeInsn(o.opcode,
- attrs.getValue("desc"));
- break;
-
- case OpcodeGroup.INSN_VAR:
- getCodeVisitor().visitVarInsn(o.opcode,
- Integer.parseInt(attrs.getValue("var")));
- break;
-
- case OpcodeGroup.INSN_IINC:
- getCodeVisitor().visitIincInsn(Integer.parseInt(attrs.getValue("var")),
- Integer.parseInt(attrs.getValue("inc")));
- break;
-
- case OpcodeGroup.INSN_LDC:
- getCodeVisitor().visitLdcInsn(getValue(attrs.getValue("desc"),
- attrs.getValue("cst")));
- break;
-
- case OpcodeGroup.INSN_MULTIANEWARRAY:
- getCodeVisitor().visitMultiANewArrayInsn(attrs.getValue("desc"),
- Integer.parseInt(attrs.getValue("dims")));
- break;
-
- default:
- throw new RuntimeException("Invalid element: " + element
- + " at " + match);
-
- }
- }
- }
-
- /**
- * MaxRule
- */
- private final class MaxRule extends Rule {
-
- public final void begin(String element, Attributes attrs) {
- int maxStack = Integer.parseInt(attrs.getValue("maxStack"));
- int maxLocals = Integer.parseInt(attrs.getValue("maxLocals"));
- getCodeVisitor().visitMaxs(maxStack, maxLocals);
- }
-
- }
-
- private final class AnnotationRule extends Rule {
-
- public void begin(String name, Attributes attrs) {
- String desc = attrs.getValue("desc");
- boolean visible = Boolean.valueOf(attrs.getValue("visible"))
- .booleanValue();
-
- Object v = peek();
- if (v instanceof ClassVisitor) {
- push(((ClassVisitor) v).visitAnnotation(desc, visible));
- } else if (v instanceof FieldVisitor) {
- push(((FieldVisitor) v).visitAnnotation(desc, visible));
- } else if (v instanceof MethodVisitor) {
- push(((MethodVisitor) v).visitAnnotation(desc, visible));
- }
- }
-
- public void end(String name) {
- ((AnnotationVisitor) pop()).visitEnd();
- }
-
- }
-
- private final class AnnotationParameterRule extends Rule {
-
- public void begin(String name, Attributes attrs) {
- int parameter = Integer.parseInt(attrs.getValue("parameter"));
- String desc = attrs.getValue("desc");
- boolean visible = Boolean.valueOf(attrs.getValue("visible"))
- .booleanValue();
-
- push(((MethodVisitor) peek()).visitParameterAnnotation(parameter,
- desc,
- visible));
- }
-
- public void end(String name) {
- ((AnnotationVisitor) pop()).visitEnd();
- }
-
- }
-
- private final class AnnotationValueRule extends Rule {
-
- public void begin(String nm, Attributes attrs) {
- String name = attrs.getValue("name");
- String desc = attrs.getValue("desc");
- String value = attrs.getValue("value");
- ((AnnotationVisitor) peek()).visit(name, getValue(desc, value));
- }
-
- }
-
- private final class AnnotationValueEnumRule extends Rule {
-
- public void begin(String nm, Attributes attrs) {
- String name = attrs.getValue("name");
- String desc = attrs.getValue("desc");
- String value = attrs.getValue("value");
- ((AnnotationVisitor) peek()).visitEnum(name, desc, value);
- }
-
- }
-
- private final class AnnotationValueAnnotationRule extends Rule {
-
- public void begin(String nm, Attributes attrs) {
- String name = attrs.getValue("name");
- String desc = attrs.getValue("desc");
- push(((AnnotationVisitor) peek()).visitAnnotation(name, desc));
- }
-
- public void end(String name) {
- ((AnnotationVisitor) pop()).visitEnd();
- }
-
- }
-
- private final class AnnotationValueArrayRule extends Rule {
-
- public void begin(String nm, Attributes attrs) {
- String name = attrs.getValue("name");
- push(((AnnotationVisitor) peek()).visitArray(name));
- }
-
- public void end(String name) {
- ((AnnotationVisitor) pop()).visitEnd();
- }
-
- }
-
- private final class AnnotationDefaultRule extends Rule {
-
- public void begin(String nm, Attributes attrs) {
- push(((MethodVisitor) peek()).visitAnnotationDefault());
- }
-
- public void end(String name) {
- ((AnnotationVisitor) pop()).visitEnd();
- }
-
- }
-
- /**
- * Opcode
- */
- private final static class Opcode {
- public int opcode;
-
- public int type;
-
- public Opcode(int opcode, int type) {
- this.opcode = opcode;
- this.type = type;
- }
-
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/Processor.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/Processor.java
deleted file mode 100644
index 28bf2ec..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/Processor.java
+++ /dev/null
@@ -1,1048 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXResult;
-import javax.xml.transform.sax.SAXSource;
-import javax.xml.transform.sax.SAXTransformerFactory;
-import javax.xml.transform.sax.TransformerHandler;
-import javax.xml.transform.stream.StreamSource;
-
-import org.objectweb.asm.ClassReader;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
-import org.xml.sax.helpers.AttributesImpl;
-import org.xml.sax.helpers.DefaultHandler;
-import org.xml.sax.helpers.XMLReaderFactory;
-
-/**
- * Processor is a command line tool that can be used for bytecode waving
- * directed by XSL transformation. <p> In order to use a concrete XSLT engine,
- * system property <tt>javax.xml.transform.TransformerFactory</tt> must be set
- * to one of the following values.
- *
- * <blockquote> <table border="1" cellspacing="0" cellpadding="3"> <tr> <td>jd.xslt</td>
- * <td>jd.xml.xslt.trax.TransformerFactoryImpl</td> </tr>
- *
- * <tr> <td>Saxon</td> <td>net.sf.saxon.TransformerFactoryImpl</td> </tr>
- *
- * <tr> <td>Caucho</td> <td>com.caucho.xsl.Xsl</td> </tr>
- *
- * <tr> <td>Xalan interpeter</td> <td>org.apache.xalan.processor.TransformerFactory</td>
- * </tr>
- *
- * <tr> <td>Xalan xsltc</td> <td>org.apache.xalan.xsltc.trax.TransformerFactoryImpl</td>
- * </tr> </table> </blockquote>
- *
- * @author Eugene Kuleshov
- */
-public class Processor {
-
- public static final int BYTECODE = 1;
-
- public static final int MULTI_XML = 2;
-
- public static final int SINGLE_XML = 3;
-
- private static final String SINGLE_XML_NAME = "classes.xml";
-
- private int inRepresentation;
-
- private int outRepresentation;
-
- private InputStream input = null;
-
- private OutputStream output = null;
-
- private Source xslt = null;
-
- private boolean computeMax;
-
- private int n = 0;
-
- public Processor(
- int inRepresenation,
- int outRepresentation,
- InputStream input,
- OutputStream output,
- Source xslt)
- {
- this.inRepresentation = inRepresenation;
- this.outRepresentation = outRepresentation;
- this.input = input;
- this.output = output;
- this.xslt = xslt;
- this.computeMax = true;
- }
-
- public int process() throws TransformerException, IOException, SAXException
- {
- ZipInputStream zis = new ZipInputStream(input);
- final ZipOutputStream zos = new ZipOutputStream(output);
- final OutputStreamWriter osw = new OutputStreamWriter(zos);
-
- Thread.currentThread()
- .setContextClassLoader(getClass().getClassLoader());
-
- TransformerFactory tf = TransformerFactory.newInstance();
- if (!tf.getFeature(SAXSource.FEATURE)
- || !tf.getFeature(SAXResult.FEATURE))
- return 0;
-
- SAXTransformerFactory saxtf = (SAXTransformerFactory) tf;
- Templates templates = null;
- if (xslt != null) {
- templates = saxtf.newTemplates(xslt);
- }
-
- // configuring outHandlerFactory
- // ///////////////////////////////////////////////////////
-
- EntryElement entryElement = getEntryElement(zos);
-
- ContentHandler outDocHandler = null;
- switch (outRepresentation) {
- case BYTECODE:
- outDocHandler = new OutputSlicingHandler(new ASMContentHandlerFactory(zos,
- computeMax),
- entryElement,
- false);
- break;
-
- case MULTI_XML:
- outDocHandler = new OutputSlicingHandler(new SAXWriterFactory(osw,
- true),
- entryElement,
- true);
- break;
-
- case SINGLE_XML:
- ZipEntry outputEntry = new ZipEntry(SINGLE_XML_NAME);
- zos.putNextEntry(outputEntry);
- outDocHandler = new SAXWriter(osw, false);
- break;
-
- }
-
- // configuring inputDocHandlerFactory
- // /////////////////////////////////////////////////
- ContentHandler inDocHandler = null;
- if (templates == null) {
- inDocHandler = outDocHandler;
- } else {
- inDocHandler = new InputSlicingHandler("class",
- outDocHandler,
- new TransformerHandlerFactory(saxtf,
- templates,
- outDocHandler));
- }
- ContentHandlerFactory inDocHandlerFactory = new SubdocumentHandlerFactory(inDocHandler);
-
- if (inDocHandler != null && inRepresentation != SINGLE_XML) {
- inDocHandler.startDocument();
- inDocHandler.startElement("",
- "classes",
- "classes",
- new AttributesImpl());
- }
-
- int i = 0;
- ZipEntry ze = null;
- while ((ze = zis.getNextEntry()) != null) {
- update(ze.getName(), n++);
- if (isClassEntry(ze)) {
- processEntry(zis, ze, inDocHandlerFactory);
- } else {
- OutputStream os = entryElement.openEntry(getName(ze));
- copyEntry(zis, os);
- entryElement.closeEntry();
- }
-
- i++;
- }
-
- if (inDocHandler != null && inRepresentation != SINGLE_XML) {
- inDocHandler.endElement("", "classes", "classes");
- inDocHandler.endDocument();
- }
-
- if (outRepresentation == SINGLE_XML) {
- zos.closeEntry();
- }
- zos.flush();
- zos.close();
-
- return i;
- }
-
- private void copyEntry(InputStream is, OutputStream os) throws IOException {
- if (outRepresentation == SINGLE_XML)
- return;
-
- byte[] buff = new byte[2048];
- int i;
- while ((i = is.read(buff)) != -1) {
- os.write(buff, 0, i);
- }
- }
-
- private boolean isClassEntry(ZipEntry ze) {
- String name = ze.getName();
- return inRepresentation == SINGLE_XML && name.equals(SINGLE_XML_NAME)
- || name.endsWith(".class") || name.endsWith(".class.xml");
- }
-
- private void processEntry(
- final ZipInputStream zis,
- ZipEntry ze,
- ContentHandlerFactory handlerFactory)
- {
- ContentHandler handler = handlerFactory.createContentHandler();
- try {
-
- // if (CODE2ASM.equals(command)) { // read bytecode and process it
- // // with TraceClassVisitor
- // ClassReader cr = new ClassReader(readEntry(zis, ze));
- // cr.accept(new TraceClassVisitor(null, new PrintWriter(os)),
- // false);
- // }
-
- boolean singleInputDocument = inRepresentation == SINGLE_XML;
- if (inRepresentation == BYTECODE) { // read bytecode and process it
- // with handler
- ClassReader cr = new ClassReader(readEntry(zis, ze));
- cr.accept(new SAXClassAdapter(handler, singleInputDocument),
- false);
-
- } else { // read XML and process it with handler
- XMLReader reader = XMLReaderFactory.createXMLReader();
- reader.setContentHandler(handler);
- reader.parse(new InputSource(singleInputDocument
- ? (InputStream) new ProtectedInputStream(zis)
- : new ByteArrayInputStream(readEntry(zis, ze))));
-
- }
- } catch (Exception ex) {
- update(ze.getName(), 0);
- update(ex, 0);
- }
- }
-
- private EntryElement getEntryElement(ZipOutputStream zos) {
- if (outRepresentation == SINGLE_XML) {
- return new SingleDocElement(zos);
- }
- return new ZipEntryElement(zos);
- }
-
- // private ContentHandlerFactory getHandlerFactory(
- // OutputStream os,
- // SAXTransformerFactory saxtf,
- // Templates templates)
- // {
- // ContentHandlerFactory factory = null;
- // if (templates == null) {
- // if (outputRepresentation == BYTECODE) { // factory used to write
- // // bytecode
- // factory = new ASMContentHandlerFactory(os, computeMax);
- // } else { // factory used to write XML
- // factory = new SAXWriterFactory(os, true);
- // }
- // } else {
- // if (outputRepresentation == BYTECODE) { // factory used to transform
- // // and then write bytecode
- // factory = new ASMTransformerHandlerFactory(saxtf,
- // templates,
- // os,
- // computeMax);
- // } else { // factory used to transformand then write XML
- // factory = new TransformerHandlerFactory(saxtf,
- // templates,
- // os,
- // outputRepresentation == SINGLE_XML);
- // }
- // }
- // return factory;
- // }
-
- private String getName(ZipEntry ze) {
- String name = ze.getName();
- if (isClassEntry(ze)) {
- if (inRepresentation != BYTECODE && outRepresentation == BYTECODE) {
- name = name.substring(0, name.length() - 4); // .class.xml to
- // .class
- } else if (inRepresentation == BYTECODE
- && outRepresentation != BYTECODE)
- {
- name = name.concat(".xml"); // .class to .class.xml
- }
- // } else if( CODE2ASM.equals( command)) {
- // name = name.substring( 0, name.length()-6).concat( ".asm");
- }
- return name;
- }
-
- private byte[] readEntry(ZipInputStream zis, ZipEntry ze)
- throws IOException
- {
- long size = ze.getSize();
- if (size > -1) {
- byte[] buff = new byte[(int) size];
- int k = 0;
- int n;
- while(( n = zis.read(buff, k, buff.length-k)) > 0) {
- k += n;
- }
- return buff;
- }
-
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- byte[] buff = new byte[4096];
- int i;
- while ((i = zis.read(buff)) != -1) {
- bos.write(buff, 0, i);
- }
- return bos.toByteArray();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
- */
- protected void update(Object arg, int n) {
- if (arg instanceof Throwable) {
- ((Throwable) arg).printStackTrace();
- } else {
- if ((n % 100) == 0) {
- System.err.println(n + " " + arg);
- }
- }
- }
-
- public static void main(String[] args) throws Exception {
- if (args.length < 2) {
- showUsage();
- return;
- }
-
- int inRepresentation = getRepresentation(args[0]);
- int outRepresentation = getRepresentation(args[1]);
-
- InputStream is = System.in;
- OutputStream os = new BufferedOutputStream(System.out);
-
- Source xslt = null;
- // boolean computeMax = true;
-
- for (int i = 2; i < args.length; i++) {
- if ("-in".equals(args[i])) {
- is = new FileInputStream(args[++i]);
-
- } else if ("-out".equals(args[i])) {
- os = new BufferedOutputStream(new FileOutputStream(args[++i]));
-
- } else if ("-xslt".equals(args[i])) {
- xslt = new StreamSource(new FileInputStream(args[++i]));
-
- // } else if( "-computemax".equals( args[ i].toLowerCase())) {
- // computeMax = true;
-
- } else {
- showUsage();
- return;
-
- }
- }
-
- if (inRepresentation == 0 || outRepresentation == 0) {
- showUsage();
- return;
- }
-
- Processor m = new Processor(inRepresentation,
- outRepresentation,
- is,
- os,
- xslt);
-
- long l1 = System.currentTimeMillis();
- int n = m.process();
- long l2 = System.currentTimeMillis();
- System.err.println(n);
- System.err.println("" + (l2 - l1) + "ms " + (1000f * n / (l2 - l1))
- + " resources/sec");
- }
-
- private static int getRepresentation(String s) {
- if ("code".equals(s)) {
- return BYTECODE;
- } else if ("xml".equals(s)) {
- return MULTI_XML;
- } else if ("singlexml".equals(s)) {
- return SINGLE_XML;
- }
- return 0;
- }
-
- private static void showUsage() {
- System.err.println("Usage: Main <in format> <out format> [-in <input jar>] [-out <output jar>] [-xslt <xslt file>]");
- System.err.println(" when -in or -out is omitted sysin and sysout would be used");
- System.err.println(" <in format> and <out format> - code | xml | singlexml");
- }
-
- /**
- * IputStream wrapper class used to protect input streams from being closed
- * by some stupid XML parsers.
- */
- private static final class ProtectedInputStream extends InputStream {
- private final InputStream is;
-
- private ProtectedInputStream(InputStream is) {
- super();
- this.is = is;
- }
-
- public final void close() throws IOException {
- }
-
- public final int read() throws IOException {
- return is.read();
- }
-
- public final int read(byte[] b, int off, int len) throws IOException {
- return is.read(b, off, len);
- }
-
- public final int available() throws IOException {
- return is.available();
- }
- }
-
- /**
- * A {@link ContentHandlerFactory ContentHandlerFactory} is used to create
- * {@link org.xml.sax.ContentHandler ContentHandler} instances for concrete
- * context.
- */
- private static interface ContentHandlerFactory {
-
- /**
- * Creates an instance of the content handler.
- *
- * @return content handler
- */
- ContentHandler createContentHandler();
-
- }
-
- /**
- * SAXWriterFactory
- */
- private static final class SAXWriterFactory implements
- ContentHandlerFactory
- {
- private Writer w;
-
- private boolean optimizeEmptyElements;
-
- public SAXWriterFactory(Writer w, boolean optimizeEmptyElements) {
- this.w = w;
- this.optimizeEmptyElements = optimizeEmptyElements;
- }
-
- public final ContentHandler createContentHandler() {
- return new SAXWriter(w, optimizeEmptyElements);
- }
-
- }
-
- /**
- * ASMContentHandlerFactory
- */
- private static final class ASMContentHandlerFactory implements
- ContentHandlerFactory
- {
- private OutputStream os;
-
- private boolean computeMax;
-
- public ASMContentHandlerFactory(OutputStream os, boolean computeMax) {
- this.os = os;
- this.computeMax = computeMax;
- }
-
- public final ContentHandler createContentHandler() {
- return new ASMContentHandler(os, computeMax);
- }
-
- }
-
- /**
- * TransformerHandlerFactory
- */
- private static final class TransformerHandlerFactory implements
- ContentHandlerFactory
- {
- private SAXTransformerFactory saxtf;
-
- private Templates templates;
-
- private ContentHandler outputHandler;
-
- public TransformerHandlerFactory(
- SAXTransformerFactory saxtf,
- Templates templates,
- ContentHandler outputHandler)
- {
- this.saxtf = saxtf;
- this.templates = templates;
- this.outputHandler = outputHandler;
- }
-
- public final ContentHandler createContentHandler() {
- try {
- TransformerHandler handler = saxtf.newTransformerHandler(templates);
- handler.setResult(new SAXResult(outputHandler));
- return handler;
- } catch (TransformerConfigurationException ex) {
- throw new RuntimeException(ex.toString());
- }
- }
- }
-
- /**
- * SubdocumentHandlerFactory
- */
- private final static class SubdocumentHandlerFactory implements
- ContentHandlerFactory
- {
- private ContentHandler subdocumentHandler;
-
- public SubdocumentHandlerFactory(ContentHandler subdocumentHandler) {
- this.subdocumentHandler = subdocumentHandler;
- }
-
- public final ContentHandler createContentHandler() {
- return subdocumentHandler;
- }
-
- }
-
- /**
- * A {@link org.xml.sax.ContentHandler ContentHandler} and
- * {@link org.xml.sax.ext.LexicalHandler LexicalHandler} that serializes XML
- * from SAX 2.0 events into {@link java.io.Writer Writer}.
- *
- * <i><blockquote> This implementation does not support namespaces, entity
- * definitions (uncluding DTD), CDATA and text elements. </blockquote></i>
- */
- private final static class SAXWriter extends DefaultHandler implements
- LexicalHandler
- {
- private static final char[] OFF = " ".toCharArray();
-
- private Writer w;
-
- private boolean optimizeEmptyElements;
-
- private boolean openElement = false;
-
- private int ident = 0;
-
- /**
- * Creates <code>SAXWriter</code>.
- *
- * @param w writer
- * @param optimizeEmptyElements if set to <code>true</code>, short
- * XML syntax will be used for empty elements
- */
- public SAXWriter(Writer w, boolean optimizeEmptyElements) {
- this.w = w;
- this.optimizeEmptyElements = optimizeEmptyElements;
- }
-
- public final void startElement(
- String ns,
- String localName,
- String qName,
- Attributes atts) throws SAXException
- {
- try {
- closeElement();
-
- writeIdent();
- w.write("<".concat(qName));
- if (atts != null && atts.getLength() > 0)
- writeAttributes(atts);
-
- if (!optimizeEmptyElements) {
- w.write(">\n");
- } else {
- openElement = true;
- }
- ident += 2;
-
- } catch (IOException ex) {
- throw new SAXException(ex);
-
- }
- }
-
- public final void endElement(String ns, String localName, String qName)
- throws SAXException
- {
- ident -= 2;
- try {
- if (openElement) {
- w.write("/>\n");
- openElement = false;
- } else {
- writeIdent();
- w.write("</" + qName + ">\n");
- }
-
- } catch (IOException ex) {
- throw new SAXException(ex);
-
- }
- }
-
- public final void endDocument() throws SAXException {
- try {
- w.flush();
-
- } catch (IOException ex) {
- throw new SAXException(ex);
-
- }
- }
-
- public final void comment(char[] ch, int off, int len)
- throws SAXException
- {
- try {
- closeElement();
-
- writeIdent();
- w.write("<!-- ");
- w.write(ch, off, len);
- w.write(" -->\n");
-
- } catch (IOException ex) {
- throw new SAXException(ex);
-
- }
- }
-
- public final void startDTD(String arg0, String arg1, String arg2)
- throws SAXException
- {
- }
-
- public final void endDTD() throws SAXException {
- }
-
- public final void startEntity(String arg0) throws SAXException {
- }
-
- public final void endEntity(String arg0) throws SAXException {
- }
-
- public final void startCDATA() throws SAXException {
- }
-
- public final void endCDATA() throws SAXException {
- }
-
- private final void writeAttributes(Attributes atts) throws IOException {
- StringBuffer sb = new StringBuffer();
- int len = atts.getLength();
- for (int i = 0; i < len; i++) {
- sb.append(" ")
- .append(atts.getLocalName(i))
- .append("=\"")
- .append(esc(atts.getValue(i)))
- .append("\"");
- }
- w.write(sb.toString());
- }
-
- /**
- * Encode string with escaping.
- *
- * @param str string to encode.
- * @return encoded string
- */
- private final String esc(String str) {
- StringBuffer sb = new StringBuffer(str.length());
- for (int i = 0; i < str.length(); i++) {
- char ch = str.charAt(i);
- switch (ch) {
- case '&':
- sb.append("&amp;");
- break;
-
- case '<':
- sb.append("&lt;");
- break;
-
- case '>':
- sb.append("&gt;");
- break;
-
- case '\"':
- sb.append("&quot;");
- break;
-
- default:
- if (ch > 0x7f) {
- sb.append("&#")
- .append(Integer.toString(ch))
- .append(';');
- } else {
- sb.append(ch);
- }
-
- }
- }
- return sb.toString();
- }
-
- private final void writeIdent() throws IOException {
- int n = ident;
- while (n > 0) {
- if (n > OFF.length) {
- w.write(OFF);
- n -= OFF.length;
- } else {
- w.write(OFF, 0, n);
- n = 0;
- }
- }
- }
-
- private final void closeElement() throws IOException {
- if (openElement) {
- w.write(">\n");
- }
- openElement = false;
- }
-
- }
-
- /**
- * A {@link org.xml.sax.ContentHandler ContentHandler} that splits XML
- * documents into smaller chunks. Each chunk is processed by the nested
- * {@link org.xml.sax.ContentHandler ContentHandler} obtained from
- * {@link java.net.ContentHandlerFactory ContentHandlerFactory}. This is
- * useful for running XSLT engine against large XML document that will
- * hardly fit into the memory all together. <p> TODO use complete path for
- * subdocumentRoot
- */
- private final static class InputSlicingHandler extends DefaultHandler {
- private String subdocumentRoot;
-
- private ContentHandler rootHandler;
-
- private ContentHandlerFactory subdocumentHandlerFactory;
-
- private boolean subdocument = false;
-
- private ContentHandler subdocumentHandler;
-
- /**
- * Constructs a new {@link InputSlicingHandler SubdocumentHandler}
- * object.
- *
- * @param subdocumentRoot name/path to the root element of the
- * subdocument
- * @param rootHandler content handler for the entire document
- * (subdocument envelope).
- * @param subdocumentHandlerFactory a
- * {@link ContentHandlerFactory ContentHandlerFactory} used to
- * create {@link ContentHandler ContentHandler} instances for
- * subdocuments.
- */
- public InputSlicingHandler(
- String subdocumentRoot,
- ContentHandler rootHandler,
- ContentHandlerFactory subdocumentHandlerFactory)
- {
- this.subdocumentRoot = subdocumentRoot;
- this.rootHandler = rootHandler;
- this.subdocumentHandlerFactory = subdocumentHandlerFactory;
- }
-
- public final void startElement(
- String namespaceURI,
- String localName,
- String qName,
- Attributes list) throws SAXException
- {
- if (subdocument) {
- subdocumentHandler.startElement(namespaceURI,
- localName,
- qName,
- list);
- } else if (localName.equals(subdocumentRoot)) {
- subdocumentHandler = subdocumentHandlerFactory.createContentHandler();
- subdocumentHandler.startDocument();
- subdocumentHandler.startElement(namespaceURI,
- localName,
- qName,
- list);
- subdocument = true;
- } else if (rootHandler != null) {
- rootHandler.startElement(namespaceURI, localName, qName, list);
- }
- }
-
- public final void endElement(
- String namespaceURI,
- String localName,
- String qName) throws SAXException
- {
- if (subdocument) {
- subdocumentHandler.endElement(namespaceURI, localName, qName);
- if (localName.equals(subdocumentRoot)) {
- subdocumentHandler.endDocument();
- subdocument = false;
- }
- } else if (rootHandler != null) {
- rootHandler.endElement(namespaceURI, localName, qName);
- }
- }
-
- public final void startDocument() throws SAXException {
- if (rootHandler != null) {
- rootHandler.startDocument();
- }
- }
-
- public final void endDocument() throws SAXException {
- if (rootHandler != null) {
- rootHandler.endDocument();
-
- }
- }
-
- public final void characters(char[] buff, int offset, int size)
- throws SAXException
- {
- if (subdocument) {
- subdocumentHandler.characters(buff, offset, size);
- } else if (rootHandler != null) {
- rootHandler.characters(buff, offset, size);
- }
- }
-
- }
-
- /**
- * A {@link org.xml.sax.ContentHandler ContentHandler} that splits XML
- * documents into smaller chunks. Each chunk is processed by the nested
- * {@link org.xml.sax.ContentHandler ContentHandler} obtained from
- * {@link java.net.ContentHandlerFactory ContentHandlerFactory}. This is
- * useful for running XSLT engine against large XML document that will
- * hardly fit into the memory all together. <p> TODO use complete path for
- * subdocumentRoot
- */
- private static final class OutputSlicingHandler extends DefaultHandler {
- private String subdocumentRoot;
-
- private ContentHandlerFactory subdocumentHandlerFactory;
-
- private EntryElement entryElement;
-
- private boolean isXml;
-
- private boolean subdocument = false;
-
- private ContentHandler subdocumentHandler;
-
- /**
- * Constructs a new {@link OutputSlicingHandler SubdocumentHandler}
- * object.
- *
- * @param subdocumentHandlerFactory a
- * {@link ContentHandlerFactory ContentHandlerFactory} used to
- * create {@link ContentHandler ContentHandler} instances for
- * subdocuments.
- * @param entryElement TODO.
- * @param isXml TODO.
- */
- public OutputSlicingHandler(
- ContentHandlerFactory subdocumentHandlerFactory,
- EntryElement entryElement,
- boolean isXml)
- {
- this.subdocumentRoot = "class";
- this.subdocumentHandlerFactory = subdocumentHandlerFactory;
- this.entryElement = entryElement;
- this.isXml = isXml;
- }
-
- public final void startElement(
- String namespaceURI,
- String localName,
- String qName,
- Attributes list) throws SAXException
- {
- if (subdocument) {
- subdocumentHandler.startElement(namespaceURI,
- localName,
- qName,
- list);
- } else if (localName.equals(subdocumentRoot)) {
- String name = list.getValue("name");
- if (name == null || name.length() == 0)
- throw new SAXException("Class element without name attribute.");
- try {
- entryElement.openEntry(isXml
- ? name.concat(".class.xml")
- : name.concat(".class"));
- } catch (IOException ex) {
- throw new SAXException(ex.toString(), ex);
- }
- subdocumentHandler = subdocumentHandlerFactory.createContentHandler();
- subdocumentHandler.startDocument();
- subdocumentHandler.startElement(namespaceURI,
- localName,
- qName,
- list);
- subdocument = true;
- }
- }
-
- public final void endElement(
- String namespaceURI,
- String localName,
- String qName) throws SAXException
- {
- if (subdocument) {
- subdocumentHandler.endElement(namespaceURI, localName, qName);
- if (localName.equals(subdocumentRoot)) {
- subdocumentHandler.endDocument();
- subdocument = false;
- try {
- entryElement.closeEntry();
- } catch (IOException ex) {
- throw new SAXException(ex.toString(), ex);
- }
- }
- }
- }
-
- public final void startDocument() throws SAXException {
- }
-
- public final void endDocument() throws SAXException {
- }
-
- public final void characters(char[] buff, int offset, int size)
- throws SAXException
- {
- if (subdocument) {
- subdocumentHandler.characters(buff, offset, size);
- }
- }
-
- }
-
- private static interface EntryElement {
-
- OutputStream openEntry(String name) throws IOException;
-
- void closeEntry() throws IOException;
-
- }
-
- private static final class SingleDocElement implements EntryElement {
- private OutputStream os;
-
- public SingleDocElement(OutputStream os) {
- this.os = os;
- }
-
- public OutputStream openEntry(String name) throws IOException {
- return os;
- }
-
- public void closeEntry() throws IOException {
- os.flush();
- }
-
- }
-
- private static final class ZipEntryElement implements EntryElement {
- private ZipOutputStream zos;
-
- public ZipEntryElement(ZipOutputStream zos) {
- this.zos = zos;
- }
-
- public OutputStream openEntry(String name) throws IOException {
- ZipEntry entry = new ZipEntry(name);
- zos.putNextEntry(entry);
- return zos;
- }
-
- public void closeEntry() throws IOException {
- zos.flush();
- zos.closeEntry();
- }
-
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAdapter.java
deleted file mode 100644
index 5168fb5..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAdapter.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-
-/**
- * SAXAdapter
- *
- * @author Eugene Kuleshov
- */
-public abstract class SAXAdapter {
- private final ContentHandler h;
-
- public SAXAdapter(ContentHandler h) {
- this.h = h;
- }
-
- protected ContentHandler getContentHandler() {
- return h;
- }
-
- protected final void addEnd(String name) {
- try {
- h.endElement("", name, name);
- } catch (SAXException ex) {
- throw new RuntimeException(ex.toString());
- }
- }
-
- protected final void addStart(String name, Attributes attrs) {
- try {
- h.startElement("", name, name, attrs);
- } catch (SAXException ex) {
- throw new RuntimeException(ex.toString());
- }
- }
-
- protected final void addElement(String name, Attributes attrs) {
- addStart(name, attrs);
- addEnd(name);
- }
-
- protected void addDocumentStart() {
- try {
- h.startDocument();
- } catch (SAXException ex) {
- throw new RuntimeException(ex.getException());
- }
- }
-
- protected void addDocumentEnd() {
- try {
- h.endDocument();
- } catch (SAXException ex) {
- // ex.getException().printStackTrace();
- // ex.printStackTrace();
- throw new RuntimeException(ex.toString());
- }
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAnnotationAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAnnotationAdapter.java
deleted file mode 100644
index 6e9605c..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXAnnotationAdapter.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Type;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * SAXAnnotationAdapter
- *
- * @author Eugene Kuleshov
- */
-public class SAXAnnotationAdapter extends SAXAdapter implements
- AnnotationVisitor
-{
- private final String elementName;
-
- public SAXAnnotationAdapter(
- ContentHandler h,
- String elementName,
- int visible,
- String name,
- String desc)
- {
- this(h, elementName, visible, desc, name, -1);
- }
-
- public SAXAnnotationAdapter(
- ContentHandler h,
- String elementName,
- int visible,
- int parameter,
- String desc)
- {
- this(h, elementName, visible, desc, null, parameter);
- }
-
- private SAXAnnotationAdapter(
- ContentHandler h,
- String elementName,
- int visible,
- String desc,
- String name,
- int parameter)
- {
- super(h);
- this.elementName = elementName;
-
- AttributesImpl att = new AttributesImpl();
- if (name != null)
- att.addAttribute("", "name", "name", "", name);
- if (visible != 0)
- att.addAttribute("", "visible", "visible", "", visible > 0
- ? "true"
- : "false");
- if (parameter != -1)
- att.addAttribute("",
- "parameter",
- "parameter",
- "",
- Integer.toString(parameter));
- if (desc != null)
- att.addAttribute("", "desc", "desc", "", desc);
-
- addStart(elementName, att);
- }
-
- public void visit(String name, Object value) {
- Class c = value.getClass();
- if (c.isArray()) {
- AnnotationVisitor av = visitArray(name);
- if (value instanceof byte[]) {
- byte[] b = (byte[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, new Byte(b[i]));
-
- } else if (value instanceof char[]) {
- char[] b = (char[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, new Character(b[i]));
-
- } else if (value instanceof boolean[]) {
- boolean[] b = (boolean[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, Boolean.valueOf(b[i]));
-
- } else if (value instanceof int[]) {
- int[] b = (int[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, new Integer(b[i]));
-
- } else if (value instanceof long[]) {
- long[] b = (long[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, new Long(b[i]));
-
- } else if (value instanceof float[]) {
- float[] b = (float[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, new Float(b[i]));
-
- } else if (value instanceof double[]) {
- double[] b = (double[]) value;
- for (int i = 0; i < b.length; i++)
- av.visit(null, new Double(b[i]));
-
- }
- av.visitEnd();
- } else {
- addValueElement("annotationValue",
- name,
- Type.getDescriptor(c),
- value.toString());
- }
- }
-
- public void visitEnum(String name, String desc, String value) {
- addValueElement("annotationValueEnum", name, desc, value);
- }
-
- public AnnotationVisitor visitAnnotation(String name, String desc) {
- return new SAXAnnotationAdapter(getContentHandler(),
- "annotationValueAnnotation",
- 0,
- name,
- desc);
- }
-
- public AnnotationVisitor visitArray(String name) {
- return new SAXAnnotationAdapter(getContentHandler(),
- "annotationValueArray",
- 0,
- name,
- null);
- }
-
- public void visitEnd() {
- addEnd(elementName);
- }
-
- private void addValueElement(
- String element,
- String name,
- String desc,
- String value)
- {
- AttributesImpl att = new AttributesImpl();
- if (name != null)
- att.addAttribute("", "name", "name", "", name);
- if (desc != null)
- att.addAttribute("", "desc", "desc", "", desc);
- if (value != null)
- att.addAttribute("",
- "value",
- "value",
- "",
- SAXClassAdapter.encode(value));
-
- addElement(element, att);
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXClassAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXClassAdapter.java
deleted file mode 100644
index 55b9eff..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXClassAdapter.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.FieldVisitor;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * A {@link org.objectweb.asm.ClassVisitor ClassVisitor} that generates SAX 2.0
- * events from the visited class. It can feed any kind of
- * {@link org.xml.sax.ContentHandler ContentHandler}, e.g. XML serializer, XSLT
- * or XQuery engines.
- *
- * @see org.objectweb.asm.xml.Processor
- * @see org.objectweb.asm.xml.ASMContentHandler
- *
- * @author Eugene Kuleshov
- */
-public final class SAXClassAdapter extends SAXAdapter implements ClassVisitor {
- private boolean singleDocument;
-
- /**
- * Constructs a new {@link SAXClassAdapter SAXClassAdapter} object.
- *
- * @param h content handler that will be used to send SAX 2.0 events.
- * @param singleDocument if <tt>true</tt> adapter will not produce
- * {@link ContentHandler#startDocument() startDocument()} and
- * {@link ContentHandler#endDocument() endDocument()} events.
- */
- public SAXClassAdapter(ContentHandler h, boolean singleDocument) {
- super(h);
- this.singleDocument = singleDocument;
- if (!singleDocument) {
- addDocumentStart();
- }
- }
-
- public void visitSource(String source, String debug) {
- if (source == null && debug == null) {
- return;
- }
-
- AttributesImpl att = new AttributesImpl();
- if (source != null)
- att.addAttribute("", "file", "file", "", encode(source));
- if (debug != null)
- att.addAttribute("", "debug", "debug", "", encode(debug));
-
- addElement("source", att);
- }
-
- public void visitOuterClass(String owner, String name, String desc) {
- AttributesImpl att = new AttributesImpl();
- att.addAttribute("", "owner", "owner", "", owner);
- if (name != null)
- att.addAttribute("", "name", "name", "", name);
- if (desc != null)
- att.addAttribute("", "desc", "desc", "", desc);
-
- addElement("outerclass", att);
- }
-
- public final void visitAttribute(Attribute attr) {
- // TODO Auto-generated SAXClassAdapter.visitAttribute
- }
-
- public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- return new SAXAnnotationAdapter(getContentHandler(),
- "annotation",
- visible ? 1 : -1,
- null,
- desc);
- }
-
- public void visit(
- int version,
- int access,
- String name,
- String signature,
- String superName,
- String[] interfaces)
- {
- StringBuffer sb = new StringBuffer();
- if ((access & Opcodes.ACC_PUBLIC) != 0)
- sb.append("public ");
- if ((access & Opcodes.ACC_PRIVATE) != 0)
- sb.append("private ");
- if ((access & Opcodes.ACC_PROTECTED) != 0)
- sb.append("protected ");
- if ((access & Opcodes.ACC_FINAL) != 0)
- sb.append("final ");
- if ((access & Opcodes.ACC_SUPER) != 0)
- sb.append("super ");
- if ((access & Opcodes.ACC_INTERFACE) != 0)
- sb.append("interface ");
- if ((access & Opcodes.ACC_ABSTRACT) != 0)
- sb.append("abstract ");
- if ((access & Opcodes.ACC_SYNTHETIC) != 0)
- sb.append("synthetic ");
- if ((access & Opcodes.ACC_ANNOTATION) != 0)
- sb.append("annotation ");
- if ((access & Opcodes.ACC_ENUM) != 0)
- sb.append("enum ");
- if ((access & Opcodes.ACC_DEPRECATED) != 0)
- sb.append("deprecated ");
-
- AttributesImpl att = new AttributesImpl();
- att.addAttribute("", "access", "access", "", sb.toString());
- if (name != null)
- att.addAttribute("", "name", "name", "", name);
- if (signature != null)
- att.addAttribute("",
- "signature",
- "signature",
- "",
- encode(signature));
- if (superName != null)
- att.addAttribute("", "parent", "parent", "", superName);
- att.addAttribute("",
- "major",
- "major",
- "",
- Integer.toString(version & 0xFFFF));
- att.addAttribute("",
- "minor",
- "minor",
- "",
- Integer.toString(version >>> 16));
- addStart("class", att);
-
- addStart("interfaces", new AttributesImpl());
- if (interfaces != null && interfaces.length > 0) {
- for (int i = 0; i < interfaces.length; i++) {
- AttributesImpl att2 = new AttributesImpl();
- att2.addAttribute("", "name", "name", "", interfaces[i]);
- addElement("interface", att2);
- }
- }
- addEnd("interfaces");
- }
-
- public FieldVisitor visitField(
- int access,
- String name,
- String desc,
- String signature,
- Object value)
- {
- StringBuffer sb = new StringBuffer();
- if ((access & Opcodes.ACC_PUBLIC) != 0)
- sb.append("public ");
- if ((access & Opcodes.ACC_PRIVATE) != 0)
- sb.append("private ");
- if ((access & Opcodes.ACC_PROTECTED) != 0)
- sb.append("protected ");
- if ((access & Opcodes.ACC_STATIC) != 0)
- sb.append("static ");
- if ((access & Opcodes.ACC_FINAL) != 0)
- sb.append("final ");
- if ((access & Opcodes.ACC_VOLATILE) != 0)
- sb.append("volatile ");
- if ((access & Opcodes.ACC_TRANSIENT) != 0)
- sb.append("transient ");
- if ((access & Opcodes.ACC_SYNTHETIC) != 0)
- sb.append("synthetic ");
- if ((access & Opcodes.ACC_ENUM) != 0)
- sb.append("enum ");
- if ((access & Opcodes.ACC_DEPRECATED) != 0)
- sb.append("deprecated ");
-
- AttributesImpl att = new AttributesImpl();
- att.addAttribute("", "access", "access", "", sb.toString());
- att.addAttribute("", "name", "name", "", name);
- att.addAttribute("", "desc", "desc", "", desc);
- if (signature != null)
- att.addAttribute("",
- "signature",
- "signature",
- "",
- encode(signature));
- if (value != null) {
- att.addAttribute("", "value", "value", "", encode(value.toString()));
- }
-
- return new SAXFieldAdapter(getContentHandler(), att);
- }
-
- public MethodVisitor visitMethod(
- int access,
- String name,
- String desc,
- String signature,
- String[] exceptions)
- {
- StringBuffer sb = new StringBuffer();
- if ((access & Opcodes.ACC_PUBLIC) != 0)
- sb.append("public ");
- if ((access & Opcodes.ACC_PRIVATE) != 0)
- sb.append("private ");
- if ((access & Opcodes.ACC_PROTECTED) != 0)
- sb.append("protected ");
- if ((access & Opcodes.ACC_STATIC) != 0)
- sb.append("static ");
- if ((access & Opcodes.ACC_FINAL) != 0)
- sb.append("final ");
- if ((access & Opcodes.ACC_SYNCHRONIZED) != 0)
- sb.append("synchronized ");
- if ((access & Opcodes.ACC_BRIDGE) != 0)
- sb.append("bridge ");
- if ((access & Opcodes.ACC_VARARGS) != 0)
- sb.append("varargs ");
- if ((access & Opcodes.ACC_NATIVE) != 0)
- sb.append("native ");
- if ((access & Opcodes.ACC_ABSTRACT) != 0)
- sb.append("abstract ");
- if ((access & Opcodes.ACC_STRICT) != 0)
- sb.append("strict ");
- if ((access & Opcodes.ACC_SYNTHETIC) != 0)
- sb.append("synthetic ");
- if ((access & Opcodes.ACC_DEPRECATED) != 0)
- sb.append("deprecated ");
-
- AttributesImpl att = new AttributesImpl();
- att.addAttribute("", "access", "access", "", sb.toString());
- att.addAttribute("", "name", "name", "", name);
- att.addAttribute("", "desc", "desc", "", desc);
- if (signature != null) {
- att.addAttribute("", "signature", "signature", "", signature);
- }
- addStart("method", att);
-
- addStart("exceptions", new AttributesImpl());
- if (exceptions != null && exceptions.length > 0) {
- for (int i = 0; i < exceptions.length; i++) {
- AttributesImpl att2 = new AttributesImpl();
- att2.addAttribute("", "name", "name", "", exceptions[i]);
- addElement("exception", att2);
- }
- }
- addEnd("exceptions");
-
- return new SAXCodeAdapter(getContentHandler(), access);
- }
-
- public final void visitInnerClass(
- String name,
- String outerName,
- String innerName,
- int access)
- {
- StringBuffer sb = new StringBuffer();
- if ((access & Opcodes.ACC_PUBLIC) != 0)
- sb.append("public ");
- if ((access & Opcodes.ACC_PRIVATE) != 0)
- sb.append("private ");
- if ((access & Opcodes.ACC_PROTECTED) != 0)
- sb.append("protected ");
- if ((access & Opcodes.ACC_STATIC) != 0)
- sb.append("static ");
- if ((access & Opcodes.ACC_FINAL) != 0)
- sb.append("final ");
- if ((access & Opcodes.ACC_SUPER) != 0)
- sb.append("super ");
- if ((access & Opcodes.ACC_INTERFACE) != 0)
- sb.append("interface ");
- if ((access & Opcodes.ACC_ABSTRACT) != 0)
- sb.append("abstract ");
- if ((access & Opcodes.ACC_SYNTHETIC) != 0)
- sb.append("synthetic ");
- if ((access & Opcodes.ACC_ANNOTATION) != 0)
- sb.append("annotation ");
- if ((access & Opcodes.ACC_ENUM) != 0)
- sb.append("enum ");
- if ((access & Opcodes.ACC_DEPRECATED) != 0)
- sb.append("deprecated ");
-
- AttributesImpl att = new AttributesImpl();
- att.addAttribute("", "access", "access", "", sb.toString());
- if (name != null)
- att.addAttribute("", "name", "name", "", name);
- if (outerName != null)
- att.addAttribute("", "outerName", "outerName", "", outerName);
- if (innerName != null)
- att.addAttribute("", "innerName", "innerName", "", innerName);
- addElement("innerclass", att);
- }
-
- public final void visitEnd() {
- addEnd("class");
- if (!singleDocument) {
- addDocumentEnd();
- }
- }
-
- static final String encode(String s) {
- StringBuffer sb = new StringBuffer();
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- if (c == '\\') {
- sb.append("\\\\");
- } else if (c < 0x20 || c > 0x7f) {
- sb.append("\\u");
- if (c < 0x10) {
- sb.append("000");
- } else if (c < 0x100) {
- sb.append("00");
- } else if (c < 0x1000) {
- sb.append("0");
- }
- sb.append(Integer.toString(c, 16));
- } else {
- sb.append(c);
- }
- }
- return sb.toString();
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXCodeAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXCodeAdapter.java
deleted file mode 100644
index decb492..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXCodeAdapter.java
+++ /dev/null
@@ -1,310 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.MethodVisitor;
-import org.objectweb.asm.Opcodes;
-import org.objectweb.asm.Label;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.util.AbstractVisitor;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * A {@link MethodVisitor} that generates SAX 2.0 events from the visited
- * method.
- *
- * @see org.objectweb.asm.xml.SAXClassAdapter
- * @see org.objectweb.asm.xml.Processor
- *
- * @author Eugene Kuleshov
- */
-public final class SAXCodeAdapter extends SAXAdapter implements MethodVisitor {
- private Map labelNames;
-
- /**
- * Constructs a new {@link SAXCodeAdapter SAXCodeAdapter} object.
- *
- * @param h content handler that will be used to send SAX 2.0 events.
- * @param access
- */
- public SAXCodeAdapter(ContentHandler h, int access) {
- super(h);
- labelNames = new HashMap();
-
- if ((access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_INTERFACE | Opcodes.ACC_NATIVE)) == 0)
- {
- addStart("code", new AttributesImpl());
- }
- }
-
- public final void visitCode() {
- }
-
- public final void visitInsn(int opcode) {
- addElement(AbstractVisitor.OPCODES[opcode], new AttributesImpl());
- }
-
- public final void visitIntInsn(int opcode, int operand) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "value", "value", "", Integer.toString(operand));
- addElement(AbstractVisitor.OPCODES[opcode], attrs);
- }
-
- public final void visitVarInsn(int opcode, int var) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "var", "var", "", Integer.toString(var));
- addElement(AbstractVisitor.OPCODES[opcode], attrs);
- }
-
- public final void visitTypeInsn(int opcode, String desc) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "desc", "desc", "", desc);
- addElement(AbstractVisitor.OPCODES[opcode], attrs);
- }
-
- public final void visitFieldInsn(
- int opcode,
- String owner,
- String name,
- String desc)
- {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "owner", "owner", "", owner);
- attrs.addAttribute("", "name", "name", "", name);
- attrs.addAttribute("", "desc", "desc", "", desc);
- addElement(AbstractVisitor.OPCODES[opcode], attrs);
- }
-
- public final void visitMethodInsn(
- int opcode,
- String owner,
- String name,
- String desc)
- {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "owner", "owner", "", owner);
- attrs.addAttribute("", "name", "name", "", name);
- attrs.addAttribute("", "desc", "desc", "", desc);
- addElement(AbstractVisitor.OPCODES[opcode], attrs);
- }
-
- public final void visitJumpInsn(int opcode, Label label) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "label", "label", "", getLabel(label));
- addElement(AbstractVisitor.OPCODES[opcode], attrs);
- }
-
- public final void visitLabel(Label label) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "name", "name", "", getLabel(label));
- addElement("Label", attrs);
- }
-
- public final void visitLdcInsn(Object cst) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("",
- "cst",
- "cst",
- "",
- SAXClassAdapter.encode(cst.toString()));
- attrs.addAttribute("",
- "desc",
- "desc",
- "",
- Type.getDescriptor(cst.getClass()));
- addElement(AbstractVisitor.OPCODES[Opcodes.LDC], attrs);
- }
-
- public final void visitIincInsn(int var, int increment) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "var", "var", "", Integer.toString(var));
- attrs.addAttribute("", "inc", "inc", "", Integer.toString(increment));
- addElement(AbstractVisitor.OPCODES[Opcodes.IINC], attrs);
- }
-
- public final void visitTableSwitchInsn(
- int min,
- int max,
- Label dflt,
- Label[] labels)
- {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "min", "min", "", Integer.toString(min));
- attrs.addAttribute("", "max", "max", "", Integer.toString(max));
- attrs.addAttribute("", "dflt", "dflt", "", getLabel(dflt));
- String o = AbstractVisitor.OPCODES[Opcodes.TABLESWITCH];
- addStart(o, attrs);
- for (int i = 0; i < labels.length; i++) {
- AttributesImpl att2 = new AttributesImpl();
- att2.addAttribute("", "name", "name", "", getLabel(labels[i]));
- addElement("label", att2);
- }
- addEnd(o);
- }
-
- public final void visitLookupSwitchInsn(
- Label dflt,
- int[] keys,
- Label[] labels)
- {
- AttributesImpl att = new AttributesImpl();
- att.addAttribute("", "dflt", "dflt", "", getLabel(dflt));
- String o = AbstractVisitor.OPCODES[Opcodes.LOOKUPSWITCH];
- addStart(o, att);
- for (int i = 0; i < labels.length; i++) {
- AttributesImpl att2 = new AttributesImpl();
- att2.addAttribute("", "name", "name", "", getLabel(labels[i]));
- att2.addAttribute("", "key", "key", "", Integer.toString(keys[i]));
- addElement("label", att2);
- }
- addEnd(o);
- }
-
- public final void visitMultiANewArrayInsn(String desc, int dims) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "desc", "desc", "", desc);
- attrs.addAttribute("", "dims", "dims", "", Integer.toString(dims));
- addElement(AbstractVisitor.OPCODES[Opcodes.MULTIANEWARRAY], attrs);
- }
-
- public final void visitTryCatchBlock(
- Label start,
- Label end,
- Label handler,
- String type)
- {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "start", "start", "", getLabel(start));
- attrs.addAttribute("", "end", "end", "", getLabel(end));
- attrs.addAttribute("", "handler", "handler", "", getLabel(handler));
- if (type != null)
- attrs.addAttribute("", "type", "type", "", type);
- addElement("TryCatch", attrs);
- }
-
- public final void visitMaxs(int maxStack, int maxLocals) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("",
- "maxStack",
- "maxStack",
- "",
- Integer.toString(maxStack));
- attrs.addAttribute("",
- "maxLocals",
- "maxLocals",
- "",
- Integer.toString(maxLocals));
- addElement("Max", attrs);
-
- addEnd("code");
- }
-
- public void visitLocalVariable(
- String name,
- String desc,
- String signature,
- Label start,
- Label end,
- int index)
- {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "name", "name", "", name);
- attrs.addAttribute("", "desc", "desc", "", desc);
- if (signature != null)
- attrs.addAttribute("",
- "signature",
- "signature",
- "",
- SAXClassAdapter.encode(signature));
- attrs.addAttribute("", "start", "start", "", getLabel(start));
- attrs.addAttribute("", "end", "end", "", getLabel(end));
- attrs.addAttribute("", "var", "var", "", Integer.toString(index));
- addElement("LocalVar", attrs);
- }
-
- public final void visitLineNumber(int line, Label start) {
- AttributesImpl attrs = new AttributesImpl();
- attrs.addAttribute("", "line", "line", "", Integer.toString(line));
- attrs.addAttribute("", "start", "start", "", getLabel(start));
- addElement("LineNumber", attrs);
- }
-
- public AnnotationVisitor visitAnnotationDefault() {
- return new SAXAnnotationAdapter(getContentHandler(),
- "annotationDefault",
- 0,
- null,
- null);
- }
-
- public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- return new SAXAnnotationAdapter(getContentHandler(),
- "annotation",
- visible ? 1 : -1,
- null,
- desc);
- }
-
- public AnnotationVisitor visitParameterAnnotation(
- int parameter,
- String desc,
- boolean visible)
- {
- return new SAXAnnotationAdapter(getContentHandler(),
- "parameterAnnotation",
- visible ? 1 : -1,
- parameter,
- desc);
- }
-
- public void visitEnd() {
- addEnd("method");
- }
-
- public final void visitAttribute(Attribute attr) {
- // TODO Auto-generated SAXCodeAdapter.visitAttribute
- }
-
- private final String getLabel(Label label) {
- String name = (String) labelNames.get(label);
- if (name == null) {
- name = Integer.toString(labelNames.size());
- labelNames.put(label, name);
- }
- return name;
- }
-
-}
diff --git a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXFieldAdapter.java b/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXFieldAdapter.java
deleted file mode 100644
index edfba04..0000000
--- a/libjava/classpath/tools/external/asm/org/objectweb/asm/xml/SAXFieldAdapter.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/***
- * ASM XML Adapter
- * Copyright (c) 2004, Eugene Kuleshov
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the copyright holders nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-package org.objectweb.asm.xml;
-
-import org.objectweb.asm.AnnotationVisitor;
-import org.objectweb.asm.Attribute;
-import org.objectweb.asm.FieldVisitor;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.AttributesImpl;
-
-/**
- * SAXFieldAdapter
- *
- * @author Eugene Kuleshov
- */
-public class SAXFieldAdapter implements FieldVisitor {
- private final ContentHandler h;
-
- public SAXFieldAdapter(ContentHandler h, AttributesImpl att) {
- this.h = h;
-
- try {
- h.startElement("", "field", "field", att);
- } catch (SAXException ex) {
- throw new RuntimeException(ex.toString());
- }
- }
-
- public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
- return new SAXAnnotationAdapter(h,
- "annotation",
- visible ? 1 : -1,
- null,
- desc);
- }
-
- public void visitAttribute(Attribute attr) {
- // TODO Auto-generated method stub
- }
-
- public void visitEnd() {
- try {
- h.endElement("", "field", "field");
- } catch (SAXException ex) {
- throw new RuntimeException(ex.toString());
- }
- }
-
-}