| /* |
| * 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_ |