[webkit-dev] A question regarding to JavaScriptCore's C/C++ API.

Zhe Su james.su at gmail.com
Fri Mar 6 17:52:55 PST 2009


Thanks for your reply.

On Sat, Mar 7, 2009 at 7:41 AM, Geoffrey Garen <ggaren at apple.com> wrote:

> Hi Zhe.
>
>    I'm developing an application which uses webkit's JavaScriptCore and a
>> customized global object (by providing a special class when creating the
>> context). My customized global object provides some built-in properties that
>> can be accessed by javascript code. Now, I want to support a special
>> behavior: allows javascript code to override a built-in property of global
>> object by using variable declaraction statement. For example, assuming the
>> global object has a built-in property, named "foo", a "var foo;" statement
>> shall create a javascript variable, named "foo" and the original built-in
>> "foo" shall be overrid by this new javascript variable. But if there is no
>> "var foo;" statement, the built-in foo shall be able to get and set from
>> javascript code.
>>
>> Now the problem is, current JavaScriptCore's C API (especially those
>> HasProperty, GetProperty, SetProperty callbacks of a class definition) can't
>> distinguish variable delcaration statement and variable assigment statement.
>> I checked SpiderMonkey's API and found it can distinguish such things by
>> providing a flag when calling ResolveProperty callback.
>>
>
> I'm surprised to hear that SpiderMonkey's property setting API includes a
> flag distinguishing var declarations from other kinds of property setting.
> Internet Explorer supports shadowing global properties with var
> declarations, but Firefox does not. (Perhaps you're thinking of the
> SpiderMonkey flag to distinguish "x = y" syntax from "this.x = y" syntax,
> which is slightly different.)

SpiderMonkey can distinguish among many different type of statements. See
https://developer.mozilla.org/En/SpiderMonkey/JSAPI_Reference/JSNewResolveOp


>
>
> It may not be my place, but I would discourage you from giving var
> declarations a special behavior, distinct from their behavior on the web.
> Much of the value of JavaScript derives from the fact that so many
> programmers understand how it works, due to their experience with the web.

I also don't want to support such non-standard behavior, however we need
support legacy javascript code written for windows which rely on this
behavior. What a pity. Anyway, thanks for your reply.


>
>
>  Do you have any idea on this issue? How can I implement such behavior
>> based on current API?
>>
>
> There is no API in JavaScriptCore for distinguishing between "var" and
> other property setting. I'm not sure how you would implement that.

JavaScriptCore's API is simple and easy to use, however in most cases, it's
too simple to achieve some feature, comparing to SpiderMonkey, which is too
complex and flexible.


>
>
> Geoff
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-dev/attachments/20090307/2da4767e/attachment.html>


More information about the webkit-dev mailing list