1 // 2 // Copyright 2017 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 // RemoveArrayLengthMethod.h: 7 // Fold array length expressions, including cases where the "this" node has side effects. 8 // Example: 9 // int i = (a = b).length(); 10 // int j = (func()).length(); 11 // becomes: 12 // (a = b); 13 // int i = <constant array length>; 14 // func(); 15 // int j = <constant array length>; 16 // 17 // Must be run after SplitSequenceOperator, SimplifyLoopConditions and SeparateDeclarations steps 18 // have been done to expressions containing calls of the array length method. 19 // 20 // Does nothing to length method calls done on runtime-sized arrays. 21 22 #ifndef COMPILER_TRANSLATOR_TREEOPS_REMOVEARRAYLENGTHMETHOD_H_ 23 #define COMPILER_TRANSLATOR_TREEOPS_REMOVEARRAYLENGTHMETHOD_H_ 24 25 #include "common/angleutils.h" 26 27 namespace sh 28 { 29 30 class TCompiler; 31 class TIntermBlock; 32 33 ANGLE_NO_DISCARD bool RemoveArrayLengthMethod(TCompiler *compiler, TIntermBlock *root); 34 35 } // namespace sh 36 37 #endif // COMPILER_TRANSLATOR_TREEOPS_REMOVEARRAYLENGTHMETHOD_H_ 38