diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | Makefile.in | 11 | ||||
-rw-r--r-- | array.c | 19 | ||||
-rw-r--r-- | ext/extmk.rb.in | 2 | ||||
-rw-r--r-- | ext/tcltklib/tcltklib.c | 36 | ||||
-rw-r--r-- | file.c | 26 | ||||
-rw-r--r-- | lib/tk.rb | 7 | ||||
-rw-r--r-- | sample/ruby-mode.el | 2 |
8 files changed, 75 insertions, 40 deletions
@@ -1,7 +1,19 @@ +Fri Apr 17 11:58:30 1998 NAGAI Hidetoshi <nagai@dumbo.ai.kyutech.ac.jp> + + * ext/tcltklib/tcltklib.c (lib_mainloop): thread and interrupt check. + Fri Apr 17 11:06:30 1998 Yukihiro Matsumoto <matz@netlab.co.jp> * struct.c (struct_aset): struct member can be set by member name. +Fri Apr 17 00:47:19 1998 WATANABE Hirofumi <watanabe@ase.ptg.sony.co.jp> + + * ext/extmk.rb.in: added m68k-human support + + * file.c (LOCK_SH): defines moved. + + * array.c (ary_flatten_bang): simplified loop. + Thu Apr 16 16:52:01 1998 Yukihiro Matsumoto <matz@netlab.co.jp> * experimental release 1.1b9_11. diff --git a/Makefile.in b/Makefile.in index d6b80e9f31..ebdaeb7fac 100644 --- a/Makefile.in +++ b/Makefile.in @@ -89,12 +89,15 @@ clean:; @rm -f $(OBJS) $(LIBRUBY) $(MAINOBJ) rbconfig.rb ./miniruby$(binsuffix) -Xext extmk.rb clean; \ fi -realclean: clean - @rm -f Makefile ext/extmk.rb ext/config.cache - @rm -f config.cache config.h config.log config.status - @rm -f parse.c lex.c *~ core *.core gmon.out +distclean: clean + @rm -f Makefile ext/extmk.rb config.h + @rm -f ext/config.cache config.cache config.log config.status + @rm -f parse.c *~ core *.core gmon.out y.tab.c y.output @rm -f ruby$(binsuffix) miniruby$(binsuffix) +realclean: distclean + @rm -f lex.c + test: miniruby$(binsuffix) @./miniruby$(binsuffix) $(srcdir)/rubytest.rb @@ -1242,22 +1242,13 @@ ary_flatten_bang(ary) int mod = 0; ary_modify(ary); - for (;;) { - int lmod = 0; - - for (i=0; i<RARRAY(ary)->len; i++) { - if (TYPE(RARRAY(ary)->ptr[i]) == T_ARRAY) { - VALUE ary2 = RARRAY(ary)->ptr[i]; - - ary_replace(ary, i, RARRAY(ary2)->len, ary2); - i += RARRAY(ary2)->len - 1; - lmod++; - } + for (i=0; i<RARRAY(ary)->len; i++) { + VALUE ary2 = RARRAY(ary)->ptr[i]; + if (TYPE(ary2) == T_ARRAY) { + ary_replace(ary, i--, 1, ary2); + mod = 1; } - if (lmod == 0) break; - mod = lmod; } - if (mod == 0) return Qnil; return ary; } diff --git a/ext/extmk.rb.in b/ext/extmk.rb.in index fbc455840c..0dae66b874 100644 --- a/ext/extmk.rb.in +++ b/ext/extmk.rb.in @@ -67,7 +67,7 @@ LINK = "@CC@ -o conftest -I#{$topdir} " + CFLAGS + " %s @LDFLAGS@ %s conftest.c CPP = "@CPP@ @CPPFLAGS@ -I#{$topdir} " + CFLAGS + " %s conftest.c" end -if /win32|djgpp|mingw32/i =~ PLATFORM +if /win32|djgpp|mingw32|m68k-human/i =~ PLATFORM $null = open("nul", "w") else $null = open("/dev/null", "w") diff --git a/ext/tcltklib/tcltklib.c b/ext/tcltklib/tcltklib.c index aa2cf71be0..058fe94042 100644 --- a/ext/tcltklib/tcltklib.c +++ b/ext/tcltklib/tcltklib.c @@ -33,16 +33,52 @@ int *tclDummyMathPtr = (int *) matherr; /*---- module TclTkLib ----*/ +/* Tk_ThreadTimer */ +typedef struct { + Tcl_TimerToken token; + int flag; +} Tk_ThreadTimerData; + +/* timer callback */ +void _timer_for_thread (ClientData clientData) +{ + Tk_ThreadTimerData *timer = (Tk_ThreadTimerData *) clientData; + + timer->flag = 0; + CHECK_INTS; +#ifdef THREAD + if (!thread_critical) thread_schedule(); +#endif + + timer->token = Tk_CreateTimerHandler(200, _timer_for_thread, + (ClientData) timer); + timer->flag = 1; +} + /* execute Tk_MainLoop */ static VALUE lib_mainloop(VALUE self) { + Tk_ThreadTimerData *timer; + + timer = (Tk_ThreadTimerData *) ckalloc(sizeof(Tk_ThreadTimerData)); + timer->flag = 0; + timer->token = Tk_CreateTimerHandler(200, _timer_for_thread, + (ClientData) timer); + timer->flag = 1; + DUMP1("start Tk_Mainloop"); while (Tk_GetNumMainWindows() > 0) { Tcl_DoOneEvent(0); } DUMP1("stop Tk_Mainloop"); +#ifdef THREAD + if (timer->flag) { + Tk_DeleteTimerHandler(timer->token); + } +#endif + return Qnil; } @@ -1412,6 +1412,19 @@ file_truncate(obj, len) return INT2FIX(0); } +# ifndef LOCK_SH +# define LOCK_SH 1 +# endif +# ifndef LOCK_EX +# define LOCK_EX 2 +# endif +# ifndef LOCK_NB +# define LOCK_NB 4 +# endif +# ifndef LOCK_UN +# define LOCK_UN 8 +# endif + #if defined(THREAD) && defined(EWOULDBLOCK) static int thread_flock(fd, op) @@ -1713,19 +1726,6 @@ Init_File() rb_define_method(cFile, "flock", file_flock, 1); -# ifndef LOCK_SH -# define LOCK_SH 1 -# endif -# ifndef LOCK_EX -# define LOCK_EX 2 -# endif -# ifndef LOCK_NB -# define LOCK_NB 4 -# endif -# ifndef LOCK_UN -# define LOCK_UN 8 -# endif - mConst = rb_define_module_under(cFile, "Constants"); rb_define_const(cFile, "LOCK_SH", INT2FIX(LOCK_SH)); rb_define_const(cFile, "LOCK_EX", INT2FIX(LOCK_EX)); @@ -268,13 +268,6 @@ module TkCore end def mainloop - if defined?(Thread) - INTERP._eval("proc rb_after {} { - ruby {Thread.pass}; - after 200 rb_after - }") - INTERP._eval("rb_after") - end TclTkLib.mainloop end diff --git a/sample/ruby-mode.el b/sample/ruby-mode.el index f7e2fddbfa..3a5bab86ce 100644 --- a/sample/ruby-mode.el +++ b/sample/ruby-mode.el @@ -655,7 +655,7 @@ An end of a defun is found by moving forward from the beginning of one." '("\\(^\\|[^_]\\)\\b\\([A-Z]+[a-zA-Z0-9_]*\\)" 2 font-lock-type-face) ;; functions - '("^\\s *def[ \t]+[^ \t(]*" + '("^\\s *def[ \t]+[^ \t(]*$" 0 font-lock-function-name-face t)) "*Additional expressions to highlight in ruby mode.") (if (and (>= (string-to-int emacs-version) 19) |