Use enum for builtin types
This commit is contained in:
parent
a3143debdb
commit
c44e0b512e
13 changed files with 278 additions and 121 deletions
|
|
@ -46,7 +46,7 @@ using h = g<T, a>;
|
|||
{
|
||||
check_template_parameters(alias, {{cpp_entity_kind::template_type_parameter_t, "T"}});
|
||||
REQUIRE(equal_types(idx, alias.type_alias().underlying_type(),
|
||||
*cpp_builtin_type::build("int")));
|
||||
*cpp_builtin_type::build(cpp_int)));
|
||||
}
|
||||
else if (alias.name() == "b")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -57,8 +57,7 @@ enum c : int;
|
|||
REQUIRE(expr.kind() == cpp_expression_kind::unexposed);
|
||||
REQUIRE(static_cast<const cpp_unexposed_expression&>(expr).expression()
|
||||
== "42");
|
||||
REQUIRE(
|
||||
equal_types(idx, expr.type(), *cpp_builtin_type::build("unsigned int")));
|
||||
REQUIRE(equal_types(idx, expr.type(), *cpp_builtin_type::build(cpp_uint)));
|
||||
}
|
||||
else if (val.name() == "a_d")
|
||||
{
|
||||
|
|
@ -69,8 +68,7 @@ enum c : int;
|
|||
REQUIRE(expr.kind() == cpp_expression_kind::unexposed);
|
||||
REQUIRE(static_cast<const cpp_unexposed_expression&>(expr).expression()
|
||||
== "a_a+2");
|
||||
REQUIRE(
|
||||
equal_types(idx, expr.type(), *cpp_builtin_type::build("unsigned int")));
|
||||
REQUIRE(equal_types(idx, expr.type(), *cpp_builtin_type::build(cpp_uint)));
|
||||
}
|
||||
else
|
||||
REQUIRE(false);
|
||||
|
|
@ -84,8 +82,8 @@ enum c : int;
|
|||
if (e.is_definition())
|
||||
{
|
||||
REQUIRE(e.underlying_type());
|
||||
REQUIRE(
|
||||
equal_types(idx, e.underlying_type().value(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, e.underlying_type().value(),
|
||||
*cpp_builtin_type::build(cpp_int)));
|
||||
|
||||
auto no_vals = 0u;
|
||||
for (auto& val : e)
|
||||
|
|
@ -103,7 +101,7 @@ enum c : int;
|
|||
auto& expr = val.value().value();
|
||||
REQUIRE(expr.kind() == cpp_expression_kind::literal);
|
||||
REQUIRE(static_cast<const cpp_literal_expression&>(expr).value() == "42");
|
||||
REQUIRE(equal_types(idx, expr.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, expr.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
}
|
||||
else
|
||||
REQUIRE(false);
|
||||
|
|
@ -128,7 +126,8 @@ enum c : int;
|
|||
REQUIRE(e.is_declaration());
|
||||
REQUIRE(!e.is_definition());
|
||||
REQUIRE(!e.is_scoped());
|
||||
REQUIRE(equal_types(idx, e.underlying_type().value(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(
|
||||
equal_types(idx, e.underlying_type().value(), *cpp_builtin_type::build(cpp_int)));
|
||||
REQUIRE(count_children(e) == 0u);
|
||||
|
||||
auto definition = get_definition(idx, e);
|
||||
|
|
|
|||
|
|
@ -65,32 +65,32 @@ void ns::l()
|
|||
|
||||
if (func.name() == "a")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("void")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_void)));
|
||||
REQUIRE(count_children(func) == 0u);
|
||||
REQUIRE(!func.is_variadic());
|
||||
}
|
||||
else if (func.name() == "b")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_int)));
|
||||
|
||||
auto count = 0u;
|
||||
for (auto& param : func)
|
||||
{
|
||||
if (param.name() == "a")
|
||||
{
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
REQUIRE(!param.default_value());
|
||||
}
|
||||
else if (param.name() == "b")
|
||||
{
|
||||
REQUIRE(
|
||||
equal_types(idx, param.type(), *cpp_pointer_type::build(
|
||||
cpp_builtin_type::build("float"))));
|
||||
REQUIRE(equal_types(idx, param.type(),
|
||||
*cpp_pointer_type::build(
|
||||
cpp_builtin_type::build(cpp_float))));
|
||||
REQUIRE(param.default_value());
|
||||
REQUIRE(equal_expressions(param.default_value().value(),
|
||||
*cpp_unexposed_expression::
|
||||
build(cpp_pointer_type::build(
|
||||
cpp_builtin_type::build("float")),
|
||||
cpp_builtin_type::build(cpp_float)),
|
||||
"nullptr")));
|
||||
}
|
||||
else
|
||||
|
|
@ -105,10 +105,10 @@ void ns::l()
|
|||
REQUIRE(
|
||||
equal_types(idx, func.return_type(),
|
||||
*cpp_reference_type::
|
||||
build(cpp_array_type::build(cpp_builtin_type::build("int"),
|
||||
build(cpp_array_type::build(cpp_builtin_type::build(cpp_int),
|
||||
cpp_literal_expression::
|
||||
build(cpp_builtin_type::build(
|
||||
"unsigned long long"),
|
||||
cpp_ulonglong),
|
||||
"10")),
|
||||
cpp_ref_lvalue)));
|
||||
|
||||
|
|
@ -121,7 +121,7 @@ void ns::l()
|
|||
equal_types(idx, param.type(),
|
||||
*cpp_decltype_type::build(
|
||||
cpp_literal_expression::build(cpp_builtin_type::build(
|
||||
"int"),
|
||||
cpp_int),
|
||||
"42"))));
|
||||
REQUIRE(!param.default_value());
|
||||
}
|
||||
|
|
@ -135,7 +135,7 @@ void ns::l()
|
|||
}
|
||||
else if (func.name() == "d" || func.name() == "e" || func.name() == "f")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("void")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_void)));
|
||||
REQUIRE(count_children(func) == 0u);
|
||||
REQUIRE(!func.is_variadic());
|
||||
REQUIRE(func.storage_class() == cpp_storage_class_none);
|
||||
|
|
@ -143,7 +143,7 @@ void ns::l()
|
|||
REQUIRE(func.noexcept_condition());
|
||||
check_body(func, cpp_function_declaration);
|
||||
|
||||
auto bool_t = cpp_builtin_type::build("bool");
|
||||
auto bool_t = cpp_builtin_type::build(cpp_bool);
|
||||
if (func.name() == "d")
|
||||
REQUIRE(
|
||||
equal_expressions(func.noexcept_condition().value(),
|
||||
|
|
@ -160,7 +160,7 @@ void ns::l()
|
|||
else if (func.name() == "g" || func.name() == "h" || func.name() == "i"
|
||||
|| func.name() == "j")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("void")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_void)));
|
||||
REQUIRE(count_children(func) == 0u);
|
||||
REQUIRE(!func.is_variadic());
|
||||
REQUIRE(!func.noexcept_condition());
|
||||
|
|
@ -189,7 +189,7 @@ void ns::l()
|
|||
}
|
||||
else if (func.name() == "k" || func.name() == "l" || func.name() == "ns::l")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("void")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_void)));
|
||||
REQUIRE(count_children(func) == 0u);
|
||||
REQUIRE(!func.is_variadic());
|
||||
REQUIRE(!func.noexcept_condition());
|
||||
|
|
@ -234,7 +234,7 @@ void foo::a() {}
|
|||
|
||||
if (func.name() == "a" || func.name() == "foo::a")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("void")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_void)));
|
||||
REQUIRE(!func.noexcept_condition());
|
||||
REQUIRE(!func.is_constexpr());
|
||||
|
||||
|
|
@ -245,18 +245,18 @@ void foo::a() {}
|
|||
}
|
||||
else if (func.name() == "b")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_int)));
|
||||
REQUIRE(func.noexcept_condition());
|
||||
REQUIRE(
|
||||
equal_expressions(func.noexcept_condition().value(),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build("bool"),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build(cpp_bool),
|
||||
"true")));
|
||||
REQUIRE(!func.is_constexpr());
|
||||
REQUIRE(func.body_kind() == cpp_function_definition);
|
||||
}
|
||||
else if (func.name() == "c")
|
||||
{
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("char")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_char)));
|
||||
REQUIRE(!func.noexcept_condition());
|
||||
REQUIRE(func.is_constexpr());
|
||||
REQUIRE(func.body_kind() == cpp_function_deleted);
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ d::d(const int&);
|
|||
REQUIRE(tfunc.function().kind() == cpp_entity_kind::function_t);
|
||||
auto& func = static_cast<const cpp_function&>(tfunc.function());
|
||||
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_int)));
|
||||
|
||||
auto count = 0u;
|
||||
for (auto& param : func)
|
||||
|
|
@ -188,7 +188,7 @@ d::d(const int&);
|
|||
equal_types(idx, param.type(),
|
||||
*cpp_reference_type::
|
||||
build(cpp_cv_qualified_type::build(cpp_builtin_type::build(
|
||||
"int"),
|
||||
cpp_int),
|
||||
cpp_cv_const),
|
||||
cpp_ref_lvalue)));
|
||||
}
|
||||
|
|
@ -210,7 +210,7 @@ d::d(const int&);
|
|||
for (auto& param : func)
|
||||
{
|
||||
++count;
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
}
|
||||
REQUIRE(count == 1u);
|
||||
}
|
||||
|
|
@ -222,7 +222,7 @@ d::d(const int&);
|
|||
auto& func = static_cast<const cpp_member_function&>(tfunc.function());
|
||||
REQUIRE(func.cv_qualifier() == cpp_cv_none);
|
||||
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_int)));
|
||||
}
|
||||
else if (tfunc.name() == "d::operator int")
|
||||
{
|
||||
|
|
@ -232,7 +232,7 @@ d::d(const int&);
|
|||
auto& func = static_cast<const cpp_conversion_op&>(tfunc.function());
|
||||
REQUIRE(func.cv_qualifier() == cpp_cv_const);
|
||||
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_int)));
|
||||
}
|
||||
else if (tfunc.name() == "d::d")
|
||||
{
|
||||
|
|
@ -249,7 +249,7 @@ d::d(const int&);
|
|||
equal_types(idx, param.type(),
|
||||
*cpp_reference_type::
|
||||
build(cpp_cv_qualified_type::build(cpp_builtin_type::build(
|
||||
"int"),
|
||||
cpp_int),
|
||||
cpp_cv_const),
|
||||
cpp_ref_lvalue)));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ struct bar : foo
|
|||
REQUIRE(count_children(func) == 0u);
|
||||
REQUIRE(!func.is_variadic());
|
||||
REQUIRE(!func.is_constexpr());
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build("void")));
|
||||
REQUIRE(equal_types(idx, func.return_type(), *cpp_builtin_type::build(cpp_void)));
|
||||
if (func.name() != "b")
|
||||
REQUIRE(!func.noexcept_condition());
|
||||
if (func.name() != "g" && func.name() != "h")
|
||||
|
|
@ -60,7 +60,7 @@ struct bar : foo
|
|||
REQUIRE(func.noexcept_condition());
|
||||
REQUIRE(
|
||||
equal_expressions(func.noexcept_condition().value(),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build("bool"),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build(cpp_bool),
|
||||
"true")));
|
||||
REQUIRE(func.cv_qualifier() == cpp_cv_none);
|
||||
REQUIRE(func.ref_qualifier() == cpp_ref_none);
|
||||
|
|
@ -162,14 +162,14 @@ struct foo
|
|||
{
|
||||
REQUIRE(op.name() == "operator int&");
|
||||
REQUIRE(equal_types(idx, op.return_type(),
|
||||
*cpp_reference_type::build(cpp_builtin_type::build("int"),
|
||||
*cpp_reference_type::build(cpp_builtin_type::build(cpp_int),
|
||||
cpp_ref_lvalue)));
|
||||
REQUIRE(op.cv_qualifier() == cpp_cv_none);
|
||||
}
|
||||
else if (op.is_explicit() && !op.is_constexpr())
|
||||
{
|
||||
REQUIRE(op.name() == "operator bool");
|
||||
REQUIRE(equal_types(idx, op.return_type(), *cpp_builtin_type::build("bool")));
|
||||
REQUIRE(equal_types(idx, op.return_type(), *cpp_builtin_type::build(cpp_bool)));
|
||||
REQUIRE(op.cv_qualifier() == cpp_cv_const);
|
||||
}
|
||||
else if (!op.is_explicit() && op.is_constexpr())
|
||||
|
|
@ -209,7 +209,7 @@ struct foo
|
|||
REQUIRE(cont.noexcept_condition());
|
||||
REQUIRE(
|
||||
equal_expressions(cont.noexcept_condition().value(),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build("bool"),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build(cpp_bool),
|
||||
"true")));
|
||||
REQUIRE(!cont.is_explicit());
|
||||
REQUIRE(!cont.is_constexpr());
|
||||
|
|
@ -275,10 +275,10 @@ struct d : c
|
|||
REQUIRE(!dtor.is_virtual());
|
||||
REQUIRE(dtor.body_kind() == cpp_function_definition);
|
||||
REQUIRE(dtor.noexcept_condition());
|
||||
REQUIRE(
|
||||
equal_expressions(dtor.noexcept_condition().value(),
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build("bool"),
|
||||
"false")));
|
||||
REQUIRE(equal_expressions(dtor.noexcept_condition().value(),
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build(
|
||||
cpp_bool),
|
||||
"false")));
|
||||
}
|
||||
else if (dtor.name() == "~c")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -24,18 +24,18 @@ struct foo
|
|||
auto count = test_visit<cpp_member_variable>(*file, [&](const cpp_member_variable& var) {
|
||||
if (var.name() == "a")
|
||||
{
|
||||
auto type = cpp_builtin_type::build("int");
|
||||
auto type = cpp_builtin_type::build(cpp_int);
|
||||
REQUIRE(equal_types(idx, var.type(), *type));
|
||||
REQUIRE(!var.default_value());
|
||||
REQUIRE(!var.is_mutable());
|
||||
}
|
||||
else if (var.name() == "b")
|
||||
{
|
||||
auto type = cpp_builtin_type::build("float");
|
||||
auto type = cpp_builtin_type::build(cpp_float);
|
||||
REQUIRE(equal_types(idx, var.type(), *type));
|
||||
|
||||
// all initializers are unexposed
|
||||
auto def = cpp_unexposed_expression::build(cpp_builtin_type::build("float"), "3.14f");
|
||||
auto def = cpp_unexposed_expression::build(cpp_builtin_type::build(cpp_float), "3.14f");
|
||||
REQUIRE(var.default_value());
|
||||
REQUIRE(equal_expressions(var.default_value().value(), *def));
|
||||
|
||||
|
|
@ -43,7 +43,7 @@ struct foo
|
|||
}
|
||||
else if (var.name() == "c")
|
||||
{
|
||||
auto type = cpp_builtin_type::build("char");
|
||||
auto type = cpp_builtin_type::build(cpp_char);
|
||||
REQUIRE(equal_types(idx, var.type(), *type));
|
||||
REQUIRE(!var.default_value());
|
||||
REQUIRE(var.is_mutable());
|
||||
|
|
@ -70,7 +70,7 @@ struct foo
|
|||
auto file = parse({}, "cpp_bitfield.cpp", code);
|
||||
auto count = test_visit<cpp_bitfield>(*file, [&](const cpp_bitfield& bf) {
|
||||
REQUIRE(!bf.default_value());
|
||||
REQUIRE(equal_types({}, bf.type(), *cpp_builtin_type::build("char")));
|
||||
REQUIRE(equal_types({}, bf.type(), *cpp_builtin_type::build(cpp_char)));
|
||||
|
||||
if (bf.name() == "a")
|
||||
{
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ using e = void;
|
|||
auto file = parse(idx, "cpp_template_type_parameter.cpp", code);
|
||||
auto count = test_visit<cpp_alias_template>(*file, [&](const cpp_alias_template& alias) {
|
||||
REQUIRE(equal_types(idx, alias.type_alias().underlying_type(),
|
||||
*cpp_builtin_type::build("void")));
|
||||
*cpp_builtin_type::build(cpp_void)));
|
||||
|
||||
for (auto& p : alias.parameters())
|
||||
{
|
||||
|
|
@ -112,7 +112,7 @@ using d = void;
|
|||
auto file = parse(idx, "cpp_non_type_template_parameter.cpp", code);
|
||||
auto count = test_visit<cpp_alias_template>(*file, [&](const cpp_alias_template& alias) {
|
||||
REQUIRE(equal_types(idx, alias.type_alias().underlying_type(),
|
||||
*cpp_builtin_type::build("void")));
|
||||
*cpp_builtin_type::build(cpp_void)));
|
||||
|
||||
for (auto& p : alias.parameters())
|
||||
{
|
||||
|
|
@ -122,7 +122,7 @@ using d = void;
|
|||
if (param.name() == "A")
|
||||
{
|
||||
REQUIRE(alias.name() == "a");
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
REQUIRE(!param.is_variadic());
|
||||
REQUIRE(!param.default_value());
|
||||
}
|
||||
|
|
@ -130,18 +130,18 @@ using d = void;
|
|||
{
|
||||
REQUIRE(alias.name() == "b");
|
||||
REQUIRE(equal_types(idx, param.type(),
|
||||
*cpp_pointer_type::build(cpp_builtin_type::build("char"))));
|
||||
*cpp_pointer_type::build(cpp_builtin_type::build(cpp_char))));
|
||||
REQUIRE(!param.is_variadic());
|
||||
REQUIRE(param.default_value());
|
||||
REQUIRE(equal_expressions(param.default_value().value(),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build(
|
||||
"nullptr_t"),
|
||||
cpp_nullptr),
|
||||
"nullptr")));
|
||||
}
|
||||
else if (param.name() == "C")
|
||||
{
|
||||
REQUIRE(alias.name() == "c");
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
REQUIRE(param.is_variadic());
|
||||
REQUIRE(!param.default_value());
|
||||
}
|
||||
|
|
@ -149,7 +149,7 @@ using d = void;
|
|||
{
|
||||
REQUIRE(alias.name() == "d");
|
||||
|
||||
cpp_function_type::builder builder(cpp_builtin_type::build("void"));
|
||||
cpp_function_type::builder builder(cpp_builtin_type::build(cpp_void));
|
||||
builder.is_variadic();
|
||||
REQUIRE(equal_types(idx, param.type(), *cpp_pointer_type::build(builder.finish())));
|
||||
|
||||
|
|
@ -190,7 +190,7 @@ using d = void;
|
|||
auto file = parse(idx, "cpp_template_template_parameter.cpp", code);
|
||||
auto count = test_visit<cpp_alias_template>(*file, [&](const cpp_alias_template& alias) {
|
||||
REQUIRE(equal_types(idx, alias.type_alias().underlying_type(),
|
||||
*cpp_builtin_type::build("void")));
|
||||
*cpp_builtin_type::build(cpp_void)));
|
||||
if (alias.name() == "def")
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,8 +22,8 @@ bool equal_types(const cpp_entity_index& idx, const cpp_type& parsed, const cpp_
|
|||
switch (parsed.kind())
|
||||
{
|
||||
case cpp_type_kind::builtin:
|
||||
return static_cast<const cpp_builtin_type&>(parsed).name()
|
||||
== static_cast<const cpp_builtin_type&>(synthesized).name();
|
||||
return static_cast<const cpp_builtin_type&>(parsed).builtin_type_kind()
|
||||
== static_cast<const cpp_builtin_type&>(synthesized).builtin_type_kind();
|
||||
|
||||
case cpp_type_kind::user_defined:
|
||||
{
|
||||
|
|
@ -299,7 +299,7 @@ typedef decltype(0) w;
|
|||
};
|
||||
|
||||
auto make_size = [](std::string size, bool literal) -> std::unique_ptr<cpp_expression> {
|
||||
auto type = cpp_builtin_type::build("unsigned long long");
|
||||
auto type = cpp_builtin_type::build(cpp_ulonglong);
|
||||
if (literal)
|
||||
return cpp_literal_expression::build(std::move(type), std::move(size));
|
||||
else
|
||||
|
|
@ -311,41 +311,41 @@ typedef decltype(0) w;
|
|||
auto count = test_visit<cpp_type_alias>(*file, [&](const cpp_type_alias& alias) {
|
||||
if (alias.name() == "a")
|
||||
{
|
||||
auto type = cpp_builtin_type::build("int");
|
||||
auto type = cpp_builtin_type::build(cpp_int);
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "b")
|
||||
{
|
||||
auto type = add_cv(cpp_builtin_type::build("long double"), cpp_cv_const_volatile);
|
||||
auto type = add_cv(cpp_builtin_type::build(cpp_longdouble), cpp_cv_const_volatile);
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "c")
|
||||
{
|
||||
auto type = cpp_pointer_type::build(cpp_builtin_type::build("int"));
|
||||
auto type = cpp_pointer_type::build(cpp_builtin_type::build(cpp_int));
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "d")
|
||||
{
|
||||
auto type = cpp_pointer_type::build(
|
||||
add_cv(cpp_builtin_type::build("unsigned int"), cpp_cv_const));
|
||||
auto type =
|
||||
cpp_pointer_type::build(add_cv(cpp_builtin_type::build(cpp_uint), cpp_cv_const));
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "e")
|
||||
{
|
||||
auto type = add_cv(cpp_pointer_type::build(
|
||||
add_cv(cpp_builtin_type::build("unsigned int"), cpp_cv_const)),
|
||||
add_cv(cpp_builtin_type::build(cpp_uint), cpp_cv_const)),
|
||||
cpp_cv_volatile);
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "f")
|
||||
{
|
||||
auto type = cpp_reference_type::build(cpp_builtin_type::build("int"), cpp_ref_lvalue);
|
||||
auto type = cpp_reference_type::build(cpp_builtin_type::build(cpp_int), cpp_ref_lvalue);
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "g")
|
||||
{
|
||||
auto type =
|
||||
cpp_reference_type::build(add_cv(cpp_builtin_type::build("int"), cpp_cv_const),
|
||||
cpp_reference_type::build(add_cv(cpp_builtin_type::build(cpp_int), cpp_cv_const),
|
||||
cpp_ref_rvalue);
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
|
|
@ -369,26 +369,26 @@ typedef decltype(0) w;
|
|||
else if (alias.name() == "k")
|
||||
{
|
||||
auto type =
|
||||
cpp_array_type::build(cpp_builtin_type::build("int"), make_size("42", true));
|
||||
cpp_array_type::build(cpp_builtin_type::build(cpp_int), make_size("42", true));
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "l")
|
||||
{
|
||||
auto type =
|
||||
cpp_array_type::build(cpp_pointer_type::build(cpp_builtin_type::build("float")),
|
||||
cpp_array_type::build(cpp_pointer_type::build(cpp_builtin_type::build(cpp_float)),
|
||||
nullptr);
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "m")
|
||||
{
|
||||
auto type =
|
||||
cpp_array_type::build(cpp_builtin_type::build("char"), make_size("42", true));
|
||||
cpp_array_type::build(cpp_builtin_type::build(cpp_char), make_size("42", true));
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else if (alias.name() == "n")
|
||||
{
|
||||
cpp_function_type::builder builder(cpp_builtin_type::build("void"));
|
||||
builder.add_parameter(cpp_builtin_type::build("int"));
|
||||
cpp_function_type::builder builder(cpp_builtin_type::build(cpp_void));
|
||||
builder.add_parameter(cpp_builtin_type::build(cpp_int));
|
||||
auto type = cpp_pointer_type::build(builder.finish());
|
||||
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
|
|
@ -396,9 +396,9 @@ typedef decltype(0) w;
|
|||
else if (alias.name() == "o")
|
||||
{
|
||||
cpp_function_type::builder builder(
|
||||
cpp_pointer_type::build(cpp_builtin_type::build("char")));
|
||||
cpp_pointer_type::build(cpp_builtin_type::build(cpp_char)));
|
||||
builder.add_parameter(
|
||||
cpp_reference_type::build(add_cv(cpp_builtin_type::build("int"), cpp_cv_const),
|
||||
cpp_reference_type::build(add_cv(cpp_builtin_type::build(cpp_int), cpp_cv_const),
|
||||
cpp_ref_lvalue));
|
||||
builder.is_variadic();
|
||||
auto type = cpp_reference_type::build(builder.finish(), cpp_ref_lvalue);
|
||||
|
|
@ -409,7 +409,7 @@ typedef decltype(0) w;
|
|||
{
|
||||
cpp_function_type::builder builder(
|
||||
cpp_user_defined_type::build(cpp_type_ref(cpp_entity_id(""), "n")));
|
||||
builder.add_parameter(cpp_builtin_type::build("int"));
|
||||
builder.add_parameter(cpp_builtin_type::build(cpp_int));
|
||||
builder.add_parameter(
|
||||
cpp_user_defined_type::build(cpp_type_ref(cpp_entity_id(""), "o")));
|
||||
auto type = cpp_pointer_type::build(builder.finish());
|
||||
|
|
@ -420,8 +420,8 @@ typedef decltype(0) w;
|
|||
{
|
||||
cpp_member_function_type::builder builder(cpp_user_defined_type::build(
|
||||
cpp_type_ref(cpp_entity_id(""), "foo")),
|
||||
cpp_builtin_type::build("void"));
|
||||
builder.add_parameter(cpp_builtin_type::build("int"));
|
||||
cpp_builtin_type::build(cpp_void));
|
||||
builder.add_parameter(cpp_builtin_type::build(cpp_int));
|
||||
auto type = cpp_pointer_type::build(builder.finish());
|
||||
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
|
|
@ -434,8 +434,8 @@ typedef decltype(0) w;
|
|||
cpp_ref_lvalue);
|
||||
|
||||
cpp_member_function_type::builder builder(std::move(obj),
|
||||
cpp_builtin_type::build("void"));
|
||||
builder.add_parameter(cpp_builtin_type::build("int"));
|
||||
cpp_builtin_type::build(cpp_void));
|
||||
builder.add_parameter(cpp_builtin_type::build(cpp_int));
|
||||
builder.is_variadic();
|
||||
auto type = cpp_pointer_type::build(builder.finish());
|
||||
|
||||
|
|
@ -471,7 +471,7 @@ typedef decltype(0) w;
|
|||
else if (alias.name() == "w")
|
||||
{
|
||||
auto type = cpp_decltype_type::build(
|
||||
cpp_literal_expression::build(cpp_builtin_type::build("int"), "0"));
|
||||
cpp_literal_expression::build(cpp_builtin_type::build(cpp_int), "0"));
|
||||
REQUIRE(equal_types(idx, alias.underlying_type(), *type));
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -72,21 +72,21 @@ const decltype(o)& p = o;
|
|||
|
||||
auto file = parse(idx, "cpp_variable.cpp", code);
|
||||
|
||||
auto int_type = cpp_builtin_type::build("int");
|
||||
auto int_type = cpp_builtin_type::build(cpp_int);
|
||||
auto count = test_visit<cpp_variable>(*file, [&](const cpp_variable& var) {
|
||||
if (var.name() == "a")
|
||||
check_variable(var, *int_type, nullptr, cpp_storage_class_none, false, false);
|
||||
else if (var.name() == "b")
|
||||
check_variable(var, *cpp_builtin_type::build("unsigned long long"),
|
||||
check_variable(var, *cpp_builtin_type::build(cpp_ulonglong),
|
||||
// unexposed due to implicit cast, I think
|
||||
type_safe::ref(
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build("int"),
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build(cpp_int),
|
||||
"42")),
|
||||
cpp_storage_class_none, false, false);
|
||||
else if (var.name() == "c")
|
||||
check_variable(var, *cpp_builtin_type::build("float"),
|
||||
check_variable(var, *cpp_builtin_type::build(cpp_float),
|
||||
type_safe::ref(
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build("float"),
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build(cpp_float),
|
||||
"3.f+0.14f")),
|
||||
cpp_storage_class_none, false, false);
|
||||
else if (var.name() == "d")
|
||||
|
|
@ -99,10 +99,10 @@ const decltype(o)& p = o;
|
|||
check_variable(var, *int_type, nullptr,
|
||||
cpp_storage_class_static | cpp_storage_class_thread_local, false, false);
|
||||
else if (var.name() == "h")
|
||||
check_variable(var, *cpp_cv_qualified_type::build(cpp_builtin_type::build("int"),
|
||||
check_variable(var, *cpp_cv_qualified_type::build(cpp_builtin_type::build(cpp_int),
|
||||
cpp_cv_const),
|
||||
type_safe::ref(
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build("int"),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build(cpp_int),
|
||||
"12")),
|
||||
cpp_storage_class_none, true, false);
|
||||
else if (var.name() == "i")
|
||||
|
|
@ -135,7 +135,7 @@ const decltype(o)& p = o;
|
|||
else if (var.name() == "m")
|
||||
check_variable(var, *cpp_auto_type::build(),
|
||||
type_safe::ref(
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build("int"),
|
||||
*cpp_literal_expression::build(cpp_builtin_type::build(cpp_int),
|
||||
"128")),
|
||||
cpp_storage_class_none, false, false);
|
||||
else if (var.name() == "n")
|
||||
|
|
@ -144,25 +144,25 @@ const decltype(o)& p = o;
|
|||
cpp_cv_const),
|
||||
cpp_ref_lvalue),
|
||||
type_safe::ref(
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build("int"),
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build(cpp_int),
|
||||
"m")),
|
||||
cpp_storage_class_none, false, false);
|
||||
else if (var.name() == "o")
|
||||
check_variable(var,
|
||||
*cpp_decltype_type::build(
|
||||
cpp_literal_expression::build(cpp_builtin_type::build("int"), "0")),
|
||||
check_variable(var, *cpp_decltype_type::build(
|
||||
cpp_literal_expression::build(cpp_builtin_type::build(cpp_int),
|
||||
"0")),
|
||||
nullptr, cpp_storage_class_none, false, false);
|
||||
else if (var.name() == "p")
|
||||
check_variable(var,
|
||||
*cpp_reference_type::
|
||||
build(cpp_cv_qualified_type::
|
||||
build(cpp_decltype_type::build(
|
||||
cpp_unexposed_expression::
|
||||
build(cpp_builtin_type::build("int"), "o")),
|
||||
cpp_cv_const),
|
||||
cpp_ref_lvalue),
|
||||
check_variable(var, *cpp_reference_type::
|
||||
build(cpp_cv_qualified_type::
|
||||
build(cpp_decltype_type::build(
|
||||
cpp_unexposed_expression::
|
||||
build(cpp_builtin_type::build(cpp_int),
|
||||
"o")),
|
||||
cpp_cv_const),
|
||||
cpp_ref_lvalue),
|
||||
type_safe::ref(
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build("int"),
|
||||
*cpp_unexposed_expression::build(cpp_builtin_type::build(cpp_int),
|
||||
"o")),
|
||||
cpp_storage_class_none, false, false);
|
||||
else
|
||||
|
|
@ -191,14 +191,14 @@ struct test
|
|||
REQUIRE(is_static(var.storage_class()));
|
||||
|
||||
if (var.name() == "a")
|
||||
REQUIRE(equal_types({}, var.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types({}, var.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
else if (var.name() == "b")
|
||||
REQUIRE(equal_types({}, var.type(),
|
||||
*cpp_cv_qualified_type::build(cpp_builtin_type::build("int"),
|
||||
*cpp_cv_qualified_type::build(cpp_builtin_type::build(cpp_int),
|
||||
cpp_cv_const)));
|
||||
else if (var.name() == "c")
|
||||
{
|
||||
REQUIRE(equal_types({}, var.type(), *cpp_builtin_type::build("int")));
|
||||
REQUIRE(equal_types({}, var.type(), *cpp_builtin_type::build(cpp_int)));
|
||||
REQUIRE(is_thread_local(var.storage_class()));
|
||||
}
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue