blob: a183addaed785592bb7103b9eb5ea8f3530b4079 [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_45_UTIL_ALGORITHM_HELPERS_H_
#define COBALT_SCRIPT_MOZJS_45_UTIL_ALGORITHM_HELPERS_H_
#include "third_party/mozjs-45/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);
bool Invoke0(JSContext* context, JS::HandleObject value,
JS::HandleId property_id, JS::MutableHandleValue out_result);
} // namespace util
} // namespace mozjs
} // namespace script
} // namespace cobalt
#endif // COBALT_SCRIPT_MOZJS_45_UTIL_ALGORITHM_HELPERS_H_