mirror of
https://github.com/nodejs/node.git
synced 2025-05-15 00:52:29 +00:00

Pick up latest commit from the 5.4-lkgr branch. deps: edit V8 gitignore to allow trace event copy deps: update V8 trace event to 315bf1e2d45be7d53346c31cfcc37424a32c30c8 deps: edit V8 gitignore to allow gtest_prod.h copy deps: update V8 gtest to 6f8a66431cb592dad629028a50b3dd418a408c87 PR-URL: https://github.com/nodejs/node/pull/8317 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
100 lines
3.0 KiB
JavaScript
100 lines
3.0 KiB
JavaScript
// Copyright 2015 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
var SelectionBroker = function() {
|
|
this.brokers = [];
|
|
this.dispatching = false;
|
|
this.lastDispatchingHandler = null;
|
|
this.nodePositionMap = [];
|
|
this.sortedPositionList = [];
|
|
this.positionNodeMap = [];
|
|
};
|
|
|
|
SelectionBroker.prototype.addSelectionHandler = function(handler) {
|
|
this.brokers.push(handler);
|
|
}
|
|
|
|
SelectionBroker.prototype.setNodePositionMap = function(map) {
|
|
let broker = this;
|
|
if (!map) return;
|
|
broker.nodePositionMap = map;
|
|
broker.positionNodeMap = [];
|
|
broker.sortedPositionList = [];
|
|
let next = 0;
|
|
for (let i in broker.nodePositionMap) {
|
|
broker.sortedPositionList[next] = Number(broker.nodePositionMap[i]);
|
|
broker.positionNodeMap[next++] = i;
|
|
}
|
|
broker.sortedPositionList = sortUnique(broker.sortedPositionList,
|
|
function(a,b) { return a - b; });
|
|
this.positionNodeMap.sort(function(a,b) {
|
|
let result = broker.nodePositionMap[a] - broker.nodePositionMap[b];
|
|
if (result != 0) return result;
|
|
return a - b;
|
|
});
|
|
}
|
|
|
|
SelectionBroker.prototype.select = function(from, locations, selected) {
|
|
let broker = this;
|
|
if (!broker.dispatching) {
|
|
broker.lastDispatchingHandler = from;
|
|
try {
|
|
broker.dispatching = true;
|
|
let enrichLocations = function(locations) {
|
|
result = [];
|
|
for (let location of locations) {
|
|
let newLocation = {};
|
|
if (location.pos_start != undefined) {
|
|
newLocation.pos_start = location.pos_start;
|
|
}
|
|
if (location.pos_end != undefined) {
|
|
newLocation.pos_end = location.pos_end;
|
|
}
|
|
if (location.node_id != undefined) {
|
|
newLocation.node_id = location.node_id;
|
|
}
|
|
if (location.block_id != undefined) {
|
|
newLocation.block_id = location.block_id;
|
|
}
|
|
if (newLocation.pos_start == undefined &&
|
|
newLocation.pos_end == undefined &&
|
|
newLocation.node_id != undefined) {
|
|
if (broker.nodePositionMap && broker.nodePositionMap[location.node_id]) {
|
|
newLocation.pos_start = broker.nodePositionMap[location.node_id];
|
|
newLocation.pos_end = location.pos_start + 1;
|
|
}
|
|
}
|
|
result.push(newLocation);
|
|
}
|
|
return result;
|
|
}
|
|
locations = enrichLocations(locations);
|
|
for (var b of this.brokers) {
|
|
if (b != from) {
|
|
b.brokeredSelect(locations, selected);
|
|
}
|
|
}
|
|
}
|
|
finally {
|
|
broker.dispatching = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
SelectionBroker.prototype.clear = function(from) {
|
|
this.lastDispatchingHandler = null;
|
|
if (!this.dispatching) {
|
|
try {
|
|
this.dispatching = true;
|
|
this.brokers.forEach(function(b) {
|
|
if (b != from) {
|
|
b.brokeredClear();
|
|
}
|
|
});
|
|
} finally {
|
|
this.dispatching = false;
|
|
}
|
|
}
|
|
}
|