Lines Matching refs:Expr
30 std::optional<Expr<SomeType>> AsGenericExpr(DataRef &&ref) { in AsGenericExpr()
38 std::optional<Expr<SomeType>> AsGenericExpr(const Symbol &symbol) { in AsGenericExpr()
42 Expr<SomeType> Parenthesize(Expr<SomeType> &&expr) { in Parenthesize()
48 } else if constexpr (std::is_same_v<T, Expr<SomeDerived>>) { in Parenthesize()
64 if (const Expr<SomeType> *expr{arg.UnwrapExpr()}) { in ExtractDataRef()
109 parser::ContextualMessages &messages, Expr<SomeType> &&x, in ConvertRealOperands()
110 Expr<SomeType> &&y, int defaultRealKind) { in ConvertRealOperands()
113 [&](Expr<SomeInteger> &&ix, in ConvertRealOperands()
114 Expr<SomeInteger> &&iy) -> ConvertRealOperandsResult { in ConvertRealOperands()
123 [&](Expr<SomeInteger> &&ix, in ConvertRealOperands()
124 Expr<SomeReal> &&ry) -> ConvertRealOperandsResult { in ConvertRealOperands()
128 [&](Expr<SomeReal> &&rx, in ConvertRealOperands()
129 Expr<SomeInteger> &&iy) -> ConvertRealOperandsResult { in ConvertRealOperands()
133 [&](Expr<SomeReal> &&rx, in ConvertRealOperands()
134 Expr<SomeReal> &&ry) -> ConvertRealOperandsResult { in ConvertRealOperands()
138 [&](Expr<SomeInteger> &&ix, in ConvertRealOperands()
147 Expr<SomeInteger> &&iy) -> ConvertRealOperandsResult { in ConvertRealOperands()
154 [&](Expr<SomeReal> &&rx, in ConvertRealOperands()
160 Expr<SomeReal> &&ry) -> ConvertRealOperandsResult { in ConvertRealOperands()
173 static std::optional<Expr<SomeType>> NoExpr() { return std::nullopt; } in NoExpr()
176 std::optional<Expr<SomeType>> Package(Expr<SomeKind<CAT>> &&catExpr) { in Package()
180 std::optional<Expr<SomeType>> Package( in Package()
181 std::optional<Expr<SomeKind<CAT>>> &&catExpr) { in Package()
191 std::optional<Expr<SomeType>> MixedRealLeft( in MixedRealLeft()
192 Expr<SomeReal> &&rx, Expr<SomeInteger> &&iy) { in MixedRealLeft()
194 [&](auto &&rxk) -> Expr<SomeReal> { in MixedRealLeft()
208 std::optional<Expr<SomeComplex>> ConstructComplex( in ConstructComplex()
209 parser::ContextualMessages &messages, Expr<SomeType> &&real, in ConstructComplex()
210 Expr<SomeType> &&imaginary, int defaultRealKind) { in ConstructComplex()
222 std::optional<Expr<SomeComplex>> ConstructComplex( in ConstructComplex()
223 parser::ContextualMessages &messages, std::optional<Expr<SomeType>> &&real, in ConstructComplex()
224 std::optional<Expr<SomeType>> &&imaginary, int defaultRealKind) { in ConstructComplex()
232 Expr<SomeReal> GetComplexPart(const Expr<SomeComplex> &z, bool isImaginary) { in GetComplexPart()
241 Expr<SomeReal> GetComplexPart(Expr<SomeComplex> &&z, bool isImaginary) { in GetComplexPart()
255 Expr<SomeComplex> PromoteRealToComplex(Expr<SomeReal> &&someX) { in PromoteRealToComplex()
269 std::optional<Expr<SomeType>> MixedComplexLeft( in MixedComplexLeft()
270 parser::ContextualMessages &messages, Expr<SomeComplex> &&zx, in MixedComplexLeft()
271 Expr<SomeKind<RCAT>> &&iry, [[maybe_unused]] int defaultRealKind) { in MixedComplexLeft()
272 Expr<SomeReal> zr{GetComplexPart(zx, false)}; in MixedComplexLeft()
273 Expr<SomeReal> zi{GetComplexPart(zx, true)}; in MixedComplexLeft()
278 if (std::optional<Expr<SomeType>> rr{ in MixedComplexLeft()
312 Expr<SomeComplex> zy{ConvertTo(zx, std::move(iry))}; in MixedComplexLeft()
315 Expr<SomeComplex> zy{PromoteRealToComplex(std::move(iry))}; in MixedComplexLeft()
328 std::optional<Expr<SomeType>> MixedComplexRight( in MixedComplexRight()
329 parser::ContextualMessages &messages, Expr<SomeKind<LCAT>> &&irx, in MixedComplexRight()
330 Expr<SomeComplex> &&zy, [[maybe_unused]] int defaultRealKind) { in MixedComplexRight()
343 Expr<SomeReal> zr{GetComplexPart(zy, false)}; in MixedComplexRight()
344 Expr<SomeReal> zi{GetComplexPart(zy, true)}; in MixedComplexRight()
345 if (std::optional<Expr<SomeType>> rr{ in MixedComplexRight()
354 Expr<SomeComplex> zx{ConvertTo(zy, std::move(irx))}; in MixedComplexRight()
357 Expr<SomeComplex> zx{PromoteRealToComplex(std::move(irx))}; in MixedComplexRight()
368 std::optional<Expr<SomeType>> NumericOperation( in NumericOperation()
369 parser::ContextualMessages &messages, Expr<SomeType> &&x, in NumericOperation()
370 Expr<SomeType> &&y, int defaultRealKind) { in NumericOperation()
373 [](Expr<SomeInteger> &&ix, Expr<SomeInteger> &&iy) { in NumericOperation()
377 [](Expr<SomeReal> &&rx, Expr<SomeReal> &&ry) { in NumericOperation()
382 [](Expr<SomeReal> &&rx, Expr<SomeInteger> &&iy) { in NumericOperation()
385 [](Expr<SomeInteger> &&ix, Expr<SomeReal> &&ry) { in NumericOperation()
387 [&](auto &&ryk) -> Expr<SomeReal> { in NumericOperation()
396 [](Expr<SomeComplex> &&zx, Expr<SomeComplex> &&zy) { in NumericOperation()
400 [&](Expr<SomeComplex> &&zx, Expr<SomeInteger> &&iy) { in NumericOperation()
404 [&](Expr<SomeComplex> &&zx, Expr<SomeReal> &&ry) { in NumericOperation()
408 [&](Expr<SomeInteger> &&ix, Expr<SomeComplex> &&zy) { in NumericOperation()
412 [&](Expr<SomeReal> &&rx, Expr<SomeComplex> &&zy) { in NumericOperation()
417 [&](BOZLiteralConstant &&bx, Expr<SomeInteger> &&iy) { in NumericOperation()
422 [&](BOZLiteralConstant &&bx, Expr<SomeReal> &&ry) { in NumericOperation()
427 [&](Expr<SomeInteger> &&ix, BOZLiteralConstant &&by) { in NumericOperation()
431 [&](Expr<SomeReal> &&rx, BOZLiteralConstant &&by) { in NumericOperation()
445 template std::optional<Expr<SomeType>> NumericOperation<Power>(
446 parser::ContextualMessages &, Expr<SomeType> &&, Expr<SomeType> &&,
448 template std::optional<Expr<SomeType>> NumericOperation<Multiply>(
449 parser::ContextualMessages &, Expr<SomeType> &&, Expr<SomeType> &&,
451 template std::optional<Expr<SomeType>> NumericOperation<Divide>(
452 parser::ContextualMessages &, Expr<SomeType> &&, Expr<SomeType> &&,
454 template std::optional<Expr<SomeType>> NumericOperation<Add>(
455 parser::ContextualMessages &, Expr<SomeType> &&, Expr<SomeType> &&,
457 template std::optional<Expr<SomeType>> NumericOperation<Subtract>(
458 parser::ContextualMessages &, Expr<SomeType> &&, Expr<SomeType> &&,
461 std::optional<Expr<SomeType>> Negation( in Negation()
462 parser::ContextualMessages &messages, Expr<SomeType> &&x) { in Negation()
481 [&](Expr<SomeInteger> &&x) { return Package(-std::move(x)); }, in Negation()
482 [&](Expr<SomeReal> &&x) { return Package(-std::move(x)); }, in Negation()
483 [&](Expr<SomeComplex> &&x) { return Package(-std::move(x)); }, in Negation()
484 [&](Expr<SomeCharacter> &&) { in Negation()
489 [&](Expr<SomeLogical> &&) { in Negation()
494 [&](Expr<SomeDerived> &&) { in Negation()
503 Expr<SomeLogical> LogicalNegation(Expr<SomeLogical> &&x) { in LogicalNegation()
510 Expr<LogicalResult> PromoteAndRelate( in PromoteAndRelate()
511 RelationalOperator opr, Expr<SomeKind<CAT>> &&x, Expr<SomeKind<CAT>> &&y) { in PromoteAndRelate()
519 std::optional<Expr<LogicalResult>> Relate(parser::ContextualMessages &messages, in Relate()
520 RelationalOperator opr, Expr<SomeType> &&x, Expr<SomeType> &&y) { in Relate()
523 [=](Expr<SomeInteger> &&ix, in Relate()
524 Expr<SomeInteger> &&iy) -> std::optional<Expr<LogicalResult>> { in Relate()
527 [=](Expr<SomeReal> &&rx, in Relate()
528 Expr<SomeReal> &&ry) -> std::optional<Expr<LogicalResult>> { in Relate()
531 [&](Expr<SomeReal> &&rx, Expr<SomeInteger> &&iy) { in Relate()
535 [&](Expr<SomeInteger> &&ix, Expr<SomeReal> &&ry) { in Relate()
539 [&](Expr<SomeComplex> &&zx, in Relate()
540 Expr<SomeComplex> &&zy) -> std::optional<Expr<LogicalResult>> { in Relate()
550 [&](Expr<SomeComplex> &&zx, Expr<SomeInteger> &&iy) { in Relate()
554 [&](Expr<SomeComplex> &&zx, Expr<SomeReal> &&ry) { in Relate()
558 [&](Expr<SomeInteger> &&ix, Expr<SomeComplex> &&zy) { in Relate()
562 [&](Expr<SomeReal> &&rx, Expr<SomeComplex> &&zy) { in Relate()
566 [&](Expr<SomeCharacter> &&cx, Expr<SomeCharacter> &&cy) { in Relate()
569 auto &&cyk) -> std::optional<Expr<LogicalResult>> { in Relate()
584 return std::optional<Expr<LogicalResult>>{}; in Relate()
590 Expr<SomeLogical> BinaryLogicalOperation( in BinaryLogicalOperation()
591 LogicalOperator opr, Expr<SomeLogical> &&x, Expr<SomeLogical> &&y) { in BinaryLogicalOperation()
596 return Expr<SomeLogical>{BinaryLogicalOperation<Ty::kind>( in BinaryLogicalOperation()
603 std::optional<Expr<SomeType>> ConvertToNumeric(int kind, Expr<SomeType> &&x) { in ConvertToNumeric()
606 [=](auto &&cx) -> std::optional<Expr<SomeType>> { in ConvertToNumeric()
610 return Expr<SomeType>{ConvertToKind<TO>(kind, std::move(cx))}; in ConvertToNumeric()
618 std::optional<Expr<SomeType>> ConvertToType( in ConvertToType()
619 const DynamicType &type, Expr<SomeType> &&x) { in ConvertToType()
628 return Expr<SomeType>{ in ConvertToType()
634 return Expr<SomeType>{ in ConvertToType()
641 if (auto *cx{UnwrapExpr<Expr<SomeCharacter>>(x)}) { in ConvertToType()
649 return Expr<SomeCharacter>{ in ConvertToType()
650 Expr<CharacterType>{SetLength<CharacterType::kind>{ in ConvertToType()
655 return Expr<SomeType>{std::move(converted)}; in ConvertToType()
659 if (auto *cx{UnwrapExpr<Expr<SomeLogical>>(x)}) { in ConvertToType()
660 return Expr<SomeType>{ in ConvertToType()
677 std::optional<Expr<SomeType>> ConvertToType( in ConvertToType()
678 const DynamicType &to, std::optional<Expr<SomeType>> &&x) { in ConvertToType()
686 std::optional<Expr<SomeType>> ConvertToType( in ConvertToType()
687 const Symbol &symbol, Expr<SomeType> &&x) { in ConvertToType()
694 std::optional<Expr<SomeType>> ConvertToType( in ConvertToType()
695 const Symbol &to, std::optional<Expr<SomeType>> &&x) { in ConvertToType()
736 bool IsProcedure(const Expr<SomeType> &expr) { in IsProcedure()
739 bool IsFunction(const Expr<SomeType> &expr) { in IsFunction()
744 bool IsProcedurePointerTarget(const Expr<SomeType> &expr) { in IsProcedurePointerTarget()
767 inline const ProcedureRef *UnwrapProcedureRef(const Expr<T> &expr) { in UnwrapProcedureRef()
773 bool IsObjectPointer(const Expr<SomeType> &expr, FoldingContext &context) { in IsObjectPointer()
787 bool IsBareNullPointer(const Expr<SomeType> *expr) { in IsBareNullPointer()
804 template <typename T> bool operator()(const Expr<T> &x) const { in operator ()()
809 bool IsNullPointer(const Expr<SomeType> &expr) { in IsNullPointer()
855 template semantics::UnorderedSymbolSet CollectSymbols(const Expr<SomeType> &);
857 const Expr<SomeInteger> &);
859 const Expr<SubscriptInteger> &);
874 bool HasVectorSubscript(const Expr<SomeType> &expr) { in HasVectorSubscript()
934 FoldingContext &context, const Expr<SomeType> &expr) { in FindImpureCall()
1027 static std::optional<Expr<SomeType>> DataConstantConversionHelper( in DataConstantConversionHelper()
1029 const Expr<SomeType> &expr) { in DataConstantConversionHelper()
1032 Fold(context, ConvertToType(sizedType, Expr<SomeType>{expr}))}) { in DataConstantConversionHelper()
1033 if (const auto *someExpr{UnwrapExpr<Expr<SomeKind<FROM>>>(*sized)}) { in DataConstantConversionHelper()
1035 [](const auto &w) -> std::optional<Expr<SomeType>> { in DataConstantConversionHelper()
1069 std::optional<Expr<SomeType>> DataConstantConversionExtension( in DataConstantConversionExtension()
1071 const Expr<SomeType> &expr0) { in DataConstantConversionExtension()
1072 Expr<SomeType> expr{Fold(context, Expr<SomeType>{expr0})}; in DataConstantConversionExtension()
1092 const Expr<SomeType> &expr, FoldingContext &context) { in IsAllocatableOrPointerObject()
1098 bool IsAllocatableDesignator(const Expr<SomeType> &expr) { in IsAllocatableDesignator()
1108 const Expr<SomeType> &expr, FoldingContext &context) { in MayBePassedAsAbsentOptional()
1118 std::optional<Expr<SomeType>> HollerithToBOZ(FoldingContext &context, in HollerithToBOZ()
1119 const Expr<SomeType> &expr, const DynamicType &type) { in HollerithToBOZ()
1131 return ConvertToType(type, Expr<SomeType>{bits}); in HollerithToBOZ()