Hash :
c3bef3e7
Author :
Date :
2018-10-03T07:35:09
Allow 'defined' in define in non-WebGL. This is needed to pass dEQP conformance. Several of the harder dEQP tests around this behaviour are excluded from the mustpass list. This is presumably because the behaviours weren't implemented portably. Nevertheless we need to support conformant behaviour for GLES 2.0 Contexts for the most simple uses. This also leaves the error behaviour intact for WebGL specs. Bug: angleproject:1335 Change-Id: Ia80b4f71475efa928488ee6c2ee35c566d4602d4 Reviewed-on: https://chromium-review.googlesource.com/c/1242013 Reviewed-by: Olli Etuaho <oetuaho@nvidia.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
//
// Copyright (c) 2012 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.
//
#include "PreprocessorTest.h"
#include "compiler/preprocessor/Token.h"
namespace angle
{
void SimplePreprocessorTest::preprocess(const char *input,
std::stringstream *output,
pp::Preprocessor *preprocessor)
{
ASSERT_TRUE(preprocessor->init(1, &input, nullptr));
int line = 1;
pp::Token token;
do
{
preprocessor->lex(&token);
if (output)
{
for (; line < token.location.line; ++line)
{
*output << "\n";
}
*output << token;
}
} while (token.type != pp::Token::LAST);
}
void SimplePreprocessorTest::preprocess(const char *input, const pp::PreprocessorSettings &settings)
{
pp::Preprocessor preprocessor(&mDiagnostics, &mDirectiveHandler, settings);
preprocess(input, nullptr, &preprocessor);
}
void SimplePreprocessorTest::preprocess(const char *input)
{
preprocess(input, pp::PreprocessorSettings(SH_GLES2_SPEC));
}
void SimplePreprocessorTest::preprocess(const char *input, const char *expected)
{
pp::Preprocessor preprocessor(&mDiagnostics, &mDirectiveHandler,
pp::PreprocessorSettings(SH_GLES2_SPEC));
std::stringstream output;
preprocess(input, &output, &preprocessor);
std::string actual = output.str();
EXPECT_STREQ(expected, actual.c_str());
}
void SimplePreprocessorTest::lexSingleToken(const char *input, pp::Token *token)
{
pp::Preprocessor preprocessor(&mDiagnostics, &mDirectiveHandler,
pp::PreprocessorSettings(SH_GLES2_SPEC));
ASSERT_TRUE(preprocessor.init(1, &input, nullptr));
preprocessor.lex(token);
}
void SimplePreprocessorTest::lexSingleToken(size_t count,
const char *const input[],
pp::Token *token)
{
pp::Preprocessor preprocessor(&mDiagnostics, &mDirectiveHandler,
pp::PreprocessorSettings(SH_GLES2_SPEC));
ASSERT_TRUE(preprocessor.init(count, input, nullptr));
preprocessor.lex(token);
}
} // namespace angle