Rework & bump version.
This commit is contained in:
parent
f27745aca1
commit
bb481603a8
@ -7,77 +7,55 @@
|
|||||||
#include <metalang99/util.h>
|
#include <metalang99/util.h>
|
||||||
#include <metalang99/lang.h>
|
#include <metalang99/lang.h>
|
||||||
#include <metalang99/bool.h>
|
#include <metalang99/bool.h>
|
||||||
|
#include <metalang99/maybe.h>
|
||||||
|
|
||||||
#if !ML99_VERSION_COMPATIBLE(1, 13, 2)
|
#if !ML99_VERSION_COMPATIBLE(1, 13, 2)
|
||||||
#error Your Metalang99 is a bit mouldy, update to v1.13.2 or later.
|
#error Your Metalang99 is a bit mouldy, update to v1.13.2 or later.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define WITH99_MAJOR 0
|
#define WITH99_MAJOR 1
|
||||||
#define WITH99_MINOR 2
|
#define WITH99_MINOR 0
|
||||||
#define WITH99_PATCH 0
|
#define WITH99_PATCH 0
|
||||||
|
|
||||||
#define WITH99_VERSION_COMPATIBLE(x, y, z) (WITH99_MAJOR == (x) && ((WITH99_MINOR == (y) && WITH99_PATCH >= (z)) || (WITH99_MINOR > (y))))
|
#define WITH99_VERSION_COMPATIBLE(x, y, z) (WITH99_MAJOR == (x) && ((WITH99_MINOR == (y) && WITH99_PATCH >= (z)) || (WITH99_MINOR > (y))))
|
||||||
#define WITH99_VERSION_EQ(x, y, z) (WITH99_MAJOR == (x) && WITH99_MINOR == (y) && WITH99_PATCH == (z))
|
#define WITH99_VERSION_EQ(x, y, z) (WITH99_MAJOR == (x) && WITH99_MINOR == (y) && WITH99_PATCH == (z))
|
||||||
|
|
||||||
#define WITH99_priv_restype_IMPL(tResNameArgs) ML99_call(ML99_cat(v(WITH99_resource_type_ ), ML99_tupleGet(0)(v(tResNameArgs))), ML99_tupleTail(v(tResNameArgs)))
|
#define WITH99_PRIV_IF_ERROR(code)\
|
||||||
#define WITH99_priv_resinit_IMPL(tResNameArgs) ML99_call(ML99_cat(v(WITH99_resource_init_ ), ML99_tupleGet(0)(v(tResNameArgs))), ML99_tupleTail(v(tResNameArgs)))
|
if (!(code))
|
||||||
#define WITH99_priv_resfree_IMPL(tResNameArgs) ML99_call(ML99_cat(v(WITH99_resource_free_ ), ML99_tupleGet(0)(v(tResNameArgs))), ML99_tupleTail(v(tResNameArgs)))
|
|
||||||
#define WITH99_priv_resthrows_IMPL(tResNameArgs) ML99_call(ML99_cat(v(WITH99_resource_throws_), ML99_tupleGet(0)(v(tResNameArgs))), ML99_tupleTail(v(tResNameArgs)))
|
|
||||||
|
|
||||||
#define WITH99_priv_declare_resource_IMPL(tResNameArgs) ML99_call(v(WITH99_priv_restype), v(tResNameArgs)), ML99_tupleGet(1)(v(tResNameArgs))
|
#define WITH99_priv_res2stmt(f, maybe) ML99_call(v(WITH99_priv_res2stmt), f, maybe)
|
||||||
#define WITH99_priv_init_resource_IMPL(tResNameArgs) ML99_call(v(WITH99_priv_resinit), v(tResNameArgs))
|
#define WITH99_priv_res2stmt_IMPL(f, maybe)\
|
||||||
#define WITH99_priv_free_resource_IMPL(tResNameArgs) ML99_call(v(WITH99_priv_resfree), v(tResNameArgs))
|
ML99_if(\
|
||||||
#define WITH99_priv_throws_resource_IMPL(tResNameArgs) ML99_call(v(WITH99_priv_resthrows), v(tResNameArgs))
|
ML99_isJust(v(maybe)),\
|
||||||
|
ML99_appl(\
|
||||||
#define WITH99_priv_throw_match_0_IMPL(tResNameArgs)\
|
ML99_reify(v(f)),\
|
||||||
ML99_appl(ML99_reify(v(ML99_CHAIN_EXPR_STMT)),\
|
ML99_maybeUnwrap(v(maybe))\
|
||||||
ML99_call(v(WITH99_priv_init_resource),\
|
),\
|
||||||
v(tResNameArgs)\
|
v()\
|
||||||
)\
|
|
||||||
)
|
)
|
||||||
|
|
||||||
#define WITH99_PRIV_IF_ERROR(code)\
|
|
||||||
if (!code)
|
|
||||||
|
|
||||||
#define WITH99_priv_throw_match_1_IMPL(tResNameArgs)\
|
#define WITH99_priv_res2stmts_IMPL(tDeclInitDeinit)\
|
||||||
ML99_appl(ML99_reify(v(WITH99_PRIV_IF_ERROR)),\
|
ML99_TERMS(\
|
||||||
ML99_call(v(WITH99_priv_init_resource),\
|
WITH99_priv_res2stmt(v(ML99_INTRODUCE_VAR_TO_STMT), ML99_tupleGet(0)(v(tDeclInitDeinit))),\
|
||||||
v(tResNameArgs)\
|
WITH99_priv_res2stmt(v(WITH99_PRIV_IF_ERROR), ML99_tupleGet(1)(v(tDeclInitDeinit))),\
|
||||||
)\
|
WITH99_priv_res2stmt(v(ML99_CHAIN_EXPR_STMT_AFTER), ML99_tupleGet(2)(v(tDeclInitDeinit)))\
|
||||||
)
|
)
|
||||||
|
|
||||||
#define WITH99_priv_create_stmt_IMPL(tResNameArgs)\
|
#define WITH99_priv_create_stmt_IMPL(tResNameArgs)\
|
||||||
ML99_TERMS(\
|
|
||||||
ML99_if(\
|
|
||||||
ML99_variadicsIsSingle(ML99_call(v(WITH99_priv_restype), v(tResNameArgs))),\
|
|
||||||
ML99_appl(ML99_reify(v(ML99_INTRODUCE_VAR_TO_STMT)),\
|
|
||||||
ML99_call(v(WITH99_priv_declare_resource),\
|
|
||||||
v(tResNameArgs)\
|
|
||||||
)\
|
|
||||||
),\
|
|
||||||
v()\
|
|
||||||
),\
|
|
||||||
ML99_boolMatchWithArgs(\
|
|
||||||
ML99_call(\
|
ML99_call(\
|
||||||
v(WITH99_priv_throws_resource),\
|
WITH99_priv_res2stmts,\
|
||||||
v(tResNameArgs)\
|
ML99_call(\
|
||||||
),\
|
ML99_cat(v(WITH99_resource_), ML99_tupleGet(0)(v(tResNameArgs))),\
|
||||||
v(WITH99_priv_throw_match_),\
|
ML99_tupleTail(v(tResNameArgs))\
|
||||||
v(tResNameArgs)\
|
|
||||||
),\
|
|
||||||
ML99_appl(ML99_reify(v(ML99_CHAIN_EXPR_STMT_AFTER)),\
|
|
||||||
ML99_call(v(WITH99_priv_free_resource),\
|
|
||||||
v(tResNameArgs)\
|
|
||||||
)\
|
|
||||||
)\
|
)\
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
#define WITH99_priv_create_stmt_ARITY 1
|
#define WITH99_priv_create_stmt_ARITY 1
|
||||||
|
|
||||||
#define WITH99_With(...) ML99_EVAL(WITH99_with(__VA_ARGS__))
|
#define WITH99_With(...) ML99_EVAL(WITH99_with(v(__VA_ARGS__)))
|
||||||
|
|
||||||
#define WITH99_with(...) ML99_call(WITH99_with, v(__VA_ARGS__))
|
#define WITH99_with(...) ML99_call(WITH99_with, __VA_ARGS__)
|
||||||
#define WITH99_with_IMPL(...) ML99_variadicsForEach(v(WITH99_priv_create_stmt), v(__VA_ARGS__))
|
#define WITH99_with_IMPL(...) ML99_variadicsForEach(v(WITH99_priv_create_stmt), v(__VA_ARGS__))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,24 +1,25 @@
|
|||||||
#ifndef WITH99_DEFRES_H
|
#ifndef WITH99_DEFRES_H
|
||||||
#define WITH99_DEFRES_H
|
#define WITH99_DEFRES_H
|
||||||
|
|
||||||
#define WITH99_resource_type_Void_IMPL(var, _) v(void*)
|
#define WITH99_resource_Void_IMPL(var, init) \
|
||||||
#define WITH99_resource_init_Void_IMPL(var, init) v((var = init))
|
ML99_tuple(\
|
||||||
#define WITH99_resource_free_Void_IMPL(var, ...) v((free(var)))
|
ML99_just(v(void *var)),\
|
||||||
#define WITH99_resource_throws_Void_IMPL(...) ML99_false()
|
ML99_just(v(var = init, 0)),\
|
||||||
|
ML99_just(v(free(var)))\
|
||||||
|
)
|
||||||
|
|
||||||
#define WITH99_resource_type_Memory_IMPL(var, type, _) v(type*)
|
#define WITH99_resource_Memory_IMPL(var, type, init) \
|
||||||
#define WITH99_resource_init_Memory_IMPL(var, _, init) v((var = init))
|
ML99_tuple(\
|
||||||
#define WITH99_resource_free_Memory_IMPL(var, ...) v((free(var)))
|
ML99_just(v(type *var)),\
|
||||||
#define WITH99_resource_throws_Memory_IMPL(...) ML99_false()
|
ML99_just(v(var = init, 0)),\
|
||||||
|
ML99_just(v(free(var)))\
|
||||||
|
)
|
||||||
|
|
||||||
#define WITH99_resource_type_Adhoc_IMPL(var, type, _1, _2) v(type)
|
#define WITH99_resource_Adhoc_IMPL(var, type, init) \
|
||||||
#define WITH99_resource_init_Adhoc_IMPL(var, _1, init, _2) v((var = init))
|
ML99_tuple(\
|
||||||
#define WITH99_resource_free_Adhoc_IMPL(var, _1, _2, deinit) v((deinit))
|
ML99_just(v(type var)),\
|
||||||
#define WITH99_resource_throws_Adhoc_IMPL(...) ML99_false()
|
ML99_just(v(var = init, 0)),\
|
||||||
|
ML99_just(v(free(var)))\
|
||||||
#define WITH99_resource_type_AdhocThrows_IMPL(var, type, _1, _2) v(type)
|
)
|
||||||
#define WITH99_resource_init_AdhocThrows_IMPL(var, _1, init, _2) v((var = init))
|
|
||||||
#define WITH99_resource_free_AdhocThrows_IMPL(var, _1, _2, deinit) v((deinit))
|
|
||||||
#define WITH99_resource_throws_AdhocThrows_IMPL(...) ML99_true()
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user