mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
75dd89485e
- Bug 1176414 - Clean up/rename various column index variables in nsTableRowFrame and nsTableFrame. r=dholbert (d8e33d549) - Bug 1176105 - Remove the (largely gutted) nsTableIterator class, and replace with simple frame-list iteration. r=dholbert (46a15df19) - Bug 1176555 - Replace explicit bit-twiddling of frame state flags by human-readable nsIFrame state-manipulation methods in table layout code. r=dholbert (aef9fb035) - Bug 1176354 - Rename nsTableRowFrame::GetBSize to differentiate better from nsIFrame::BSize. r=dholbert (9b67203a0) - Bug 1177600 - Properly adjust table row and cell positions when their containing block-size changes in vertical-rl writing mode. r=dholbert (413148d55) - Bug 1177925: Use range-based for loops for nsFrameList iteration, in various places in layout. r=tn (6db450285) - Bug 1148582 - Recycle mask layers attached to FrameMetrics. r=mattwoodrow (91360fbd8) - Bug 1148582 - Apply async transforms to (ancestor) mask layers correctly. r=botond (d6fca66fb) - Bug 1143575. Add some #includes to avoid unified-build issues on Windows. r=nical (ff78b76a3) - Bug 1143575. Add some #includes to avoid more unified-build issues on Windows. r=nical (99e0548f4) - Bug 1181832 - Keep gfxPrefs.h out of header files. r=kats (341f0aea0) - Bug 1181832 - Include gfxPrefs.h from nsImageLoadingContet.cpp to fix bustage on a CLOSED TREE. r=bustage (d61a18ab9) - Bug 1137557 - Part 0: TextEventDispatcher shouldn't forward keyboard events coming from TextInputProcessor to the parent process. r=smaug (87f70fcc4) - Bug 1172405 - Fix build error when adding files to dom/workers and gfx/layers. r=nical (8e114b8bb) - Bug 1061393 - Export display list info to layer scope viewer. r=kamidphish (60fd247f0) - Bug 1072313 - Check for more leaks in the layers code. r=mstange (aacbb2e1c) - Bug 1198979 - GC unused IPDL struct member. r=jmuizelaar (79c3113fb) - add missing semicolon (17ba58b45) - Bug 1153348 - Add an analysis to prohibit operator bools which aren't marked as either explicit or MOZ_IMPLICIT; r=jrmuizel (903dca970) - Bug 1170388 - Restrict the static analysis error given about raw pointers to refcounted objects inside a lambda, to the case where the raw pointer is captured. r=ehsan (cbbd3174c) - Bug 1180993 - Part 1: Add an analysis to help catch unused return values of specific types. r=ehsan (2420face4) - Bug 1180993 - Part 2: Add the MOZ_MUST_USE attribute to mfbt, and use it to verify usage of already_AddRefed. r=ehsan (b72785a60) - Bug 1123907 - Part 1: Add an analysis to ensure that a class marked MOZ_NEEDS_NO_VTABLE_TYPE cannot be instantiated by a class with a VTable; r=ehsan (0f5730c04) - Bug 1123907 - Part 2: Add MOZ_NEEDS_NO_VTABLE_TYPE to Attributes.h, and use it to verify the EntryType argument of nsTHashtable; r=ehsan (2e80fc581) - Bug 1159433 - Part 1: Add an analysis to ensure that some template arguments cannot be non-memmovable types; r=ehsan (3602e950f) - uniform MOZ_MUST_USE, it will be renamed in patch 1267550 (3b5ebd4c5) - add missing part of Bug 1187073 - Use MOZ_INHERIT_TYPE_ANNOTATIONS_FROM_TEMPLATE_ARGS to validate the usage of AlignedStorage2. r=ehsan (3b451bfb7) - Bug 1159433 - Part 2: Add the MOZ_NON_MEMMOVABLE and MOZ_NEEDS_MEMMOVABLE_TYPE macros to MFBT; r=froydnj (171c23ec4) - Bug 1159433 - Part 3: Make nsTArray_CopyChooser only accept memmovable argument types by default; r=froydnj (40cb4aa67) - Bug 1159433 - Part 4: Mark nsTAutoString_CharT and nsAutoArrayBase as non-memmovable; r=froydnj (7dc6bd220)
141 lines
3.1 KiB
C++
141 lines
3.1 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/* Functionality related to memory alignment. */
|
|
|
|
#ifndef mozilla_Alignment_h
|
|
#define mozilla_Alignment_h
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
namespace mozilla {
|
|
|
|
/*
|
|
* This class, and the corresponding macro MOZ_ALIGNOF, figures out how many
|
|
* bytes of alignment a given type needs.
|
|
*/
|
|
template<typename T>
|
|
class AlignmentFinder
|
|
{
|
|
struct Aligner
|
|
{
|
|
char mChar;
|
|
T mT;
|
|
};
|
|
|
|
public:
|
|
static const size_t alignment = sizeof(Aligner) - sizeof(T);
|
|
};
|
|
|
|
#define MOZ_ALIGNOF(T) mozilla::AlignmentFinder<T>::alignment
|
|
|
|
/*
|
|
* Declare the MOZ_ALIGNED_DECL macro for declaring aligned types.
|
|
*
|
|
* For instance,
|
|
*
|
|
* MOZ_ALIGNED_DECL(char arr[2], 8);
|
|
*
|
|
* will declare a two-character array |arr| aligned to 8 bytes.
|
|
*/
|
|
|
|
#if defined(__GNUC__)
|
|
# define MOZ_ALIGNED_DECL(_type, _align) \
|
|
_type __attribute__((aligned(_align)))
|
|
#elif defined(_MSC_VER)
|
|
# define MOZ_ALIGNED_DECL(_type, _align) \
|
|
__declspec(align(_align)) _type
|
|
#else
|
|
# warning "We don't know how to align variables on this compiler."
|
|
# define MOZ_ALIGNED_DECL(_type, _align) _type
|
|
#endif
|
|
|
|
/*
|
|
* AlignedElem<N> is a structure whose alignment is guaranteed to be at least N
|
|
* bytes.
|
|
*
|
|
* We support 1, 2, 4, 8, and 16-bit alignment.
|
|
*/
|
|
template<size_t Align>
|
|
struct AlignedElem;
|
|
|
|
/*
|
|
* We have to specialize this template because GCC doesn't like
|
|
* __attribute__((aligned(foo))) where foo is a template parameter.
|
|
*/
|
|
|
|
template<>
|
|
struct AlignedElem<1>
|
|
{
|
|
MOZ_ALIGNED_DECL(uint8_t elem, 1);
|
|
};
|
|
|
|
template<>
|
|
struct AlignedElem<2>
|
|
{
|
|
MOZ_ALIGNED_DECL(uint8_t elem, 2);
|
|
};
|
|
|
|
template<>
|
|
struct AlignedElem<4>
|
|
{
|
|
MOZ_ALIGNED_DECL(uint8_t elem, 4);
|
|
};
|
|
|
|
template<>
|
|
struct AlignedElem<8>
|
|
{
|
|
MOZ_ALIGNED_DECL(uint8_t elem, 8);
|
|
};
|
|
|
|
template<>
|
|
struct AlignedElem<16>
|
|
{
|
|
MOZ_ALIGNED_DECL(uint8_t elem, 16);
|
|
};
|
|
|
|
/*
|
|
* This utility pales in comparison to Boost's aligned_storage. The utility
|
|
* simply assumes that uint64_t is enough alignment for anyone. This may need
|
|
* to be extended one day...
|
|
*
|
|
* As an important side effect, pulling the storage into this template is
|
|
* enough obfuscation to confuse gcc's strict-aliasing analysis into not giving
|
|
* false negatives when we cast from the char buffer to whatever type we've
|
|
* constructed using the bytes.
|
|
*/
|
|
template<size_t Nbytes>
|
|
struct AlignedStorage
|
|
{
|
|
union U
|
|
{
|
|
char mBytes[Nbytes];
|
|
uint64_t mDummy;
|
|
} u;
|
|
|
|
const void* addr() const { return u.mBytes; }
|
|
void* addr() { return u.mBytes; }
|
|
};
|
|
|
|
template<typename T>
|
|
struct MOZ_INHERIT_TYPE_ANNOTATIONS_FROM_TEMPLATE_ARGS AlignedStorage2
|
|
{
|
|
union U
|
|
{
|
|
char mBytes[sizeof(T)];
|
|
uint64_t mDummy;
|
|
} u;
|
|
|
|
const T* addr() const { return reinterpret_cast<const T*>(u.mBytes); }
|
|
T* addr() { return static_cast<T*>(static_cast<void*>(u.mBytes)); }
|
|
};
|
|
|
|
} /* namespace mozilla */
|
|
|
|
#endif /* mozilla_Alignment_h */
|