forked from nodegit/nodegit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconvertFromV8.cc.ejs
More file actions
32 lines (32 loc) · 1.65 KB
/
convertFromV8.cc.ejs
File metadata and controls
32 lines (32 loc) · 1.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<% if (!arg.isPayload) { -%>
<%- arg.cType %> from_<%- arg.name %>;
<% if (arg.isOptional) { -%>
if (args[<%- jsArg %>]->Is<%- cppClassName2v8ValueClassName(arg.cppClassName) %>()) {
<% } -%>
<% if (arg.cppClassName == 'String') { -%>
String::Utf8Value <%- arg.name %>(args[<%- jsArg %>]->ToString());
from_<%- arg.name %> = (<%- arg.cType %>) strdup(*<%- arg.name %>);
<% } else if (arg.cppClassName == 'Array') { -%>
Array *tmp_<%- arg.name %> = Array::Cast(*args[<%- jsArg %>]);
from_<%- arg.name %> = (<%- arg.cType %>)malloc(tmp_<%- arg.name %>->Length() * sizeof(<%- arg.cType.replace('**', '*') %>));
for (unsigned int i = 0; i < tmp_<%- arg.name %>->Length(); i++) {
<%
// FIXME: should recursively call convertFromv8.
%>
from_<%- arg.name %>[i] = ObjectWrap::Unwrap<<%- arg.arrayElementCppClassName %>>(tmp_<%- arg.name %>->Get(Number::New(static_cast<double>(i)))->ToObject())->GetValue();
}
<% } else if (arg.cppClassName == "Function") { -%>
Persistent<Function>::New(Local<Function>::Cast(args[<%- jsArg %>]));
<% } else if (arg.cppClassName == 'Buffer') { -%>
from_<%- arg.name %> = Buffer::Data(args[<%- jsArg %>]->ToObject());
<% } else if (isV8Value(arg.cppClassName)) { -%>
from_<%- arg.name %> = (<%- arg.cType %>) <%- arg.additionalCast %> <%- arg.cast %> args[<%- jsArg %>]->To<%- arg.cppClassName %>()->Value();
<% } else { -%>
from_<%- arg.name %> = ObjectWrap::Unwrap<<%- arg.cppClassName %>>(args[<%- jsArg %>]->ToObject())->GetValue();
<% } -%>
<% if (arg.isOptional) { -%>
} else {
from_<%- arg.name %> = 0;
}
<% } -%>
<% } -%>