From d82e8921a6ce5782caddf4b726f02bc4dd382c33 Mon Sep 17 00:00:00 2001 From: Eric Vergnaud Date: Fri, 19 Mar 2021 00:11:03 +0800 Subject: [PATCH] Fix issue where original ATN would be damaged by IntervalSet operations. Foxes #3216 --- runtime/JavaScript/src/antlr4/IntervalSet.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/runtime/JavaScript/src/antlr4/IntervalSet.js b/runtime/JavaScript/src/antlr4/IntervalSet.js index be7c8b3b8..8a711e301 100644 --- a/runtime/JavaScript/src/antlr4/IntervalSet.js +++ b/runtime/JavaScript/src/antlr4/IntervalSet.js @@ -7,11 +7,16 @@ const {Token} = require('./Token'); /* stop is not included! */ class Interval { + constructor(start, stop) { this.start = start; this.stop = stop; } + clone() { + return new Interval(this.start, this.stop); + } + contains(item) { return item >= this.start && item < this.stop; } @@ -55,7 +60,7 @@ class IntervalSet { addInterval(toAdd) { if (this.intervals === null) { this.intervals = []; - this.intervals.push(toAdd); + this.intervals.push(toAdd.clone()); } else { // find insert pos for (let pos = 0; pos < this.intervals.length; pos++) { @@ -78,7 +83,7 @@ class IntervalSet { } } // greater than any existing - this.intervals.push(toAdd); + this.intervals.push(toAdd.clone()); } }