widl-nan
Version:
Auto generate native C++ addon source code by parsing Web IDL definition
52 lines (47 loc) • 1.63 kB
Plain Text
{{#def.idlType}}
{{#def.enum}}
{{#def.buildValidEnumValuesList}}
{{#def.extractV8Value}}
{{
var argumentListStr = '';
var returnList = [];
if ( p.arguments ) {
p.arguments.forEach((arg, idx) => {
returnList.push('arg' + idx);
});
}
argumentListStr = returnList.join(', ');
}}
{{~ p.arguments :q:j }}
{{
var enumCheck = isEnumType(q.idlType, it.refTypeMap);
var enumDef = getEnumDef(q.idlType, it.refTypeMap);
var enumName = enumDef.name;
var paramName = 'arg' + j;
var finalParamName = paramName;
var paramIsInterface = isInterface(q.idlType, it.refTypeMap);
if (paramIsInterface) {
paramName = 'nan_' + paramName;
}
}}
auto {{=paramName}} = {{=extractArgument(q.idlType, it.refTypeMap)}}(info[{{=j}}]);
{{? enumCheck }}
// Valid enum values for parameter info{{=j}}, original IDL type: {{=enumName}}
const char* VALID_ENUM_{{=(enumName.toUpperCase())}}_INFO[] = { {{=buildValidEnumValuesList(enumDef)}} };
if (!IsEnumValueValid({{=paramName}}, VALID_ENUM_{{=(enumName.toUpperCase())}}_INFO)) {
// TODO: modify argumentList.def to handle this case
std::string err = "Illegal argument: ";
err += "{{=enumName}}";
err += " ";
err += "{{=paramName}}";
err += " == ";
err += "'";
err += {{=paramName}};
err += "'";
Nan::ThrowTypeError(err.c_str());
}
{{?? paramIsInterface }}
// Convert to impl {{=q.idlType.idlType}} pointer
auto {{=finalParamName}} = *(ObjectWrap::Unwrap<Nan{{=q.idlType.idlType}}>({{=paramName}})->{{=generateGetImplMethodName(q.idlType.idlType)}}());
{{?}}
{{~}}