// Copyright 2018 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#ifndef COBALT_SCRIPT_V8C_HELPERS_H_
#define COBALT_SCRIPT_V8C_HELPERS_H_

#include <string>

#include "starboard/common/string.h"
#include "v8/include/v8.h"

// Utility functions that are primarily utility V8 wrappers, and aren't
// directly related to web specs.

namespace cobalt {
namespace script {
namespace v8c {

// Create a new |v8::String| from |string|.  This is mostly meant to be used
// when feeding string literals into V8 in native code.
inline v8::Local<v8::String> NewInternalString(v8::Isolate* isolate,
                                               const char* string) {
  DCHECK(isolate);
  if (!string || string[0] == '\0') {
    return v8::String::Empty(isolate);
  }
  return v8::String::NewFromOneByte(
             isolate, reinterpret_cast<const uint8_t*>(string),
             v8::NewStringType::kInternalized, static_cast<int>(strlen(string)))
      .ToLocalChecked();
}

// Attempt to call |function| with the receiver set to |receiver|.  Return
// nothing if |function| is not a function or the result of calling |function|
// is nothing.
inline v8::MaybeLocal<v8::Value> MaybeCallAsFunction(
    v8::Local<v8::Context> context, v8::Local<v8::Value> function,
    v8::Local<v8::Object> receiver) {
  if (!function->IsFunction()) {
    return {};
  }
  return function.As<v8::Function>()->Call(context, receiver, 0, nullptr);
}

}  // namespace v8c
}  // namespace script
}  // namespace cobalt

#endif  // COBALT_SCRIPT_V8C_HELPERS_H_
