12#include "misc_check_rb.h"
16#include <ruby/defines.h>
18VALUE
MK(MkKernel) = 0;
19VALUE
MK(globalRef) = 0;
21VALUE
MK(InitError) = 0;
22VALUE
MK(NULL_STR) = 0;
25ID
NS(id_caller_locations);
38ID
NS(id_full_message);
49#define MkSetupTmpl() MkSetup()
50#define MkCleanupTmpl()
166#define ErrorE_FromInt_doc "MkErrorE MkKernel.ErrorE_FromInt(value:int32)"
167#define IdSE_FromInt_doc "MkIdSE MkKernel.IdSE_FromInt(value:int32)"
168#define TimeoutE_FromInt_doc "MkTimeoutE MkKernel.TimeoutE_FromInt(value:int32)"
169#define TypeE_FromInt_doc "MkTypeE MkKernel.TypeE_FromInt(value:int32)"
172#define ErrorE_ToInt_doc "int32 MkKernel.ErrorE_ToInt(value:MkErrorE)"
173#define ErrorE_ToString_doc "string MkKernel.ErrorE_ToString(value:MkErrorE)"
174#define IdSE_ToInt_doc "int32 MkKernel.IdSE_ToInt(value:MkIdSE)"
175#define IdSE_ToString_doc "string MkKernel.IdSE_ToString(value:MkIdSE)"
176#define TimeoutE_ToInt_doc "int32 MkKernel.TimeoutE_ToInt(value:MkTimeoutE)"
177#define TimeoutE_ToString_doc "string MkKernel.TimeoutE_ToString(value:MkTimeoutE)"
178#define TypeE_ToInt_doc "int32 MkKernel.TypeE_ToInt(value:MkTypeE)"
179#define TypeE_ToString_doc "string MkKernel.TypeE_ToString(value:MkTypeE)"
182#define Cleanup_doc "MkKernel.Cleanup()"
183#define Setup_doc "MkKernel.Setup()"
187#define OT_SETUP_hdl_static MK_RT_UNUSED MkRtSetup_NULL; \
188 __attribute__((unused)) MK_ERR hdl = &MkERROR;
203 VALUE ary = rb_funcall(rb_mKernel,
NS(id_caller), 0,0);
204 while ((arg = rb_ary_shift(ary)) != Qnil) {
211 if (frameP == NULL || *frameP == 0) { \
212 VALUE ary = rb_funcall(rb_mKernel, NS(id_caller_locations), 2, INT2FIX(skip), INT2FIX(1)); \
213 frame = rb_ary_entry(ary,0); \
214 if (frameP != NULL) *frameP = frame; \
221 VALUE label = rb_funcallv(frame,
NS(id_label), 0, NULL);
227 VALUE path = rb_funcallv(frame,
NS(id_path), 0, NULL);
228 VALUE base = rb_funcall(rb_cFile,
NS(id_bn), 1, path);
232MK_I32 NS(Get_Call_Line) (
int skip, VALUE* frameP) {
234 VALUE line = rb_funcallv(frame,
NS(id_lineno), 0, NULL);
239 VALUE ary = rb_funcall(rb_mKernel,
NS(id_caller_locations), 2, INT2FIX(skip), INT2FIX(1));
240 VALUE a0 = rb_ary_entry(ary,0);
242 *proc =
VAL2STRN(rb_funcallv(a0,
NS(id_label), 0, NULL));
245 VALUE path = rb_funcall(a0,
NS(id_path), 0);
246 *file =
VAL2STRN(rb_funcall(rb_cFile,
NS(id_bn), 1, path));
249 *line =
VAL2I32(rb_funcallv(a0,
NS(id_lineno), 0, NULL));
254 VALUE ary = rb_funcall(rb_mKernel,
NS(id_caller_locations), 2, INT2FIX(level), INT2FIX(1));
255 VALUE a0 = rb_ary_entry(ary,0);
256 VALUE path = rb_funcallv(a0,
NS(id_path), 0, NULL);
259 VAL2STRN(rb_funcallv(a0,
NS(id_label), 0, NULL)),
260 VAL2STRN(rb_funcall(rb_cFile,
NS(id_bn), 1, path)),
261 VAL2I32(rb_funcallv(a0,
NS(id_lineno), 0, NULL))
274 if ((*skipP) >= objc) {
275 return WrongNumArgs(hdl,(*skipP), objc, -999, +999, arg);
277 VALUE obj = objv[(*skipP)++];
278 VALUE strO = rb_obj_as_string(obj);
279 long len = RSTRING_LEN(strO);
280 MK_STRN ret = RSTRING_PTR(strO);
290 if ((*skipP) >= objc) {
291 return WrongNumArgs(hdl,(*skipP), objc, -999, +999, arg);
293 VALUE obj = objv[(*skipP)++];
315 long len = rb_array_len(argsO);
317 for (
long i=0; i<len; i++) {
331 int skip = origskip==NULL ? 0 : *origskip;
337 for (; skip < objc; skip++) {
562 strO = rb_funcall(rb_obj_as_string(strO), rb_intern(
"*"), 1,
INT2VAL(17));
588 MK(MkKernel) = rb_define_module(
"MkKernel");
593 OT_METH_S ( MkKernel, printObj, RubyMsgque_printObj )
594 OT_METH_O ( MkKernel, printObj, RubyMsgque_printObj )
599OT_METH_O ( MkKernel, ErrorE_FromInt, MkKernel_ErrorE_FromInt )
600OT_METH_S ( MkKernel, ErrorE_FromInt, MkKernel_ErrorE_FromInt )
601OT_METH_O ( MkKernel, IdSE_FromInt, MkKernel_IdSE_FromInt )
602OT_METH_S ( MkKernel, IdSE_FromInt, MkKernel_IdSE_FromInt )
603OT_METH_O ( MkKernel, TimeoutE_FromInt, MkKernel_TimeoutE_FromInt )
604OT_METH_S ( MkKernel, TimeoutE_FromInt, MkKernel_TimeoutE_FromInt )
605OT_METH_O ( MkKernel, TypeE_FromInt, MkKernel_TypeE_FromInt )
606OT_METH_S ( MkKernel, TypeE_FromInt, MkKernel_TypeE_FromInt )
609OT_METH_O ( MkKernel, ErrorE_ToInt, MkKernel_ErrorE_ToInt )
610OT_METH_S ( MkKernel, ErrorE_ToInt, MkKernel_ErrorE_ToInt )
611OT_METH_O ( MkKernel, ErrorE_ToString, MkKernel_ErrorE_ToString )
612OT_METH_S ( MkKernel, ErrorE_ToString, MkKernel_ErrorE_ToString )
613OT_METH_O ( MkKernel, IdSE_ToInt, MkKernel_IdSE_ToInt )
614OT_METH_S ( MkKernel, IdSE_ToInt, MkKernel_IdSE_ToInt )
615OT_METH_O ( MkKernel, IdSE_ToString, MkKernel_IdSE_ToString )
616OT_METH_S ( MkKernel, IdSE_ToString, MkKernel_IdSE_ToString )
617OT_METH_O ( MkKernel, TimeoutE_ToInt, MkKernel_TimeoutE_ToInt )
618OT_METH_S ( MkKernel, TimeoutE_ToInt, MkKernel_TimeoutE_ToInt )
619OT_METH_O ( MkKernel, TimeoutE_ToString, MkKernel_TimeoutE_ToString )
620OT_METH_S ( MkKernel, TimeoutE_ToString, MkKernel_TimeoutE_ToString )
621OT_METH_O ( MkKernel, TypeE_ToInt, MkKernel_TypeE_ToInt )
622OT_METH_S ( MkKernel, TypeE_ToInt, MkKernel_TypeE_ToInt )
623OT_METH_O ( MkKernel, TypeE_ToString, MkKernel_TypeE_ToString )
624OT_METH_S ( MkKernel, TypeE_ToString, MkKernel_TypeE_ToString )
627OT_METH_O ( MkKernel, Cleanup, MkKernel_Cleanup )
628OT_METH_S ( MkKernel, Cleanup, MkKernel_Cleanup )
629OT_METH_O ( MkKernel, Setup, MkKernel_Setup )
630OT_METH_S ( MkKernel, Setup, MkKernel_Setup )
767static VALUE
MK(SysExit2)(VALUE dummy) {
768 VALUE thread = rb_thread_current();
770 rb_thread_kill(thread);
773static int MK(SysExit) (
779 rb_protect(
MK(SysExit2),Qnil,NULL);
811 MK(globalRef) = rb_ary_new();
812 rb_gc_register_mark_object(
MK(globalRef));
828 NS(id_caller) = rb_intern(
"caller") ;
829 NS(id_caller_locations) = rb_intern(
"caller_locations") ;
830 NS(id_label) = rb_intern(
"label") ;
831 NS(id_path) = rb_intern(
"path") ;
832 NS(id_bn) = rb_intern(
"basename") ;
833 NS(id_lineno) = rb_intern(
"lineno") ;
853 NS(cEnum) = rb_eval_string(
859 def self.enum_attr(name, num) \n\
862 define_method(name + '?') do \n\
863 @attrs & num != 0 \n\
866 define_method(name + '=') do |set| \n\
874 self.const_set(name,self.new(num)) \n\
879 def initialize(attrs = 0) \n\
887 alias_method :to_int, :to_i \n\
894 MK(InitError) = rb_define_class_under(
MK(MkKernel),
"InitError", rb_eStandardError);
896 NS(id_enum_attr) = rb_intern(
"enum_attr");
900 MK(
MkErrorE) = rb_define_class_under(
MK(MkKernel),
"MkErrorE",
MK(cEnum));
905 MK(
MkIdSE) = rb_define_class_under(
MK(MkKernel),
"MkIdSE",
MK(cEnum));
910 MK(
MkTimeoutE) = rb_define_class_under(
MK(MkKernel),
"MkTimeoutE",
MK(cEnum));
913 rb_funcall(
MK(
MkTimeoutE),
MK(id_enum_attr), 2,
STRN2VAL(
"NORMAL"), INT2NUM(( 900/10 < 1 ? 1 : 900/10 )));
915 rb_funcall(
MK(
MkTimeoutE),
MK(id_enum_attr), 2,
STRN2VAL(
"SOCKET"), INT2NUM(( 900/90 < 1 ? 1 : 900/90 )));
916 rb_funcall(
MK(
MkTimeoutE),
MK(id_enum_attr), 2,
STRN2VAL(
"VERYSHORT"), INT2NUM(( 900/180 < 1 ? 1 : 900/180 )));
921 MK(
MkTypeE) = rb_define_class_under(
MK(MkKernel),
"MkTypeE",
MK(cEnum));
922 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"I8T"), INT2NUM(( ( 1 << 4 ) | ( 1<<0 ) )));
923 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"BOLT"), INT2NUM(( ( 2 << 4 ) | ( 1<<0 ) )));
924 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"I16T"), INT2NUM(( ( 3 << 4 ) | ( 1<<1 ) )));
925 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"I32T"), INT2NUM(( ( 4 << 4 ) | ( 1<<2 ) )));
926 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"FLTT"), INT2NUM(( ( 5 << 4 ) | ( 1<<2 ) )));
927 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"I64T"), INT2NUM(( ( 6 << 4 ) | ( 1<<3 ) )));
928 rb_funcall(
MK(
MkTypeE),
MK(id_enum_attr), 2,
STRN2VAL(
"DBLT"), INT2NUM(( ( 7 << 4 ) | ( 1<<3 ) )));
935 NS(id_arity) = rb_intern(
"arity");
936 NS(id_clone) = rb_intern(
"clone");
937 NS(id_unbind) = rb_intern(
"unbind");
938 NS(id_bind) = rb_intern(
"bind");
939 NS(id_receiver) = rb_intern(
"receiver");
940 NS(id_to_i) = rb_intern(
"to_i");
941 NS(id_full_message) = rb_intern(
"full_message");
#define IdSE_ToString_doc
#define TimeoutE_FromInt_doc
MK_RB_EXTERN void LibMkKernel()
#define ErrorE_ToString_doc
#define OT_SETUP_hdl_static
#define ErrorE_FromInt_doc
#define TypeE_FromInt_doc
#define TimeoutE_ToString_doc
#define TimeoutE_ToInt_doc
#define TypeE_ToString_doc
#define OT_LNG_ARRAY_IS(o)
#define OT_SETUP_VARARGS(min, max, d)
#define OT_SETUP_NOARG(d)
#define OT_SETUP_ONEARG(d)
#define OT_NEW_Mk_enum_OBJ(typ, i)
#define OT_CHECK_NI4(val)
#define OT_METH_S(c, s, f)
#define OT_LNG_OBJ_CLASSNAME(obj)
#define OT_CHECK_REQUIRED(val)
#define OT_retObj_SET_None
#define OT_retObj_SET_I32(nat)
#define OT_METH_O(c, s, f)
#define OT_retObj_SET_STR(nat)
#define MK_RB_EXTERN
static library
#define OT_CHECK_OPTIONAL(val)
#define OT_retObj_SET(val)
#define MkErrorC_Check(mng, PROC)
#define OT_CHECK_STRN(val)
#define MkBufferListAppendSTR(...)
#define MkBufferListCreate(...)
#define MkErrorStackFormat(...)
#define MK_NULL_STR
the string "MK_NULL" value as MK_NULL_STR …
#define MK_UNUSED
mark unnused variables and functions
static bool MK_NULL_STR_CHECK(char const *const __str, const long int __len)
check if __str is MK_NULL_STR return true or false …
MK_STRN MkTimeoutE_ToString(enum MkTimeoutE value)
return the MkTimeoutE as string …
MkTimeoutE
Predefined Timeout values …
enum MkErrorE MkIdSE_FromInt(MK_I32 const value, enum MkIdSE *value_out)
return the MkIdSE from integer …
static MK_I32 MkTypeE_ToInt(enum MkTypeE value)
return the MkTypeE as integer …
static MK_I32 MkErrorE_ToInt(enum MkErrorE value)
return the MkErrorE as integer …
static MK_I32 MkTimeoutE_ToInt(enum MkTimeoutE value)
return the MkTimeoutE as integer …
enum MkErrorE MkTypeE_FromInt(MK_I32 const value, enum MkTypeE *value_out)
return the MkTypeE from integer …
MK_STRN MkIdSE_ToString(enum MkIdSE value)
return the MkIdSE as string …
static MK_I32 MkIdSE_ToInt(enum MkIdSE value)
return the MkIdSE as integer …
enum MkErrorE MkErrorE_FromInt(MK_I32 const value, enum MkErrorE *value_out)
return the MkErrorE from integer …
enum MkErrorE MkTimeoutE_FromInt(MK_I32 const value, enum MkTimeoutE *value_out)
return the MkTimeoutE from integer …
MK_STRN MkTypeE_ToString(enum MkTypeE value)
return the MkTypeE as string …
MkErrorE
collection for the different error-codes …
MkTypeE
basic data-types supported by Programming-Language-Micro-Kernel (PLMK) …
MK_STRN MkErrorE_ToString(enum MkErrorE value)
return the MkErrorE as string …
@ MK_OK
(persistent) everything is OK.
void MkSetup(void)
setup rbmkkernel internal memory …
const MK_STRB * MK_STRN
constant string pointer data-type
MK_PTRB * MK_MNG
managed object pointer, datatype will be checked at runtime
MK_STRB * MK_STR
string pointer data-type with UTF8 ecoding (string)
signed int MK_I32
4 byte integer data-type
#define MkLogV_4M(x, callfunc, debug, printfmt,...)
MkIdSE
signal type of the MkIdS data val …
struct MkLalS MkLal
Language Abstraction Layer in duty.
#define WrongNumArgs(...)
MK_ATTR_HOT MK_EXTERN enum MkErrorE MK_DECL MK Obj_AsSTRN(OT_Check_ARGS, MK_STRN *)
#define OT_CHECK_ENUM(ename, val)
#define OT_CHECK_LNG_T(val)
The CLASS used to store a list of MkBufferS items into a flat array…
The data-type to store and handle the error-condition …