[#16113] Strange idea... exporting from a scope — "Hal E. Fulton" <hal9000@...>

Hello...

33 messages 2001/06/01

[#16364] Re: Garbage Collection? — Michael Davis <mdavis@...>

Windows 2000 and linux (RedHat 6.2). I have run these tests on both OSs.

12 messages 2001/06/09

[#16400] Symbolic Computation III — Mathieu Bouchard <matju@...>

14 messages 2001/06/11

[#16502] Playing with Ruby Syntax (was: Initial thoughts about Ruby From a Smalltalk Programmer) — jweirich@...

Michael> Hi Everyone, I have to say I'm utterly fascinated by Ruby

9 messages 2001/06/15

[#16661] Problem running irb with Ruby 1.6.4 under FreeBSD 4.0 — Bob Alexander <balexander@...>

I've installed Ruby 1.6.4 on a FreeBSD 4.0 machine, and get the

11 messages 2001/06/20

[#16686] opening db files made by apache dbmmanage — Fritz Heinrichmeyer <fritz.heinrichmeyer@...>

14 messages 2001/06/21

[#16801] rb_define_class() vs Class.new() — Kero van Gelder <kero@...4050.upc-d.chello.nl>

Hi,

18 messages 2001/06/23
[#16802] Re: rb_define_class() vs Class.new() — ts <decoux@...> 2001/06/23

>>>>> "K" == Kero van Gelder <kero@d4050.upc-d.chello.nl> writes:

[#16841] RE: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...>

Next week I'll try to rebuild Ruby with Unicode strings. But it would be

15 messages 2001/06/25
[#16842] Re: national characters is strings — matz@... (Yukihiro Matsumoto) 2001/06/25

Hi,

[#16843] Re: national characters is strings — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/25

That's good enough. But I'm afraid this could ( not would ) cause string

[#16868] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

14 messages 2001/06/25
[#16873] RE: Something strange with Ruby's inheritance mechanism — "Aleksei Guzev" <aleksei.guzev@...> 2001/06/26

[#16879] Re: Something strange with Ruby's inheritance mechanism — Mathieu Bouchard <matju@...> 2001/06/26

On Tue, 26 Jun 2001, Aleksei Guzev wrote:

[#16869] Something strange with Ruby's inheritance mechanism — Eric Jacoboni <jaco@...>

As Ruby beginner, i try some "canonical" OO scripts. Doing so, I've

12 messages 2001/06/25

[#16881] — "Aleksei Guzev" <aleksei.guzev@...>

32 messages 2001/06/26
[#16916] Re: Method overloading (option) Was: Re: — "Wayne Blair" <wayne.blair@...> 2001/06/26

[#16920] Re: Method overloading (option) Was: Re: — matz@... (Yukihiro Matsumoto) 2001/06/26

Hi,

[#16888] finalizers, destructors and whatnot — "David Leal" <david@...>

Hi all,

16 messages 2001/06/26

[#17037] keeping an Exception object alive — David Alan Black <dblack@...>

Hello --

19 messages 2001/06/28
[#17055] Re: keeping an Exception object alive — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17066] RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17076] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/06/29

Hi,

[#17079] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/06/29

Hello --

[#17138] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — matz@... (Yukihiro Matsumoto) 2001/07/02

Hi,

[#17141] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — David Alan Black <dblack@...> 2001/07/02

Hello --

[#17142] Re: RCR: Exception methods (was: Re: Re: keeping an Exception object alive) — ts <decoux@...> 2001/07/02

>>>>> "D" == David Alan Black <dblack@candle.superlink.net> writes:

[ruby-talk:16503] walking the ruby_frame list

From: victor <victor@...>
Date: 2001-06-15 18:20:52 UTC
List: ruby-talk #16503
Hi,
   I have a question about the frame list.  I am working on implementing
a capability security module in Ruby, and I find that in order to to this
in a way that is not activly painful to program I need to be able to walk 
the frame list to snag a reference to the object that invoked the method I
use to test for capabilities.  Here are diffs for anyone interested:

diff -ur ruby-1.6.4/eval.c ruby-1.6.4.hacked/eval.c
--- ruby-1.6.4/eval.c   Tue May 29 03:59:36 2001
+++ ruby-1.6.4.hacked/eval.c    Thu Jun 14 22:42:32 2001
@@ -1510,10 +1510,11 @@
        rb_raise(rb_eSecurityError, "Insecure: can't undef");
     }
     rb_frozen_class_p(klass);
-    if (id == __id__ || id == __send__) {
+/*    if (id == __id__ || id == __send__) {
        rb_warn("undefining `%s' may cause serious problem",
                rb_id2name(id));
-    }
+    }
+*/
     body = search_method(ruby_class, id, &origin);
     if (!body || !body->nd_body) {
        char *s0 = " class";
@@ -3335,6 +3336,28 @@
 }

 static VALUE
+rb_f_last_caller(self, testor)
+VALUE self, testor;
+{
+  struct FRAME *foo;
+  foo = ruby_frame;
+  /* first, we have to get to the frame. It might be a couple of frames
+   * up, depending on exceptions and such. */
+  while (foo != top_frame && foo->self == self){
+         foo = foo->prev;
+  }
+  /* now that we are at the right frame, get past it. */
+  while (foo != top_frame && foo->self == testor) {
+         foo = foo->prev;
+  }
+  /* if we have a previous frame at all, we are at it now. */
+  if (foo == top_frame)
+         return Qnil;
+  else return foo->self;
+
+}
+
+static VALUE
 rb_f_abort()
 {
     rb_secure(4);
@@ -4388,6 +4411,7 @@
                }
                else if (nd_type(body) == NODE_BLOCK) {
                    node = body->nd_head;
+
                    body = body->nd_next;
                }
                if (node) {
@@ -5896,6 +5920,7 @@
     rb_define_global_function("loop", rb_f_loop, 0);

     rb_define_method(rb_mKernel, "respond_to?", rb_obj_respond_to, -1);
+    rb_define_method(rb_mKernel, "last_caller", rb_f_last_caller, 1);

     rb_define_global_function("raise", rb_f_raise, -1);
     rb_define_global_function("fail", rb_f_raise, -1);

As you can see, I am just walking back up the frame list, stopping when I get
to one before what I am looking for or at top_frame.  The question is, however,
whether this method will work correctly when threads are introduced into the
picture, or of I need to check for which frame is in what thread as I go (which
would be tricky, as I can't determine if threads have their own frame list or
if they all share the same frame list).

Comments?

In This Thread

Prev Next