Skip to content

Commit f31503a

Browse files
authored
Merge pull request #468 from yamacir-kit/release-candidate
2 parents 59f3b72 + 387a751 commit f31503a

10 files changed

+130
-130
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ Procedures for each standard are provided by the following R7RS-style libraries:
9191
cmake -B build -DCMAKE_BUILD_TYPE=Release
9292
cd build
9393
make package
94-
sudo apt install build/meevax_0.5.63_amd64.deb
94+
sudo apt install build/meevax_0.5.66_amd64.deb
9595
```
9696

9797
or
@@ -123,9 +123,9 @@ sudo rm -rf /usr/local/share/meevax
123123

124124
| Target Name | Description
125125
|-------------|-------------
126-
| `all` | Build shared-library `libmeevax.0.5.63.so` and executable `meevax`
126+
| `all` | Build shared-library `libmeevax.0.5.66.so` and executable `meevax`
127127
| `test` | Test executable `meevax`
128-
| `package` | Generate debian package `meevax_0.5.63_amd64.deb`
128+
| `package` | Generate debian package `meevax_0.5.66_amd64.deb`
129129
| `install` | Copy files into `/usr/local` directly
130130

131131
## Usage

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.5.63
1+
0.5.66

]end(

Whitespace-only changes.

include/meevax/kernel/configurator.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ inline namespace kernel
124124
}),
125125
};
126126

127-
auto search = [&](auto&& name) -> auto const&
127+
auto search = [&](auto&& name) -> decltype(auto)
128128
{
129129
if (auto iter = std::find_if(options.begin(), options.end(), [&](auto&& option)
130130
{

include/meevax/kernel/homogeneous_vector.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ inline namespace kernel
7575
std::copy(begin, end, std::begin(valarray));
7676
}
7777

78-
static auto tag() -> auto const&
78+
static auto tag() -> decltype(auto)
7979
{
8080
auto static const tag = lexical_cast<std::string>(std::is_integral_v<T> ? std::is_signed_v<T> ? 's' : 'u' : 'f', sizeof(T) * CHAR_BIT);
8181
return tag;

include/meevax/kernel/implementation_dependent.hpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
#ifndef INCLUDED_MEEVAX_KERNEL_IMPLEMENTATION_DEPENDENT_HPP
1818
#define INCLUDED_MEEVAX_KERNEL_IMPLEMENTATION_DEPENDENT_HPP
1919

20-
#include <meevax/kernel/error.hpp>
21-
#include <meevax/kernel/list.hpp>
20+
#include <meevax/kernel/pair.hpp>
2221

2322
namespace meevax
2423
{

include/meevax/kernel/instruction.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#ifndef INCLUDED_MEEVAX_KERNEL_INSTRUCTION_HPP
1818
#define INCLUDED_MEEVAX_KERNEL_INSTRUCTION_HPP
1919

20+
#include <cstdint>
2021
#include <iostream>
2122

2223
namespace meevax

include/meevax/kernel/list.hpp

-76
Original file line numberDiff line numberDiff line change
@@ -24,87 +24,11 @@ namespace meevax
2424
{
2525
inline namespace kernel
2626
{
27-
template <auto N, typename T>
28-
auto get(T&& x) -> decltype(auto)
29-
{
30-
if constexpr (std::is_same_v<std::decay_t<T>, pair::iterator>)
31-
{
32-
return std::get<N>(*x.current);
33-
}
34-
else if constexpr (std::is_same_v<std::decay_t<T>, object>)
35-
{
36-
return std::get<N>(x.template as<pair>());
37-
}
38-
else
39-
{
40-
return std::get<N>(x);
41-
}
42-
}
43-
44-
inline auto car = [](auto&& x) -> decltype(auto)
45-
{
46-
return get<0>(std::forward<decltype(x)>(x));
47-
};
48-
49-
inline auto cdr = [](auto&& x) -> decltype(auto)
50-
{
51-
return get<1>(std::forward<decltype(x)>(x));
52-
};
53-
54-
inline constexpr auto caar = compose(car, car);
55-
inline constexpr auto cadr = compose(car, cdr);
56-
inline constexpr auto cdar = compose(cdr, car);
57-
inline constexpr auto cddr = compose(cdr, cdr);
58-
59-
inline constexpr auto caaar = compose(car, caar);
60-
inline constexpr auto caadr = compose(car, cadr);
61-
inline constexpr auto cadar = compose(car, cdar);
62-
inline constexpr auto caddr = compose(car, cddr);
63-
inline constexpr auto cdaar = compose(cdr, caar);
64-
inline constexpr auto cdadr = compose(cdr, cadr);
65-
inline constexpr auto cddar = compose(cdr, cdar);
66-
inline constexpr auto cdddr = compose(cdr, cddr);
67-
68-
inline constexpr auto caaaar = compose(car, caaar);
69-
inline constexpr auto caaadr = compose(car, caadr);
70-
inline constexpr auto caadar = compose(car, cadar);
71-
inline constexpr auto caaddr = compose(car, caddr);
72-
inline constexpr auto cadaar = compose(car, cdaar);
73-
inline constexpr auto cadadr = compose(car, cdadr);
74-
inline constexpr auto caddar = compose(car, cddar);
75-
inline constexpr auto cadddr = compose(car, cdddr);
76-
inline constexpr auto cdaaar = compose(cdr, caaar);
77-
inline constexpr auto cdaadr = compose(cdr, caadr);
78-
inline constexpr auto cdadar = compose(cdr, cadar);
79-
inline constexpr auto cdaddr = compose(cdr, caddr);
80-
inline constexpr auto cddaar = compose(cdr, cdaar);
81-
inline constexpr auto cddadr = compose(cdr, cdadr);
82-
inline constexpr auto cdddar = compose(cdr, cddar);
83-
inline constexpr auto cddddr = compose(cdr, cdddr);
84-
85-
template <typename T, typename U, REQUIRES(std::is_convertible<T, object>,
86-
std::is_convertible<U, object>)>
87-
auto operator |(T&& x, U&& y) -> decltype(auto)
88-
{
89-
return make<pair>(std::forward<decltype(x)>(x), std::forward<decltype(y)>(y));
90-
}
91-
92-
inline auto cons = [](auto&&... xs) constexpr
93-
{
94-
return (std::forward<decltype(xs)>(xs) | ...);
95-
};
96-
9727
inline auto list = [](auto&&... xs) constexpr
9828
{
9929
return (std::forward<decltype(xs)>(xs) | ... | unit);
10030
};
10131

102-
inline auto xcons = [](auto&& x, auto&& y) constexpr
103-
{
104-
return cons(std::forward<decltype(y)>(y),
105-
std::forward<decltype(x)>(x));
106-
};
107-
10832
auto make_list(std::size_t, object const& = unit) -> object;
10933

11034
auto iota(std::size_t, object const& = e0, object const& = e1) -> object;

include/meevax/kernel/pair.hpp

+76
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,82 @@ inline namespace kernel
175175
};
176176

177177
auto operator <<(std::ostream &, pair const&) -> std::ostream &;
178+
179+
template <typename T, typename U, REQUIRES(std::is_constructible<pair, T, U>)>
180+
auto operator |(T&& x, U&& y) -> decltype(auto)
181+
{
182+
return make<pair>(std::forward<decltype(x)>(x),
183+
std::forward<decltype(y)>(y));
184+
}
185+
186+
inline auto cons = [](auto&&... xs) constexpr
187+
{
188+
return (std::forward<decltype(xs)>(xs) | ...);
189+
};
190+
191+
inline auto xcons = [](auto&& x, auto&& y) constexpr
192+
{
193+
return cons(std::forward<decltype(y)>(y),
194+
std::forward<decltype(x)>(x));
195+
};
196+
197+
template <auto N, typename T>
198+
auto get(T&& x) -> decltype(auto)
199+
{
200+
if constexpr (std::is_same_v<std::decay_t<T>, pair::iterator>)
201+
{
202+
return std::get<N>(*x.current);
203+
}
204+
else if constexpr (std::is_same_v<std::decay_t<T>, object>)
205+
{
206+
return std::get<N>(x.template as<pair>());
207+
}
208+
else
209+
{
210+
return std::get<N>(x);
211+
}
212+
}
213+
214+
inline auto car = [](auto&& x) -> decltype(auto)
215+
{
216+
return get<0>(std::forward<decltype(x)>(x));
217+
};
218+
219+
inline auto cdr = [](auto&& x) -> decltype(auto)
220+
{
221+
return get<1>(std::forward<decltype(x)>(x));
222+
};
223+
224+
inline constexpr auto caar = compose(car, car);
225+
inline constexpr auto cadr = compose(car, cdr);
226+
inline constexpr auto cdar = compose(cdr, car);
227+
inline constexpr auto cddr = compose(cdr, cdr);
228+
229+
inline constexpr auto caaar = compose(car, caar);
230+
inline constexpr auto caadr = compose(car, cadr);
231+
inline constexpr auto cadar = compose(car, cdar);
232+
inline constexpr auto caddr = compose(car, cddr);
233+
inline constexpr auto cdaar = compose(cdr, caar);
234+
inline constexpr auto cdadr = compose(cdr, cadr);
235+
inline constexpr auto cddar = compose(cdr, cdar);
236+
inline constexpr auto cdddr = compose(cdr, cddr);
237+
238+
inline constexpr auto caaaar = compose(car, caaar);
239+
inline constexpr auto caaadr = compose(car, caadr);
240+
inline constexpr auto caadar = compose(car, cadar);
241+
inline constexpr auto caaddr = compose(car, caddr);
242+
inline constexpr auto cadaar = compose(car, cdaar);
243+
inline constexpr auto cadadr = compose(car, cdadr);
244+
inline constexpr auto caddar = compose(car, cddar);
245+
inline constexpr auto cadddr = compose(car, cdddr);
246+
inline constexpr auto cdaaar = compose(cdr, caaar);
247+
inline constexpr auto cdaadr = compose(cdr, caadr);
248+
inline constexpr auto cdadar = compose(cdr, cadar);
249+
inline constexpr auto cdaddr = compose(cdr, caddr);
250+
inline constexpr auto cddaar = compose(cdr, cdaar);
251+
inline constexpr auto cddadr = compose(cdr, cdadr);
252+
inline constexpr auto cdddar = compose(cdr, cddar);
253+
inline constexpr auto cddddr = compose(cdr, cdddr);
178254
} // namespace kernel
179255
} // namespace meevax
180256

0 commit comments

Comments
 (0)