blob: 6845cc113948ce596e5f4bd36a74eb5ef676a518 [file] [log] [blame]
// Copyright 2017 Google Inc. 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_MOZJS_UTIL_ALGORITHM_HELPERS_H_
#define COBALT_SCRIPT_MOZJS_UTIL_ALGORITHM_HELPERS_H_
#include "third_party/mozjs/js/src/jsapi.h"
namespace cobalt {
namespace script {
namespace mozjs {
namespace util {
// Whether |value1| and |value2| are both GC things and are the same GC thing.
// i.e. Returns |false| if either value is not a GC thing.
bool IsSameGcThing(JSContext* context, JS::HandleValue value1,
JS::HandleValue value2);
// https://tc39.github.io/ecma262/#sec-getiterator
bool GetIterator(JSContext* context, JS::HandleObject object,
JS::MutableHandleObject out_iterator);
// https://tc39.github.io/ecma262/#sec-iteratornext
bool IteratorNext(JSContext* context, JS::HandleObject iterator,
JS::MutableHandleObject out_iterator_result);
// https://tc39.github.io/ecma262/#sec-iteratorcomplete
bool IteratorComplete(JSContext* context, JS::HandleObject iterator_result);
// https://tc39.github.io/ecma262/#sec-iteratorvalue
bool IteratorValue(JSContext* context, JS::HandleObject iterator_result,
JS::MutableHandleValue out_result);
// https://tc39.github.io/ecma262/#sec-iteratorstep
//
// TODO: out_iterator_result should probably be a Value so it can return false
// or the next iterator record. Right now this and IteratorComplete are the only
// functions where a false return value doesn't necessarily mean an error.
bool IteratorStep(JSContext* context, JS::HandleObject iterator,
JS::MutableHandleObject out_iterator_result);
// https://tc39.github.io/ecma262/#sec-iteratorclose
bool IteratorClose(JSContext* context, JS::HandleObject iterator);
// https://tc39.github.io/ecma262/#sec-call
// Call |function| on object |value| with 0 arguments.
bool Call0(JSContext* context, JS::HandleFunction function,
JS::HandleObject value, JS::MutableHandleValue out_result);
// https://tc39.github.io/ecma262/#sec-invoke
// Invoke a method named |property_name| on object |value| with 0 arguments.
bool Invoke0(JSContext* context, JS::HandleObject value,
const char* property_name, JS::MutableHandleValue out_result);
} // namespace util
} // namespace mozjs
} // namespace script
} // namespace cobalt
#endif // COBALT_SCRIPT_MOZJS_UTIL_ALGORITHM_HELPERS_H_