Skip to content

Commit ab5643f

Browse files
committed
Build with changelog
1 parent 208bbdb commit ab5643f

File tree

3 files changed

+61
-48
lines changed

3 files changed

+61
-48
lines changed

build/jsroot.js

Lines changed: 59 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const version_id = '7.8.x',
1212

1313
/** @summary version date
1414
* @desc Release date in format day/month/year like '14/04/2022' */
15-
version_date = '10/03/2025',
15+
version_date = '12/03/2025',
1616

1717
/** @summary version id and date
1818
* @desc Produced by concatenation of {@link version_id} and {@link version_date}
@@ -10324,7 +10324,8 @@ function parseLatex(node, arg, label, curr) {
1032410324
}
1032510325

1032610326
if (pos_up) {
10327-
if (!pos_low) yup = Math.min(yup, curr.rect.last_y1);
10327+
if (!pos_low && curr.rect)
10328+
yup = Math.min(yup, curr.rect.last_y1);
1032810329
positionGNode(pos_up, x+dx, yup - pos_up.rect.y1 - curr.fsize*0.1);
1032910330
w1 = pos_up.rect.width;
1033010331
}
@@ -98255,6 +98256,35 @@ function getTypeId(typname, norecursion) {
9825598256
return -1;
9825698257
}
9825798258

98259+
/** @summary Create streamer info for pair object
98260+
* @private */
98261+
function createPairStreamer(typename, file) {
98262+
let si = file.findStreamerInfo(typename);
98263+
if (si)
98264+
return si;
98265+
let p1 = typename.indexOf('<');
98266+
const p2 = typename.lastIndexOf('>');
98267+
function getNextName() {
98268+
let res = '', p = p1 + 1, cnt = 0;
98269+
while ((p < p2) && (cnt >= 0)) {
98270+
switch (typename[p]) {
98271+
case '<': cnt++; break;
98272+
case ',': if (cnt === 0) cnt--; break;
98273+
case '>': cnt--; break;
98274+
}
98275+
if (cnt >= 0) res += typename[p];
98276+
p++;
98277+
}
98278+
p1 = p - 1;
98279+
return res.trim();
98280+
}
98281+
si = { _typename: 'TStreamerInfo', fClassVersion: 0, fName: typename, fElements: create$1(clTList) };
98282+
si.fElements.Add(createStreamerElement('first', getNextName(), file));
98283+
si.fElements.Add(createStreamerElement('second', getNextName(), file));
98284+
file.fStreamerInfos.arr.push(si);
98285+
return si;
98286+
}
98287+
9825898288
/** @summary create element of the streamer
9825998289
* @private */
9826098290
function createStreamerElement(name, typename, file) {
@@ -98273,7 +98303,8 @@ function createStreamerElement(name, typename, file) {
9827398303
typename = elem.fTypeName = BasicTypeNames[elem.fType] || 'int';
9827498304
}
9827598305

98276-
if (elem.fType > 0) return elem; // basic type
98306+
if (elem.fType > 0)
98307+
return elem; // basic type
9827798308

9827898309
// check if there are STL containers
9827998310
const pos = typename.indexOf('<');
@@ -98294,6 +98325,9 @@ function createStreamerElement(name, typename, file) {
9829498325
return elem;
9829598326
}
9829698327

98328+
if ((pos > 0) && (typename.slice(0, pos) === 'pair') && file)
98329+
createPairStreamer(typename, file);
98330+
9829798331
const isptr = (typename.lastIndexOf('*') === typename.length - 1);
9829898332

9829998333
if (isptr)
@@ -98313,33 +98347,8 @@ function createStreamerElement(name, typename, file) {
9831398347
/** @summary Function creates streamer for std::pair object
9831498348
* @private */
9831598349
function getPairStreamer(si, typname, file) {
98316-
if (!si) {
98317-
if (typname.indexOf('pair') !== 0) return null;
98318-
98319-
si = file.findStreamerInfo(typname);
98320-
98321-
if (!si) {
98322-
let p1 = typname.indexOf('<');
98323-
const p2 = typname.lastIndexOf('>');
98324-
function GetNextName() {
98325-
let res = '', p = p1 + 1, cnt = 0;
98326-
while ((p < p2) && (cnt >= 0)) {
98327-
switch (typname[p]) {
98328-
case '<': cnt++; break;
98329-
case ',': if (cnt === 0) cnt--; break;
98330-
case '>': cnt--; break;
98331-
}
98332-
if (cnt >= 0) res += typname[p];
98333-
p++;
98334-
}
98335-
p1 = p - 1;
98336-
return res.trim();
98337-
}
98338-
si = { _typename: 'TStreamerInfo', fVersion: 1, fName: typname, fElements: create$1(clTList) };
98339-
si.fElements.Add(createStreamerElement('first', GetNextName(), file));
98340-
si.fElements.Add(createStreamerElement('second', GetNextName(), file));
98341-
}
98342-
}
98350+
if (!si)
98351+
si = createPairStreamer(typname, file);
9834398352

9834498353
const streamer = file.getStreamer(typname, null, si);
9834598354
if (!streamer) return null;
@@ -98743,7 +98752,7 @@ function createMemberStreamer(element, file) {
9874398752
member.readelem = readVectorElement;
9874498753

9874598754
if (!member.isptr && (member.arrkind < 0)) {
98746-
const subelem = createStreamerElement('temp', member.conttype);
98755+
const subelem = createStreamerElement('temp', member.conttype, file);
9874798756
if (subelem.fType === kStreamer) {
9874898757
subelem.$fictional = true;
9874998758
member.submember = createMemberStreamer(subelem, file);
@@ -100895,28 +100904,34 @@ class TFile {
100895100904
* @param {number} [checksum] - streamer info checksum, have to match when specified
100896100905
* @private */
100897100906
findStreamerInfo(clname, clversion, checksum) {
100898-
if (!this.fStreamerInfos) return null;
100907+
if (!this.fStreamerInfos)
100908+
return null;
100899100909

100900100910
const arr = this.fStreamerInfos.arr, len = arr.length;
100901100911

100902100912
if (checksum !== undefined) {
100903100913
let cache = this.fStreamerInfos.cache;
100904100914
if (!cache) cache = this.fStreamerInfos.cache = {};
100905100915
let si = cache[checksum];
100906-
if (si !== undefined) return si;
100916+
if (si && (!clname || (si.fName === clname)))
100917+
return si;
100907100918

100908100919
for (let i = 0; i < len; ++i) {
100909100920
si = arr[i];
100910100921
if (si.fCheckSum === checksum) {
100911100922
cache[checksum] = si;
100912-
return si;
100923+
if (!clname || (si.fName === clname))
100924+
return si;
100913100925
}
100914100926
}
100915100927
cache[checksum] = null; // checksum did not found, do not try again
100916-
} else {
100928+
}
100929+
100930+
if (clname) {
100917100931
for (let i = 0; i < len; ++i) {
100918100932
const si = arr[i];
100919-
if ((si.fName === clname) && ((si.fClassVersion === clversion) || (clversion === undefined))) return si;
100933+
if ((si.fName === clname) && ((si.fClassVersion === clversion) || (clversion === undefined)))
100934+
return si;
100920100935
}
100921100936
}
100922100937

@@ -100958,7 +100973,8 @@ class TFile {
100958100973
}
100959100974

100960100975
// check element in streamer infos, one can have special cases
100961-
if (!s_i) s_i = this.findStreamerInfo(clname, ver.val, ver.checksum);
100976+
if (!s_i)
100977+
s_i = this.findStreamerInfo(clname, ver.val, ver.checksum);
100962100978

100963100979
if (!s_i) {
100964100980
delete this.fStreamers[fullname];
@@ -101112,17 +101128,13 @@ function readMapElement(buf) {
101112101128

101113101129
if (this.member_wise) {
101114101130
// when member-wise streaming is used, version is written
101115-
const ver = this.stl_version;
101131+
const si = buf.fFile.findStreamerInfo(this.pairtype, this.stl_version.val /* , this.stl_version.checksum */);
101116101132

101117-
if (this.si) {
101118-
const si = buf.fFile.findStreamerInfo(this.pairtype, ver.val, ver.checksum);
101119-
101120-
if (this.si !== si) {
101121-
streamer = getPairStreamer(si, this.pairtype, buf.fFile);
101122-
if (!streamer || streamer.length !== 2) {
101123-
console.log(`Fail to produce streamer for ${this.pairtype}`);
101124-
return null;
101125-
}
101133+
if (si && (this.si !== si)) {
101134+
streamer = getPairStreamer(si, this.pairtype, buf.fFile);
101135+
if (streamer?.length !== 2) {
101136+
console.log(`Fail to produce streamer for ${this.pairtype}`);
101137+
return null;
101126101138
}
101127101139
}
101128101140
}

changes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## Changes in 7.8.x
44
1. Fix - hidden canvas in Jupyter Lab, https://root-forum.cern.ch/t/63097/
55
2. Fix - latex super-script without leading symbol, https://root-forum.cern.ch/t/63114/
6+
3. Fix - correctly read `std::pair<>` without dictionary, https://root-forum.cern.ch/t/63114/
67

78

89
## Changes in 7.8.1

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jsroot",
3-
"version": "7.8.1",
3+
"version": "7.8.2",
44
"engines": {
55
"node": ">= 0.18.0"
66
},

0 commit comments

Comments
 (0)