Version française
Home     About     Download     Resources     Contact us    
Browse thread
Segmentation fault
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jacques Le Normand <rathereasy@g...>
Subject: Segmentation fault
Hello caml-list,

I'm encountering a segfault on ocaml 3.09

The test case seems long, but if I remove any line from it it stops
segfaulting. The strangest thing is that get_right_sibling_specific is
called, though it appears nowhere. If you change it's name, the segfault
dissapears. Any help would be appreciated!
here's the code:

class virtual bottle_environment =
object
  method virtual gladiators : string list
  method virtual bottles : bottle list
end
and virtual bottle =
object
  method virtual action : (unit -> bottle_environment option)
end

type outer_space = {
    foo : int list
}
let empty_outer_space =
  {

    foo = [];

  }

class virtual  expression =
object
  method virtual get_silly_bottle : bottle
end
class virtual  expression_skel =
object(self)
  inherit  expression
  method bambam = empty_outer_space
  method get_silly_bottle =
  (object
     inherit bottle
     method action () =
       Some (object
           method gladiators =
         print_endline "entering bottles";
         ignore (self#bambam.foo);
         ["enter "]
           method bottles =

         []
         end)
   end)
end


class virtual baggy_expression_skel =
object(self)
  inherit expression_skel
  method get_bottle_environment =
  object
    method gladiators = ([]:string list)
    method bottles =       [self#get_silly_bottle]
  end
end

class virtual  papa_expression_skel =
object(self)
  method get_right_sibling_specific = print_endline "im being called, though
I shouldn't" ; (None:expression option)
  inherit  expression
end

class papa_baggy_expression =
object(self)
  inherit baggy_expression_skel
  inherit papa_expression_skel
end

class top_baggy_expression =
object(self)
  inherit baggy_expression_skel
end

let _ =
  let body_expression  = new top_baggy_expression   in
  let e = new papa_baggy_expression   in
    ignore ((body_expression#get_bottle_environment)#bottles);
    let sugg = e#get_silly_bottle in
      match sugg#action () with
    | None -> ()
    | Some y ->
        ignore (y#gladiators)