代码之家  ›  专栏  ›  技术社区  ›  MaximPro

FunctionTemplate::GetFunction如何返回值?

  •  -2
  • MaximPro  · 技术社区  · 1 年前

    在V8代码中,有一个函数接收一个函数

    MaybeLocal<v8::Function> FunctionTemplate::GetFunction(Local<Context> context) {
      PREPARE_FOR_EXECUTION(context, FunctionTemplate, GetFunction);
      auto self = Utils::OpenHandle(this);
      Local<Function> result;
      has_exception =
          !ToLocal<Function>(i::ApiNatives::InstantiateFunction(
                                 i_isolate, i_isolate->native_context(), self),
                             &result);
      RETURN_ON_FAILED_EXECUTION(Function);
      RETURN_ESCAPED(result);
    }
    

    或者也许我不知道什么,但这个函数怎么能返回什么呢?没有return语句。

    node.js V8文档说 this :

    返回当前执行上下文中的唯一函数实例。

    这是如何工作的?

    1 回复  |  直到 1 年前
        1
  •  1
  •   3CxEZiVlQ    1 年前

    deps/v8/src/api/api-macros.h:106-112

    #define RETURN_ON_FAILED_EXECUTION(T) \
      if (has_exception) return MaybeLocal<T>();
    
    #define RETURN_ESCAPED(value) return handle_scope.Escape(value);
    

    结果在

    MaybeLocal<v8::Function> FunctionTemplate::GetFunction(Local<Context> context) {
      PREPARE_FOR_EXECUTION(context, FunctionTemplate, GetFunction);
      auto self = Utils::OpenHandle(this);
      Local<Function> result;
      has_exception =
          !ToLocal<Function>(i::ApiNatives::InstantiateFunction(
                                 i_isolate, i_isolate->native_context(), self),
                             &result);
      if (has_exception) return MaybeLocal<Function>();
      return handle_scope.Escape(result);
    }