Use enum for builtin types

This commit is contained in:
Jonathan Müller 2017-03-27 22:19:25 +02:00
commit c44e0b512e
13 changed files with 278 additions and 121 deletions

View file

@ -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")
{

View file

@ -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);

View file

@ -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);

View file

@ -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)));
}

View file

@ -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")
{

View file

@ -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")
{

View file

@ -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;

View file

@ -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

View file

@ -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