Skip to content

Commit 7cbf0be

Browse files
committed
Rename struct callable to primitive_procedure
Signed-off-by: yamacir-kit <[email protected]>
1 parent b55c26d commit 7cbf0be

File tree

6 files changed

+38
-35
lines changed

6 files changed

+38
-35
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.106_amd64.deb
94+
sudo apt install build/meevax_0.5.107_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.106.so` and executable `meevax`
126+
| `all` | Build shared-library `libmeevax.0.5.107.so` and executable `meevax`
127127
| `test` | Test executable `meevax`
128-
| `package` | Generate debian package `meevax_0.5.106_amd64.deb`
128+
| `package` | Generate debian package `meevax_0.5.107_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.106
1+
0.5.107

include/meevax/kernel/dynamic_environment.hpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -286,16 +286,16 @@ inline namespace kernel
286286
s = unit;
287287
goto fetch;
288288
}
289-
else if (callee.is_also<callable>()) /* ------------------------------
289+
else if (callee.is_also<primitive_procedure>()) /* -------------------
290290
*
291-
* (<callable> xs . s) e (%call . c) d => (x . s) e c d
291+
* (<primitive-procedure> xs . s) e (%call . c) d => (x . s) e c d
292292
*
293-
* where x = procedure(xs)
293+
* where x = primitive-procedure(xs)
294294
*
295295
* ----------------------------------------------------------------- */
296296
{
297297
assert(tail(c, 1).template is<pair>());
298-
s = cons(callee.as<callable>()(cadr(s)), cddr(s));
298+
s = cons(callee.as<primitive_procedure>()(cadr(s)), cddr(s));
299299
c = cdr(c);
300300
goto fetch;
301301
}
@@ -336,17 +336,17 @@ inline namespace kernel
336336
s = unit;
337337
goto fetch;
338338
}
339-
else if (callee.is_also<callable>()) /* ------------------------------
339+
else if (callee.is_also<primitive_procedure>()) /* -------------------
340340
*
341-
* (<callable> xs) e (%tail-call) (s' e' c' . d) => (x . s') e' c' d
341+
* (<primitive-procedure> xs) e (%tail-call) (s' e' c' . d) => (x . s') e' c' d
342342
*
343-
* where x = procedure(xs)
343+
* where x = primitive-procedure(xs)
344344
*
345345
* ----------------------------------------------------------------- */
346346
{
347347
assert(tail(s, 2).template is<null>());
348348
assert(tail(c, 1).template is<null>());
349-
s = cons(callee.as<callable>()(cadr(s)), car(d));
349+
s = cons(callee.as<primitive_procedure>()(cadr(s)), car(d));
350350
e = cadr(d);
351351
c = caddr(d);
352352
d = cdddr(d);

include/meevax/kernel/procedure.hpp

+23-20
Original file line numberDiff line numberDiff line change
@@ -25,26 +25,28 @@ namespace meevax
2525
{
2626
inline namespace kernel
2727
{
28-
struct callable
28+
struct primitive_procedure
2929
{
30+
using signature = auto (*)(object &) -> object;
31+
3032
std::string const name;
3133

32-
explicit callable(std::string const& name)
34+
explicit primitive_procedure(std::string const& name)
3335
: name { name }
3436
{}
3537

3638
virtual auto operator ()(object & = unit) const -> object = 0;
3739
};
3840

39-
auto operator <<(std::ostream &, callable const&) -> std::ostream &;
41+
auto operator <<(std::ostream &, primitive_procedure const&) -> std::ostream &;
4042

4143
template <typename F>
42-
struct generic_procedure : public callable
44+
struct generic_procedure : public primitive_procedure
4345
{
4446
std::enable_if_t<std::is_invocable_v<F> or std::is_invocable_v<F, object &>, F> invocable;
4547

4648
explicit generic_procedure(std::string const& name, F f)
47-
: callable { name }
49+
: primitive_procedure { name }
4850
, invocable { f }
4951
{}
5052

@@ -95,67 +97,68 @@ inline namespace kernel
9597
into function pointer types to reduce the number of template
9698
instantiations.
9799
*/
98-
template <typename, typename F, typename = void>
99-
struct procedure
100+
template <typename F, typename = void>
101+
struct procedure_traits
100102
{
101103
using type = generic_procedure<F>;
102104
};
103105

104106
/*
105107
Thunk
106108
*/
107-
template <typename T, typename F>
108-
struct procedure<T, F, std::enable_if_t<std::is_convertible_v<F, auto (*)() -> object>>>
109+
template <typename F>
110+
struct procedure_traits<F, std::enable_if_t<std::is_convertible_v<F, auto (*)() -> object>>>
109111
{
110112
using type = generic_procedure<auto (*)() -> object>;
111113
};
112114

113115
/*
114116
Procedure
115117
*/
116-
template <typename T, typename F>
117-
struct procedure<T, F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object const&) -> object>>>
118+
template <typename F>
119+
struct procedure_traits<F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object const&) -> object>>>
118120
{
119121
using type = generic_procedure<auto (*)(object const&) -> object>;
120122
};
121123

122124
/*
123125
Linear update procedure
124126
*/
125-
template <typename T, typename F>
126-
struct procedure<T, F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object &) -> object>>>
127+
template <typename F>
128+
struct procedure_traits<F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object &) -> object>>>
127129
{
128130
using type = generic_procedure<auto (*)(object &) -> object>;
129131
};
130132

131133
/*
132134
Predicate
133135
*/
134-
template <typename T, typename F>
135-
struct procedure<T, F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object const&) -> bool>>>
136+
template <typename F>
137+
struct procedure_traits<F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object const&) -> bool>>>
136138
{
137139
using type = generic_procedure<auto (*)(object const&) -> bool>;
138140
};
139141

140142
/*
141143
Command
142144
*/
143-
template <typename T, typename F>
144-
struct procedure<T, F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object const&) -> void>>>
145+
template <typename F>
146+
struct procedure_traits<F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object const&) -> void>>>
145147
{
146148
using type = generic_procedure<auto (*)(object const&) -> void>;
147149
};
148150

149151
/*
150152
Mutation
151153
*/
152-
template <typename T, typename F>
153-
struct procedure<T, F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object &) -> void>>>
154+
template <typename F>
155+
struct procedure_traits<F, std::enable_if_t<std::is_convertible_v<F, auto (*)(object &) -> void>>>
154156
{
155157
using type = generic_procedure<auto (*)(object &) -> void>;
156158
};
157159

158-
using procedure_pointer = auto (*)(object &) -> object;
160+
template <typename T, typename... Ts>
161+
using procedure = std::enable_if_t<std::is_convertible_v<T, std::string>, procedure_traits<Ts...>>;
159162
} // namespace kernel
160163
} // namespace meevax
161164

src/kernel/boot.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -1302,13 +1302,13 @@ inline namespace kernel
13021302

13031303
library.define<procedure>("procedure?", [](let const& xs)
13041304
{
1305-
return car(xs).is<closure>() or car(xs).is<continuation>() or car(xs).is_also<callable>();
1305+
return car(xs).is<closure>() or car(xs).is<continuation>() or car(xs).is_also<primitive_procedure>();
13061306
});
13071307

13081308
library.define<procedure>("procedure", [](let const& xs)
13091309
{
13101310
return make<procedure>(cadr(xs).as<symbol>(),
1311-
reinterpret_cast<procedure_pointer>(
1311+
reinterpret_cast<primitive_procedure::signature>(
13121312
primary_collector().dlsym(cadr(xs).as<symbol>(),
13131313
primary_collector().dlopen(car(xs).as<string>()))));
13141314
});

src/kernel/procedure.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ namespace meevax
2121
{
2222
inline namespace kernel
2323
{
24-
auto operator <<(std::ostream & os, callable const& datum) -> std::ostream &
24+
auto operator <<(std::ostream & os, primitive_procedure const& datum) -> std::ostream &
2525
{
2626
return os << magenta("#,(") << green("procedure") << " " << symbol(datum.name) << magenta(")");
2727
}

0 commit comments

Comments
 (0)