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

2009-03-06 Thread Zhe Su
ping.

On Thu, Mar 5, 2009 at 2:44 PM, Zhe Su james...@gmail.com wrote:

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

 Do you have any idea on this issue? How can I implement such behavior based
 on current API?

 Regards
 James Su

___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev


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

2009-03-06 Thread Geoffrey Garen

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.


Geoff
___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev


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

2009-03-06 Thread Zhe Su
Thanks for your reply.

On Sat, Mar 7, 2009 at 7:41 AM, Geoffrey Garen gga...@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

___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev


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

2009-03-04 Thread Zhe Su
Hi,
   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.

Do you have any idea on this issue? How can I implement such behavior based
on current API?

Regards
James Su
___
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev