1 /* |
1 /* |
2 * reserved comment block |
2 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT REMOVE OR ALTER! |
3 * @LastModified: Oct 2017 |
4 */ |
4 */ |
5 /* |
5 /* |
6 * Licensed to the Apache Software Foundation (ASF) under one or more |
6 * Licensed to the Apache Software Foundation (ASF) under one or more |
7 * contributor license agreements. See the NOTICE file distributed with |
7 * contributor license agreements. See the NOTICE file distributed with |
8 * this work for additional information regarding copyright ownership. |
8 * this work for additional information regarding copyright ownership. |
19 * limitations under the License. |
19 * limitations under the License. |
20 */ |
20 */ |
21 |
21 |
22 package com.sun.org.apache.xalan.internal.xsltc.compiler; |
22 package com.sun.org.apache.xalan.internal.xsltc.compiler; |
23 |
23 |
24 import java.util.Iterator; |
|
25 import java.util.Vector; |
|
26 |
|
27 import com.sun.org.apache.bcel.internal.generic.BranchHandle; |
24 import com.sun.org.apache.bcel.internal.generic.BranchHandle; |
28 import com.sun.org.apache.bcel.internal.generic.InstructionHandle; |
25 import com.sun.org.apache.bcel.internal.generic.InstructionHandle; |
29 import com.sun.org.apache.bcel.internal.generic.InstructionList; |
26 import com.sun.org.apache.bcel.internal.generic.InstructionList; |
|
27 import java.util.ArrayList; |
|
28 import java.util.Iterator; |
|
29 import java.util.List; |
30 |
30 |
31 /** |
31 /** |
32 * @author Jacek Ambroziak |
32 * @author Jacek Ambroziak |
33 * @author Santiago Pericas-Geertsen |
33 * @author Santiago Pericas-Geertsen |
34 */ |
34 */ |
35 public final class FlowList { |
35 public final class FlowList { |
36 private Vector _elements; |
36 private List<InstructionHandle> _elements; |
37 |
37 |
38 public FlowList() { |
38 public FlowList() { |
39 _elements = null; |
39 _elements = null; |
40 } |
40 } |
41 |
41 |
42 public FlowList(InstructionHandle bh) { |
42 public FlowList(InstructionHandle bh) { |
43 _elements = new Vector(); |
43 _elements = new ArrayList<>(); |
44 _elements.addElement(bh); |
44 _elements.add(bh); |
45 } |
45 } |
46 |
46 |
47 public FlowList(FlowList list) { |
47 public FlowList(FlowList list) { |
48 _elements = list._elements; |
48 _elements = list._elements; |
49 } |
49 } |
50 |
50 |
51 public FlowList add(InstructionHandle bh) { |
51 public FlowList add(InstructionHandle bh) { |
52 if (_elements == null) { |
52 if (_elements == null) { |
53 _elements = new Vector(); |
53 _elements = new ArrayList<>(); |
54 } |
54 } |
55 _elements.addElement(bh); |
55 _elements.add(bh); |
56 return this; |
56 return this; |
57 } |
57 } |
58 |
58 |
59 public FlowList append(FlowList right) { |
59 public FlowList append(FlowList right) { |
60 if (_elements == null) { |
60 if (_elements == null) { |
61 _elements = right._elements; |
61 _elements = right._elements; |
62 } |
62 } |
63 else { |
63 else { |
64 final Vector temp = right._elements; |
64 final List<InstructionHandle> temp = right._elements; |
65 if (temp != null) { |
65 if (temp != null) { |
66 final int n = temp.size(); |
66 final int n = temp.size(); |
67 for (int i = 0; i < n; i++) { |
67 for (int i = 0; i < n; i++) { |
68 _elements.addElement(temp.elementAt(i)); |
68 _elements.add(temp.get(i)); |
69 } |
69 } |
70 } |
70 } |
71 } |
71 } |
72 return this; |
72 return this; |
73 } |
73 } |
77 */ |
77 */ |
78 public void backPatch(InstructionHandle target) { |
78 public void backPatch(InstructionHandle target) { |
79 if (_elements != null) { |
79 if (_elements != null) { |
80 final int n = _elements.size(); |
80 final int n = _elements.size(); |
81 for (int i = 0; i < n; i++) { |
81 for (int i = 0; i < n; i++) { |
82 BranchHandle bh = (BranchHandle)_elements.elementAt(i); |
82 BranchHandle bh = (BranchHandle)_elements.get(i); |
83 bh.setTarget(target); |
83 bh.setTarget(target); |
84 } |
84 } |
85 _elements.clear(); // avoid backpatching more than once |
85 _elements.clear(); // avoid backpatching more than once |
86 } |
86 } |
87 } |
87 } |
97 if (_elements == null) { |
97 if (_elements == null) { |
98 return result; |
98 return result; |
99 } |
99 } |
100 |
100 |
101 final int n = _elements.size(); |
101 final int n = _elements.size(); |
102 final Iterator oldIter = oldList.iterator(); |
102 final Iterator<InstructionHandle> oldIter = oldList.iterator(); |
103 final Iterator newIter = newList.iterator(); |
103 final Iterator<InstructionHandle> newIter = newList.iterator(); |
104 |
104 |
105 while (oldIter.hasNext()) { |
105 while (oldIter.hasNext()) { |
106 final InstructionHandle oldIh = (InstructionHandle) oldIter.next(); |
106 final InstructionHandle oldIh = oldIter.next(); |
107 final InstructionHandle newIh = (InstructionHandle) newIter.next(); |
107 final InstructionHandle newIh = newIter.next(); |
108 |
108 |
109 for (int i = 0; i < n; i++) { |
109 for (int i = 0; i < n; i++) { |
110 if (_elements.elementAt(i) == oldIh) { |
110 if (_elements.get(i) == oldIh) { |
111 result.add(newIh); |
111 result.add(newIh); |
112 } |
112 } |
113 } |
113 } |
114 } |
114 } |
115 return result; |
115 return result; |