Edit

kc3-lang/angle/src/compiler/translator/Common.h

Branch :

  • Show log

    Commit

  • Author : Yuly Novikov
    Date : 2017-06-28 00:16:27
    Hash : af01a064
    Message : Revert "Adds TUnorderedMap and uses it for tLevel in TSymbolTableLevel." This reverts commit c14348a2589e5d995f63019433175545ba90040b. Reason for revert: crashes in murmurhash on Nexus 6 See https://build.chromium.org/p/chromium.gpu.fyi/builders/Android%20Release%20%28Nexus%206%29/builds/7865 Original change's description: > Adds TUnorderedMap and uses it for tLevel in TSymbolTableLevel. > > Change-Id: I27ba7a41c599ef6f7fe68b22c27bd2a40175ddf9 > Reviewed-on: https://chromium-review.googlesource.com/526672 > Commit-Queue: Jamie Madill <jmadill@chromium.org> > Reviewed-by: Jamie Madill <jmadill@chromium.org> TBR=jmadill@chromium.org,kbr@chromium.org,bajones@chromium.org,kainino@chromium.org,lethalantidote@chromium.org Change-Id: Id4a428430c6d286b910790ba7c30503c98ce728f No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://chromium-review.googlesource.com/551235 Reviewed-by: Yuly Novikov <ynovikov@chromium.org> Commit-Queue: Yuly Novikov <ynovikov@chromium.org>

  • src/compiler/translator/Common.h
  • //
    // Copyright (c) 2002-2010 The ANGLE 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.
    //
    
    #ifndef COMPILER_TRANSLATOR_COMMON_H_
    #define COMPILER_TRANSLATOR_COMMON_H_
    
    #include <map>
    #include <sstream>
    #include <string>
    #include <vector>
    #include <limits>
    #include <stdio.h>
    
    #include "common/angleutils.h"
    #include "common/debug.h"
    #include "compiler/translator/PoolAlloc.h"
    
    namespace sh
    {
    
    struct TSourceLoc
    {
        int first_file;
        int first_line;
        int last_file;
        int last_line;
    };
    
    //
    // Put POOL_ALLOCATOR_NEW_DELETE in base classes to make them use this scheme.
    //
    #define POOL_ALLOCATOR_NEW_DELETE()                                                  \
        void *operator new(size_t s) { return GetGlobalPoolAllocator()->allocate(s); }   \
        void *operator new(size_t, void *_Where) { return (_Where); }                    \
        void operator delete(void *) {}                                                  \
        void operator delete(void *, void *) {}                                          \
        void *operator new[](size_t s) { return GetGlobalPoolAllocator()->allocate(s); } \
        void *operator new[](size_t, void *_Where) { return (_Where); }                  \
        void operator delete[](void *) {}                                                \
        void operator delete[](void *, void *) {}
    
    //
    // Pool version of string.
    //
    typedef pool_allocator<char> TStringAllocator;
    typedef std::basic_string<char, std::char_traits<char>, TStringAllocator> TString;
    typedef std::basic_ostringstream<char, std::char_traits<char>, TStringAllocator> TStringStream;
    inline TString *NewPoolTString(const char *s)
    {
        void *memory = GetGlobalPoolAllocator()->allocate(sizeof(TString));
        return new (memory) TString(s);
    }
    
    //
    // Persistent string memory.  Should only be used for strings that survive
    // across compiles.
    //
    #define TPersistString std::string
    #define TPersistStringStream std::ostringstream
    
    //
    // Pool allocator versions of vectors, lists, and maps
    //
    template <class T>
    class TVector : public std::vector<T, pool_allocator<T>>
    {
      public:
        POOL_ALLOCATOR_NEW_DELETE();
    
        typedef typename std::vector<T, pool_allocator<T>>::size_type size_type;
        TVector() : std::vector<T, pool_allocator<T>>() {}
        TVector(const pool_allocator<T> &a) : std::vector<T, pool_allocator<T>>(a) {}
        TVector(size_type i) : std::vector<T, pool_allocator<T>>(i) {}
    };
    
    template <class K, class D, class CMP = std::less<K>>
    class TMap : public std::map<K, D, CMP, pool_allocator<std::pair<const K, D>>>
    {
      public:
        POOL_ALLOCATOR_NEW_DELETE();
        typedef pool_allocator<std::pair<const K, D>> tAllocator;
    
        TMap() : std::map<K, D, CMP, tAllocator>() {}
        // use correct two-stage name lookup supported in gcc 3.4 and above
        TMap(const tAllocator &a)
            : std::map<K, D, CMP, tAllocator>(std::map<K, D, CMP, tAllocator>::key_compare(), a)
        {
        }
    };
    
    // Integer to TString conversion
    template <typename T>
    inline TString str(T i)
    {
        ASSERT(std::numeric_limits<T>::is_integer);
        char buffer[((8 * sizeof(T)) / 3) + 3];
        const char *formatStr = std::numeric_limits<T>::is_signed ? "%d" : "%u";
        snprintf(buffer, sizeof(buffer), formatStr, i);
        return buffer;
    }
    
    }  // namespace sh
    
    #endif  // COMPILER_TRANSLATOR_COMMON_H_