Permalink
Browse files

Do not call `toString` on functions in buildStyleInterpolator

Reviewed By: vjeux

Differential Revision: D4292618

fbshipit-source-id: cd7cd1a88aeb2c800f2c2941c79855992613ec84
  • Loading branch information...
michalgr authored and mkonicek committed Dec 7, 2016
1 parent dce77a3 commit 25fb2baa628b09060059fb03f099ef1b356fa904
Showing with 40 additions and 41 deletions.
  1. +40 −41 Libraries/Utilities/buildStyleInterpolator.js
@@ -102,13 +102,13 @@ var ARGUMENT_NAMES_RE = /([^\s,]+)/g;
*
* inline(inlineMe, ['hi', 'bye']); // "hi = bye + bye;"
*
* @param {function} func Any simple function who's arguments can be replaced via a regex.
* @param {string} fnStr Source of any simple function who's arguments can be
* replaced via a regex.
* @param {array<string>} replaceWithArgs Corresponding names of variables
* within an environment, to replace `func` args with.
* @return {string} Resulting function body string.
*/
var inline = function(func, replaceWithArgs) {
var fnStr = func.toString();
var inline = function(fnStr, replaceWithArgs) {
var parameterNames = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')'))
.match(ARGUMENT_NAMES_RE) ||
[];
@@ -126,11 +126,10 @@ var inline = function(func, replaceWithArgs) {
};
/**
* Simply a convenient way to inline functions using the function's toString
* method.
* Simply a convenient way to inline functions using the inline function.
*/
var MatrixOps = {
unroll: function(matVar, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) {
unroll: `function(matVar, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) {
m0 = matVar[0];
m1 = matVar[1];
m2 = matVar[2];
@@ -147,29 +146,29 @@ var MatrixOps = {
m13 = matVar[13];
m14 = matVar[14];
m15 = matVar[15];
},
}`,
matrixDiffers: function(retVar, matVar, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) {
matrixDiffers: `function(retVar, matVar, m0, m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) {
retVar = retVar ||
m0 !== matVar[0] ||
m1 !== matVar[1] ||
m2 !== matVar[2] ||
m3 !== matVar[3] ||
m4 !== matVar[4] ||
m5 !== matVar[5] ||
m6 !== matVar[6] ||
m7 !== matVar[7] ||
m8 !== matVar[8] ||
m9 !== matVar[9] ||
m10 !== matVar[10] ||
m11 !== matVar[11] ||
m12 !== matVar[12] ||
m13 !== matVar[13] ||
m14 !== matVar[14] ||
m15 !== matVar[15];
},
transformScale: function(matVar, opVar) {
m0 !== matVar[0] ||
m1 !== matVar[1] ||
m2 !== matVar[2] ||
m3 !== matVar[3] ||
m4 !== matVar[4] ||
m5 !== matVar[5] ||
m6 !== matVar[6] ||
m7 !== matVar[7] ||
m8 !== matVar[8] ||
m9 !== matVar[9] ||
m10 !== matVar[10] ||
m11 !== matVar[11] ||
m12 !== matVar[12] ||
m13 !== matVar[13] ||
m14 !== matVar[14] ||
m15 !== matVar[15];
}`,
transformScale: `function(matVar, opVar) {
// Scaling matVar by opVar
var x = opVar[0];
var y = opVar[1];
@@ -190,13 +189,13 @@ var MatrixOps = {
matVar[13] = matVar[13];
matVar[14] = matVar[14];
matVar[15] = matVar[15];
},
}`,
/**
* All of these matrix transforms are not general purpose utilities, and are
* only suitable for being inlined for the use of building up interpolators.
*/
transformTranslate: function(matVar, opVar) {
transformTranslate: `function(matVar, opVar) {
// Translating matVar by opVar
var x = opVar[0];
var y = opVar[1];
@@ -205,13 +204,13 @@ var MatrixOps = {
matVar[13] = matVar[1] * x + matVar[5] * y + matVar[9] * z + matVar[13];
matVar[14] = matVar[2] * x + matVar[6] * y + matVar[10] * z + matVar[14];
matVar[15] = matVar[3] * x + matVar[7] * y + matVar[11] * z + matVar[15];
},
}`,
/**
* @param {array} matVar Both the input, and the output matrix.
* @param {quaternion specification} q Four element array describing rotation.
*/
transformRotateRadians: function(matVar, q) {
transformRotateRadians: `function(matVar, q) {
// Rotating matVar by q
var xQuat = q[0], yQuat = q[1], zQuat = q[2], wQuat = q[3];
var x2Quat = xQuat + xQuat;
@@ -226,7 +225,7 @@ var MatrixOps = {
var wxQuat = wQuat * x2Quat;
var wyQuat = wQuat * y2Quat;
var wzQuat = wQuat * z2Quat;
// Step 1: Inlines the construction of a quaternion matrix (`quatMat`)
// Step 1: Inlines the construction of a quaternion matrix ('quatMat')
var quatMat0 = 1 - (yyQuat + zzQuat);
var quatMat1 = xyQuat + wzQuat;
var quatMat2 = xzQuat - wyQuat;
@@ -267,13 +266,13 @@ var MatrixOps = {
matVar[9] = b0 * a01 + b1 * a11 + b2 * a21;
matVar[10] = b0 * a02 + b1 * a12 + b2 * a22;
matVar[11] = b0 * a03 + b1 * a13 + b2 * a23;
}
}`
};
// Optimized version of general operation applications that can be used when
// the target matrix is known to be the identity matrix.
var MatrixOpsInitial = {
transformScale: function(matVar, opVar) {
transformScale: `function(matVar, opVar) {
// Scaling matVar known to be identity by opVar
matVar[0] = opVar[0];
matVar[1] = 0;
@@ -291,10 +290,10 @@ var MatrixOpsInitial = {
matVar[13] = 0;
matVar[14] = 0;
matVar[15] = 1;
},
}`,
transformTranslate: function(matVar, opVar) {
// Translating matVar known to be identity by opVar';
transformTranslate: `function(matVar, opVar) {
// Translating matVar known to be identity by opVar;
matVar[0] = 1;
matVar[1] = 0;
matVar[2] = 0;
@@ -311,14 +310,14 @@ var MatrixOpsInitial = {
matVar[13] = opVar[1];
matVar[14] = opVar[2];
matVar[15] = 1;
},
}`,
/**
* @param {array} matVar Both the input, and the output matrix - assumed to be
* identity.
* @param {quaternion specification} q Four element array describing rotation.
*/
transformRotateRadians: function(matVar, q) {
transformRotateRadians: `function(matVar, q) {
// Rotating matVar which is known to be identity by q
var xQuat = q[0], yQuat = q[1], zQuat = q[2], wQuat = q[3];
@@ -334,7 +333,7 @@ var MatrixOpsInitial = {
var wxQuat = wQuat * x2Quat;
var wyQuat = wQuat * y2Quat;
var wzQuat = wQuat * z2Quat;
// Step 1: Inlines the construction of a quaternion matrix (`quatMat`)
// Step 1: Inlines the construction of a quaternion matrix ('quatMat')
var quatMat0 = 1 - (yyQuat + zzQuat);
var quatMat1 = xyQuat + wzQuat;
var quatMat2 = xzQuat - wyQuat;
@@ -366,7 +365,7 @@ var MatrixOpsInitial = {
matVar[13] = 0;
matVar[14] = 0;
matVar[15] = 1;
}
}`
};

0 comments on commit 25fb2ba

Please sign in to comment.