MCPcopy Index your code
hub / github.com/clojure/clojure / removeRange

Method removeRange

src/jvm/clojure/asm/Handler.java:119–150  ·  view source on GitHub ↗

Removes the range between start and end from the Handler list that begins with the given element. @param firstHandler the beginning of a Handler list. May be null . @param start the start of the range to be removed. @param end the end of the range to be removed. Maybe null . @return

(final Handler firstHandler, final Label start, final Label end)

Source from the content-addressed store, hash-verified

117 * @return the exception handler list with the start-end range removed.
118 */
119 static Handler removeRange(final Handler firstHandler, final Label start, final Label end) {
120 if (firstHandler == null) {
121 return null;
122 } else {
123 firstHandler.nextHandler = removeRange(firstHandler.nextHandler, start, end);
124 }
125 int handlerStart = firstHandler.startPc.bytecodeOffset;
126 int handlerEnd = firstHandler.endPc.bytecodeOffset;
127 int rangeStart = start.bytecodeOffset;
128 int rangeEnd = end == null ? Integer.MAX_VALUE : end.bytecodeOffset;
129 // Return early if [handlerStart,handlerEnd[ and [rangeStart,rangeEnd[ don't intersect.
130 if (rangeStart >= handlerEnd || rangeEnd <= handlerStart) {
131 return firstHandler;
132 }
133 if (rangeStart <= handlerStart) {
134 if (rangeEnd >= handlerEnd) {
135 // If [handlerStart,handlerEnd[ is included in [rangeStart,rangeEnd[, remove firstHandler.
136 return firstHandler.nextHandler;
137 } else {
138 // [handlerStart,handlerEnd[ - [rangeStart,rangeEnd[ = [rangeEnd,handlerEnd[
139 return new Handler(firstHandler, end, firstHandler.endPc);
140 }
141 } else if (rangeEnd >= handlerEnd) {
142 // [handlerStart,handlerEnd[ - [rangeStart,rangeEnd[ = [handlerStart,rangeStart[
143 return new Handler(firstHandler, firstHandler.startPc, start);
144 } else {
145 // [handlerStart,handlerEnd[ - [rangeStart,rangeEnd[ =
146 // [handlerStart,rangeStart[ + [rangeEnd,handerEnd[
147 firstHandler.nextHandler = new Handler(firstHandler, end, firstHandler.endPc);
148 return new Handler(firstHandler, firstHandler.startPc, start);
149 }
150 }
151
152 /**
153 * Returns the number of elements of the Handler list that begins with the given element.

Callers 1

computeAllFramesMethod · 0.95

Calls

no outgoing calls

Tested by

no test coverage detected