Skip to content

Commit 3b40210

Browse files
authored
Merge pull request #8517 from avinxshKD/fix/skip-fes-on-internal-calls
skip FES checks on internal calls
2 parents f4ce8a0 + 2c99bcf commit 3b40210

6 files changed

Lines changed: 135 additions & 89 deletions

File tree

src/core/friendly_errors/param_validator.js

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -573,17 +573,38 @@ function validateParams(p5, fn, lifecycles) {
573573

574574
fn._validate = validate; // TEMP: For unit tests
575575

576+
// Suppress FES param checking for the duration of a callback.
577+
// Use this to wrap internal p5 calls that happen after an await.
578+
// NOTE: shares the same _isUserCall flag logic as the decorator below.
579+
fn._internal = function(callback) {
580+
const wasInternalCall = this._isUserCall;
581+
this._isUserCall = true;
582+
try {
583+
return callback();
584+
} finally {
585+
this._isUserCall = wasInternalCall;
586+
}
587+
};
588+
589+
// Skip FES validation for nested (internal) calls.
590+
// NOTE: shares the same _isUserCall flag logic as _internal() above.
576591
p5.registerDecorator(
577592
({ path }) => {
578593
return path.startsWith('p5.prototype');
579594
},
580595
function(target, { kind, name }){
581596
if(kind === 'method'){
582597
return function(...args){
583-
if (!p5.disableFriendlyErrors && !p5.disableParameterValidator) {
584-
validate(name, args);
598+
const wasInternalCall = this._isUserCall;
599+
this._isUserCall = true;
600+
try {
601+
if (!wasInternalCall && !p5.disableFriendlyErrors && !p5.disableParameterValidator) {
602+
validate(name, args);
603+
}
604+
return target.apply(this, args);
605+
} finally {
606+
this._isUserCall = wasInternalCall;
585607
}
586-
return target.apply(this, args);
587608
};
588609
}
589610
}

src/image/loading_displaying.js

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,15 @@ function loadingDisplaying(p5, fn){
136136
pImg.drawingContext.drawImage(img, 0, 0);
137137
}
138138

139-
pImg.modified = true;
140-
141-
if(successCallback){
142-
return successCallback(pImg);
143-
}else{
144-
return pImg;
145-
}
139+
const cb = () => {
140+
pImg.modified = true;
141+
if(successCallback){
142+
return successCallback(pImg);
143+
}else{
144+
return pImg;
145+
}
146+
};
147+
return this._internal ? this._internal(cb) : cb();
146148

147149
} catch(err) {
148150
p5._friendlyFileLoadError(0, path);

src/io/files.js

Lines changed: 51 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,11 @@ function files(p5, fn){
278278

279279
try{
280280
const { data } = await request(path, 'json');
281-
if (successCallback) return successCallback(data);
282-
return data;
281+
const cb = () => {
282+
if (successCallback) return successCallback(data);
283+
return data;
284+
};
285+
return this._internal ? this._internal(cb) : cb();
283286
} catch(err) {
284287
p5._friendlyFileLoadError(5, path);
285288
if(errorCallback) {
@@ -414,10 +417,12 @@ function files(p5, fn){
414417

415418
try{
416419
let { data } = await request(path, 'text');
417-
data = data.split(/\r?\n/);
418-
419-
if (successCallback) return successCallback(data);
420-
return data;
420+
const cb = () => {
421+
data = data.split(/\r?\n/);
422+
if (successCallback) return successCallback(data);
423+
return data;
424+
};
425+
return this._internal ? this._internal(cb) : cb();
421426
} catch(err) {
422427
p5._friendlyFileLoadError(3, path);
423428
if(errorCallback) {
@@ -501,28 +506,30 @@ function files(p5, fn){
501506

502507
try{
503508
let { data } = await request(path, 'text');
509+
const cb = () => {
510+
let ret = new p5.Table();
511+
data = parse(data, {
512+
separator
513+
});
514+
515+
if(header){
516+
ret.columns = data.shift();
517+
}else{
518+
ret.columns = Array(data[0].length).fill(null);
519+
}
504520

505-
let ret = new p5.Table();
506-
data = parse(data, {
507-
separator
508-
});
509-
510-
if(header){
511-
ret.columns = data.shift();
512-
}else{
513-
ret.columns = Array(data[0].length).fill(null);
514-
}
515-
516-
data.forEach(line => {
517-
const row = new p5.TableRow(line);
518-
ret.addRow(row);
519-
});
521+
data.forEach(line => {
522+
const row = new p5.TableRow(line);
523+
ret.addRow(row);
524+
});
520525

521-
if (successCallback) {
522-
return successCallback(ret);
523-
} else {
524-
return ret;
525-
}
526+
if (successCallback) {
527+
return successCallback(ret);
528+
} else {
529+
return ret;
530+
}
531+
};
532+
return this._internal ? this._internal(cb) : cb();
526533
} catch(err) {
527534
p5._friendlyFileLoadError(2, path);
528535
if(errorCallback) {
@@ -686,11 +693,13 @@ function files(p5, fn){
686693
const parser = new DOMParser();
687694

688695
let { data } = await request(path, 'text');
689-
const parsedDOM = parser.parseFromString(data, 'application/xml');
690-
data = new p5.XML(parsedDOM);
691-
692-
if (successCallback) return successCallback(data);
693-
return data;
696+
const cb = () => {
697+
const parsedDOM = parser.parseFromString(data, 'application/xml');
698+
data = new p5.XML(parsedDOM);
699+
if (successCallback) return successCallback(data);
700+
return data;
701+
};
702+
return this._internal ? this._internal(cb) : cb();
694703
} catch(err) {
695704
p5._friendlyFileLoadError(1, path);
696705
if(errorCallback) {
@@ -734,9 +743,12 @@ function files(p5, fn){
734743
fn.loadBytes = async function (path, successCallback, errorCallback) {
735744
try{
736745
let { data } = await request(path, 'arrayBuffer');
737-
data = new Uint8Array(data);
738-
if (successCallback) return successCallback(data);
739-
return data;
746+
const cb = () => {
747+
data = new Uint8Array(data);
748+
if (successCallback) return successCallback(data);
749+
return data;
750+
};
751+
return this._internal ? this._internal(cb) : cb();
740752
} catch(err) {
741753
p5._friendlyFileLoadError(6, path);
742754
if(errorCallback) {
@@ -789,8 +801,11 @@ function files(p5, fn){
789801
fn.loadBlob = async function(path, successCallback, errorCallback) {
790802
try{
791803
const { data } = await request(path, 'blob');
792-
if (successCallback) return successCallback(data);
793-
return data;
804+
const cb = () => {
805+
if (successCallback) return successCallback(data);
806+
return data;
807+
};
808+
return this._internal ? this._internal(cb) : cb();
794809
} catch(err) {
795810
if(errorCallback) {
796811
return errorCallback(err);

src/type/p5.Font.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,9 +1578,11 @@ function font(p5, fn) {
15781578
throw err;
15791579
}
15801580
}
1581-
if (success) return success(pfont);
1582-
1583-
return pfont;
1581+
const cb = () => {
1582+
if (success) return success(pfont);
1583+
return pfont;
1584+
};
1585+
return this._internal ? this._internal(cb) : cb();
15841586
};
15851587
};
15861588

src/webgl/loading.js

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -419,50 +419,56 @@ function loading(p5, fn){
419419
try{
420420
if (fileType.match(/\.stl$/i)) {
421421
const { data } = await request(path, 'arrayBuffer');
422-
parseSTL(model, data);
422+
const cb = () => {
423+
parseSTL(model, data);
423424

424-
if (normalize) {
425-
model.normalize();
426-
}
425+
if (normalize) {
426+
model.normalize();
427+
}
427428

428-
if (flipU) {
429-
model.flipU();
430-
}
429+
if (flipU) {
430+
model.flipU();
431+
}
431432

432-
if (flipV) {
433-
model.flipV();
434-
}
435-
model._makeTriangleEdges();
433+
if (flipV) {
434+
model.flipV();
435+
}
436+
model._makeTriangleEdges();
436437

437-
if (successCallback) {
438-
return successCallback(model);
439-
} else {
440-
return model;
441-
}
438+
if (successCallback) {
439+
return successCallback(model);
440+
} else {
441+
return model;
442+
}
443+
};
444+
return this._internal ? this._internal(cb) : cb();
442445

443446
} else if (fileType.match(/\.obj$/i)) {
444447
const { data } = await request(path, 'text');
445448
const lines = data.split('\n');
446449

447450
const parsedMaterials = await getMaterials(lines);
448-
parseObj(model, lines, parsedMaterials);
451+
const cb = () => {
452+
parseObj(model, lines, parsedMaterials);
449453

450-
if (normalize) {
451-
model.normalize();
452-
}
453-
if (flipU) {
454-
model.flipU();
455-
}
456-
if (flipV) {
457-
model.flipV();
458-
}
459-
model._makeTriangleEdges();
454+
if (normalize) {
455+
model.normalize();
456+
}
457+
if (flipU) {
458+
model.flipU();
459+
}
460+
if (flipV) {
461+
model.flipV();
462+
}
463+
model._makeTriangleEdges();
460464

461-
if (successCallback) {
462-
return successCallback(model);
463-
} else {
464-
return model;
465-
}
465+
if (successCallback) {
466+
return successCallback(model);
467+
} else {
468+
return model;
469+
}
470+
};
471+
return this._internal ? this._internal(cb) : cb();
466472
}
467473
} catch(err) {
468474
p5._friendlyFileLoadError(3, path);

src/webgl/material.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -524,11 +524,11 @@ function material(p5, fn) {
524524
// Test if we've loaded GLSL or not by checking for the existence of `void main`
525525
let loadedShader;
526526
if (/void\s+main/.exec(fragString)) {
527-
loadedShader = this.createFilterShader(fragString, true);
527+
loadedShader = this._internal(() => this.createFilterShader(fragString, true));
528528
} else {
529-
loadedShader = withGlobalStrands(this, () =>
529+
loadedShader = this._internal(() => withGlobalStrands(this, () =>
530530
this.baseFilterShader().modify(new Function(fragString)),
531-
);
531+
));
532532
}
533533

534534
if (successCallback) {
@@ -1635,7 +1635,7 @@ function material(p5, fn) {
16351635
fn.loadMaterialShader = async function (url, onSuccess, onFail) {
16361636
try {
16371637
const cb = await urlToStrandsCallback(url);
1638-
let shader = withGlobalStrands(this, () => this.buildMaterialShader(cb));
1638+
let shader = this._internal(() => withGlobalStrands(this, () => this.buildMaterialShader(cb)));
16391639
if (onSuccess) {
16401640
shader = onSuccess(shader) || shader;
16411641
}
@@ -1854,9 +1854,9 @@ function material(p5, fn) {
18541854
fn.loadNormalShader = async function (url, onSuccess, onFail) {
18551855
try {
18561856
const cb = await urlToStrandsCallback(url);
1857-
let shader = this.withGlobalStrands(this, () =>
1857+
let shader = this._internal(() => this.withGlobalStrands(this, () =>
18581858
this.buildNormalShader(cb),
1859-
);
1859+
));
18601860
if (onSuccess) {
18611861
shader = onSuccess(shader) || shader;
18621862
}
@@ -2020,7 +2020,7 @@ function material(p5, fn) {
20202020
fn.loadColorShader = async function (url, onSuccess, onFail) {
20212021
try {
20222022
const cb = await urlToStrandsCallback(url);
2023-
let shader = withGlobalStrands(this, () => this.buildColorShader(cb));
2023+
let shader = this._internal(() => withGlobalStrands(this, () => this.buildColorShader(cb)));
20242024
if (onSuccess) {
20252025
shader = onSuccess(shader) || shader;
20262026
}
@@ -2281,7 +2281,7 @@ function material(p5, fn) {
22812281
fn.loadStrokeShader = async function (url, onSuccess, onFail) {
22822282
try {
22832283
const cb = await urlToStrandsCallback(url);
2284-
let shader = withGlobalStrands(this, () => this.buildStrokeShader(cb));
2284+
let shader = this._internal(() => withGlobalStrands(this, () => this.buildStrokeShader(cb)));
22852285
if (onSuccess) {
22862286
shader = onSuccess(shader) || shader;
22872287
}

0 commit comments

Comments
 (0)