'use strict';
+const binding = process.binding('util');
const prefix = '(node) ';
+exports.getHiddenValue = binding.getHiddenValue;
+
// All the internal deprecations have to use this function only, as this will
// prepend the prefix to the actual message.
exports.deprecate = function(fn, msg) {
using v8::FunctionCallbackInfo;
using v8::Local;
using v8::Object;
+using v8::String;
using v8::Value;
static void IsMapIterator(const FunctionCallbackInfo<Value>& args) {
args.GetReturnValue().Set(args[0]->IsPromise());
}
+
+static void GetHiddenValue(const FunctionCallbackInfo<Value>& args) {
+ Environment* env = Environment::GetCurrent(args);
+
+ if (!args[0]->IsObject())
+ return env->ThrowTypeError("obj must be an object");
+
+ if (!args[1]->IsString())
+ return env->ThrowTypeError("name must be a string");
+
+ Local<Object> obj = args[0].As<Object>();
+ Local<String> name = args[1].As<String>();
+
+ args.GetReturnValue().Set(obj->GetHiddenValue(name));
+}
+
+
void Initialize(Local<Object> target,
Local<Value> unused,
Local<Context> context) {
env->SetMethod(target, "isMapIterator", IsMapIterator);
env->SetMethod(target, "isSetIterator", IsSetIterator);
env->SetMethod(target, "isPromise", IsPromise);
+ env->SetMethod(target, "getHiddenValue", GetHiddenValue);
}
} // namespace util
--- /dev/null
+'use strict';
+// Flags: --expose_internals
+
+const common = require('../common');
+const assert = require('assert');
+const internalUtil = require('internal/util');
+
+function getHiddenValue(obj, name) {
+ return function() {
+ internalUtil.getHiddenValue(obj, name);
+ };
+}
+
+assert.throws(getHiddenValue(), /obj must be an object/);
+assert.throws(getHiddenValue(null, 'foo'), /obj must be an object/);
+assert.throws(getHiddenValue(undefined, 'foo'), /obj must be an object/);
+assert.throws(getHiddenValue('bar', 'foo'), /obj must be an object/);
+assert.throws(getHiddenValue(85, 'foo'), /obj must be an object/);
+assert.throws(getHiddenValue({}), /name must be a string/);
+assert.throws(getHiddenValue({}, null), /name must be a string/);
+assert.throws(getHiddenValue({}, []), /name must be a string/);
+assert.deepEqual(internalUtil.getHiddenValue({}, 'foo'), undefined);
+
+let arrowMessage;
+
+try {
+ require('../fixtures/syntax/bad_syntax');
+} catch (err) {
+ arrowMessage = internalUtil.getHiddenValue(err, 'arrowMessage');
+}
+
+assert(/bad_syntax\.js:1/.test(arrowMessage));