ast: Remove ConstructorExpression
ConstructorExpression is abstract, and now only has a single class deriving from it - TypeConstructorExpression. Just use that instead. Bug: tint:888 Change-Id: I7ee52ad645bcd8a8a68710c63a1fdf834b5b2a24 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/68842 Kokoro: Kokoro <noreply+kokoro@google.com> Reviewed-by: James Price <jrprice@google.com>
This commit is contained in:
parent
a838bb718b
commit
72b6bb94c2
|
@ -208,8 +208,6 @@ libtint_source_set("libtint_core_all_src") {
|
||||||
"ast/call_statement.h",
|
"ast/call_statement.h",
|
||||||
"ast/case_statement.cc",
|
"ast/case_statement.cc",
|
||||||
"ast/case_statement.h",
|
"ast/case_statement.h",
|
||||||
"ast/constructor_expression.cc",
|
|
||||||
"ast/constructor_expression.h",
|
|
||||||
"ast/continue_statement.cc",
|
"ast/continue_statement.cc",
|
||||||
"ast/continue_statement.h",
|
"ast/continue_statement.h",
|
||||||
"ast/decoration.cc",
|
"ast/decoration.cc",
|
||||||
|
|
|
@ -74,8 +74,6 @@ set(TINT_LIB_SRCS
|
||||||
ast/call_statement.h
|
ast/call_statement.h
|
||||||
ast/case_statement.cc
|
ast/case_statement.cc
|
||||||
ast/case_statement.h
|
ast/case_statement.h
|
||||||
ast/constructor_expression.cc
|
|
||||||
ast/constructor_expression.h
|
|
||||||
ast/continue_statement.cc
|
ast/continue_statement.cc
|
||||||
ast/continue_statement.h
|
ast/continue_statement.h
|
||||||
ast/decoration.cc
|
ast/decoration.cc
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
// Copyright 2020 The Tint Authors.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
#include "src/ast/constructor_expression.h"
|
|
||||||
|
|
||||||
TINT_INSTANTIATE_TYPEINFO(tint::ast::ConstructorExpression);
|
|
||||||
|
|
||||||
namespace tint {
|
|
||||||
namespace ast {
|
|
||||||
|
|
||||||
ConstructorExpression::~ConstructorExpression() = default;
|
|
||||||
|
|
||||||
ConstructorExpression::ConstructorExpression(ConstructorExpression&&) = default;
|
|
||||||
|
|
||||||
ConstructorExpression::ConstructorExpression(ProgramID pid, const Source& src)
|
|
||||||
: Base(pid, src) {}
|
|
||||||
|
|
||||||
} // namespace ast
|
|
||||||
} // namespace tint
|
|
|
@ -1,41 +0,0 @@
|
||||||
// Copyright 2020 The Tint Authors.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
#ifndef SRC_AST_CONSTRUCTOR_EXPRESSION_H_
|
|
||||||
#define SRC_AST_CONSTRUCTOR_EXPRESSION_H_
|
|
||||||
|
|
||||||
#include "src/ast/expression.h"
|
|
||||||
|
|
||||||
namespace tint {
|
|
||||||
namespace ast {
|
|
||||||
|
|
||||||
/// Base class for constructor style expressions
|
|
||||||
class ConstructorExpression
|
|
||||||
: public Castable<ConstructorExpression, Expression> {
|
|
||||||
public:
|
|
||||||
~ConstructorExpression() override;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
/// Constructor
|
|
||||||
/// @param pid the identifier of the program that owns this node
|
|
||||||
/// @param src the source of this node
|
|
||||||
ConstructorExpression(ProgramID pid, const Source& src);
|
|
||||||
/// Move constructor
|
|
||||||
ConstructorExpression(ConstructorExpression&&);
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace ast
|
|
||||||
} // namespace tint
|
|
||||||
|
|
||||||
#endif // SRC_AST_CONSTRUCTOR_EXPRESSION_H_
|
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "src/ast/constructor_expression.h"
|
#include "src/ast/expression.h"
|
||||||
|
|
||||||
namespace tint {
|
namespace tint {
|
||||||
namespace ast {
|
namespace ast {
|
||||||
|
@ -27,7 +27,7 @@ class Type;
|
||||||
|
|
||||||
/// A type specific constructor
|
/// A type specific constructor
|
||||||
class TypeConstructorExpression
|
class TypeConstructorExpression
|
||||||
: public Castable<TypeConstructorExpression, ConstructorExpression> {
|
: public Castable<TypeConstructorExpression, Expression> {
|
||||||
public:
|
public:
|
||||||
/// Constructor
|
/// Constructor
|
||||||
/// @param pid the identifier of the program that owns this node
|
/// @param pid the identifier of the program that owns this node
|
||||||
|
|
|
@ -24,7 +24,6 @@ TEST_F(ParserImplTest, ConstExpr_TypeDecl) {
|
||||||
auto e = p->expect_const_expr();
|
auto e = p->expect_const_expr();
|
||||||
ASSERT_FALSE(p->has_error()) << p->error();
|
ASSERT_FALSE(p->has_error()) << p->error();
|
||||||
ASSERT_FALSE(e.errored);
|
ASSERT_FALSE(e.errored);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
|
|
||||||
auto* t = e->As<ast::TypeConstructorExpression>();
|
auto* t = e->As<ast::TypeConstructorExpression>();
|
||||||
|
@ -46,7 +45,6 @@ TEST_F(ParserImplTest, ConstExpr_TypeDecl_Empty) {
|
||||||
auto e = p->expect_const_expr();
|
auto e = p->expect_const_expr();
|
||||||
ASSERT_FALSE(p->has_error()) << p->error();
|
ASSERT_FALSE(p->has_error()) << p->error();
|
||||||
ASSERT_FALSE(e.errored);
|
ASSERT_FALSE(e.errored);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
|
|
||||||
auto* t = e->As<ast::TypeConstructorExpression>();
|
auto* t = e->As<ast::TypeConstructorExpression>();
|
||||||
|
@ -61,7 +59,6 @@ TEST_F(ParserImplTest, ConstExpr_TypeDecl_TrailingComma) {
|
||||||
auto e = p->expect_const_expr();
|
auto e = p->expect_const_expr();
|
||||||
ASSERT_FALSE(p->has_error()) << p->error();
|
ASSERT_FALSE(p->has_error()) << p->error();
|
||||||
ASSERT_FALSE(e.errored);
|
ASSERT_FALSE(e.errored);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
|
|
||||||
auto* t = e->As<ast::TypeConstructorExpression>();
|
auto* t = e->As<ast::TypeConstructorExpression>();
|
||||||
|
@ -137,7 +134,6 @@ TEST_F(ParserImplTest, ConstExpr_RegisteredType) {
|
||||||
|
|
||||||
auto e = p->expect_const_expr();
|
auto e = p->expect_const_expr();
|
||||||
ASSERT_FALSE(e.errored);
|
ASSERT_FALSE(e.errored);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,6 @@ TEST_F(ParserImplTest, PrimaryExpression_TypeDecl) {
|
||||||
EXPECT_FALSE(e.errored);
|
EXPECT_FALSE(e.errored);
|
||||||
EXPECT_FALSE(p->has_error()) << p->error();
|
EXPECT_FALSE(p->has_error()) << p->error();
|
||||||
ASSERT_NE(e.value, nullptr);
|
ASSERT_NE(e.value, nullptr);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
auto* ty = e->As<ast::TypeConstructorExpression>();
|
auto* ty = e->As<ast::TypeConstructorExpression>();
|
||||||
|
|
||||||
|
@ -65,7 +64,6 @@ TEST_F(ParserImplTest, PrimaryExpression_TypeDecl_ZeroConstructor) {
|
||||||
EXPECT_FALSE(e.errored);
|
EXPECT_FALSE(e.errored);
|
||||||
EXPECT_FALSE(p->has_error()) << p->error();
|
EXPECT_FALSE(p->has_error()) << p->error();
|
||||||
ASSERT_NE(e.value, nullptr);
|
ASSERT_NE(e.value, nullptr);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
auto* ty = e->As<ast::TypeConstructorExpression>();
|
auto* ty = e->As<ast::TypeConstructorExpression>();
|
||||||
|
|
||||||
|
@ -227,7 +225,6 @@ TEST_F(ParserImplTest, PrimaryExpression_Cast) {
|
||||||
EXPECT_FALSE(e.errored);
|
EXPECT_FALSE(e.errored);
|
||||||
EXPECT_FALSE(p->has_error()) << p->error();
|
EXPECT_FALSE(p->has_error()) << p->error();
|
||||||
ASSERT_NE(e.value, nullptr);
|
ASSERT_NE(e.value, nullptr);
|
||||||
ASSERT_TRUE(e->Is<ast::ConstructorExpression>());
|
|
||||||
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
ASSERT_TRUE(e->Is<ast::TypeConstructorExpression>());
|
||||||
|
|
||||||
auto* c = e->As<ast::TypeConstructorExpression>();
|
auto* c = e->As<ast::TypeConstructorExpression>();
|
||||||
|
|
|
@ -90,7 +90,7 @@ TEST_F(ParserImplTest, VariableStmt_VariableDecl_ArrayInit) {
|
||||||
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
||||||
|
|
||||||
ASSERT_NE(e->variable->constructor, nullptr);
|
ASSERT_NE(e->variable->constructor, nullptr);
|
||||||
EXPECT_TRUE(e->variable->constructor->Is<ast::ConstructorExpression>());
|
EXPECT_TRUE(e->variable->constructor->Is<ast::TypeConstructorExpression>());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ParserImplTest, VariableStmt_VariableDecl_ArrayInit_NoSpace) {
|
TEST_F(ParserImplTest, VariableStmt_VariableDecl_ArrayInit_NoSpace) {
|
||||||
|
@ -105,7 +105,7 @@ TEST_F(ParserImplTest, VariableStmt_VariableDecl_ArrayInit_NoSpace) {
|
||||||
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
||||||
|
|
||||||
ASSERT_NE(e->variable->constructor, nullptr);
|
ASSERT_NE(e->variable->constructor, nullptr);
|
||||||
EXPECT_TRUE(e->variable->constructor->Is<ast::ConstructorExpression>());
|
EXPECT_TRUE(e->variable->constructor->Is<ast::TypeConstructorExpression>());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ParserImplTest, VariableStmt_VariableDecl_VecInit) {
|
TEST_F(ParserImplTest, VariableStmt_VariableDecl_VecInit) {
|
||||||
|
@ -120,7 +120,7 @@ TEST_F(ParserImplTest, VariableStmt_VariableDecl_VecInit) {
|
||||||
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
||||||
|
|
||||||
ASSERT_NE(e->variable->constructor, nullptr);
|
ASSERT_NE(e->variable->constructor, nullptr);
|
||||||
EXPECT_TRUE(e->variable->constructor->Is<ast::ConstructorExpression>());
|
EXPECT_TRUE(e->variable->constructor->Is<ast::TypeConstructorExpression>());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ParserImplTest, VariableStmt_VariableDecl_VecInit_NoSpace) {
|
TEST_F(ParserImplTest, VariableStmt_VariableDecl_VecInit_NoSpace) {
|
||||||
|
@ -135,7 +135,7 @@ TEST_F(ParserImplTest, VariableStmt_VariableDecl_VecInit_NoSpace) {
|
||||||
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
EXPECT_EQ(e->variable->symbol, p->builder().Symbols().Get("a"));
|
||||||
|
|
||||||
ASSERT_NE(e->variable->constructor, nullptr);
|
ASSERT_NE(e->variable->constructor, nullptr);
|
||||||
EXPECT_TRUE(e->variable->constructor->Is<ast::ConstructorExpression>());
|
EXPECT_TRUE(e->variable->constructor->Is<ast::TypeConstructorExpression>());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(ParserImplTest, VariableStmt_Let) {
|
TEST_F(ParserImplTest, VariableStmt_Let) {
|
||||||
|
|
|
@ -2362,8 +2362,8 @@ sem::Expression* Resolver::Expression(const ast::Expression* root) {
|
||||||
sem_expr = Bitcast(bitcast);
|
sem_expr = Bitcast(bitcast);
|
||||||
} else if (auto* call = expr->As<ast::CallExpression>()) {
|
} else if (auto* call = expr->As<ast::CallExpression>()) {
|
||||||
sem_expr = Call(call);
|
sem_expr = Call(call);
|
||||||
} else if (auto* ctor = expr->As<ast::ConstructorExpression>()) {
|
} else if (auto* ctor = expr->As<ast::TypeConstructorExpression>()) {
|
||||||
sem_expr = Constructor(ctor);
|
sem_expr = TypeConstructor(ctor);
|
||||||
} else if (auto* ident = expr->As<ast::IdentifierExpression>()) {
|
} else if (auto* ident = expr->As<ast::IdentifierExpression>()) {
|
||||||
sem_expr = Identifier(ident);
|
sem_expr = Identifier(ident);
|
||||||
} else if (auto* literal = expr->As<ast::Literal>()) {
|
} else if (auto* literal = expr->As<ast::Literal>()) {
|
||||||
|
@ -2730,9 +2730,9 @@ bool Resolver::ValidateFunctionCall(const sem::Call* call) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
sem::Expression* Resolver::Constructor(const ast::ConstructorExpression* expr) {
|
sem::Expression* Resolver::TypeConstructor(
|
||||||
if (auto* type_ctor = expr->As<ast::TypeConstructorExpression>()) {
|
const ast::TypeConstructorExpression* expr) {
|
||||||
auto* ty = Type(type_ctor->type);
|
auto* ty = Type(expr->type);
|
||||||
if (!ty) {
|
if (!ty) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -2742,17 +2742,17 @@ sem::Expression* Resolver::Constructor(const ast::ConstructorExpression* expr) {
|
||||||
// https://gpuweb.github.io/gpuweb/wgsl.html#type-constructor-expr.
|
// https://gpuweb.github.io/gpuweb/wgsl.html#type-constructor-expr.
|
||||||
bool ok = true;
|
bool ok = true;
|
||||||
if (auto* vec_type = ty->As<sem::Vector>()) {
|
if (auto* vec_type = ty->As<sem::Vector>()) {
|
||||||
ok = ValidateVectorConstructor(type_ctor, vec_type);
|
ok = ValidateVectorConstructor(expr, vec_type);
|
||||||
} else if (auto* mat_type = ty->As<sem::Matrix>()) {
|
} else if (auto* mat_type = ty->As<sem::Matrix>()) {
|
||||||
ok = ValidateMatrixConstructor(type_ctor, mat_type);
|
ok = ValidateMatrixConstructor(expr, mat_type);
|
||||||
} else if (ty->is_scalar()) {
|
} else if (ty->is_scalar()) {
|
||||||
ok = ValidateScalarConstructor(type_ctor, ty);
|
ok = ValidateScalarConstructor(expr, ty);
|
||||||
} else if (auto* arr_type = ty->As<sem::Array>()) {
|
} else if (auto* arr_type = ty->As<sem::Array>()) {
|
||||||
ok = ValidateArrayConstructor(type_ctor, arr_type);
|
ok = ValidateArrayConstructor(expr, arr_type);
|
||||||
} else if (auto* struct_type = ty->As<sem::Struct>()) {
|
} else if (auto* struct_type = ty->As<sem::Struct>()) {
|
||||||
ok = ValidateStructureConstructor(type_ctor, struct_type);
|
ok = ValidateStructureConstructor(expr, struct_type);
|
||||||
} else {
|
} else {
|
||||||
AddError("type is not constructible", type_ctor->source);
|
AddError("type is not constructible", expr->source);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
|
@ -2763,10 +2763,6 @@ sem::Expression* Resolver::Constructor(const ast::ConstructorExpression* expr) {
|
||||||
return builder_->create<sem::Expression>(expr, ty, current_statement_, val);
|
return builder_->create<sem::Expression>(expr, ty, current_statement_, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
TINT_ICE(Resolver, diagnostics_) << "unexpected constructor expression type";
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
sem::Expression* Resolver::Literal(const ast::Literal* literal) {
|
sem::Expression* Resolver::Literal(const ast::Literal* literal) {
|
||||||
auto* ty = TypeOf(literal);
|
auto* ty = TypeOf(literal);
|
||||||
if (!ty) {
|
if (!ty) {
|
||||||
|
|
|
@ -171,7 +171,6 @@ class Resolver {
|
||||||
sem::Expression* Binary(const ast::BinaryExpression*);
|
sem::Expression* Binary(const ast::BinaryExpression*);
|
||||||
sem::Expression* Bitcast(const ast::BitcastExpression*);
|
sem::Expression* Bitcast(const ast::BitcastExpression*);
|
||||||
sem::Expression* Call(const ast::CallExpression*);
|
sem::Expression* Call(const ast::CallExpression*);
|
||||||
sem::Expression* Constructor(const ast::ConstructorExpression*);
|
|
||||||
sem::Expression* Expression(const ast::Expression*);
|
sem::Expression* Expression(const ast::Expression*);
|
||||||
sem::Function* Function(const ast::Function*);
|
sem::Function* Function(const ast::Function*);
|
||||||
sem::Call* FunctionCall(const ast::CallExpression*);
|
sem::Call* FunctionCall(const ast::CallExpression*);
|
||||||
|
@ -179,6 +178,7 @@ class Resolver {
|
||||||
sem::Call* IntrinsicCall(const ast::CallExpression*, sem::IntrinsicType);
|
sem::Call* IntrinsicCall(const ast::CallExpression*, sem::IntrinsicType);
|
||||||
sem::Expression* Literal(const ast::Literal*);
|
sem::Expression* Literal(const ast::Literal*);
|
||||||
sem::Expression* MemberAccessor(const ast::MemberAccessorExpression*);
|
sem::Expression* MemberAccessor(const ast::MemberAccessorExpression*);
|
||||||
|
sem::Expression* TypeConstructor(const ast::TypeConstructorExpression*);
|
||||||
sem::Expression* UnaryOp(const ast::UnaryOpExpression*);
|
sem::Expression* UnaryOp(const ast::UnaryOpExpression*);
|
||||||
|
|
||||||
// Statement resolving methods
|
// Statement resolving methods
|
||||||
|
|
|
@ -1385,11 +1385,6 @@ bool GeneratorImpl::EmitCase(const ast::CaseStatement* stmt) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneratorImpl::EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr) {
|
|
||||||
return EmitTypeConstructor(out, expr->As<ast::TypeConstructorExpression>());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GeneratorImpl::EmitTypeConstructor(
|
bool GeneratorImpl::EmitTypeConstructor(
|
||||||
std::ostream& out,
|
std::ostream& out,
|
||||||
const ast::TypeConstructorExpression* expr) {
|
const ast::TypeConstructorExpression* expr) {
|
||||||
|
@ -1471,8 +1466,8 @@ bool GeneratorImpl::EmitExpression(std::ostream& out,
|
||||||
if (auto* c = expr->As<ast::CallExpression>()) {
|
if (auto* c = expr->As<ast::CallExpression>()) {
|
||||||
return EmitCall(out, c);
|
return EmitCall(out, c);
|
||||||
}
|
}
|
||||||
if (auto* c = expr->As<ast::ConstructorExpression>()) {
|
if (auto* c = expr->As<ast::TypeConstructorExpression>()) {
|
||||||
return EmitConstructor(out, c);
|
return EmitTypeConstructor(out, c);
|
||||||
}
|
}
|
||||||
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
||||||
return EmitIdentifier(out, i);
|
return EmitIdentifier(out, i);
|
||||||
|
|
|
@ -188,12 +188,6 @@ class GeneratorImpl : public TextGenerator {
|
||||||
/// @param stmt the statement
|
/// @param stmt the statement
|
||||||
/// @returns true if the statement was emitted successfully
|
/// @returns true if the statement was emitted successfully
|
||||||
bool EmitCase(const ast::CaseStatement* stmt);
|
bool EmitCase(const ast::CaseStatement* stmt);
|
||||||
/// Handles generating constructor expressions
|
|
||||||
/// @param out the output of the expression stream
|
|
||||||
/// @param expr the constructor expression
|
|
||||||
/// @returns true if the expression was emitted
|
|
||||||
bool EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr);
|
|
||||||
/// Handles generating a discard statement
|
/// Handles generating a discard statement
|
||||||
/// @param stmt the discard statement
|
/// @param stmt the discard statement
|
||||||
/// @returns true if the statement was successfully emitted
|
/// @returns true if the statement was successfully emitted
|
||||||
|
|
|
@ -2112,11 +2112,6 @@ bool GeneratorImpl::EmitCase(const ast::SwitchStatement* s, size_t case_idx) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneratorImpl::EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr) {
|
|
||||||
return EmitTypeConstructor(out, expr->As<ast::TypeConstructorExpression>());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GeneratorImpl::EmitTypeConstructor(
|
bool GeneratorImpl::EmitTypeConstructor(
|
||||||
std::ostream& out,
|
std::ostream& out,
|
||||||
const ast::TypeConstructorExpression* expr) {
|
const ast::TypeConstructorExpression* expr) {
|
||||||
|
@ -2203,8 +2198,8 @@ bool GeneratorImpl::EmitExpression(std::ostream& out,
|
||||||
if (auto* c = expr->As<ast::CallExpression>()) {
|
if (auto* c = expr->As<ast::CallExpression>()) {
|
||||||
return EmitCall(out, c);
|
return EmitCall(out, c);
|
||||||
}
|
}
|
||||||
if (auto* c = expr->As<ast::ConstructorExpression>()) {
|
if (auto* c = expr->As<ast::TypeConstructorExpression>()) {
|
||||||
return EmitConstructor(out, c);
|
return EmitTypeConstructor(out, c);
|
||||||
}
|
}
|
||||||
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
||||||
return EmitIdentifier(out, i);
|
return EmitIdentifier(out, i);
|
||||||
|
|
|
@ -217,12 +217,6 @@ class GeneratorImpl : public TextGenerator {
|
||||||
/// @param case_idx the index of the switch case in the switch statement
|
/// @param case_idx the index of the switch case in the switch statement
|
||||||
/// @returns true if the statement was emitted successfully
|
/// @returns true if the statement was emitted successfully
|
||||||
bool EmitCase(const ast::SwitchStatement* s, size_t case_idx);
|
bool EmitCase(const ast::SwitchStatement* s, size_t case_idx);
|
||||||
/// Handles generating constructor expressions
|
|
||||||
/// @param out the output of the expression stream
|
|
||||||
/// @param expr the constructor expression
|
|
||||||
/// @returns true if the expression was emitted
|
|
||||||
bool EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr);
|
|
||||||
/// Handles generating a discard statement
|
/// Handles generating a discard statement
|
||||||
/// @param stmt the discard statement
|
/// @param stmt the discard statement
|
||||||
/// @returns true if the statement was successfully emitted
|
/// @returns true if the statement was successfully emitted
|
||||||
|
|
|
@ -1291,11 +1291,6 @@ bool GeneratorImpl::EmitCase(const ast::CaseStatement* stmt) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneratorImpl::EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr) {
|
|
||||||
return EmitTypeConstructor(out, expr->As<ast::TypeConstructorExpression>());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GeneratorImpl::EmitContinue(const ast::ContinueStatement*) {
|
bool GeneratorImpl::EmitContinue(const ast::ContinueStatement*) {
|
||||||
if (!emit_continuing_()) {
|
if (!emit_continuing_()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -1430,8 +1425,8 @@ bool GeneratorImpl::EmitExpression(std::ostream& out,
|
||||||
if (auto* c = expr->As<ast::CallExpression>()) {
|
if (auto* c = expr->As<ast::CallExpression>()) {
|
||||||
return EmitCall(out, c);
|
return EmitCall(out, c);
|
||||||
}
|
}
|
||||||
if (auto* c = expr->As<ast::ConstructorExpression>()) {
|
if (auto* c = expr->As<ast::TypeConstructorExpression>()) {
|
||||||
return EmitConstructor(out, c);
|
return EmitTypeConstructor(out, c);
|
||||||
}
|
}
|
||||||
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
||||||
return EmitIdentifier(out, i);
|
return EmitIdentifier(out, i);
|
||||||
|
|
|
@ -182,12 +182,6 @@ class GeneratorImpl : public TextGenerator {
|
||||||
/// @param stmt the statement
|
/// @param stmt the statement
|
||||||
/// @returns true if the statement was emitted successfully
|
/// @returns true if the statement was emitted successfully
|
||||||
bool EmitCase(const ast::CaseStatement* stmt);
|
bool EmitCase(const ast::CaseStatement* stmt);
|
||||||
/// Handles generating constructor expressions
|
|
||||||
/// @param out the output of the expression stream
|
|
||||||
/// @param expr the constructor expression
|
|
||||||
/// @returns true if the expression was emitted
|
|
||||||
bool EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr);
|
|
||||||
/// Handles a continue statement
|
/// Handles a continue statement
|
||||||
/// @param stmt the statement to emit
|
/// @param stmt the statement to emit
|
||||||
/// @returns true if the statement was emitted successfully
|
/// @returns true if the statement was emitted successfully
|
||||||
|
|
|
@ -577,7 +577,7 @@ uint32_t Builder::GenerateExpression(const ast::Expression* expr) {
|
||||||
if (auto* c = expr->As<ast::CallExpression>()) {
|
if (auto* c = expr->As<ast::CallExpression>()) {
|
||||||
return GenerateCallExpression(c);
|
return GenerateCallExpression(c);
|
||||||
}
|
}
|
||||||
if (auto* c = expr->As<ast::ConstructorExpression>()) {
|
if (auto* c = expr->As<ast::TypeConstructorExpression>()) {
|
||||||
return GenerateConstructorExpression(nullptr, c);
|
return GenerateConstructorExpression(nullptr, c);
|
||||||
}
|
}
|
||||||
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
if (auto* i = expr->As<ast::IdentifierExpression>()) {
|
||||||
|
|
|
@ -134,8 +134,8 @@ bool GeneratorImpl::EmitExpression(std::ostream& out,
|
||||||
if (auto* l = expr->As<ast::Literal>()) {
|
if (auto* l = expr->As<ast::Literal>()) {
|
||||||
return EmitLiteral(out, l);
|
return EmitLiteral(out, l);
|
||||||
}
|
}
|
||||||
if (auto* c = expr->As<ast::ConstructorExpression>()) {
|
if (auto* c = expr->As<ast::TypeConstructorExpression>()) {
|
||||||
return EmitConstructor(out, c);
|
return EmitTypeConstructor(out, c);
|
||||||
}
|
}
|
||||||
if (auto* m = expr->As<ast::MemberAccessorExpression>()) {
|
if (auto* m = expr->As<ast::MemberAccessorExpression>()) {
|
||||||
return EmitMemberAccessor(out, m);
|
return EmitMemberAccessor(out, m);
|
||||||
|
@ -243,11 +243,6 @@ bool GeneratorImpl::EmitCall(std::ostream& out,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GeneratorImpl::EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr) {
|
|
||||||
return EmitTypeConstructor(out, expr->As<ast::TypeConstructorExpression>());
|
|
||||||
}
|
|
||||||
|
|
||||||
bool GeneratorImpl::EmitTypeConstructor(
|
bool GeneratorImpl::EmitTypeConstructor(
|
||||||
std::ostream& out,
|
std::ostream& out,
|
||||||
const ast::TypeConstructorExpression* expr) {
|
const ast::TypeConstructorExpression* expr) {
|
||||||
|
|
|
@ -120,18 +120,12 @@ class GeneratorImpl : public TextGenerator {
|
||||||
/// Handles generating an identifier expression
|
/// Handles generating an identifier expression
|
||||||
/// @param out the output of the expression stream
|
/// @param out the output of the expression stream
|
||||||
/// @param expr the identifier expression
|
/// @param expr the identifier expression
|
||||||
/// @returns true if the identifeir was emitted
|
/// @returns true if the identifier was emitted
|
||||||
bool EmitIdentifier(std::ostream& out, const ast::IdentifierExpression* expr);
|
bool EmitIdentifier(std::ostream& out, const ast::IdentifierExpression* expr);
|
||||||
/// Handles an if statement
|
/// Handles an if statement
|
||||||
/// @param stmt the statement to emit
|
/// @param stmt the statement to emit
|
||||||
/// @returns true if the statement was successfully emitted
|
/// @returns true if the statement was successfully emitted
|
||||||
bool EmitIf(const ast::IfStatement* stmt);
|
bool EmitIf(const ast::IfStatement* stmt);
|
||||||
/// Handles generating constructor expressions
|
|
||||||
/// @param out the output of the expression stream
|
|
||||||
/// @param expr the constructor expression
|
|
||||||
/// @returns true if the expression was emitted
|
|
||||||
bool EmitConstructor(std::ostream& out,
|
|
||||||
const ast::ConstructorExpression* expr);
|
|
||||||
/// Handles generating a discard statement
|
/// Handles generating a discard statement
|
||||||
/// @param stmt the discard statement
|
/// @param stmt the discard statement
|
||||||
/// @returns true if the statement was successfully emitted
|
/// @returns true if the statement was successfully emitted
|
||||||
|
|
Loading…
Reference in New Issue