Langphilia! / KL1 / KLIC-C / Consumer Objects, 2001-10-26

Consumer Objects


Usage in KLIC-KL1 Language

フックした変数を具体化することによってメッセージを送る。

merge

new ?Output
merge を作る。
unify
リストならそのまま出力する。ベクタなら併合する。
print
MERGER と表示する。

file_io

new +InputFilePointer +InputFileName +OutputFilePointer +OutputFileName
unify
feof/1, fclose/1, fseek/3, ftell/1, sync/1, 整数, putc/1, fwrite/1, fwrite/2, fflush/1, getc/1, ungetc/1, fread/2, linecount/1 などのメッセージに対応する。
print
FILE I/O と表示する。

Usage in KLIC-C Language

klic/gcobject.h

副作用
klic/{ basic, struct, primitives, unify, index, gb, bb, g_basic, g_extern, g_extinl, g_methtab }.h が include される。

klic/gc_methtab.h

前提
include する前にマクロ GCUSE_MY_* を必要に応じて定義しておくこと。 GCDEF_* して GCUSE_MY_* を定義した後、GCDEF_NEW の前に include する。
変数 struct consumer_object_method_table GC_method_table
関数 q* GC_STD_UNIFY()
関数 long GC_STD_PRINT()
関数 q* GC_STD_GC()
関数 long GC_STD_REGIST()
関数 long GC_STD_DEALLOCATE()
関数 q* GC_STD_CLOSE()

klic/gc_macro.h

宣言 GC_USE_CLASS(class)
宣言 GCset_myself_for_new
export g_myself
import GC_rappend
宣言 GC_STD_DECL_FOR_NEW
import G_STD_DECL, GCset_myself_for_new
宣言 GCDEF_NEW(), GCDEF_UNIFY(), GCDEF_PRINT(), GCDEF_GC(), GCDEF_REGIST(), GCDEF_DEALLOCATE(), GCDEF_CLOSE(), GCDEF_GENERIC(), GCDEF_SEND(), GCDEF_FUNCTOR_METHOD(fa)
export GC_rappend, GC_ARGC, GC_ARGV, g_allocp
定数 GC_rappend(pref), GC_body(fa)
import GC_CLASS_NAME, G_rappend0, G_body0
定数 const struct data_object_method_table GC_method_table, GC_method_table0(class), GC_method_table1(class)
import GC_CLASS_NAME
`class'_g_data_method_table
定数 const char* GC_CLASS_NAME_STRING
import GC_CLASS_NAME, G_stringify
定数 q GC_SUCCEEDED, GC_GCREQUEST
import GENERIC_SUCCEEDED, GENERIC_GCREQUEST
定数 long GC_GSUCCESS, GC_GFAILURE
変数 q suspension_reason, rest_of_stream, method_result
関数 q GC_wakeup_g_new()
関数 q* G_MAKE_THE_NEW_GOAL()
関数 (q*) do_shallow_unify(), do_shallow_unify_value()
関数 q* G_SUSPEND()
関数 q GC_MAKE_HOOK_VAR()
関数 NoReturn void GC_FAIL, GC_ERROR_IN_NEW (const char* errmsg)
import fatal, G_error, GC_CLASS_NAME_STRING
文 GC_RETURN_WITH_HOOK(q x), GC_TERMINATE
export method_result, rest_of_stream
import GC_SUCCEEDED, g_allocp
文 GC_RETURN_FROM_GENERIC
import NILATOM, GC_TERM, G_ISREF, G_CDR_OF, GC_TERMINATE, GC_RETURN_WITH_HOOK, debug_printf, fatal
文 GC_SUSPEND(q var)
export method_result, rest_of_stream, g_allocp
import GC_SUCCEEDED, GC_TERM, heapp, GC_KL1_UNIFY, GC_wakeup_g_new, G_MAKE_VAR
関数 void GC_GRETURN(q x), GC_RETURN, GC_GFAIL, GC_GSUCCEED
関数 void GC_RETURN_FROM_NEW(q x), GC_RETURN_FROM_PRINT, GC_RETURN_FROM_GC(newgobj)
関数 void GCSET_NEWOBJ(newgobj), GCSET_NEWOBJ_IN_NEWGEN(newgobj), GCSET_NEWOBJ_FOR_NEW(newgobj, size)
関数 void GCSET_INTARG, GCSET_INTARG_FOR_NEW (var, argv_i)
関数 void GCSET_INTARG_WITHIN_RANGE(var, argv_i, llim, ulim)
関数 void GCSET_MESSAGE(q& message)
関数 void GCSET_MESSAGE_INT_ARG, GCSET_MESSAGE_STR_ARG (arg, message, pos)
関数 GCSET_NEW_CONS(var), GCSET_VAR(self)
文 GC_DEREF(q x)
export x
import g_allocp, isref, isstruct, atomicnotref, derefone, GC_SUSPEND
文 GC_DEREF_AND_TEST(q x, ラベル susp)
export x
import isref, derefone
文 GC_DEREF_FOR_NEW(q x)
export g_allocp
import struct goalrec, g_myself, GC_ARGC, GC_ARGV, isref, isstruct, atomicnotref, derefone, G_MAKE_THE_NEW_GOAL, G_SUSPEND, GC_RETURN_FROM_NEW
関数 GC_UNIFY(q x,y)
export g_allocp
import do_shallow_unify
文 GC_UNIFY_VALUE, GC_KL1_UNIFY (x, y)
export g_allocp
import isref, derefone, do_shallow_unify_value
文 GC_TRY_TO_ALLOC(new, type, size, ラベル gc_request)
import GC_GCREQUEST, G_HEAPALLOC_WITH_CHECK
関数 GC_PUTC(x), GC_PRINT(x), GC_PRINT_KL1_TERMS(x, b, s)
関数 void GC_SUSPEND_GOAL(var, goal), GCSET_UNIFY_GOAL(goalp, x, y)
文 GC_SWITCH_ON_TERM(ラベル cons,atomic,funct,dobj,susp)
export GC_TERM
import isref, isstruct, atomicnotref, functnotcons, functor_of, derefone
文 GC_SWITCH_ON_METHOD_BEFORE (ラベル atomic,list,functor,generic,susp,illegal)
import ATOMIC, CONS, FUNCTOR, VARREF, NILATOM, GC_TERM, isref, ptagof, G_CAR_OF, G_FUNCTOR_OF, GC_DEREF_AND_TEST, GC_SUSPEND, GC_TERMINATE
GC_SWITCH_ON_ATOM_METHOD, GC_SWITCH_ON_FUNCTOR_METHOD
import GC_TERM, G_CAR_OF, G_FUNCTOR_OF
文 GC_ATOM_METHOD_CASE(q atom)
export g_allocp
import GC_SELF, GC_TERM, method_result, G_atom, GC_body, G_CAR_OF, G_MAKESYM, GC_SUSPEND, GC_RETURN
文 GC_FUNCTOR_METHOD_CASE(q fa)
export g_allocp
import GC_SELF, GC_TERM, method_result, G_functor, GC_body, G_CAR_OF, G_MAKESYM, GC_SUSPEND
GC_SWITCH_ON_METHOD, GC_METHOD_CASE(fa), GC_METHOD_CASE_DEFAULT

runtime/ge_readhook.c

runtime/ge_replyhook.c

runtime/gio.c

runtime/gmerge.c

runtime/wakeup.c

runtime/gcmerge.kl1

module gcmerge
述語 in -Var +Vec +I +N

Copyright 2001, TAKAGI Yusuke.