One way may be to make 'size' an attribute, cachable and returning a JSFunction wrapping a C++ function returning 1. Not sure this will pass signature tests though. This can be done as a custom 'size' function also but I guess you need to return the same JS object all the time.
A second approach might be to return the 'size' method bound to the count queuing strategy object. That is easy in JS but I do not know how easy it is within JSC. IIUC, 'size' is somehow similar to a C++ static class method. A third approach could be to add a 'static' IDL keyword to the binding generator to enable calling static methods of the DOM class. No custom code in that case. Hope this helps Y Le mer. 1 juil. 2015 20:07, Geoffrey Garen <gga...@apple.com> a écrit : Hi Xabier. Our bindings assume, by default, that the ‘this’ parameter passed to any DOM interface is an object of the interface’s type. This is how most DOM bindings work. Our bindings also assume that a requested property can be read from the ‘this’ object, which represents the DOM interface. If you’re going to pass undefined into the size function, you’ve violated both assumptions. (It would be meaningless to remove the type check — the call to size later would just crash anyway.) The easiest way to make this work is to make the function custom. What exactly did you do when you tried that, and why exactly didn’t it work? Side note: Shouldn’t this function bear the name “strategySize” rather than “size”? Geoff > On Jul 1, 2015, at 10:59 AM, Xabier Rodríguez Calvar <calva...@igalia.com> wrote: > > Hello, > > I need some help with some JS bindings code. I am implementing > CountQueuingStrategy [1], which is an object containing two properties, > one of them a function. That strategy is passed to another > ReadableStream object [2] and as you can see at step 8, the size method > is extracted from the strategy and kept inside the stream for later > use. That use happens at [3], step 5.b.i, when the spec says that we > have to pass undefined as this (and we do). > > [1] https://streams.spec.whatwg.org/#cqs-class > [2] https://streams.spec.whatwg.org/#rs-constructor > [3] https://streams.spec.whatwg.org/#enqueue-in-readable-stream > > The problem comes when invoking that method at the generated bindings: > > EncodedJSValue JSC_HOST_CALL > jsCountQueuingStrategyPrototypeFunctionSize(ExecState* exec) > { > JSValue thisValue = exec->thisValue(); > JSCountQueuingStrategy* castedThis = > jsDynamicCast<JSCountQueuingStrategy*>(thisValue); > if (UNLIKELY(!castedThis)) > return throwThisTypeError(*exec, "CountQueuingStrategy", > "size"); > ASSERT_GC_OBJECT_INHERITS(castedThis, > JSCountQueuingStrategy::info()); > return JSValue::encode(castedThis->size(exec)); > } > > The problem is that it checks that "this" casts to the class and of > course it fails because the spec says it has to be undefined. I haven't > found any way to overcome this, even making the method custom. > > Any ideas here? > > Thanks in advance and best regards. > _______________________________________________ > webkit-dev mailing list > webkit-dev@lists.webkit.org > https://lists.webkit.org/mailman/listinfo/webkit-dev _______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-dev