Thanks for response. Look at this in general. Is that something related to caching of objects. I mean I change the object value directly in the memory but I can not see the result in assignment. My speculation is that these two things may happen: - V8 keeps multiple copies of one object (why v8 should do that? After assignment it may recreate the object instead of changing the value!) - For the sake of the performance, v8 keeps the recently used objects in a cache helping it to speed up the access to values
I am really puzzled! May be I should change the AST in order to intercept the assignments. Thanks, HDev On Mon, Oct 29, 2012 at 7:58 PM, Jakob Kummerow <[email protected]>wrote: > Since _nodeValue is not defined by V8, this is a question for whoever > defined that property on the object. It could be intercepted or whatever. > > Also, be aware that playing with raw pointers is dangerous. Your address > calculation looks fishy to me. In objects.cc, there should be no need to do > anything that low-level. Look for existing functions that do what you need. > > > On Mon, Oct 29, 2012 at 11:54 AM, Hossein Siadati > <[email protected]>wrote: > >> After the HTML is parsed and the DOM tree is built, for each DOM element, >> a JSObject is created. The JSObject class is defined in objects.h file and >> the methods reside in objects.cc file. >> >> JSObject is inherited from class Object, and Object class >> is inherited from class MaybeObject. Each JSObject probably has a map which >> keeps pairs of key-value things for each DOM element, including parent, >> child nodes, name, and value. The key in which keeps the value is >> _nodeValue (which should be named by jsdom or htmlparser which I use for >> parsing and creating the DOM tree). I change the _nodeValue directly (for >> example want to encrypt it). I can change the _nodevalue. But when I assign >> the value of that node to a variable, the old value is assigned to that >> variable. >> >> By "directly", I mean that I want to intercept the access to DOM elements >> in v8, and when a value wants to be assigned to the node, I want to encrypt >> the value. In the reverse side, i should decrypt when I am reading from the >> node. Currently, I think that the JSObject::SetProperty and >> Object::GetProperty methods in objects.cc file is the correct place. >> I intercept there and change the _nodeValue property of the JSObject then I >> change the value like this: >> >> // i is the index of _nodeValue in the map of properties of the node >> DescriptorArray* descs = map()->instance_descriptors(); >> int index = 0; >> index = descs->GetFieldIndex(i); >> int offset = map()->inobject_properties() + (index * kPointerSize); >> *reinterpret_cast<uint16_t*>(reinterpret_cast<byte*>(this) + >> offset - kHeapObjectTag -1 ) = ENCRYPTEDVALUE; >> >> That is how I do that. But I do not know why the change does not applies? >> Am I doing right? What is the problem? >> >> Thanks, >> Hossein >> >> On Mon, Oct 29, 2012 at 6:38 PM, Jakob Kummerow >> <[email protected]>wrote: >> >>> I don't know what you're talking about. What's the "value" of a >>> JSObject? What does changing it "directly" mean? What's a "_nodeValue" >>> attribute? The V8 source code does not contain this string. >>> >>> >>> On Mon, Oct 29, 2012 at 9:08 AM, HDev <[email protected]> wrote: >>> >>>> Hi All, >>>> >>>> I wan to change the value of JSObject s directly. Should I change the >>>> value of _nodeValue attribute? >>>> Please help!!!!! >>>> >>>> Thanks, >>>> HDev >>>> >>>> -- >>>> v8-dev mailing list >>>> [email protected] >>>> http://groups.google.com/group/v8-dev >>> >>> >>> -- >>> v8-dev mailing list >>> [email protected] >>> http://groups.google.com/group/v8-dev >> >> >> -- >> v8-dev mailing list >> [email protected] >> http://groups.google.com/group/v8-dev >> > > -- > v8-dev mailing list > [email protected] > http://groups.google.com/group/v8-dev -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev
