Add unit type

This commit is contained in:
Nikita Lisitsa 2025-12-16 15:16:06 +03:00
parent ae3e2270c0
commit 7ebf6982e6
5 changed files with 25 additions and 1 deletions

View file

@ -31,6 +31,7 @@ as { return bp::make_as(ctx.location); }
true { return bp::make_true(ctx.location); } true { return bp::make_true(ctx.location); }
false { return bp::make_false(ctx.location); } false { return bp::make_false(ctx.location); }
unit { return bp::make_unit(ctx.location); }
bool { return bp::make_bool(ctx.location); } bool { return bp::make_bool(ctx.location); }
i8 { return bp::make_i8(ctx.location); } i8 { return bp::make_i8(ctx.location); }
u8 { return bp::make_u8(ctx.location); } u8 { return bp::make_u8(ctx.location); }

View file

@ -119,6 +119,7 @@ template <typename T>
%token true %token true
%token false %token false
%token unit
%token bool %token bool
%token i8 %token i8
%token u8 %token u8
@ -190,7 +191,8 @@ variable_keyword
; ;
type_expression type_expression
: primitive_type { $$ = type::type($1); } : unit { $$ = type::type(type::unit_type{}); }
| primitive_type { $$ = type::type($1); }
; ;
primitive_type primitive_type

View file

@ -1,5 +1,6 @@
#pragma once #pragma once
#include <pslang/type/unit.hpp>
#include <pslang/type/primitive.hpp> #include <pslang/type/primitive.hpp>
#include <pslang/type/type_fwd.hpp> #include <pslang/type/type_fwd.hpp>
@ -9,6 +10,7 @@ namespace pslang::type
{ {
using type_impl = std::variant< using type_impl = std::variant<
unit_type,
primitive_type primitive_type
>; >;

View file

@ -0,0 +1,14 @@
#pragma once
namespace pslang::type
{
struct unit_type
{};
inline bool operator == (unit_type const &, unit_type const &)
{
return true;
}
}

View file

@ -7,6 +7,11 @@ namespace pslang::type
namespace namespace
{ {
void print_impl(std::ostream & out, unit_type const & type)
{
out << "unit";
}
void print_impl(std::ostream & out, bool_type const &) void print_impl(std::ostream & out, bool_type const &)
{ {
out << "bool"; out << "bool";