|
18 | 18 | // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
19 | 19 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
20 | 20 | // USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21 |
| - |
| 21 | +#undef V8_IMMINENT_DEPRECATION_WARNINGS |
| 22 | +#undef V8_DEPRECATION_WARNINGS |
22 | 23 | #include "node.h"
|
23 | 24 | #include "node_buffer.h"
|
24 | 25 | #include "node_errors.h"
|
@@ -401,6 +402,50 @@ void SecureContext::New(const FunctionCallbackInfo<Value>& args) {
|
401 | 402 | new SecureContext(env, args.This());
|
402 | 403 | }
|
403 | 404 |
|
| 405 | +const char* b(bool _) { return _ ? "true" : "false"; } |
| 406 | + |
| 407 | +void Scratch(const FunctionCallbackInfo<Value>& args) { |
| 408 | + Environment* env = Environment::GetCurrent(args); |
| 409 | + Isolate* i = env->isolate(); |
| 410 | + Local<Context> c = env->context(); |
| 411 | + // or Local<Context> c = i->GetCurrentContext(); |
| 412 | + |
| 413 | + Local<Value> lv = args[0]; |
| 414 | + bool die = args[1].As<Boolean>()->Value(); |
| 415 | + |
| 416 | + if (die) |
| 417 | + env->ThrowError("as you wish"); |
| 418 | + |
| 419 | + printf("IsUndefined()? %s\n", b(lv->IsUndefined())); |
| 420 | + printf("IsNumber()? %s\n", b(lv->IsNumber())); |
| 421 | + printf("IsInt32()? %s\n", b(lv->IsInt32())); |
| 422 | + printf("IsUint32()? %s\n", b(lv->IsUint32())); |
| 423 | + printf("IsBoolean()? %s\n", b(lv->IsBoolean())); |
| 424 | + printf("IsFunction()? %s\n", b(lv->IsFunction())); |
| 425 | + printf("IsString()? %s\n", b(lv->IsString())); |
| 426 | + |
| 427 | + // XXX how can I make ml.IsEmpty() be true for any ToT() conversions? |
| 428 | + |
| 429 | + // ToT(context) returns a maybe, ToT(isolate) returns a local, one or the |
| 430 | + // other will be deprecated, apparently depends on whether it can "fail". What |
| 431 | + // causes "failure"? |
| 432 | + { Local<Int32> l = lv.As<Int32>(); int32_t v = l->Value(); printf("as int32_t %d\n", v); } |
| 433 | + { MaybeLocal<Int32> ml = lv->ToInt32(c); Local<Int32> l = ml.ToLocalChecked(); int32_t v = l->Value(); printf("to int32_t %d\n", v); } |
| 434 | + |
| 435 | + { Local<Uint32> l = lv.As<Uint32>(); uint32_t v = l->Value(); printf("as uint32_t %u\n", v); } |
| 436 | + { MaybeLocal<Uint32> ml = lv->ToUint32(c); Local<Uint32> l = ml.ToLocalChecked(); uint32_t v = l->Value(); printf("to uint32_t %u\n", v); } |
| 437 | + |
| 438 | + { Local<Boolean> l = lv.As<Boolean>(); bool v = l->Value(); printf("as bool %s\n", b(v)); } |
| 439 | + // ToBoolean "cannot fail" - wtf? |
| 440 | + { Local<Boolean> l = lv->ToBoolean(i); bool v = l->Value(); printf("to bool %s\n", b(v)); } |
| 441 | + |
| 442 | + { const node::Utf8Value s(env->isolate(), args[0]); printf("as char* \"%s\"\n", *s); } |
| 443 | + { MaybeLocal<String> ml = lv->ToString(i); Local<String> l = ml.ToLocalChecked(); |
| 444 | + char v[123]; l->WriteUtf8(i, v, sizeof(v)); printf("to char* \"%s\"\n", v); } |
| 445 | + |
| 446 | + int len = args.Length(); |
| 447 | + args.GetReturnValue().Set(len); |
| 448 | +} |
404 | 449 |
|
405 | 450 | void SecureContext::Init(const FunctionCallbackInfo<Value>& args) {
|
406 | 451 | SecureContext* sc;
|
@@ -5812,6 +5857,7 @@ void Initialize(Local<Object> target,
|
5812 | 5857 | NODE_DEFINE_CONSTANT(target, PK_FORMAT_DER);
|
5813 | 5858 | NODE_DEFINE_CONSTANT(target, PK_FORMAT_PEM);
|
5814 | 5859 | env->SetMethod(target, "randomBytes", RandomBytes);
|
| 5860 | + env->SetMethod(target, "scratch", Scratch); |
5815 | 5861 | env->SetMethodNoSideEffect(target, "timingSafeEqual", TimingSafeEqual);
|
5816 | 5862 | env->SetMethodNoSideEffect(target, "getSSLCiphers", GetSSLCiphers);
|
5817 | 5863 | env->SetMethodNoSideEffect(target, "getCiphers", GetCiphers);
|
|
0 commit comments