porffor 0.35.3 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/compiler/codegen.js
CHANGED
@@ -5730,24 +5730,27 @@ const objectHack = node => {
|
|
5730
5730
|
|
5731
5731
|
if (node.type === 'MemberExpression') {
|
5732
5732
|
const out = (() => {
|
5733
|
+
const abortOut = { ...node, object: objectHack(node.object) };
|
5733
5734
|
if (node.computed || node.optional) return;
|
5734
5735
|
|
5735
5736
|
// hack: block these properties as they can be accessed on functions
|
5736
|
-
if (node.property.name === 'length' || node.property.name === 'name' || node.property.name === 'call') return;
|
5737
|
+
if (node.property.name === 'length' || node.property.name === 'name' || node.property.name === 'call') return abortOut;
|
5737
5738
|
|
5738
|
-
if (node.property.name === '__proto__') return;
|
5739
|
+
if (node.property.name === '__proto__') return abortOut;
|
5739
5740
|
|
5740
5741
|
let objectName = node.object.name;
|
5741
5742
|
|
5742
5743
|
// if object is not identifier or another member exp, give up
|
5743
|
-
if (node.object.type !== 'Identifier' && node.object.type !== 'MemberExpression') return;
|
5744
|
-
if (objectName && ['undefined', 'null', 'NaN', 'Infinity'].includes(objectName)) return;
|
5744
|
+
if (node.object.type !== 'Identifier' && node.object.type !== 'MemberExpression') return abortOut;
|
5745
|
+
if (objectName && ['undefined', 'null', 'NaN', 'Infinity'].includes(objectName)) return abortOut;
|
5745
5746
|
|
5746
5747
|
if (!objectName) objectName = objectHack(node.object)?.name?.slice?.(2);
|
5747
5748
|
if (!objectName || (!objectHackers.includes(objectName) && !objectHackers.some(x => objectName.startsWith(`${x}_`)))) {
|
5748
|
-
return;
|
5749
|
+
return abortOut;
|
5749
5750
|
}
|
5750
5751
|
|
5752
|
+
if (objectName !== 'Object_prototype' && (node.property.name === 'propertyIsEnumerable' || node.property.name === 'hasOwnProperty' || node.property.name === 'isPrototypeOf')) return abortOut;
|
5753
|
+
|
5751
5754
|
const name = '__' + objectName + '_' + node.property.name;
|
5752
5755
|
if (Prefs.codeLog) log('codegen', `object hack! ${node.object.name}.${node.property.name} -> ${name}`);
|
5753
5756
|
|
package/package.json
CHANGED