%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2020 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * @fileoverview Variables mutator. */ 'use strict'; const babelTypes = require('@babel/types'); const common = require('./common.js'); const random = require('../random.js'); const mutator = require('./mutator.js'); function _isInFunctionParam(path) { const child = path.find(p => p.parent && babelTypes.isFunction(p.parent)); return child && child.parentKey === 'params'; } class VariableMutator extends mutator.Mutator { constructor(settings) { super(); this.settings = settings; } get visitor() { const thisMutator = this; return { Identifier(path) { if (!random.choose(thisMutator.settings.MUTATE_VARIABLES)) { return; } if (!common.isVariableIdentifier(path.node.name)) { return; } // Don't mutate variables that are being declared. if (babelTypes.isVariableDeclarator(path.parent)) { return; } // Don't mutate function params. if (_isInFunctionParam(path)) { return; } if (common.isInForLoopCondition(path) || common.isInWhileLoop(path)) { return; } const randVar = common.randomVariable(path); if (!randVar) { return; } const newName = randVar.name; thisMutator.annotate( path.node, `Replaced ${path.node.name} with ${newName}`); path.node.name = newName; } }; } } module.exports = { VariableMutator: VariableMutator, };