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

Geoffrey Garen ggaren at apple.com
Fri Mar 6 15:41:42 PST 2009

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.)

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.

> 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.


More information about the webkit-dev mailing list