1*81ad6265SDimitry Andric //===--- ParseHLSL.cpp - HLSL-specific parsing support --------------------===// 2*81ad6265SDimitry Andric // 3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*81ad6265SDimitry Andric // 7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 8*81ad6265SDimitry Andric // 9*81ad6265SDimitry Andric // This file implements the parsing logic for HLSL language features. 10*81ad6265SDimitry Andric // 11*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 12*81ad6265SDimitry Andric 13*81ad6265SDimitry Andric #include "clang/Basic/AttributeCommonInfo.h" 14*81ad6265SDimitry Andric #include "clang/Parse/ParseDiagnostic.h" 15*81ad6265SDimitry Andric #include "clang/Parse/Parser.h" 16*81ad6265SDimitry Andric 17*81ad6265SDimitry Andric using namespace clang; 18*81ad6265SDimitry Andric 19*81ad6265SDimitry Andric void Parser::ParseHLSLSemantics(ParsedAttributes &Attrs, 20*81ad6265SDimitry Andric SourceLocation *EndLoc) { 21*81ad6265SDimitry Andric assert(Tok.is(tok::colon) && "Not a HLSL Semantic"); 22*81ad6265SDimitry Andric ConsumeToken(); 23*81ad6265SDimitry Andric 24*81ad6265SDimitry Andric if (!Tok.is(tok::identifier)) { 25*81ad6265SDimitry Andric Diag(Tok.getLocation(), diag::err_expected_semantic_identifier); 26*81ad6265SDimitry Andric return; 27*81ad6265SDimitry Andric } 28*81ad6265SDimitry Andric 29*81ad6265SDimitry Andric IdentifierInfo *II = Tok.getIdentifierInfo(); 30*81ad6265SDimitry Andric SourceLocation Loc = ConsumeToken(); 31*81ad6265SDimitry Andric if (EndLoc) 32*81ad6265SDimitry Andric *EndLoc = Tok.getLocation(); 33*81ad6265SDimitry Andric ParsedAttr::Kind AttrKind = 34*81ad6265SDimitry Andric ParsedAttr::getParsedKind(II, nullptr, ParsedAttr::AS_HLSLSemantic); 35*81ad6265SDimitry Andric 36*81ad6265SDimitry Andric if (AttrKind == ParsedAttr::UnknownAttribute) { 37*81ad6265SDimitry Andric Diag(Loc, diag::err_unknown_hlsl_semantic) << II; 38*81ad6265SDimitry Andric return; 39*81ad6265SDimitry Andric } 40*81ad6265SDimitry Andric Attrs.addNew(II, Loc, nullptr, SourceLocation(), nullptr, 0, 41*81ad6265SDimitry Andric ParsedAttr::AS_HLSLSemantic); 42*81ad6265SDimitry Andric } 43