blob: 7f03caf692ca5bc6999359713aafb4fd4d630ecd [file] [log] [blame]
Ryan Harrisondbc13af2022-02-21 15:19:07 +00001// Copyright 2020 The Tint Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#ifndef SRC_TINT_AST_FLOAT_LITERAL_EXPRESSION_H_
16#define SRC_TINT_AST_FLOAT_LITERAL_EXPRESSION_H_
17
18#include <string>
19
20#include "src/tint/ast/literal_expression.h"
21
dan sinclair34323ac2022-04-07 18:39:35 +000022namespace tint::ast {
Ryan Harrisondbc13af2022-02-21 15:19:07 +000023
24/// A float literal
dan sinclair41e4d9a2022-05-01 14:40:55 +000025class FloatLiteralExpression final : public Castable<FloatLiteralExpression, LiteralExpression> {
26 public:
Ben Clayton41285aa2022-05-10 14:55:34 +000027 /// Literal suffix
28 enum class Suffix {
29 /// No suffix
30 kNone,
31 /// 'f' suffix (f32)
32 kF,
Zhaoming Jiang62bfd312022-05-13 12:01:11 +000033 /// 'h' suffix (f16)
34 kH,
Ben Clayton41285aa2022-05-10 14:55:34 +000035 };
36
dan sinclair41e4d9a2022-05-01 14:40:55 +000037 /// Constructor
38 /// @param pid the identifier of the program that owns this node
39 /// @param src the source of this node
Ben Clayton41285aa2022-05-10 14:55:34 +000040 /// @param val the literal value
41 /// @param suf the literal suffix
42 FloatLiteralExpression(ProgramID pid, const Source& src, double val, Suffix suf);
dan sinclair41e4d9a2022-05-01 14:40:55 +000043 ~FloatLiteralExpression() override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000044
dan sinclair41e4d9a2022-05-01 14:40:55 +000045 /// Clones this node and all transitive child nodes using the `CloneContext`
46 /// `ctx`.
47 /// @param ctx the clone context
48 /// @return the newly cloned node
49 const FloatLiteralExpression* Clone(CloneContext* ctx) const override;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000050
Ben Clayton41285aa2022-05-10 14:55:34 +000051 /// The literal value
52 const double value;
53
54 /// The literal suffix
55 const Suffix suffix;
Ryan Harrisondbc13af2022-02-21 15:19:07 +000056};
57
Ben Clayton8bd5fec2022-05-31 20:45:59 +000058/// Writes the float literal suffix to the std::ostream.
59/// @param out the std::ostream to write to
60/// @param suffix the suffix to write
61/// @returns out so calls can be chained
62std::ostream& operator<<(std::ostream& out, FloatLiteralExpression::Suffix suffix);
63
dan sinclair34323ac2022-04-07 18:39:35 +000064} // namespace tint::ast
Ryan Harrisondbc13af2022-02-21 15:19:07 +000065
66#endif // SRC_TINT_AST_FLOAT_LITERAL_EXPRESSION_H_