Skip to content

Commit 8dc2693

Browse files
Clean up static const usage, misc cleanup
Clang can't determine for some integral static const that their address hasn't been taken or that nothing makes an lvalue pointer to them, so we need to redeclare them in the cpp file to satisfy the linker. Did this somewhat inconsistently for the cases where clang complained.
1 parent 0bd462c commit 8dc2693

File tree

13 files changed

+69
-58
lines changed

13 files changed

+69
-58
lines changed

lib/Common/Common/NumberUtilities.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,29 @@
99

1010
namespace Js
1111
{
12+
// Redeclare static constants
13+
const UINT64 NumberConstantsBase::k_Nan;
14+
const INT64 NumberUtilitiesBase::Pos_InvalidInt64;
15+
const INT64 NumberUtilitiesBase::Neg_InvalidInt64;
16+
const uint64 NumberConstants::k_PosInf;
17+
const uint64 NumberConstants::k_NegInf;
18+
const uint64 NumberConstants::k_PosMin;
19+
const uint64 NumberConstants::k_PosMax;
20+
const uint64 NumberConstants::k_NegZero;
21+
const uint64 NumberConstants::k_Zero;
22+
const uint64 NumberConstants::k_PointFive;
23+
const uint64 NumberConstants::k_NegPointFive;
24+
const uint64 NumberConstants::k_NegOne;
25+
const uint64 NumberConstants::k_OnePointZero;
26+
const uint64 NumberConstants::k_TwoToFraction;
27+
const uint64 NumberConstants::k_NegTwoToFraction;
28+
const uint32 NumberConstants::k_Float32Zero;
29+
const uint32 NumberConstants::k_Float32PointFive;
30+
const uint32 NumberConstants::k_Float32NegPointFive;
31+
const uint32 NumberConstants::k_Float32NegZero;
32+
const uint32 NumberConstants::k_Float32TwoToFraction;
33+
const uint32 NumberConstants::k_Float32NegTwoToFraction;
34+
1235
const double NumberConstants::MAX_VALUE = *(double*)(&NumberConstants::k_PosMax);
1336
const double NumberConstants::MIN_VALUE = *(double*)(&NumberConstants::k_PosMin);
1437
const double NumberConstants::NaN = *(double*)(&NumberConstants::k_Nan);

lib/Common/DataStructures/BigInt.cpp

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -591,20 +591,6 @@ namespace Js
591591
return dbl;
592592
}
593593

594-
namespace // anonymous
595-
{
596-
template <typename EncodedChar>
597-
void Reference(void)
598-
{
599-
BigInt i;
600-
i.FInitFromDigits<EncodedChar>(NULL, 0, NULL);
601-
}
602-
603-
void Instantiations(void)
604-
{
605-
Reference<char16>();
606-
Reference<utf8char_t>();
607-
}
608-
}
609-
594+
template bool BigInt::FInitFromDigits<char16>(const char16 *prgch, long cch, long *pcchDig);
595+
template bool BigInt::FInitFromDigits<utf8char_t>(const utf8char_t *prgch, long cch, long *pcchDig);
610596
}

lib/Parser/CharSet.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1870,4 +1870,11 @@ namespace UnifiedRegex
18701870
}
18711871
#endif
18721872

1873+
const int CharSetNode::directBits;
1874+
const uint CharSetNode::directSize;
1875+
const uint CharSetNode::innerMask;
1876+
const int CharSetNode::bitsPerLeafLevel;
1877+
const int CharSetNode::branchingPerLeafLevel;
1878+
const uint CharSetNode::leafMask;
1879+
const uint CharSetNode::levels;
18731880
}

lib/Parser/RegexCompileTime.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ namespace UnifiedRegex
1111
// Compiler (inlines etc)
1212
// ----------------------------------------------------------------------
1313

14+
const CharCount Compiler::initInstBufSize;
15+
1416
uint8* Compiler::Emit(size_t size)
1517
{
1618
Assert(size <= UINT32_MAX);

lib/Parser/RegexParser.cpp

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ Term ::= ... | '(' '?' '=' Disjunction ')' [removed] | '(' '?' '!' Disjunction '
104104

105105
namespace UnifiedRegex
106106
{
107+
template <typename P, const bool IsLiteral>
108+
const CharCount Parser<P, IsLiteral>::initLitbufSize;
109+
107110
ParseError::ParseError(bool isBody, CharCount pos, CharCount encodedPos, HRESULT error)
108111
: isBody(isBody), pos(pos), encodedPos(encodedPos), error(error)
109112
{
@@ -3055,45 +3058,20 @@ namespace UnifiedRegex
30553058
}
30563059
}
30573060

3058-
//
3059-
// Template instantiation
3060-
//
3061-
3062-
template <typename P, const bool IsLiteral>
3063-
void UnifiedRegexParserForceInstantiation()
3064-
{
3065-
typedef typename P::EncodedChar EncodedChar;
3066-
Parser<P, IsLiteral> p
3067-
( 0
3068-
, 0
3069-
, 0
3070-
, 0
3071-
, false
3072-
#if ENABLE_REGEX_CONFIG_OPTIONS
3073-
, 0
3074-
#endif
3075-
);
3076-
3077-
RegexFlags f;
3078-
CharCount a, b, c, d;
3079-
const EncodedChar* cp = 0;
3080-
p.ParseDynamic(0, 0, 0, 0, f);
3081-
p.ParseLiteral(0, 0, a, b, c, d, f);
3082-
p.ParseLiteralNoAST(0, 0, a, b, c, d);
3083-
p.template CompileProgram<true>(0, cp, a, b, c, f);
3084-
p.template CompileProgram<false>(0, cp, a, b, c, f);
3085-
p.CaptureEmptySourceAndNoGroups(0);
3086-
p.CaptureSourceAndGroups(0, 0, 0, 0);
3087-
p.FreeBody();
3088-
}
3089-
3090-
void UnifiedRegexParserForceAllInstantiations()
3091-
{
3092-
UnifiedRegexParserForceInstantiation<NullTerminatedUnicodeEncodingPolicy, false>();
3093-
UnifiedRegexParserForceInstantiation<NullTerminatedUnicodeEncodingPolicy, true>();
3094-
UnifiedRegexParserForceInstantiation<NullTerminatedUTF8EncodingPolicy, false>();
3095-
UnifiedRegexParserForceInstantiation<NullTerminatedUTF8EncodingPolicy, true>();
3096-
UnifiedRegexParserForceInstantiation<NotNullTerminatedUTF8EncodingPolicy, false>();
3097-
UnifiedRegexParserForceInstantiation<NotNullTerminatedUTF8EncodingPolicy, true>();
3098-
}
3061+
// Instantiate all templates
3062+
#define INSTANTIATE_REGEX_PARSER_COMPILE(EncodingPolicy, IsLiteral, BuildAST) \
3063+
template RegexPattern* Parser<EncodingPolicy, IsLiteral>::CompileProgram<BuildAST>(Node* root, const EncodedChar*& currentCharacter, const CharCount totalLen, const CharCount bodyChars, const CharCount totalChars, const RegexFlags flags );
3064+
3065+
#define INSTANTIATE_REGEX_PARSER(EncodingPolicy) \
3066+
INSTANTIATE_REGEX_PARSER_COMPILE(EncodingPolicy, false, false) \
3067+
INSTANTIATE_REGEX_PARSER_COMPILE(EncodingPolicy, false, true) \
3068+
INSTANTIATE_REGEX_PARSER_COMPILE(EncodingPolicy, true, false) \
3069+
INSTANTIATE_REGEX_PARSER_COMPILE(EncodingPolicy, true, true) \
3070+
template class Parser<EncodingPolicy, false>; \
3071+
template class Parser<EncodingPolicy, true>;
3072+
3073+
// Instantiate the Parser
3074+
INSTANTIATE_REGEX_PARSER(NullTerminatedUnicodeEncodingPolicy);
3075+
INSTANTIATE_REGEX_PARSER(NullTerminatedUTF8EncodingPolicy);
3076+
INSTANTIATE_REGEX_PARSER(NotNullTerminatedUTF8EncodingPolicy);
30993077
}

lib/Runtime/Base/Constants.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
using namespace Js;
88

9+
const uint Constants::InvalidSourceIndex;
10+
const RegSlot Constants::NoRegister;
11+
912
const char16 Constants::AnonymousFunction[] = _u("Anonymous function");
1013
const char16 Constants::Anonymous[] = _u("anonymous");
1114
const char16 Constants::Empty[] = _u("");

lib/Runtime/Base/FunctionBody.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333

3434
namespace Js
3535
{
36+
uint const ScopeSlots::MaxEncodedSlotCount;
37+
3638
CriticalSection FunctionProxy::GlobalLock;
3739

3840
#ifdef FIELD_ACCESS_STATS

lib/Runtime/Library/ConcatString.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,9 @@ namespace Js
119119

120120
/////////////////////// ConcatStringBuilder //////////////////////////
121121

122+
// MAX number of slots in one chunk. Until we fit into this, we realloc, otherwise create new chunk.
123+
const int ConcatStringBuilder::c_maxChunkSlotCount;
124+
122125
ConcatStringBuilder::ConcatStringBuilder(ScriptContext* scriptContext, int initialSlotCount) :
123126
ConcatStringBase(scriptContext->GetLibrary()->GetStringTypeStatic()),
124127
m_count(0), m_prevChunk(NULL)

lib/Runtime/Library/JavascriptFunction.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ extern "C" void __cdecl _alloca_probe_16();
2222

2323
namespace Js
2424
{
25+
const charcount_t JavascriptFunction::DIAG_MAX_FUNCTION_STRING;
26+
2527
DEFINE_RECYCLER_TRACKER_PERF_COUNTER(JavascriptFunction);
2628
JavascriptFunction::JavascriptFunction(DynamicType * type)
2729
: DynamicObject(type), functionInfo(nullptr), constructorCache(&ConstructorCache::DefaultInstance)

lib/Runtime/Library/JavascriptRegExpConstructor.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
namespace Js
99
{
10+
const int JavascriptRegExpConstructor::NumCtorCaptures;
11+
1012
JavascriptRegExpConstructor::JavascriptRegExpConstructor(DynamicType * type) :
1113
RuntimeFunction(type, &JavascriptRegExp::EntryInfo::NewInstance),
1214
reset(false),

0 commit comments

Comments
 (0)