Yeah. The check I was going to do is actually pretty simple: if(bytes && typeof bytes.byteLength != "number") throw new TypeError("BinaryData can only be initialized with ArrayBuffer”); ba = bytes ? bytes as ArrayBuffer : new ArrayBuffer(0);
It’s not 100% foolproof, but if someone wants to pass in an object that have a byteLength that’s a number, they should be able to get away with it… ;-) I tried wrapping this in a if(goog.DEBUG) clause, but goog is not defined. I think this is something which needs to be done on the compiler level. The debug code should be active in client debug code too. Not just on the Framework level. Setting goog.DEBUG to true in the unminified build and setting it to false in the minified build is pretty attractive. > On Jul 12, 2017, at 12:56 AM, Greg Dove <greg.d...@gmail.com> wrote: > > oops, that last idea won't work so well with @flexjsignorecoercion > ArrayBuffer above it :) > > On Wed, Jul 12, 2017 at 9:54 AM, Greg Dove <greg.d...@gmail.com> wrote: > >> >> In application development I would normally do this type of thing inside >> CONFIG::dev >> blocks, or similar, so having the possibility, as described, to exclude >> development-only code (extra type checking, null checks etc) would >> definitely also be helpful PAYG-wise from within the framework. >> >> The general issue here I think is that using this approach for the >> framework requires a dev build of the framework and a separate >> produciton-ready build, so the approach of using GCC to avoid this via >> annotations sounds like a great solution to that. I don't know how we could >> do this on the swf side though without having two framework builds? >> >> btw React/React-Native has something like this as well iirc, including >> removal of a bunch of runtime type-checking support in the release builds, >> so having something like this seems like it would be a good thing to for >> comparison with others. >> >> I terms of the 'type check' in this case, personally I think it could be >> as simple as >> >> ba = bytes ? bytes as ArrayBuffer : new ArrayBuffer(0); >> if (bytes && !ba) throw new Error('unexpected constructor argument type'); >> >> I think that could be used for both swf and js. >> >> >> >> On Wed, Jul 12, 2017 at 8:56 AM, Alex Harui <aha...@adobe.com.invalid> >> wrote: >> >>> I've mentioned the notion of debug-mode beads on the mailing list a couple >>> of times. It would be great to see this idea explored more. >>> >>> By definition, now that you've debugged your code, any type-checking code >>> path becomes unused in production, which is what we don't want. But >>> adding code paths that go away in production, or swapping in different >>> beads during development that have more code paths that check for common >>> mistakes is certainly within the charter. We want to maximize developer >>> productivity. >>> >>> I think Google Closure Compiler supports a debug flag you can use in >>> COMPILE::JS blocks that gets dropped in production. If we need to mimic a >>> similar flag for SWF so code can compile outside of COMPILE::JS blocks >>> that might be ok. >>> >>> -Alex >>> >>> On 7/11/17, 1:07 PM, "Harbs" <harbs.li...@gmail.com> wrote: >>> >>>> I just wasted over an hour because I was initializing a BinaryData with a >>>> string instead of an ArrayBuffer. >>>> >>>> I would like to add a typecheck to the bytes argument in the BinaryData >>>> constructor to throw an error if something other than an ArrayBuffer is >>>> provided. We cannot use strict typing to catch this in the compiler, >>>> because the argument is different for SWF and JS. Is this a violation of >>>> PAYG? It’s sort-of just in case code, but not really because it’s >>>> protecting against errors. >>>> >>>> Thoughts? Other solutions? >>>> Harbs >>> >>> >>