mirror of
https://github.com/Eaglercraft-TeaVM-Fork/eagler-teavm.git
synced 2025-01-09 00:14:10 -08:00
Speed-up generation of debug information
This commit is contained in:
parent
852589a4dd
commit
8d2e012f79
|
@ -386,7 +386,7 @@ public class DebugInformation {
|
||||||
}
|
}
|
||||||
|
|
||||||
private int indexByKey(RecordArray mapping, GeneratedLocation location) {
|
private int indexByKey(RecordArray mapping, GeneratedLocation location) {
|
||||||
int index = Collections.binarySearch(new LocationList(mapping), location);
|
int index = binarySearchLocation(mapping, location.getLine(), location.getColumn());
|
||||||
return index >= 0 ? index : -index - 2;
|
return index >= 0 ? index : -index - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -598,7 +598,33 @@ public class DebugInformation {
|
||||||
return new GeneratedLocation(record.get(0), record.get(1));
|
return new GeneratedLocation(record.get(0), record.get(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static class LocationList extends AbstractList<GeneratedLocation> {
|
private int binarySearchLocation(RecordArray array, int row, int column) {
|
||||||
|
int l = 0;
|
||||||
|
int u = array.size() - 1;
|
||||||
|
while (true) {
|
||||||
|
int i = (l + u) / 2;
|
||||||
|
RecordArray.Record e = array.get(i);
|
||||||
|
int cmp = Integer.compare(row, e.get(0));
|
||||||
|
if (cmp == 0) {
|
||||||
|
cmp = Integer.compare(column, e.get(1));
|
||||||
|
}
|
||||||
|
if (cmp == 0) {
|
||||||
|
return i;
|
||||||
|
} else if (cmp < 0) {
|
||||||
|
u = i - 1;
|
||||||
|
if (u < l) {
|
||||||
|
return -i - 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
l = i + 1;
|
||||||
|
if (l > u) {
|
||||||
|
return -i - 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class LocationList extends AbstractList<GeneratedLocation> implements RandomAccess {
|
||||||
private RecordArray recordArray;
|
private RecordArray recordArray;
|
||||||
|
|
||||||
public LocationList(RecordArray recordArray) {
|
public LocationList(RecordArray recordArray) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user