LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/sksl/ir - SkSLExpression.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 8 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 5 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2016 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #ifndef SKSL_EXPRESSION
       9             : #define SKSL_EXPRESSION
      10             : 
      11             : #include "SkSLType.h"
      12             : #include "SkSLVariable.h"
      13             : 
      14             : #include <unordered_map>
      15             : 
      16             : namespace SkSL {
      17             : 
      18             : struct Expression;
      19             : class IRGenerator;
      20             : 
      21             : typedef std::unordered_map<const Variable*, std::unique_ptr<Expression>*> DefinitionMap;
      22             : 
      23             : /**
      24             :  * Abstract supertype of all expressions.
      25             :  */
      26           0 : struct Expression : public IRNode {
      27             :     enum Kind {
      28             :         kBinary_Kind,
      29             :         kBoolLiteral_Kind,
      30             :         kConstructor_Kind,
      31             :         kIntLiteral_Kind,
      32             :         kFieldAccess_Kind,
      33             :         kFloatLiteral_Kind,
      34             :         kFunctionReference_Kind,
      35             :         kFunctionCall_Kind,
      36             :         kIndex_Kind,
      37             :         kPrefix_Kind,
      38             :         kPostfix_Kind,
      39             :         kSwizzle_Kind,
      40             :         kVariableReference_Kind,
      41             :         kTernary_Kind,
      42             :         kTypeReference_Kind,
      43             :         kDefined_Kind
      44             :     };
      45             : 
      46           0 :     Expression(Position position, Kind kind, const Type& type)
      47           0 :     : INHERITED(position)
      48             :     , fKind(kind)
      49           0 :     , fType(std::move(type)) {}
      50             : 
      51           0 :     virtual bool isConstant() const {
      52           0 :         return false;
      53             :     }
      54             : 
      55             :     /**
      56             :      * Given a map of known constant variable values, substitute them in for references to those
      57             :      * variables occurring in this expression and its subexpressions.  Similar simplifications, such
      58             :      * as folding a constant binary expression down to a single value, may also be performed.
      59             :      * Returns a new expression which replaces this expression, or null if no replacements were
      60             :      * made. If a new expression is returned, this expression is no longer valid.
      61             :      */
      62           0 :     virtual std::unique_ptr<Expression> constantPropagate(const IRGenerator& irGenerator,
      63             :                                                           const DefinitionMap& definitions) {
      64           0 :         return nullptr;
      65             :     }
      66             : 
      67             :     const Kind fKind;
      68             :     const Type& fType;
      69             : 
      70             :     typedef IRNode INHERITED;
      71             : };
      72             : 
      73             : } // namespace
      74             : 
      75             : #endif

Generated by: LCOV version 1.13