Tried out mixins with externs, which I didn't really knew existed.
Consider:

  class A
  {
    int i;
    void sa (int n) {i = n;}
  }

  class B
  {
    extern int i;
    void sb (int n) {i = n;}
  }

  class C
  {
    inherit A;
    inherit B;
    void sa2 (int n) {A::i = n;}
    void sb2 (int n) {B::i = n;}
    void w() {werror ("C %O %O\n", A::i, B::i);}
  }

extern variables seem to work alright in that both sa() and sb()
assign the same storage. However, what I find surprising is that B::i
seems to access a different location in sb2() and w(). Reading it
produces 0, regardless what A::i is set to, and trying to set it
results in a runtime error. I expected B::i to be an alias for A::i in
all respects in C.
  • ext... Martin Stjernholm, Roxen IS @ Pike developers forum
    • ... Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) @ Pike (-) developers forum
      • ... Martin Stjernholm, Roxen IS @ Pike developers forum
        • ... Martin Stjernholm, Roxen IS @ Pike developers forum

Reply via email to