guile-cvs
[Top][All Lists]
Advanced

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

guile/guile-core NEWS RELEASE libguile/ChangeLo...


From: Dirk Herrmann
Subject: guile/guile-core NEWS RELEASE libguile/ChangeLo...
Date: Wed, 06 Dec 2000 07:16:59 -0800

CVSROOT:        /cvs
Module name:    guile
Changes by:     Dirk Herrmann <address@hidden>  00/12/06 07:16:59

Modified files:
        guile-core     : NEWS RELEASE 
        guile-core/libguile: ChangeLog async.c eval.c gc.h gdbint.c 
                             procs.c gh_data.c tags.h weaks.c 

Log message:
        * eval.c:  remove commented code, remove #ifdef CCLO conditionals
        * remove uses of older GC marking and cell accessing macros

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/NEWS.diff?r1=1.223&r2=1.224
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/RELEASE.diff?r1=1.79&r2=1.80
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/ChangeLog.diff?r1=1.1188&r2=1.1189
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/async.c.diff?r1=1.51&r2=1.52
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/eval.c.diff?r1=1.180&r2=1.181
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/gc.h.diff?r1=1.65&r2=1.66
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/gdbint.c.diff?r1=1.35&r2=1.36
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/procs.c.diff?r1=1.46&r2=1.47
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/gh_data.c.diff?r1=1.46&r2=1.47
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/tags.h.diff?r1=1.70&r2=1.71
http://subversions.gnu.org/cgi-bin/cvsweb/guile/guile-core/libguile/weaks.c.diff?r1=1.30&r2=1.31

Patches:
Index: guile/guile-core/NEWS
diff -u guile/guile-core/NEWS:1.223 guile/guile-core/NEWS:1.224
--- guile/guile-core/NEWS:1.223 Fri Dec  1 09:57:42 2000
+++ guile/guile-core/NEWS       Wed Dec  6 07:16:58 2000
@@ -294,7 +294,8 @@
 SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH, SCM_LENGTH, SCM_HUGE_LENGTH,
 SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_COERCE_SUBSTR,
 SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING, SCM_ROCHARS,
-SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX
+SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX, SCM_GC8MARKP,
+SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR
 
 Use SCM_ASSERT_RANGE or SCM_VALIDATE_XXX_RANGE instead of SCM_OUTOFRANGE.
 Use scm_memory_error instead of SCM_NALLOC.
@@ -313,6 +314,11 @@
 Use a type specific setter macro instead of SCM_SETLENGTH.
 Use a type specific setter macro instead of SCM_SETCHARS.
 Use a type specific length macro instead of SCM_LENGTH_MAX.
+Use SCM_GCMARKP instead of SCM_GC8MARKP.
+Use SCM_SETGCMARK instead of SCM_SETGC8MARK.
+Use SCM_CLRGCMARK instead of SCM_CLRGC8MARK.
+Use SCM_TYP16 instead of SCM_GCTYP16.
+Use SCM_CDR instead of SCM_GCCDR.
 
 ** Removed function:  scm_struct_init
 
Index: guile/guile-core/RELEASE
diff -u guile/guile-core/RELEASE:1.79 guile/guile-core/RELEASE:1.80
--- guile/guile-core/RELEASE:1.79       Thu Nov 23 07:26:24 2000
+++ guile/guile-core/RELEASE    Wed Dec  6 07:16:58 2000
@@ -50,7 +50,8 @@
   SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY, SCM_ROLENGTH,
   SCM_LENGTH, SCM_HUGE_LENGTH, SCM_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
   SCM_COERCE_SUBSTR, SCM_ROSTRINGP, SCM_RWSTRINGP, SCM_VALIDATE_RWSTRING,
-  SCM_ROCHARS, SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX
+  SCM_ROCHARS, SCM_ROUCHARS, SCM_SETLENGTH, SCM_SETCHARS, SCM_LENGTH_MAX,
+  SCM_GC8MARKP, SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16, SCM_GCCDR
 - remove scm_vector_set_length_x
 - remove function scm_call_catching_errors
   (replaced by catch functions from throw.[ch])
Index: guile/guile-core/libguile/ChangeLog
diff -u guile/guile-core/libguile/ChangeLog:1.1188 
guile/guile-core/libguile/ChangeLog:1.1189
--- guile/guile-core/libguile/ChangeLog:1.1188  Tue Dec  5 06:07:02 2000
+++ guile/guile-core/libguile/ChangeLog Wed Dec  6 07:16:58 2000
@@ -1,3 +1,27 @@
+2000-12-06  Dirk Herrmann  <address@hidden>
+
+       * async.c (SCM_ASYNCP):  Use SCM_TYP16 instead of SCM_GCTYP16.
+
+       * eval.c (scm_m_vref, scm_m_vset, scm_m_define, SCM_CEVAL,
+       SCM_APPLY, scm_copy_tree):  Remove commented code.
+
+       (SCM_CEVAL, SCM_APPLY):  Remove #ifdef CCLO conditionals.  Without
+       CCLO being defined, guile would not compile at all anyway.
+
+       * gc.h (SCM_GC8MARKP, SCM_SETGC8MARK, SCM_CLRGC8MARK, SCM_GCTYP16,
+       SCM_GCCDR):  Deprecated.
+
+       * gdbint.c (unmark_port, remark_port, gdb_read), procs.c
+       (scm_mark_subr_table):  Use SCM_(SET|CLR)?GCMARK(P)? instead of
+       SCM_(SET|CLR)?GC8MARK(P)?.
+
+       * gh_data.c (gh_scm2char):  Remove bogus ';'.
+
+       * tags.h:  Removed comment about GCTYP16 macro.
+
+       * weaks.c (scm_mark_weak_vector_spines):  Use SCM_CDR instead of
+       SCM_GCCDR.
+
 2000-12-05  Dirk Herrmann  <address@hidden>
 
        * print.c (scm_iprin1):  Use scm_tc3_* codes instead of hardcoded
Index: guile/guile-core/libguile/async.c
diff -u guile/guile-core/libguile/async.c:1.51 
guile/guile-core/libguile/async.c:1.52
--- guile/guile-core/libguile/async.c:1.51      Fri Nov 17 08:25:03 2000
+++ guile/guile-core/libguile/async.c   Wed Dec  6 07:16:58 2000
@@ -116,7 +116,7 @@
 
 /* cmm: this has SCM_ prefix because SCM_MAKE_VALIDATE expects it.
    this is ugly.  */
-#define SCM_ASYNCP(X) (SCM_NIMP(X) && (tc16_async == SCM_GCTYP16 (X)))
+#define SCM_ASYNCP(X) (SCM_NIMP(X) && (tc16_async == SCM_TYP16 (X)))
 
 #define VALIDATE_ASYNC(pos,a) SCM_MAKE_VALIDATE(pos, a, ASYNCP)
 
Index: guile/guile-core/libguile/eval.c
diff -u guile/guile-core/libguile/eval.c:1.180 
guile/guile-core/libguile/eval.c:1.181
--- guile/guile-core/libguile/eval.c:1.180      Sat Nov 25 08:58:25 2000
+++ guile/guile-core/libguile/eval.c    Wed Dec  6 07:16:58 2000
@@ -547,40 +547,6 @@
 }
 
 
-#if 0
-
-SCM 
-scm_m_vref (SCM xorig, SCM env)
-{
-  SCM x = SCM_CDR (xorig);
-  SCM_ASSYNT (1 == scm_ilength (x), xorig, scm_s_expression, s_vref);
-  if (SCM_NIMP(x) && UDSCM_VARIABLEP (SCM_CAR (x)))
-    {
-      /* scm_everr (SCM_UNDEFINED, env,..., "global variable reference") */
-      scm_misc_error (NULL,
-                     "Bad variable: ~S",
-                     scm_listify (SCM_CAR (SCM_CDR (x)), SCM_UNDEFINED));
-    }
-  SCM_ASSYNT (SCM_NIMP(x) && DEFSCM_VARIABLEP (SCM_CAR (x)),
-             xorig, scm_s_variable, s_vref);
-  return scm_cons (IM_VREF, x);
-}
-
-
-
-SCM 
-scm_m_vset (SCM xorig, SCM env)
-{
-  SCM x = SCM_CDR (xorig);
-  SCM_ASSYNT (3 == scm_ilength (x), xorig, scm_s_expression, s_vset);
-  SCM_ASSYNT ((DEFSCM_VARIABLEP (SCM_CAR (x))
-              || UDSCM_VARIABLEP (SCM_CAR (x))),
-             xorig, scm_s_variable, s_vset);
-  return scm_cons (IM_VSET, x);
-}
-#endif 
-
-
 SCM_SYNTAX(s_and, "and", scm_makmmacro, scm_m_and);
 SCM_GLOBAL_SYMBOL(scm_sym_and, s_and);
 
@@ -865,7 +831,6 @@
 {
   SCM proc, arg1 = x;
   x = SCM_CDR (x);
-  /*  SCM_ASSYNT(SCM_NULLP(env), x, "bad placement", s_define);*/
   SCM_ASSYNT (scm_ilength (x) >= 2, arg1, scm_s_expression, s_define);
   proc = SCM_CAR (x);
   x = SCM_CDR (x);
@@ -2168,19 +2133,6 @@
       SCM_ASRTGO (SCM_ISYMP (proc), badfun);
       switch SCM_ISYMNUM (proc)
        {
-#if 0
-       case (SCM_ISYMNUM (IM_VREF)):
-         {
-           SCM var;
-           var = SCM_CAR (SCM_CDR (x));
-           RETURN (SCM_CDR(var));
-         }
-       case (SCM_ISYMNUM (IM_VSET)):
-         SCM_CDR (SCM_CAR ( SCM_CDR (x))) = EVALCAR( SCM_CDR ( SCM_CDR (x)), 
env);
-         SCM_CAR (SCM_CAR ( SCM_CDR (x))) = scm_tc16_variable;
-         RETURN (SCM_UNSPECIFIED)
-#endif
-
        case (SCM_ISYMNUM (SCM_IM_APPLY)):
          proc = SCM_CDR (x);
          proc = EVALCAR (proc, env);
@@ -2476,9 +2428,7 @@
     case scm_tc7_substring:
     case scm_tc7_smob:
     case scm_tcs_closures:
-#ifdef CCLO
     case scm_tc7_cclo:
-#endif
     case scm_tc7_pws:
     case scm_tcs_subrs:
       RETURN (x);
@@ -2557,16 +2507,6 @@
 #ifdef DEVAL
                  if (!SCM_CLOSUREP (SCM_CDR (proc)))
                    {
-
-#if 0 /* Top-level defines doesn't very often occur in backtraces */
-                     if (scm_m_define == SCM_SUBRF (SCM_CDR (proc)) && 
SCM_TOP_LEVEL (env))
-                       /* Prevent memoizing result of define macro */
-                       {
-                         debug.info->e.exp = scm_cons (SCM_CAR (x), SCM_CDR 
(x));
-                         scm_set_source_properties_x (debug.info->e.exp,
-                                                      scm_source_properties 
(x));
-                       }
-#endif
                      SCM_DEFER_INTS;
                      SCM_SETCAR (x, SCM_CAR (t.arg1));
                      SCM_SETCDR (x, SCM_CDR (t.arg1));
@@ -2641,7 +2581,6 @@
        if (!SCM_SMOB_DESCRIPTOR (proc).apply)
          goto badfun;
        RETURN (scm_smob_apply_0 (proc));
-#ifdef CCLO
       case scm_tc7_cclo:
        t.arg1 = proc;
        proc = SCM_CCLO_SUBR (proc);
@@ -2650,7 +2589,6 @@
        debug.info->a.args = scm_cons (t.arg1, SCM_EOL);
 #endif
        goto evap1;
-#endif
       case scm_tc7_pws:
        proc = SCM_PROCEDURE (proc);
 #ifdef DEVAL
@@ -2792,7 +2730,6 @@
          if (!SCM_SMOB_DESCRIPTOR (proc).apply)
            goto badfun;
          RETURN (scm_smob_apply_1 (proc, t.arg1));
-#ifdef CCLO
        case scm_tc7_cclo:
          arg2 = t.arg1;
          t.arg1 = proc;
@@ -2802,7 +2739,6 @@
          debug.info->a.proc = proc;
 #endif
          goto evap2;
-#endif
        case scm_tc7_pws:
          proc = SCM_PROCEDURE (proc);
 #ifdef DEVAL
@@ -2889,9 +2825,7 @@
     x = SCM_CDR (x);
     if (SCM_NULLP (x)) {
       ENTER_APPLY;
-#ifdef CCLO
     evap2:
-#endif
       switch (SCM_TYP7 (proc))
        {                       /* have two arguments */
        case scm_tc7_subr_2:
@@ -2912,7 +2846,6 @@
          if (!SCM_SMOB_DESCRIPTOR (proc).apply)
            goto badfun;
          RETURN (scm_smob_apply_2 (proc, t.arg1, arg2));
-#ifdef CCLO
        cclon:
        case scm_tc7_cclo:
 #ifdef DEVAL
@@ -2928,13 +2861,6 @@
                                                                 proc))),
                             SCM_EOL));
 #endif
-         /*    case scm_tc7_cclo:
-               x = scm_cons(arg2, scm_eval_args(x, env));
-               arg2 = t.arg1;
-               t.arg1 = proc;
-               proc = SCM_CCLO_SUBR(proc);
-               goto evap3; */
-#endif
        case scm_tcs_cons_gloc:
          if (SCM_OBJ_CLASS_FLAGS (proc) & SCM_CLASSF_PURE_GENERIC)
            {
@@ -3060,10 +2986,8 @@
          goto badfun;
        RETURN (scm_smob_apply_3 (proc, t.arg1, arg2,
                                  SCM_CDDR (debug.info->a.args)));
-#ifdef CCLO
       case scm_tc7_cclo:
        goto cclon;
-#endif
       case scm_tc7_pws:
        proc = SCM_PROCEDURE (proc);
        debug.info->a.proc = proc;
@@ -3124,10 +3048,8 @@
          goto badfun;
        RETURN (scm_smob_apply_3 (proc, t.arg1, arg2,
                                  scm_eval_args (x, env, proc)));
-#ifdef CCLO
       case scm_tc7_cclo:
        goto cclon;
-#endif
       case scm_tc7_pws:
        proc = SCM_PROCEDURE (proc);
        if (!SCM_CLOSUREP (proc))
@@ -3334,7 +3256,6 @@
     }
   else
     {
-      /* SCM_ASRTGO(SCM_CONSP(args), wrongnumargs); */
       args = scm_nconc2last (args);
 #ifdef DEVAL
       debug.vect[0].a.args = scm_cons (arg1, args);
@@ -3359,9 +3280,7 @@
 entap:
   ENTER_APPLY;
 #endif
-#ifdef CCLO
 tail:
-#endif
   switch (SCM_TYP7 (proc))
     {
     case scm_tc7_subr_2o:
@@ -3500,7 +3419,6 @@
        RETURN (scm_smob_apply_2 (proc, arg1, SCM_CAR (args)))
       else
        RETURN (scm_smob_apply_3 (proc, arg1, SCM_CAR (args), SCM_CDR (args)));
-#ifdef CCLO
     case scm_tc7_cclo:
 #ifdef DEVAL
       args = (SCM_UNBNDP(arg1) ? SCM_EOL : debug.vect[0].a.args);
@@ -3514,7 +3432,6 @@
       proc = SCM_CCLO_SUBR (proc);
 #endif
       goto tail;
-#endif
     case scm_tc7_pws:
       proc = SCM_PROCEDURE (proc);
 #ifdef DEVAL
@@ -3838,7 +3755,6 @@
     }
   if (SCM_NCONSP (obj))
     return obj;
-/*  return scm_cons(scm_copy_tree(SCM_CAR(obj)), scm_copy_tree(SCM_CDR(obj))); 
*/
   ans = tl = scm_cons_source (obj,
                              scm_copy_tree (SCM_CAR (obj)),
                              SCM_UNSPECIFIED);
Index: guile/guile-core/libguile/gc.h
diff -u guile/guile-core/libguile/gc.h:1.65 guile/guile-core/libguile/gc.h:1.66
--- guile/guile-core/libguile/gc.h:1.65 Wed Oct 25 04:01:03 2000
+++ guile/guile-core/libguile/gc.h      Wed Dec  6 07:16:59 2000
@@ -162,15 +162,6 @@
 #define SCM_SETGCMARK(x) SCM_GC_CELL_SET_BIT (x)
 #define SCM_CLRGCMARK(x) SCM_GC_CELL_CLR_BIT (x)
 
-/* compatibility stuff: */
-
-#define SCM_GC8MARKP(x)   SCM_GCMARKP (x)
-#define SCM_SETGC8MARK(x) SCM_SETGCMARK (x)
-#define SCM_CLRGC8MARK(x) SCM_CLRGCMARK (x)
-
-#define SCM_GCTYP16(x) SCM_TYP16 (x)
-#define SCM_GCCDR(x)   SCM_CDR (x)
-
 /* Low level cell data accessing macros:
  */
 
@@ -375,6 +366,11 @@
 
 #define SCM_FREEP(x) (SCM_FREE_CELL_P (x))
 #define SCM_NFREEP(x) (!SCM_FREE_CELL_P (x))
+#define SCM_GC8MARKP(x) SCM_GCMARKP (x)
+#define SCM_SETGC8MARK(x) SCM_SETGCMARK (x)
+#define SCM_CLRGC8MARK(x) SCM_CLRGCMARK (x)
+#define SCM_GCTYP16(x) SCM_TYP16 (x)
+#define SCM_GCCDR(x) SCM_CDR (x)
 
 #endif  /* SCM_DEBUG_DEPRECATED == 0 */
 
Index: guile/guile-core/libguile/gdbint.c
diff -u guile/guile-core/libguile/gdbint.c:1.35 
guile/guile-core/libguile/gdbint.c:1.36
--- guile/guile-core/libguile/gdbint.c:1.35     Sat Aug 26 20:34:27 2000
+++ guile/guile-core/libguile/gdbint.c  Wed Dec  6 07:16:59 2000
@@ -144,14 +144,14 @@
 unmark_port (SCM port)
 {
   SCM stream, string;
-  port_mark_p = SCM_GC8MARKP (port);
-  SCM_CLRGC8MARK (port);
+  port_mark_p = SCM_GCMARKP (port);
+  SCM_CLRGCMARK (port);
   stream = SCM_PACK (SCM_STREAM (port));
   stream_mark_p = SCM_GCMARKP (stream);
   SCM_CLRGCMARK (stream);
   string = SCM_CDR (stream);
-  string_mark_p = SCM_GC8MARKP (string);
-  SCM_CLRGC8MARK (string);
+  string_mark_p = SCM_GCMARKP (string);
+  SCM_CLRGCMARK (string);
 }
 
 
@@ -160,9 +160,9 @@
 {
   SCM stream = SCM_PACK (SCM_STREAM (port));
   SCM string = SCM_CDR (stream);
-  if (string_mark_p) SCM_SETGC8MARK (string);
+  if (string_mark_p) SCM_SETGCMARK (string);
   if (stream_mark_p) SCM_SETGCMARK (stream);
-  if (port_mark_p) SCM_SETGC8MARK (port);
+  if (port_mark_p) SCM_SETGCMARK (port);
 }
 
 
@@ -213,8 +213,8 @@
   scm_truncate_file (gdb_input_port, SCM_UNDEFINED);
   scm_seek (gdb_input_port, SCM_INUM0, SCM_MAKINUM (SEEK_SET));
   /* Read one object */
-  tok_buf_mark_p = SCM_GC8MARKP (tok_buf);
-  SCM_CLRGC8MARK (tok_buf);
+  tok_buf_mark_p = SCM_GCMARKP (tok_buf);
+  SCM_CLRGCMARK (tok_buf);
   ans = scm_lreadr (&tok_buf, gdb_input_port, &ans);
   if (SCM_GC_P)
     {
@@ -231,7 +231,7 @@
     scm_permanent_object (ans);
 exit:
   if (tok_buf_mark_p)
-    SCM_SETGC8MARK (tok_buf);
+    SCM_SETGCMARK (tok_buf);
   remark_port (gdb_input_port);
   SCM_END_FOREIGN_BLOCK;
   return status;
Index: guile/guile-core/libguile/gh_data.c
diff -u guile/guile-core/libguile/gh_data.c:1.46 
guile/guile-core/libguile/gh_data.c:1.47
--- guile/guile-core/libguile/gh_data.c:1.46    Thu Nov 23 05:54:49 2000
+++ guile/guile-core/libguile/gh_data.c Wed Dec  6 07:16:59 2000
@@ -258,7 +258,7 @@
   SCM_VALIDATE_CHAR (SCM_ARG1, obj);
   return SCM_CHAR (obj);
 }
-#undef FUNC_NAME;
+#undef FUNC_NAME
 
 /* Convert a vector, weak vector, string, substring or uniform vector
    into an array of chars.  If result array in arg 2 is NULL, malloc a
Index: guile/guile-core/libguile/procs.c
diff -u guile/guile-core/libguile/procs.c:1.46 
guile/guile-core/libguile/procs.c:1.47
--- guile/guile-core/libguile/procs.c:1.46      Sat Nov 25 08:58:25 2000
+++ guile/guile-core/libguile/procs.c   Wed Dec  6 07:16:59 2000
@@ -138,7 +138,7 @@
   int i;
   for (i = 0; i < scm_subr_table_size; ++i)
     {
-      SCM_SETGC8MARK (scm_subr_table[i].name);
+      SCM_SETGCMARK (scm_subr_table[i].name);
       if (scm_subr_table[i].generic && *scm_subr_table[i].generic)
        scm_gc_mark (*scm_subr_table[i].generic);
       if (SCM_NIMP (scm_subr_table[i].properties))
Index: guile/guile-core/libguile/tags.h
diff -u guile/guile-core/libguile/tags.h:1.70 
guile/guile-core/libguile/tags.h:1.71
--- guile/guile-core/libguile/tags.h:1.70       Mon Dec  4 08:31:03 2000
+++ guile/guile-core/libguile/tags.h    Wed Dec  6 07:16:59 2000
@@ -249,7 +249,6 @@
  *
  *             TYP16
  *             TYP16S
- *             GCTYP16
  *
  *             TYP16S functions similarly wrt to TYP16 as TYP7S to TYP7,
  *             but a different option bit is used (bit 2 for TYP7S,
Index: guile/guile-core/libguile/weaks.c
diff -u guile/guile-core/libguile/weaks.c:1.30 
guile/guile-core/libguile/weaks.c:1.31
--- guile/guile-core/libguile/weaks.c:1.30      Wed Nov 22 06:45:41 2000
+++ guile/guile-core/libguile/weaks.c   Wed Dec  6 07:16:59 2000
@@ -243,7 +243,7 @@
                {
                  SCM_SETGCMARK (alist);
                  SCM_SETGCMARK (SCM_CAR (alist));
-                 alist = SCM_GCCDR (alist);
+                 alist = SCM_CDR (alist);
                }
            }
        }



reply via email to

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