guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

SCM_DEFINE_SMOB_*


From: Keisuke Nishida
Subject: SCM_DEFINE_SMOB_*
Date: Mon, 22 Jan 2001 14:12:56 -0500
User-agent: Wanderlust/2.4.0 (Rio) SEMI/1.13.7 (Awazu) FLIM/1.13.2 (Kasanui) Emacs/21.0.95 (i686-pc-linux-gnu) MULE/5.0 (SAKAKI)

Is it a good idea to add the following snarf macros for smob definitions?

  #define SCM_DEFINE_SMOB_TYPE(TAG, NAME, SIZE) \
  SCM_SNARF_HERE(scm_bits_t TAG) \
  SCM_SNARF_INIT(TAG = scm_make_smob_type (NAME, SIZE))

  #define SCM_DEFINE_SMOB_MARK(TAG, ARGS) \
  SCM_SNARF_HERE(static SCM TAG ## _mark ARGS) \
  SCM_SNARF_INIT(scm_set_smob_mark (TAG, TAG ## _mark);)

  #define SCM_DEFINE_SMOB_FREE(TAG, ARGS) \
  SCM_SNARF_HERE(static scm_sizet TAG ## _free ARGS) \
  SCM_SNARF_INIT(scm_set_smob_free (TAG, TAG ## _free);)

  #define SCM_DEFINE_SMOB_PRINT(TAG, ARGS) \
  SCM_SNARF_HERE(static int TAG ## _print ARGS) \
  SCM_SNARF_INIT(scm_set_smob_print (TAG, TAG ## _print);)

  #define SCM_DEFINE_SMOB_EQUALP(TAG, ARGS) \
  SCM_SNARF_HERE(static SCM TAG ## _equalp ARGS) \
  SCM_SNARF_INIT(scm_set_smob_equalp (TAG, TAG ## _equalp);)

  #define SCM_DEFINE_SMOB_APPLY(TAG, NREQS, NOPTS, RESTP, ARGS) \
  SCM_SNARF_HERE(static SCM TAG ## _apply ARGS) \
  SCM_SNARF_INIT(scm_set_smob_apply (TAG, TAG ## _apply, NREQS, NOPTS, RESTP);)

New code will look like this:

  SCM_DEFINE_SMOB_TYPE (scm_tc16_foo, "foo", 0);

  SCM_DEFINE_SMOB_MARK (scm_tc16_foo,
                        (SCM obj))
  {
    ...
  }

  SCM_DEFINE_SMOB_PRINT (scm_tc16_foo,
                         (SCM obj, SCM port, scm_print_state *pstate))
  {
    ...
  }

  SCM_DEFINE_SMOB_APPLY (scm_tc16_foo, 0, 0, 1,
                         (SCM foo, SCM args))
  {
    ...
  }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]