Since I'm very new to V8 and might be using the wrong terminology, I'll 
just explain what I'm trying to do  :)

I am using V8 embedded (within UnrealJS / UE4).  At startup, it iterates 
through UClasses (UE4 class objects) and creates a FunctionTemplate for 
each one.  It iterates the class's functions, creating a FunctionTemplate 
for each one, and adds that FunctionTemplate to the owning class's 
FunctionTemplate via 
"OwnerClassTemplate->PrototypeTemplate()->Set(function_name, 
function_template)".  The idea is to make it so that in javascript, you can 
call UE4 functions the same way you'd call them in UE4 C++, more or less.

But something goes wrong around UClass 270 or so.  I trigger an assert in 
V8 when calling GetFunction() on the function template for a class.

<unknown>:-1: Uncaught TypeError: Object template has duplicate property 
'ExecuteUbergraph'

(ExecuteUbergraph is a function in the overall base class of UE4 - UObject)

On the surface, it seems like this should be impossible so I want to log 
out the properties of each of these FunctionTemplate objects to see what's 
been added to each one.  But I can't figure out how to do this.

I've tried a bunch of things to convert this FunctionTemplate into an 
object, based on the understanding that a FunctionTemplate is really a 
FunctionTemplateInfo object (that I retrieve via Utils::OpenHandle) and 
FunctionTemplateInfo is where those properties would be.  
FunctionTemplateInfo appears to ultimately derive from Object 
(FunctionTemplateInfo -> TemplateInfo -> Struct -> HeapObject -> Object), 
so it seemed reasonable to try to convert the FunctionTemplate to an 
object, and call GetOwnPropertyNames on it.  But I'm not having any success 
with this approach, so I must be doing something wrong.  I can successfully 
convert the FunctionTemplate handle into a normal Object handle, but it 
triggers asserts when I try to use it, suggesting that my conversion (which 
involved some reinterpret_casting) is not valid.

My FunctionTemplate::ToObject function basically amounts to:
  i::Handle<i::FunctionTemplateInfo> self = Utils::OpenHandle(this);
  Local<v8::Object> Result = Utils::Convert<i::FunctionTemplateInfo, 
v8::Object>(self);
  return Result;


Is there a way to iterate the properties of a FunctionTemplate / 
ObjectTemplate?  What concept have I horribly misunderstood here?   :)

-- 
-- 
v8-users mailing list
v8-users@googlegroups.com
http://groups.google.com/group/v8-users
--- 
You received this message because you are subscribed to the Google Groups 
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-users/d69d480f-8b7f-41cb-8fe0-39b020c68277o%40googlegroups.com.

Reply via email to