Interesting, which browser? I just tried this in the Chrome console:
x = Object(true)
typeof(x) => "object"
y = Boolean.apply(null, [x]);
typeof(y) => "boolean"

-Ray


On Sun, Apr 11, 2010 at 6:32 AM, Sanjiv Jivan <[email protected]> wrote:
> Thank's for the tip Ray. Unfortunately I'm not seeing the desired results
> with Boolean, while Number works fine. However .valueOf() does return the
> correct result.
> Boolean.apply(null, [Object(false)])
> true
> Number.apply(null, [Object(5)])
> 5
> (Object(false)).valueOf()
> false
> (Object(true)).valueOf()
> true
> (Object(5)).valueOf()
> 5
> (Object("foobar")).valueOf()
> "foobar"
> Object("foobar")
> String
>
> So I have altered the debox function to call valueOf() instead of apply(..)
> and it appears to be working fine with my limited testing.
> // no longer need to pass typeCast arg
> $debox = function(val, typeCast) {
>     return @com.google.gwt.core.client.GWT::isScript()() ? val : function()
> {
>     var v = val.apply(this, arguments);
>     //return typeCast.apply(null, v == undefined ? [] : [v]);
>     return v == null ? null : v.valueOf();
> }};
> I'll only be calling debox(..) for functions that have a Javascript
> primitive return types including String type. The reason for applying it to
> a String as well is because of this issue
> : http://code.google.com/p/google-web-toolkit/issues/detail?id=4301
> Let me know your thoughts..
> Thanks,
> Sanjiv
>
> On Sat, Apr 10, 2010 at 9:28 PM, Ray Cromwell <[email protected]> wrote:
>>
>> Bob's old proposal was to introduce an "Any" type which is the
>> supertype of all types, including primitives. As a short term fix, you
>> can do what I did in GWT Exporter and de-box these values. If you are
>> trying to export JS functions, then you can have a function like:
>>
>> function debox(val, typeCast) {
>>  return isScript ? val : typeCast.apply(null, arguments);
>> }
>>
>> and then, debox($entry(...), Boolean) will return a 'boolean', and
>> debox($entry(...), Number) will return a 'number'
>>
>> -Ray
>>
>> On Sat, Apr 10, 2010 at 6:24 PM, John Tamplin <[email protected]> wrote:
>> > On Sat, Apr 10, 2010 at 7:37 PM, Sanjiv Jivan <[email protected]>
>> > wrote:
>> >>
>> >>   private static native Object apply(Object jsFunction, Object thisObj,
>> >>       Object arguments) /*-{
>> >>     if (@com.google.gwt.core.client.GWT::isScript()()) {
>> >>       return jsFunction.apply(thisObj, arguments);
>> >>     } else {
>> >>       _ = jsFunction.apply(thisObj, arguments);
>> >>       if (_ != null) {
>> >>         // Wrap for hosted mode
>> >>         _ = Object(_);
>> >>       }
>> >>       return _;
>> >>     }
>> >>   }-*/;
>> >> What is the rationale for this wrapping as Object(..) in hosted mode?
>> >> And
>> >> can you suggest a workaround for this usecase?
>> >
>> > Notice the return type -- you can't return a JS primitive as an Object,
>> > but
>> > a JavaScriptObject can be returned as an Object.
>> > I have cc'd BobV who wrote this -- perhaps he can suggest a workaround.
>> > --
>> > John A. Tamplin
>> > Software Engineer (GWT), Google
>> >
>> > --
>> > http://groups.google.com/group/Google-Web-Toolkit-Contributors
>>
>> --
>> http://groups.google.com/group/Google-Web-Toolkit-Contributors
>>
>> To unsubscribe, reply using "remove me" as the subject.
>
> --
> http://groups.google.com/group/Google-Web-Toolkit-Contributors

-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to