mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 03:39:33 +02:00
pas2js: arraySetLength: faster resize
git-svn-id: trunk@45297 -
This commit is contained in:
parent
728a60c155
commit
14ccc191eb
32
utils/pas2js/dist/rtl.js
vendored
32
utils/pas2js/dist/rtl.js
vendored
@ -838,17 +838,23 @@ var rtl = {
|
|||||||
var item = null;
|
var item = null;
|
||||||
var a = null;
|
var a = null;
|
||||||
var src = arr;
|
var src = arr;
|
||||||
var oldlen = 0;
|
var srclen = 0, oldlen = 0;
|
||||||
do{
|
do{
|
||||||
if (depth>0){
|
if (depth>0){
|
||||||
item=stack[depth-1];
|
item=stack[depth-1];
|
||||||
src = (item.src && item.src.length>item.i)?item.src[item.i]:null;
|
src = (item.src && item.src.length>item.i)?item.src[item.i]:null;
|
||||||
}
|
}
|
||||||
if (!src || src.$pas2jsrefcnt>0){
|
if (!src){
|
||||||
a = [];
|
a = [];
|
||||||
oldlen = src?src.length:0;
|
srclen = 0;
|
||||||
|
oldlen = 0;
|
||||||
|
} else if (src.$pas2jsrefcnt>0){
|
||||||
|
a = [];
|
||||||
|
srclen = src.length;
|
||||||
|
oldlen = srclen;
|
||||||
} else {
|
} else {
|
||||||
a = src;
|
a = src;
|
||||||
|
srclen = 0;
|
||||||
oldlen = a.length;
|
oldlen = a.length;
|
||||||
}
|
}
|
||||||
a.length = stack[depth].dim;
|
a.length = stack[depth].dim;
|
||||||
@ -864,18 +870,22 @@ var rtl = {
|
|||||||
depth++;
|
depth++;
|
||||||
} else {
|
} else {
|
||||||
if (rtl.isArray(defaultvalue)){
|
if (rtl.isArray(defaultvalue)){
|
||||||
for (var i=0; i<lastlen; i++) a[i]=(i<oldlen)?src[i]:[]; // array of dyn array
|
// array of dyn array
|
||||||
|
for (var i=0; i<srclen; i++) a[i]=src[i];
|
||||||
|
for (var i=oldlen; i<lastlen; i++) a[i]=[];
|
||||||
} else if (rtl.isObject(defaultvalue)) {
|
} else if (rtl.isObject(defaultvalue)) {
|
||||||
if (rtl.isTRecord(defaultvalue)){
|
if (rtl.isTRecord(defaultvalue)){
|
||||||
for (var i=0; i<lastlen; i++){
|
// array of record
|
||||||
a[i]=(i<oldlen)?defaultvalue.$clone(src[i]):defaultvalue.$new(); // e.g. record
|
for (var i=0; i<srclen; i++) a[i]=defaultvalue.$clone(src[i]);
|
||||||
|
for (var i=oldlen; i<lastlen; i++) a[i]=defaultvalue.$new();
|
||||||
|
} else {
|
||||||
|
// set
|
||||||
|
for (var i=0; i<srclen; i++) a[i]=rtl.refSet(src[i]);
|
||||||
|
for (var i=oldlen; i<lastlen; i++) a[i]={};
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (var i=0; i<lastlen; i++) a[i]=(i<oldlen)?rtl.refSet(src[i]):{}; // e.g. set
|
for (var i=0; i<srclen; i++) a[i]=src[i];
|
||||||
}
|
for (var i=oldlen; i<lastlen; i++) a[i]=defaultvalue;
|
||||||
} else {
|
|
||||||
for (var i=0; i<lastlen; i++)
|
|
||||||
a[i]=(i<oldlen)?src[i]:defaultvalue;
|
|
||||||
}
|
}
|
||||||
while ((depth>0) && (stack[depth-1].i>=stack[depth-1].dim)){
|
while ((depth>0) && (stack[depth-1].i>=stack[depth-1].dim)){
|
||||||
depth--;
|
depth--;
|
||||||
|
Loading…
Reference in New Issue
Block a user