Skip to content
Snippets Groups Projects
Select Git revision
  • v17.9.2
  • gitlab/15-0-stable-salsa default
  • 18-2-stable-salsa protected
  • 18-1-stable-salsa protected
  • 18-0-stable-salsa protected
  • 17-11-stable-salsa protected
  • 17-10-stable-salsa protected
  • 17-9-stable-salsa protected
  • 17-8-stable-salsa protected
  • 17-7-stable-salsa protected
  • 17-6-stable-salsa protected
  • 17-5-stable-salsa protected
  • 17-4-stable-salsa protected
  • 17-3-stable-salsa protected
  • 17-2-stable-salsa protected
  • 17-1-stable-salsa protected
  • 17-0-stable-salsa protected
  • 16-11-stable-salsa protected
  • 16-10-stable-salsa protected
  • 16-9-stable-salsa protected
  • 16-8-stable-salsa protected
  • 16-7-stable-salsa protected
  • v18.2.8-salsa-1 protected
  • v18.1.6-salsa-2 protected
  • v18.3.5
  • v18.4.3
  • v18.5.1
  • v18.5.0
  • v18.5.0-rc43
  • v18.5.0-rc42
  • v18.2.8
  • v18.3.4
  • v18.4.2
  • v18.2.7
  • v18.3.3
  • v18.4.1
  • v18.4.0
  • v18.4.0-rc43
  • v18.4.0-rc42
  • v18.1.6
  • v18.1.6-salsa-1 protected
  • v18.2.6
42 results

detached_partition_spec.rb

Blame
  • SnippetOperand.h 3.26 KiB
    /*
     * Copyright (C) 2015 Apple Inc. All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
     * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
     * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    #pragma once
    
    #if ENABLE(JIT)
    
    #include "ResultType.h"
    #include <wtf/Packed.h>
    
    namespace JSC {
    
    class SnippetOperand {
        enum ConstOrVarType : uint8_t {
            Variable,
            ConstInt32,
            ConstDouble
        };
    
    public:
        SnippetOperand()
            : m_resultType(ResultType::unknownType())
        { }
    
        SnippetOperand(ResultType resultType)
            : m_resultType(resultType)
        { }
    
        bool mightBeNumber() const { return m_resultType.mightBeNumber(); }
        bool definitelyIsNumber() const { return m_resultType.definitelyIsNumber(); }
    
        bool definitelyIsBoolean() const { return m_resultType.definitelyIsBoolean(); }
    
        bool isConst() const { return m_type != Variable; }
        bool isConstInt32() const { return m_type == ConstInt32; }
        bool isConstDouble() const { return m_type == ConstDouble; }
        bool isPositiveConstInt32() const { return isConstInt32() && asConstInt32() > 0; }
    
        int64_t asRawBits() const { return m_val.get().rawBits; }
    
        int32_t asConstInt32() const
        {
            ASSERT(m_type == ConstInt32);
            return m_val.get().int32Val;
        }
    
        double asConstDouble() const
        {
            ASSERT(m_type == ConstDouble);
            return m_val.get().doubleVal;
        }
    
        double asConstNumber() const
        {
            if (isConstInt32())
                return asConstInt32();
            ASSERT(isConstDouble());
            return asConstDouble();
        }
    
        void setConstInt32(int32_t value)
        {
            m_type = ConstInt32;
            UnionType u;
            u.int32Val = value;
            m_val = WTFMove(u);
        }
    
        void setConstDouble(double value)
        {
            m_type = ConstDouble;
            UnionType u;
            u.doubleVal = value;
            m_val = WTFMove(u);
        }
    
    private:
        ResultType m_resultType;
        ConstOrVarType m_type { Variable };
        union UnionType {
            int32_t int32Val;
            double doubleVal;
            int64_t rawBits;
        };
        Packed<UnionType> m_val;
    };
    static_assert(alignof(SnippetOperand) == 1);
    
    } // namespace JSC
    
    #endif // ENABLE(JIT)