/* * If either 'eval' or 'with' is used in a local scope, we must make sure * that all containing local scopes don't get munged. Otherwise, the * obfuscation would potentially introduce bugs. */ private void protectScopeFromObfuscation(ScriptOrFnScope scope) { assert scope != null; if (scope == globalScope) { // The global scope does not get obfuscated, // so we don't need to worry about it... return; } // Find the highest local scope containing the specified scope. while (scope.getParentScope() != globalScope) { scope = scope.getParentScope(); } assert scope.getParentScope() == globalScope; scope.preventMunging(); }
/* * Returns the identifier for the specified symbol defined in the specified * scope or in any scope above it. Returns null if this symbol does not have * a corresponding identifier. */ private JavaScriptIdentifier getIdentifier(String symbol, ScriptOrFnScope scope) { JavaScriptIdentifier identifier; while (scope != null) { identifier = scope.getIdentifier(symbol); if (identifier != null) { return identifier; } scope = scope.getParentScope(); // ??此代码不知何意 } return null; }