supercollider-quarks / JITLibExtensions

Some extensions to the common JITLib classes
GNU General Public License v2.0
11 stars 9 forks source link

Incompatibility with master (3.8) #6

Closed jamshark70 closed 7 years ago

jamshark70 commented 8 years ago

I realize this is a known issue, but I just tried to use ProxyMixer against a more recent SC and it broke because of JITLibExtensions. So I think it's worth logging to ensure the issue doesn't get lost: it's rather below an ideal situation if a quark is incompatible with the current stable release.

User impact: I just had to downgrade SC to my pre-3.7 sandbox branch to use specs with JITLib.

crucialfelix commented 8 years ago

Post the code that caused it and the error stack. You know the routine - user posts "it doesn't work" and then runs away.

I think you mentioned on the list that it's actually 3.8-dev that it failed on.

jamshark70 commented 8 years ago

First, yes, the initial bug report is mistaken. JITLibExtensions is fine against 3.7, but broken against 3.8. I'm updating the issue title.

Code snippet:

p = ProxySpace.new.push;
~synth = { |freq = 440| SinOsc.ar(freq, 0, 0.1) };
~synth.gui;

Stack trace:

ERROR: Message 'widgets' not understood.
RECEIVER:
Instance of NdefParamGui {    (0x54a56b8, gc=BC, fmt=00, flg=00, set=05)
  instance variables [27]
    object : instance of NodeProxy (0x64b4b78, size=16, set=4)
    numItems : Integer 8
    parent : instance of CompositeView (0x5c67848, size=34, set=6)
    bounds : instance of Rect (0x4d70ec8, size=4, set=2)
    zone : instance of CompositeView (0x629e8d8, size=34, set=6)
    minSize : instance of Point (0x4d6f358, size=2, set=2)
    defPos : instance of Point (0x4d6f568, size=2, set=2)
    skin : instance of Event (0x573b708, size=5, set=3)
    font : instance of Font (0x5738c38, size=5, set=3)
    nameView : nil
    csView : nil
    prevState : instance of Event (0x56f0e08, size=5, set=3)
    skipjack : instance of SkipJack (0x2052d98, size=7, set=3)
    scroller : instance of EZScroller (0x1dd0848, size=6, set=3)
    config : nil
    hasWindow : false
    paramViews : instance of Array (0x58a13e8, size=8, set=3)
    labelWidth : Float 57.000000   00000000 404C8000
    keysRotation : Integer 0
    specs : instance of Event (0x5722f78, size=5, set=3)
    protoBut : nil
    parentBut : nil
    knowBut : nil
    docBut : nil
    replaceKeys : instance of Event (0x56f8918, size=5, set=3)
    useRanger : true
    drags : instance of Array (0x56ea4f8, size=8, set=3)
}
ARGS:
PATH: /home/dlm/share/SC/scd/tests/voicer-gui-fix.scd
CALL STACK:
    DoesNotUnderstandError:reportError   0x2194348
        arg this = <instance of DoesNotUnderstandError>
    Nil:handleError   0x21927e8
        arg this = nil
        arg error = <instance of DoesNotUnderstandError>
    Thread:handleError   0x1d4dc48
        arg this = <instance of Thread>
        arg error = <instance of DoesNotUnderstandError>
    Object:throw   0x20d69a8
        arg this = <instance of DoesNotUnderstandError>
    Object:doesNotUnderstand   0x214e6e8
        arg this = <instance of NdefParamGui>
        arg selector = 'widgets'
        arg args = [*0]
    < FunctionDef in Method NdefParamGui:updateSliderSpecs >   0x5676c88
        arg key = 'freq'
        arg i = 0
        var currValue = 440
        var newSpec = <instance of ControlSpec>
        var widge = nil
    ArrayedCollection:do   0x2086ea8
        arg this = [*1]
        arg function = <instance of Function>
        var i = 0
    NdefParamGui:updateSliderSpecs   0x1fc2eb8
        arg this = <instance of NdefParamGui>
        arg editKeys = [*1]
        var currState = [*1]
    NdefParamGui:checkUpdate   0x1e51328
        arg this = <instance of NdefParamGui>
        var newState = <instance of Event>
    EnvirGui:object_   0x1e0c638
        arg this = <instance of NdefParamGui>
        arg obj = <instance of NodeProxy>
    NdefGui:makeViews   0x6363658
        arg this = <instance of NdefGui>
        arg options = [*12]
        var lineBreakIndex = 8
        var hasName = nil
        var hasMonitor = nil
        var resizer = nil
        var butLines = [*2]
    JITGui:init   0x5733138
        arg this = <instance of NdefGui>
        arg makeSkip = true
        arg options = [*12]
    Interpreter:interpretPrintCmdLine   0x636df38
        arg this = <instance of Interpreter>
        var res = nil
        var func = <instance of Function>
        var code = "~synth.gui;"
        var doc = nil
        var ideClass = <instance of Meta_ScIDE>
    Process:interpretPrintCmdLine   0x56f1178
        arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'widgets' not understood.
RECEIVER: a NdefParamGui

ERROR: Message 'widgets' not understood.
RECEIVER:
Instance of NdefParamGui {    (0x54a56b8, gc=BC, fmt=00, flg=00, set=05)
  instance variables [27]
    object : instance of NodeProxy (0x64b4b78, size=16, set=4)
    numItems : Integer 8
    parent : instance of CompositeView (0x5c67848, size=34, set=6)
    bounds : instance of Rect (0x4d70ec8, size=4, set=2)
    zone : instance of CompositeView (0x629e8d8, size=34, set=6)
    minSize : instance of Point (0x4d6f358, size=2, set=2)
    defPos : instance of Point (0x4d6f568, size=2, set=2)
    skin : instance of Event (0x573b708, size=5, set=3)
    font : instance of Font (0x5738c38, size=5, set=3)
    nameView : nil
    csView : nil
    prevState : instance of Event (0x56f0e08, size=5, set=3)
    skipjack : instance of SkipJack (0x2052d98, size=7, set=3)
    scroller : instance of EZScroller (0x1dd0848, size=6, set=3)
    config : nil
    hasWindow : false
    paramViews : instance of Array (0x58a13e8, size=8, set=3)
    labelWidth : Float 57.000000   00000000 404C8000
    keysRotation : Integer 0
    specs : instance of Event (0x5722f78, size=5, set=3)
    protoBut : nil
    parentBut : nil
    knowBut : nil
    docBut : nil
    replaceKeys : instance of Event (0x56f8918, size=5, set=3)
    useRanger : true
    drags : instance of Array (0x56ea4f8, size=8, set=3)
}
ARGS:
PATH: /home/dlm/share/SC/scd/tests/voicer-gui-fix.scd

PROTECTED CALL STACK:
    Meta_MethodError:new    0x27bdec0
        arg this = DoesNotUnderstandError
        arg what = nil
        arg receiver = a NdefParamGui
    Meta_DoesNotUnderstandError:new 0x27bfe80
        arg this = DoesNotUnderstandError
        arg receiver = a NdefParamGui
        arg selector = widgets
        arg args = [  ]
    Object:doesNotUnderstand    0x1d63d40
        arg this = a NdefParamGui
        arg selector = widgets
        arg args = nil
    a FunctionDef   0x4a513c0
        sourceCode = "<an open Function>"
        arg key = freq
        arg i = 0
        var currValue = 440
        var newSpec = a ControlSpec(20, 20000, 'exp', 0, 440, " Hz")
        var widge = nil
    ArrayedCollection:do    0x3a597c0
        arg this = [ freq ]
        arg function = a Function
        var i = 0
    NdefParamGui:updateSliderSpecs  0x4a51000
        arg this = a NdefParamGui
        arg editKeys = [ freq ]
        var currState = [ [ freq, 440 ] ]
    NdefParamGui:checkUpdate    0x26e20c0
        arg this = a NdefParamGui
        var newState = ( 'editKeys': [ freq ], 'keysRotation': 0, 'specs': [ a ControlSpec(20, 20000, 'exp', 0, 440, " Hz") ], 'object': NodeProxy.audio(localhost, 1), 
  'overflow': 0, 'settings': [ [ freq, 440 ] ] )
    a FunctionDef   0x32cbe00
        sourceCode = "<an open Function>"
    Routine:prStart 0x3277480
        arg this = a Routine
        arg inval = 30.986891024

CALL STACK:
    DoesNotUnderstandError:reportError   0x1d47058
        arg this = <instance of DoesNotUnderstandError>
    < closed FunctionDef >   0x1cfa428
        arg error = <instance of DoesNotUnderstandError>
    Integer:forBy   0x54ede48
        arg this = 0
        arg endval = 0
        arg stepval = 2
        arg function = <instance of Function>
        var i = 0
        var j = 0
    SequenceableCollection:pairsDo   0x21d5488
        arg this = [*2]
        arg function = <instance of Function>
    Scheduler:seconds_   0x21cc8c8
        arg this = <instance of Scheduler>
        arg newSeconds = 31.091893318
    Meta_AppClock:tick   0x21cbfd8
        arg this = <instance of Meta_AppClock>
        var saveClock = <instance of Meta_SystemClock>
    Process:tick   0x2217e88
        arg this = <instance of Main>
^^ The preceding error dump is for ERROR: Message 'widgets' not understood.
RECEIVER: a NdefParamGui

You know the routine - user posts "it doesn't work" and then runs away.

In this case, it's an error I had already discussed with Alberto some months ago.

telephon commented 7 years ago

moved from https://github.com/supercollider/supercollider/issues/2371

There is no instance variable widgets anywhere, but it is called by two methods:

e.g.:

updateSliderSpecs { |editKeys|
        var currState;

        if (object.isNil) { specs.clear; ^this };

        currState = object.getKeysValues;

        editKeys.do { |key, i|
            var currValue = currState.detect { |pair| pair[0] == key }[1];
            var newSpec = this.getSpec(key, currValue);
            var widge = this.widgets[i];
            if (newSpec != specs[key]) {
                specs.put(key, newSpec);
                if (widge.isKindOf(EZSlider) or:
                    { widge.isKindOf(EZRanger) }) {
                    widge.controlSpec = newSpec;
                    widge.value_(currValue);
                };
            };
        }
    }

It throws the error:

ERROR: Message 'widgets' not understood.
RECEIVER:
Instance of NdefParamGui {    (0x11d09aaf8, gc=CC, fmt=00, flg=00, set=05)
adcxyz commented 7 years ago

Dear all, fixed this so my tests work - see https://github.com/supercollider-quarks/JITLibExtensions/blob/master/JitGui_tests.scd

Please test with your setups, both in 3.7.2 and 3.8, and let me know if you still see any problems.

sorry for the long wait!

telephon commented 7 years ago

Works fine now (3.8) – thank you!