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.