JSObject.makeFunction constructor

JSObject.makeFunction(
  1. JSContext context, {
  2. String? name,
  3. List<String>? parameterNames,
  4. required String body,
  5. String? sourceURL,
  6. int startingLineNumber = 1,
})

Implementation

factory JSObject.makeFunction(
  JSContext context, {
  String? name,
  List<String>? parameterNames,
  required String body,
  String? sourceURL,
  int startingLineNumber = 1,
}) {
  final JSException exception = JSException.create(context);
  final JSString? jsName = name != null ? JSString.fromString(name) : null;
  final List<JSString>? jsParameterNames = parameterNames?.map((String element) => JSString.fromString(element)).toList();
  final JSString jsBody = JSString.fromString(body);
  final JSString? jsSourceURL = sourceURL != null ? JSString.fromString(sourceURL) : null;
  try {
    final JSObject object = JSObject(
      context,
      js_bd.JSObjectMakeFunction(
        context.ref,
        jsName?.ref ?? nullptr,
        jsParameterNames?.length ?? 0,
        jsParameterNames?.ref ?? nullptr,
        jsBody.ref,
        jsSourceURL?.ref ?? nullptr,
        startingLineNumber,
        exception.ref,
      ),
    );
    if (exception.shouldThrow) {
      throw exception.error;
    }
    return object;
  } finally {
    jsSourceURL?.release();
    jsBody.release();
    jsParameterNames?.release();
    jsName?.release();
    exception.release();
  }
}