X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/81345200c95645a1b0d2635520f96ad55dfde63f..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/testRegExp.cpp?ds=inline diff --git a/testRegExp.cpp b/testRegExp.cpp index fc95a63..d194159 100644 --- a/testRegExp.cpp +++ b/testRegExp.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Apple Inc. All rights reserved. + * Copyright (C) 2011, 2015 Apple Inc. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -39,12 +39,16 @@ #include #endif -#if COMPILER(MSVC) && !OS(WINCE) +#if COMPILER(MSVC) #include #include #include #endif +namespace JSC { +WTF_IMPORT extern const struct HashTable globalObjectTable; +} + const int MaxLineLength = 100 * 1024; using namespace JSC; @@ -133,7 +137,7 @@ protected: } }; -const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, 0, ExecState::globalObjectTable, CREATE_METHOD_TABLE(GlobalObject) }; +const ClassInfo GlobalObject::s_info = { "global", &JSGlobalObject::s_info, &globalObjectTable, CREATE_METHOD_TABLE(GlobalObject) }; GlobalObject::GlobalObject(VM& vm, Structure* structure, const Vector& arguments) : JSGlobalObject(vm, structure) @@ -146,7 +150,7 @@ GlobalObject::GlobalObject(VM& vm, Structure* structure, const Vector& a // be in a separate main function because the realMain function requires object // unwinding. -#if COMPILER(MSVC) && !defined(_DEBUG) && !OS(WINCE) +#if COMPILER(MSVC) && !defined(_DEBUG) #define TRY __try { #define EXCEPT(x) } __except (EXCEPTION_EXECUTE_HANDLER) { x; } #else @@ -159,12 +163,19 @@ int realMain(int argc, char** argv); int main(int argc, char** argv) { #if OS(WINDOWS) -#if !OS(WINCE) +#if defined(_M_X64) || defined(__x86_64__) + // The VS2013 runtime has a bug where it mis-detects AVX-capable processors + // if the feature has been disabled in firmware. This causes us to crash + // in some of the math functions. For now, we disable those optimizations + // because Microsoft is not going to fix the problem in VS2013. + // FIXME: http://webkit.org/b/141449: Remove this workaround when we switch to VS2015+. + _set_FMA3_enable(0); +#endif + // Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which we will inherit. This is bad for // testing/debugging, as it causes the post-mortem debugger not to be invoked. We reset the // error mode here to work around Cygwin's behavior. See . ::SetErrorMode(0); -#endif #if defined(_DEBUG) _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); @@ -204,12 +215,22 @@ static bool testOneRegExp(VM& vm, RegExp* regexp, RegExpTest* regExpTest, bool v } else if (matchResult != -1) { if (outVector.size() != regExpTest->expectVector.size()) { result = false; - if (verbose) - printf("Line %d: output vector size mismatch - expected %lu got %lu\n", lineNumber, regExpTest->expectVector.size(), outVector.size()); + if (verbose) { +#if OS(WINDOWS) + printf("Line %d: output vector size mismatch - expected %Iu got %Iu\n", lineNumber, regExpTest->expectVector.size(), outVector.size()); +#else + printf("Line %d: output vector size mismatch - expected %zu got %zu\n", lineNumber, regExpTest->expectVector.size(), outVector.size()); +#endif + } } else if (outVector.size() % 2) { result = false; - if (verbose) - printf("Line %d: output vector size is odd (%lu), should be even\n", lineNumber, outVector.size()); + if (verbose) { +#if OS(WINDOWS) + printf("Line %d: output vector size is odd (%Iu), should be even\n", lineNumber, outVector.size()); +#else + printf("Line %d: output vector size is odd (%zu), should be even\n", lineNumber, outVector.size()); +#endif + } } else { // Check in pairs since the first value of the pair could be -1 in which case the second doesn't matter. size_t pairCount = outVector.size() / 2; @@ -217,13 +238,23 @@ static bool testOneRegExp(VM& vm, RegExp* regexp, RegExpTest* regExpTest, bool v size_t startIndex = i*2; if (outVector[startIndex] != regExpTest->expectVector[startIndex]) { result = false; - if (verbose) - printf("Line %d: output vector mismatch at index %lu - expected %d got %d\n", lineNumber, startIndex, regExpTest->expectVector[startIndex], outVector[startIndex]); + if (verbose) { +#if OS(WINDOWS) + printf("Line %d: output vector mismatch at index %Iu - expected %d got %d\n", lineNumber, startIndex, regExpTest->expectVector[startIndex], outVector[startIndex]); +#else + printf("Line %d: output vector mismatch at index %zu - expected %d got %d\n", lineNumber, startIndex, regExpTest->expectVector[startIndex], outVector[startIndex]); +#endif + } } if ((i > 0) && (regExpTest->expectVector[startIndex] != -1) && (outVector[startIndex+1] != regExpTest->expectVector[startIndex+1])) { result = false; - if (verbose) - printf("Line %d: output vector mismatch at index %lu - expected %d got %d\n", lineNumber, startIndex+1, regExpTest->expectVector[startIndex+1], outVector[startIndex+1]); + if (verbose) { +#if OS(WINDOWS) + printf("Line %d: output vector mismatch at index %Iu - expected %d got %d\n", lineNumber, startIndex + 1, regExpTest->expectVector[startIndex + 1], outVector[startIndex + 1]); +#else + printf("Line %d: output vector mismatch at index %zu - expected %d got %d\n", lineNumber, startIndex + 1, regExpTest->expectVector[startIndex + 1], outVector[startIndex + 1]); +#endif + } } } } @@ -488,7 +519,7 @@ static void parseArguments(int argc, char** argv, CommandLine& options) int realMain(int argc, char** argv) { - VM* vm = VM::create(LargeHeap).leakRef(); + VM* vm = &VM::create(LargeHeap).leakRef(); JSLockHolder locker(vm); CommandLine options; @@ -499,3 +530,10 @@ int realMain(int argc, char** argv) return success ? 0 : 3; } + +#if OS(WINDOWS) +extern "C" __declspec(dllexport) int WINAPI dllLauncherEntryPoint(int argc, const char* argv[]) +{ + return main(argc, const_cast(argv)); +} +#endif