Skip to content

Commit c4b9007

Browse files
committed
Add "source" to context objects
1 parent 419bdfa commit c4b9007

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

flang/include/flang/Parser/parse-tree.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3481,12 +3481,14 @@ inline namespace traits {
34813481
// trait-property-name ->
34823482
// identifier | string-literal
34833483
struct OmpTraitPropertyName {
3484+
CharBlock source;
34843485
WRAPPER_CLASS_BOILERPLATE(OmpTraitPropertyName, std::string);
34853486
};
34863487

34873488
// trait-score ->
34883489
// SCORE(non-negative-const-integer-expression)
34893490
struct OmpTraitScore {
3491+
CharBlock source;
34903492
WRAPPER_CLASS_BOILERPLATE(OmpTraitScore, ScalarIntExpr);
34913493
};
34923494

@@ -3511,8 +3513,10 @@ struct OmpTraitScore {
35113513
// constant integer expression <- conflict with (b)
35123514
//
35133515
struct OmpTraitPropertyExtension {
3516+
CharBlock source;
35143517
TUPLE_CLASS_BOILERPLATE(OmpTraitPropertyExtension);
35153518
struct ExtensionValue {
3519+
CharBlock source;
35163520
UNION_CLASS_BOILERPLATE(ExtensionValue);
35173521
std::variant<OmpTraitPropertyName, ScalarExpr,
35183522
common::Indirection<OmpTraitPropertyExtension>>
@@ -3533,6 +3537,7 @@ struct OmpTraitPropertyExtension {
35333537
// will happen if the scalar integer expression sees a logical expresion.
35343538
// To avoid this, parse all expressions as scalar expressions.
35353539
struct OmpTraitProperty {
3540+
CharBlock source;
35363541
UNION_CLASS_BOILERPLATE(OmpTraitProperty);
35373542
std::variant<OmpTraitPropertyName, common::Indirection<OmpClause>,
35383543
ScalarExpr, // trait-property-expresion
@@ -3558,6 +3563,7 @@ struct OmpTraitProperty {
35583563
// Trait-set-selectors:
35593564
// [D]evice, [T]arget_device, [C]onstruct, [I]mplementation, [U]ser.
35603565
struct OmpTraitSelectorName {
3566+
CharBlock source;
35613567
UNION_CLASS_BOILERPLATE(OmpTraitSelectorName);
35623568
ENUM_CLASS(Value, Arch, Atomic_Default_Mem_Order, Condition, Device_Num,
35633569
Extension, Isa, Kind, Requires, Simd, Uid, Vendor)
@@ -3568,6 +3574,7 @@ struct OmpTraitSelectorName {
35683574
// trait-selector-name |
35693575
// trait-selector-name ([trait-score:] trait-property, ...)
35703576
struct OmpTraitSelector {
3577+
CharBlock source;
35713578
TUPLE_CLASS_BOILERPLATE(OmpTraitSelector);
35723579
struct Properties {
35733580
TUPLE_CLASS_BOILERPLATE(Properties);
@@ -3580,20 +3587,23 @@ struct OmpTraitSelector {
35803587
// CONSTRUCT | DEVICE | IMPLEMENTATION | USER | // since 5.0
35813588
// TARGET_DEVICE // since 5.1
35823589
struct OmpTraitSetSelectorName {
3590+
CharBlock source;
35833591
ENUM_CLASS(Value, Construct, Device, Implementation, Target_Device, User)
35843592
WRAPPER_CLASS_BOILERPLATE(OmpTraitSetSelectorName, Value);
35853593
};
35863594

35873595
// trait-set-selector ->
35883596
// trait-set-selector-name = {trait-selector, ...}
35893597
struct OmpTraitSetSelector {
3598+
CharBlock source;
35903599
TUPLE_CLASS_BOILERPLATE(OmpTraitSetSelector);
35913600
std::tuple<OmpTraitSetSelectorName, std::list<OmpTraitSelector>> t;
35923601
};
35933602

35943603
// context-selector-specification ->
35953604
// trait-set-selector, ...
35963605
struct OmpContextSelectorSpecification { // Modifier
3606+
CharBlock source;
35973607
WRAPPER_CLASS_BOILERPLATE(
35983608
OmpContextSelectorSpecification, std::list<OmpTraitSetSelector>);
35993609
};

flang/lib/Parser/openmp-parsers.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -155,32 +155,32 @@ static TypeDeclarationStmt makeIterSpecDecl(std::list<ObjectName> &&names) {
155155

156156
// --- Parsers for context traits -------------------------------------
157157

158-
TYPE_PARSER(construct<OmpTraitPropertyName>( //
158+
TYPE_PARSER(sourced(construct<OmpTraitPropertyName>( //
159159
(space >> charLiteralConstantWithoutKind) ||
160-
applyMem(&Name::ToString, Parser<Name>{})))
160+
applyMem(&Name::ToString, Parser<Name>{}))))
161161

162-
TYPE_PARSER(construct<OmpTraitScore>( //
163-
"SCORE" >> parenthesized(scalarIntExpr)))
162+
TYPE_PARSER(sourced(construct<OmpTraitScore>( //
163+
"SCORE" >> parenthesized(scalarIntExpr))))
164164

165-
TYPE_PARSER(construct<OmpTraitPropertyExtension::ExtensionValue>(
165+
TYPE_PARSER(sourced(construct<OmpTraitPropertyExtension::ExtensionValue>(
166166
// Parse nested extension first.
167167
construct<OmpTraitPropertyExtension::ExtensionValue>(
168168
indirect(Parser<OmpTraitPropertyExtension>{})) ||
169169
construct<OmpTraitPropertyExtension::ExtensionValue>(
170170
Parser<OmpTraitPropertyName>{}) ||
171-
construct<OmpTraitPropertyExtension::ExtensionValue>(scalarExpr)))
171+
construct<OmpTraitPropertyExtension::ExtensionValue>(scalarExpr))))
172172

173-
TYPE_PARSER(construct<OmpTraitPropertyExtension>( //
173+
TYPE_PARSER(sourced(construct<OmpTraitPropertyExtension>( //
174174
Parser<OmpTraitPropertyName>{},
175175
parenthesized(nonemptySeparated(
176-
Parser<OmpTraitPropertyExtension::ExtensionValue>{}, ","_tok))))
176+
Parser<OmpTraitPropertyExtension::ExtensionValue>{}, ","_tok)))))
177177

178-
TYPE_PARSER(construct<OmpTraitProperty>(
178+
TYPE_PARSER(sourced(construct<OmpTraitProperty>(
179179
// Try extension first, before OmpTraitPropertyName.
180180
construct<OmpTraitProperty>(Parser<OmpTraitPropertyExtension>{}) ||
181181
construct<OmpTraitProperty>(Parser<OmpTraitPropertyName>{}) ||
182182
construct<OmpTraitProperty>(indirect(Parser<OmpClause>{})) ||
183-
construct<OmpTraitProperty>(scalarExpr)))
183+
construct<OmpTraitProperty>(scalarExpr))))
184184

185185
TYPE_PARSER(construct<OmpTraitSelectorName::Value>(
186186
"ARCH" >> pure(OmpTraitSelectorName::Value::Arch) ||
@@ -196,18 +196,18 @@ TYPE_PARSER(construct<OmpTraitSelectorName::Value>(
196196
"UID" >> pure(OmpTraitSelectorName::Value::Uid) ||
197197
"VENDOR" >> pure(OmpTraitSelectorName::Value::Vendor)))
198198

199-
TYPE_PARSER(construct<OmpTraitSelectorName>(
199+
TYPE_PARSER(sourced(construct<OmpTraitSelectorName>(
200200
// Parse predefined names first (because of SIMD).
201201
construct<OmpTraitSelectorName>(Parser<OmpTraitSelectorName::Value>{}) ||
202-
construct<OmpTraitSelectorName>(OmpDirectiveNameParser{})))
202+
construct<OmpTraitSelectorName>(OmpDirectiveNameParser{}))))
203203

204204
TYPE_PARSER(construct<OmpTraitSelector::Properties>(
205205
maybe(Parser<OmpTraitScore>{} / ":"_tok),
206206
nonemptySeparated(Parser<OmpTraitProperty>{}, ","_tok)))
207207

208-
TYPE_PARSER(construct<OmpTraitSelector>( //
208+
TYPE_PARSER(sourced(construct<OmpTraitSelector>( //
209209
Parser<OmpTraitSelectorName>{}, //
210-
maybe(parenthesized(Parser<OmpTraitSelector::Properties>{}))))
210+
maybe(parenthesized(Parser<OmpTraitSelector::Properties>{})))))
211211

212212
TYPE_PARSER(construct<OmpTraitSetSelectorName::Value>(
213213
"CONSTRUCT" >> pure(OmpTraitSetSelectorName::Value::Construct) ||
@@ -216,15 +216,15 @@ TYPE_PARSER(construct<OmpTraitSetSelectorName::Value>(
216216
"TARGET_DEVICE" >> pure(OmpTraitSetSelectorName::Value::Target_Device) ||
217217
"USER" >> pure(OmpTraitSetSelectorName::Value::User)))
218218

219-
TYPE_PARSER(construct<OmpTraitSetSelectorName>(
220-
Parser<OmpTraitSetSelectorName::Value>{}))
219+
TYPE_PARSER(sourced(construct<OmpTraitSetSelectorName>(
220+
Parser<OmpTraitSetSelectorName::Value>{})))
221221

222-
TYPE_PARSER(construct<OmpTraitSetSelector>( //
222+
TYPE_PARSER(sourced(construct<OmpTraitSetSelector>( //
223223
Parser<OmpTraitSetSelectorName>{},
224-
"=" >> braced(nonemptySeparated(Parser<OmpTraitSelector>{}, ","_tok))))
224+
"=" >> braced(nonemptySeparated(Parser<OmpTraitSelector>{}, ","_tok)))))
225225

226-
TYPE_PARSER(construct<OmpContextSelectorSpecification>(
227-
nonemptySeparated(Parser<OmpTraitSetSelector>{}, ","_tok)))
226+
TYPE_PARSER(sourced(construct<OmpContextSelectorSpecification>(
227+
nonemptySeparated(Parser<OmpTraitSetSelector>{}, ","_tok))))
228228

229229
// Parser<OmpContextSelector> == Parser<traits::OmpContextSelectorSpecification>
230230

0 commit comments

Comments
 (0)