Lines Matching refs:vm
386 static std::vector<Local<SymbolRef>> GetSymbolRef(EcmaVM *vm)
389 static std::vector<Local<SymbolRef>> value = { SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "symbolKey1")),
390 SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "symbolKey2")),
391 SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "symbolKey3")) };
479 void ObjectRefSet(Local<ObjectRef> object, EcmaVM *vm, Local<SymbolRef> symbol)
483 bool b = object->Set(vm, cnt, StringRef::NewFromUtf8(vm, "TestValue1"));
485 b = object->Set(vm, StringRef::NewFromUtf8(vm, "Test2"), StringRef::NewFromUtf8(vm, "TestValue2"));
487 b = object->Set(vm, StringRef::NewFromUtf8(vm, "Test3"), StringRef::NewFromUtf8(vm, "TestValue3"));
489 b = object->Set(vm, symbol, StringRef::NewFromUtf8(vm, "symbolValue"));
492 Local<FunctionRef> getter1 = FunctionRef::New(vm, Getter1);
493 Local<FunctionRef> setter1 = FunctionRef::New(vm, Setter1);
495 Local<FunctionRef> getter2 = FunctionRef::New(vm, Getter2);
496 Local<FunctionRef> setter2 = FunctionRef::New(vm, Setter2);
498 Local<FunctionRef> getter3 = FunctionRef::New(vm, Getter3);
499 Local<FunctionRef> setter3 = FunctionRef::New(vm, Setter3);
501 PropertyAttribute attribute1(StringRef::NewFromUtf8(vm, "AttributeValue1"), true, true, false);
502 PropertyAttribute attribute2(StringRef::NewFromUtf8(vm, "AttributeValue2"), false, true, true);
503 PropertyAttribute attribute3(StringRef::NewFromUtf8(vm, "AttributeValue3"), true, false, true);
506 b = object->DefineProperty(vm, StringRef::NewFromUtf8(vm, "AttributeKey1"), attribute1);
508 b = object->DefineProperty(vm, StringRef::NewFromUtf8(vm, "Test2"), attribute2);
510 b = object->SetAccessorProperty(vm, StringRef::NewFromUtf8(vm, "Accessor1"), getter1, setter1);
512 b = object->SetAccessorProperty(vm, StringRef::NewFromUtf8(vm, "Test3"), getter2, setter2);
514 b = object->DefineProperty(vm, StringRef::NewFromUtf8(vm, "AttributeKey3"), attribute3);
516 b = object->SetAccessorProperty(vm, StringRef::NewFromUtf8(vm, "AttributeKey3"), getter3, setter3, attribute3);
520 void GetProperty(Local<ObjectRef> object, EcmaVM *vm)
523 Local<ArrayRef> names = object->GetOwnPropertyNames(vm);
524 int cnt = names->Length(vm);
527 Local<JSValueRef> value = ArrayRef::GetValueAt(vm, names, i);
528 if (value->IsSymbol(vm)) {
530 GTEST_LOG_(INFO) << "PropertyNames: " << symbol->GetDescription(vm)->ToString(vm);
532 GTEST_LOG_(INFO) << "PropertyNames: " << value->ToString(vm)->ToString(vm);
537 void Get(Local<ObjectRef> object, EcmaVM *vm)
541 Local<JSValueRef> value = object->Get(vm, cnt);
542 if (value->IsString(vm)) {
543 GTEST_LOG_(INFO) << "Key:1 Value:" << value->ToString(vm)->ToString(vm);
545 value = object->Get(vm, StringRef::NewFromUtf8(vm, "Test2"));
546 if (value->IsString(vm)) {
547 GTEST_LOG_(INFO) << "Key:Test2 Value:" << value->ToString(vm)->ToString(vm);
549 value = object->Get(vm, StringRef::NewFromUtf8(vm, "AttributeKey1"));
550 if (value->IsString(vm)) {
551 GTEST_LOG_(INFO) << "Key:AttributeKey1 Value:" << value->ToString(vm)->ToString(vm);
554 object->Set(vm, StringRef::NewFromUtf8(vm, "Accessor1"), NumberRef::New(vm, num));
555 object->Set(vm, StringRef::NewFromUtf8(vm, "Test3"), StringRef::NewFromUtf8(vm, "Test3Value"));
556 object->Set(vm, StringRef::NewFromUtf8(vm, "AttributeKey3"),
557 SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "AttributeKey3Value")));
558 Local<StringRef> str = object->Get(vm, StringRef::NewFromUtf8(vm, "AttributeKey3"));
559 if (str->IsString(vm)) {
560 GTEST_LOG_(INFO) << "Key:AttributeKey3 Value:" << str->ToString(vm);
562 str = object->Get(vm, StringRef::NewFromUtf8(vm, "Accessor1"));
563 if (str->IsString(vm)) {
564 GTEST_LOG_(INFO) << "Key:Accessor1 Value:" << str->ToString(vm);
566 str = object->Get(vm, StringRef::NewFromUtf8(vm, "Test3"));
567 if (str->IsString(vm)) {
568 GTEST_LOG_(INFO) << "Key:Test3 Value:" << str->ToString(vm);
572 void SetValueAgain(Local<ObjectRef> object, EcmaVM *vm)
577 bool b = object->Set(vm, cnt, StringRef::NewFromUtf8(vm, "TestValueAgain1"));
579 b = object->Set(vm, StringRef::NewFromUtf8(vm, "Test3"), StringRef::NewFromUtf8(vm, "TestValueAgain3"));
581 b = object->Set(vm, StringRef::NewFromUtf8(vm, "AttributeKey1"),
582 StringRef::NewFromUtf8(vm, "AttributeValueAgain1"));
584 b = object->Set(vm, StringRef::NewFromUtf8(vm, "AttributeKey3"),
585 StringRef::NewFromUtf8(vm, "AttributeValueAgain3"));
587 b = object->Set(vm, StringRef::NewFromUtf8(vm, "Accessor1"), StringRef::NewFromUtf8(vm, "AttributeValueAgain2"));
590 Get(object, vm);
591 GetProperty(object, vm);
594 void GetOwnEnumerablePropertyNames(Local<ObjectRef> object, EcmaVM *vm)
597 Local<ArrayRef> names = object->GetOwnEnumerablePropertyNames(vm);
598 int cnt = names->Length(vm);
601 Local<JSValueRef> value = ArrayRef::GetValueAt(vm, names, i);
602 if (value->IsSymbol(vm)) {
604 GTEST_LOG_(INFO) << "PropertyNames: " << symbol->GetDescription(vm)->ToString(vm);
606 GTEST_LOG_(INFO) << "PropertyNames: " << value->ToString(vm)->ToString(vm);
611 void PrintAllProperty(Local<ObjectRef> object, EcmaVM *vm, int flag)
613 Local<ArrayRef> names = object->GetAllPropertyNames(vm, flag);
614 int cnt = names->Length(vm);
632 Local<JSValueRef> value = ArrayRef::GetValueAt(vm, names, i);
633 if (value->IsSymbol(vm)) {
635 GTEST_LOG_(INFO) << "PropertyNames: " << symbol->GetDescription(vm)->ToString(vm);
637 GTEST_LOG_(INFO) << "PropertyNames: " << value->ToString(vm)->ToString(vm);
642 void GetAllPropertyNames(Local<ObjectRef> object, EcmaVM *vm)
646 PrintAllProperty(object, vm, i);
650 void HasAndDelete(Local<ObjectRef> object, EcmaVM *vm)
653 bool b = object->Has(vm, 1); // 1 = key
655 b = object->Has(vm, StringRef::NewFromUtf8(vm, "Test2"));
657 b = object->Delete(vm, StringRef::NewFromUtf8(vm, "Test2"));
659 b = object->Has(vm, StringRef::NewFromUtf8(vm, "Test2"));
663 void FreezeAndSeal(Local<ObjectRef> object, EcmaVM *vm)
666 object->Seal(vm);
669 bool b = object->Set(vm, num1, StringRef::NewFromUtf8(vm, "Seal1"));
671 b = object->Delete(vm, num1);
673 b = object->Set(vm, num2, StringRef::NewFromUtf8(vm, "2"));
675 object->Freeze(vm);
676 PropertyAttribute attribute(StringRef::NewFromUtf8(vm, "FreezeValue"), true, true, false);
677 b = object->DefineProperty(vm, StringRef::NewFromUtf8(vm, "Freeze"), attribute);
679 b = object->Has(vm, num2);
681 b = object->Has(vm, StringRef::NewFromUtf8(vm, "Freeze"));
683 b = object->Delete(vm, num2);
685 b = object->Delete(vm, StringRef::NewFromUtf8(vm, "Freeze"));
689 void GetOwnProperty(Local<ObjectRef> object, EcmaVM *vm)
693 bool b = object->GetOwnProperty(vm, NumberRef::New(vm, 1), value1);
696 b = object->GetOwnProperty(vm, StringRef::NewFromUtf8(vm, "AttributeKey1"), value2);
704 Local<JSValueRef> value = value2.GetValue(vm);
705 ASSERT_EQ("AttributeValue1", value->ToString(vm)->ToString(vm));
716 void NativePointer(Local<ObjectRef> object, EcmaVM *vm)
720 object->SetNativePointerFieldCount(vm, cnt);
721 ASSERT_EQ(cnt, object->GetNativePointerFieldCount(vm));
725 object->SetNativePointerField(vm, cnt2, static_cast<void *>(a), nullptr, nullptr);
726 object->SetNativePointerField(vm, cnt3, static_cast<void *>(a), nullptr, nullptr);
727 A *value1 = static_cast<A *>(object->GetNativePointerField(vm, cnt2));
728 A *value2 = static_cast<A *>(object->GetNativePointerField(vm, cnt3));
737 Local<NativePointerRef> native = NativePointerRef::New(vm, static_cast<void *>(a));
738 bool b = object->ConvertToNativeBindingObject(vm, native);
742 void SetPrototype(Local<ObjectRef> object, EcmaVM *vm)
746 Local<NumberRef> obj = NumberRef::New(vm, cnt);
747 object->SetPrototype(vm, obj);
748 Local<JSValueRef> type = object->GetPrototype(vm);
752 GTEST_LOG_(INFO) << "Prototype: " << type->Typeof(vm)->ToString(vm);
787 EcmaVM *vm = runtimeInfo->GetVM();
788 LocalScope scope(vm);
790 return JSValueRef::Undefined(vm);
808 EcmaVM *vm = runtimeInfo->GetVM();
809 LocalScope scope(vm);
815 GTEST_LOG_(INFO) << "func test arg " << i << " " << arg->Int32Value(vm);
820 int arg0 = jsArg0->Int32Value(vm);
821 int arg1 = jsArg1->Int32Value(vm);
825 return NumberRef::New(vm, sum);
840 EcmaVM *vm = runtimeInfo->GetVM();
841 LocalScope scope(vm);
847 GTEST_LOG_(INFO) << "func test arg " << i << " " << arg->Int32Value(vm);
852 int arg0 = jsArg0->Int32Value(vm);
853 int arg1 = jsArg1->Int32Value(vm);
856 return NumberRef::New(vm, sum);
861 EcmaVM *vm = runtimeInfo->GetVM();
862 LocalScope scope(vm);
868 return NumberRef::New(vm, 0);
881 Local<JSValueRef> jsSum = addFunc->Call(vm, JSValueRef::Undefined(vm), argv, addFuncArgCount);
882 int sum = jsSum->Int32Value(vm);
886 return NumberRef::New(vm, sum);
1014 static Local<FunctionRef> NewClassFunction(EcmaVM *vm);
1017 static void AddStaticVariable(EcmaVM *vm, Local<FunctionRef> &claFunc);
1019 static void AddStaticFunction(EcmaVM *vm, Local<FunctionRef> &claFunc);
1022 static void AddVariable(EcmaVM *vm, Local<ObjectRef> &proto);
1024 static void AddFunction(EcmaVM *vm, Local<ObjectRef> &proto);
1028 static Local<FunctionRef> GetClassFunction(EcmaVM *vm);
1029 static Local<Greeter> New(EcmaVM *vm, Local<StringRef> greet);
1032 static void SetPrivateGreeting(EcmaVM *vm, Local<Greeter> thisRef, Local<StringRef> priGreeting);
1033 static Local<StringRef> Greet(EcmaVM *vm, Local<Greeter> thisRef);
1036 static Local<StringRef> StandardGreeting(EcmaVM *vm);
1037 static Local<StringRef> StandardPosition(EcmaVM *vm);
1052 Local<FunctionRef> Greeter::NewClassFunction(EcmaVM *vm)
1055 Greeter::standardGreetingStrKey = SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "standardGreetingStr"));
1056 Greeter::privateGreetingKey = SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "privateGreeting"));
1060 vm,
1063 EcmaVM *vm = runtimeInfo->GetVM();
1064 LocalScope scope(vm);
1067 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1071 thisRef->Set(vm, StringRef::NewFromUtf8(vm, "greeting"), greet);
1082 AddStaticVariable(vm, claFunc);
1084 AddStaticFunction(vm, claFunc);
1085 Local<JSValueRef> jsProto = claFunc->GetFunctionPrototype(vm);
1086 Local<ObjectRef> proto = jsProto->ToObject(vm);
1089 AddVariable(vm, proto);
1091 AddFunction(vm, proto);
1093 claFunc->SetName(vm, StringRef::NewFromUtf8(vm, Greeter::CLASS_NAME.c_str()));
1097 Local<FunctionRef> Greeter::GetClassFunction(EcmaVM *vm)
1099 Local<ObjectRef> globalObj = JSNApi::GetGlobalObject(vm);
1100 Local<JSValueRef> jsClaFunc = globalObj->Get(vm, StringRef::NewFromUtf8(vm, Greeter::CLASS_NAME.c_str()));
1101 if (jsClaFunc->IsFunction(vm)) {
1104 Local<FunctionRef> claFunc = Greeter::NewClassFunction(vm);
1106 globalObj->Set(vm, claFunc->GetName(vm), claFunc);
1111 void Greeter::AddStaticVariable(EcmaVM *vm, Local<FunctionRef> &claFunc)
1115 claFunc->Set(vm, StringRef::NewFromUtf8(vm, "position"), StringRef::NewFromUtf8(vm, "door"));
1118 claFunc->Set(vm, Greeter::standardGreetingStrKey, StringRef::NewFromUtf8(vm, "Hello, there"));
1122 void Greeter::AddStaticFunction(EcmaVM *vm, Local<FunctionRef> &claFunc)
1125 claFunc->Set(vm, StringRef::NewFromUtf8(vm, "StandardGreeting"),
1126 FunctionRef::New(vm,
1129 EcmaVM *vm = runtimeInfo->GetVM();
1130 LocalScope scope(vm);
1131 Local<FunctionRef> claFunc = Greeter::GetClassFunction(vm);
1132 Local<JSValueRef> jsStandardGreetingStr = claFunc->Get(vm, Greeter::standardGreetingStrKey);
1136 claFunc->Set(vm, StringRef::NewFromUtf8(vm, "StandardPosition"),
1137 FunctionRef::New(vm,
1140 EcmaVM *vm = runtimeInfo->GetVM();
1141 LocalScope scope(vm);
1142 Local<FunctionRef> claFunc = Greeter::GetClassFunction(vm);
1143 Local<JSValueRef> jsPosition = claFunc->Get(vm, StringRef::NewFromUtf8(vm, "position"));
1149 void Greeter::AddVariable(EcmaVM *vm, Local<ObjectRef> &proto)
1152 proto->Set(vm, Greeter::privateGreetingKey, JSValueRef::Undefined(vm));
1154 proto->Set(vm, StringRef::NewFromUtf8(vm, "greeting"), JSValueRef::Undefined(vm));
1158 void Greeter::AddFunction(EcmaVM *vm, Local<ObjectRef> &proto)
1161 proto->Set(vm, StringRef::NewFromUtf8(vm, "SetPrivateGreeting"),
1162 FunctionRef::New(vm,
1165 EcmaVM *vm = runtimeInfo->GetVM();
1166 LocalScope scope(vm);
1169 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1172 thisRef->Set(vm, Greeter::privateGreetingKey, priGreeting);
1173 return JSValueRef::Undefined(vm);
1176 proto->Set(vm, StringRef::NewFromUtf8(vm, "Greet"),
1177 FunctionRef::New(vm,
1180 EcmaVM *vm = runtimeInfo->GetVM();
1181 LocalScope scope(vm);
1183 Local<FunctionRef> claFunc = Greeter::GetClassFunction(vm);
1186 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1187 Local<JSValueRef> jsPrivateGreeting = thisRef->Get(vm, Greeter::privateGreetingKey);
1188 Local<JSValueRef> jsGreeting = thisRef->Get(vm, StringRef::NewFromUtf8(vm, "greeting"));
1189 Local<JSValueRef> jsStandardGreetingStr = claFunc->Get(vm, Greeter::standardGreetingStrKey);
1191 if (jsPrivateGreeting->IsString(vm)) {
1192 ret.append("Hello, ").append(jsPrivateGreeting->ToString(vm)->ToString(vm));
1193 } else if (jsGreeting->IsString(vm)) {
1194 ret.append("Hello, ").append(jsGreeting->ToString(vm)->ToString(vm));
1196 ret.append(jsStandardGreetingStr->ToString(vm)->ToString(vm));
1198 return StringRef::NewFromUtf8(vm, ret.c_str(), ret.size());
1202 Local<Greeter> Greeter::New(EcmaVM *vm, Local<StringRef> greet)
1205 Local<FunctionRef> claFunc = Greeter::GetClassFunction(vm);
1209 Local<JSValueRef> jsObj = claFunc->Constructor(vm, argv, 1);
1210 Local<ObjectRef> obj = jsObj->ToObject(vm);
1217 void Greeter::SetPrivateGreeting(EcmaVM *vm, Local<Greeter> thisRef, Local<StringRef> priGreeting)
1220 Local<FunctionRef> func = objRef->Get(vm, StringRef::NewFromUtf8(vm, "SetPrivateGreeting"));
1222 func->Call(vm, objRef, argv, 1);
1228 Local<StringRef> Greeter::Greet(EcmaVM *vm, Local<Greeter> thisRef)
1231 Local<FunctionRef> func = objRef->Get(vm, StringRef::NewFromUtf8(vm, "Greet"));
1232 return func->Call(vm, objRef, nullptr, 0);
1238 Local<StringRef> Greeter::StandardGreeting(EcmaVM *vm)
1241 Local<FunctionRef> claFunc = Greeter::GetClassFunction(vm);
1243 Local<FunctionRef> func = claFunc->Get(vm, StringRef::NewFromUtf8(vm, "StandardGreeting"));
1245 return func->Call(vm, JSValueRef::Undefined(vm), nullptr, 0);
1251 Local<StringRef> Greeter::StandardPosition(EcmaVM *vm)
1254 Local<FunctionRef> claFunc = Greeter::GetClassFunction(vm);
1256 Local<FunctionRef> func = claFunc->Get(vm, StringRef::NewFromUtf8(vm, "StandardPosition"));
1258 return func->Call(vm, JSValueRef::Undefined(vm), nullptr, 0);
1372 static Local<FunctionRef> NewClassFunction(EcmaVM *vm);
1376 static Local<FunctionRef> GetClassFunction(EcmaVM *vm);
1377 static Local<Derive> New(EcmaVM *vm, Local<NumberRef> num);
1379 static Local<NumberRef> Compute(EcmaVM *vm, Local<Derive> thisRef);
1387 Local<FunctionRef> Derive::NewClassFunction(EcmaVM *vm)
1390 vm,
1393 EcmaVM *vm = runtimeInfo->GetVM();
1394 LocalScope scope(vm);
1397 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1401 thisRef->Set(vm, StringRef::NewFromUtf8(vm, "baseNum"), num);
1405 Local<JSValueRef> jsProto = claFunc->GetFunctionPrototype(vm);
1406 Local<ObjectRef> proto = jsProto->ToObject(vm);
1408 proto->Set(vm, StringRef::NewFromUtf8(vm, "baseNum"), NumberRef::New(vm, 1));
1410 proto->Set(vm, StringRef::NewFromUtf8(vm, "Compute"),
1411 FunctionRef::New(vm,
1414 EcmaVM *vm = runtimeInfo->GetVM();
1415 LocalScope scope(vm);
1419 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1421 Local<JSValueRef> jsNum = thisRef->Get(vm, StringRef::NewFromUtf8(vm, "baseNum"));
1422 int num = jsNum->Int32Value(vm);
1423 return NumberRef::New(vm, num);
1426 claFunc->SetName(vm, StringRef::NewFromUtf8(vm, Derive::CLASS_NAME.c_str()));
1430 Local<FunctionRef> Derive::GetClassFunction(EcmaVM *vm)
1432 Local<ObjectRef> globalObj = JSNApi::GetGlobalObject(vm);
1433 Local<JSValueRef> jsClaFunc = globalObj->Get(vm, StringRef::NewFromUtf8(vm, Derive::CLASS_NAME.c_str()));
1434 if (jsClaFunc->IsFunction(vm)) {
1437 Local<FunctionRef> claFunc = Derive::NewClassFunction(vm);
1439 globalObj->Set(vm, claFunc->GetName(vm), claFunc);
1443 Local<Derive> Derive::New(EcmaVM *vm, Local<NumberRef> num)
1446 Local<FunctionRef> claFunc = Derive::GetClassFunction(vm);
1450 Local<JSValueRef> jsObj = claFunc->Constructor(vm, argv, 1);
1451 Local<ObjectRef> obj = jsObj->ToObject(vm);
1455 Local<NumberRef> Derive::Compute(EcmaVM *vm, Local<Derive> thisRef)
1458 Local<FunctionRef> func = objRef->Get(vm, StringRef::NewFromUtf8(vm, "Compute"));
1459 return func->Call(vm, objRef, nullptr, 0);
1476 static Local<FunctionRef> NewClassFunction(EcmaVM *vm);
1480 static Local<FunctionRef> GetClassFunction(EcmaVM *vm);
1481 static Local<DeriveDouble> New(EcmaVM *vm, Local<NumberRef> num);
1491 Local<FunctionRef> DeriveDouble::NewClassFunction(EcmaVM *vm)
1494 vm,
1497 EcmaVM *vm = runtimeInfo->GetVM();
1498 LocalScope scope(vm);
1503 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1505 thisRef->Set(vm, StringRef::NewFromUtf8(vm, "baseNum"), num);
1510 claFunc->SetName(vm, StringRef::NewFromUtf8(vm, DeriveDouble::CLASS_NAME.c_str()));
1513 Local<ObjectRef> proto = claFunc->GetFunctionPrototype(vm)->ToObject(vm);
1514 proto->Set(vm, StringRef::NewFromUtf8(vm, "Compute"),
1515 FunctionRef::New(vm,
1518 EcmaVM *vm = runtimeInfo->GetVM();
1519 LocalScope scope(vm);
1522 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1523 Local<JSValueRef> jsNum = thisRef->Get(vm, StringRef::NewFromUtf8(vm, "baseNum"));
1524 int num = jsNum->Int32Value(vm);
1527 return NumberRef::New(vm, num);
1530 Local<FunctionRef> claFuncBase = Derive::GetClassFunction(vm);
1532 claFunc->Inherit(vm, claFuncBase);
1536 Local<FunctionRef> DeriveDouble::GetClassFunction(EcmaVM *vm)
1538 Local<ObjectRef> globalObj = JSNApi::GetGlobalObject(vm);
1539 Local<JSValueRef> jsClaFunc = globalObj->Get(vm, StringRef::NewFromUtf8(vm, DeriveDouble::CLASS_NAME.c_str()));
1540 if (jsClaFunc->IsFunction(vm)) {
1543 Local<FunctionRef> claFunc = DeriveDouble::NewClassFunction(vm);
1544 globalObj->Set(vm, claFunc->GetName(vm), claFunc);
1548 Local<DeriveDouble> DeriveDouble::New(EcmaVM *vm, Local<NumberRef> num)
1551 Local<FunctionRef> claFunc = DeriveDouble::GetClassFunction(vm);
1555 Local<JSValueRef> jsObj = claFunc->Constructor(vm, argv, 1);
1556 Local<ObjectRef> obj = jsObj->ToObject(vm);
1574 static Local<FunctionRef> NewClassFunction(EcmaVM *vm);
1578 static Local<FunctionRef> GetClassFunction(EcmaVM *vm);
1579 static Local<DerivedTriple> New(EcmaVM *vm, Local<NumberRef> num);
1589 Local<FunctionRef> DerivedTriple::NewClassFunction(EcmaVM *vm)
1592 vm,
1595 EcmaVM *vm = runtimeInfo->GetVM();
1596 LocalScope scope(vm);
1601 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1603 thisRef->Set(vm, StringRef::NewFromUtf8(vm, "baseNum"), num);
1608 claFunc->SetName(vm, StringRef::NewFromUtf8(vm, DerivedTriple::CLASS_NAME.c_str()));
1611 Local<ObjectRef> proto = claFunc->GetFunctionPrototype(vm)->ToObject(vm);
1612 proto->Set(vm, StringRef::NewFromUtf8(vm, "Compute"),
1613 FunctionRef::New(vm,
1616 EcmaVM *vm = runtimeInfo->GetVM();
1617 LocalScope scope(vm);
1620 Local<ObjectRef> thisRef = jsThisRef->ToObject(vm);
1621 Local<JSValueRef> jsNum = thisRef->Get(vm, StringRef::NewFromUtf8(vm, "baseNum"));
1622 int num = jsNum->Int32Value(vm);
1625 return NumberRef::New(vm, num);
1628 Local<FunctionRef> claFuncBase = Derive::GetClassFunction(vm);
1630 claFunc->Inherit(vm, claFuncBase);
1634 Local<FunctionRef> DerivedTriple::GetClassFunction(EcmaVM *vm)
1636 Local<ObjectRef> globalObj = JSNApi::GetGlobalObject(vm);
1637 Local<JSValueRef> jsClaFunc = globalObj->Get(vm, StringRef::NewFromUtf8(vm, DerivedTriple::CLASS_NAME.c_str()));
1638 if (jsClaFunc->IsFunction(vm)) {
1641 Local<FunctionRef> claFunc = DerivedTriple::NewClassFunction(vm);
1642 globalObj->Set(vm, claFunc->GetName(vm), claFunc);
1646 Local<DerivedTriple> DerivedTriple::New(EcmaVM *vm, Local<NumberRef> num)
1649 Local<FunctionRef> claFunc = DerivedTriple::GetClassFunction(vm);
1653 Local<JSValueRef> jsObj = claFunc->Constructor(vm, argv, 1);
1654 Local<ObjectRef> obj = jsObj->ToObject(vm);
2209 EcmaVM *vm = runtimeInfo->GetVM();
2210 LocalScope scope(vm);
2212 int num = jsNum->Int32Value(vm);
2215 return JSValueRef::Undefined(vm);
2220 EcmaVM *vm = runtimeInfo->GetVM();
2221 LocalScope scope(vm);
2223 std::string err = jsStr->ToString(vm)->ToString(vm);
2226 return JSValueRef::Undefined(vm);
2231 EcmaVM *vm = runtimeInfo->GetVM();
2232 LocalScope scope(vm);
2235 return JSValueRef::Undefined(vm);
2250 std::string jsValue2String(EcmaVM *vm, Local<JSValueRef> &jsVal)
2252 if (jsVal->IsString(vm)) {
2253 return "type string, val : " + jsVal->ToString(vm)->ToString(vm);
2255 return "type number, val : " + std::to_string(jsVal->Int32Value(vm));
2257 return "type bool, val : " + std::to_string(jsVal->BooleaValue(vm));
2258 } else if (jsVal->IsSymbol(vm)) {
2260 return "type symbol, val : " + symbol->GetDescription(vm)->ToString(vm);
2262 return "type other : " + jsVal->ToString(vm)->ToString(vm);
2266 void MapSetValue(EcmaVM *vm, Local<MapRef> &map, Local<JSValueRef> symbolKey)
2268 map->Set(vm, StringRef::NewFromUtf8(vm, "key1"), StringRef::NewFromUtf8(vm, "val1"));
2270 map->Set(vm, StringRef::NewFromUtf8(vm, "key2"), NumberRef::New(vm, num2));
2271 map->Set(vm, StringRef::NewFromUtf8(vm, "key3"), BooleanRef::New(vm, true));
2272 map->Set(vm, StringRef::NewFromUtf8(vm, "key4"), SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "val4")));
2274 map->Set(vm, IntegerRef::New(vm, num5), StringRef::NewFromUtf8(vm, "val5"));
2277 map->Set(vm, IntegerRef::New(vm, num61), IntegerRef::New(vm, num62));
2278 map->Set(vm, BooleanRef::New(vm, true), StringRef::NewFromUtf8(vm, "val7"));
2279 map->Set(vm, symbolKey, StringRef::NewFromUtf8(vm, "val8"));
2282 void MapGetValue(EcmaVM *vm, Local<MapRef> &map, Local<JSValueRef> symbolKey)
2284 Local<JSValueRef> val1 = map->Get(vm, StringRef::NewFromUtf8(vm, "key1"));
2285 bool val1IsString = val1->IsString(vm);
2286 GTEST_LOG_(INFO) << "key1 : IsString:" << val1IsString << " val:" << val1->ToString(vm)->ToString(vm);
2288 Local<JSValueRef> val2 = map->Get(vm, StringRef::NewFromUtf8(vm, "key2"));
2290 GTEST_LOG_(INFO) << "key2 : IsNumber:" << val2IsNumber << " val:" << val2->Int32Value(vm);
2292 Local<JSValueRef> val3 = map->Get(vm, StringRef::NewFromUtf8(vm, "key3"));
2294 GTEST_LOG_(INFO) << "key3 : IsBoolean:" << val3IsBoolean << " val:" << val3->BooleaValue(vm);
2296 Local<JSValueRef> val4 = map->Get(vm, StringRef::NewFromUtf8(vm, "key4"));
2297 bool val4IsSymbol = val4->IsSymbol(vm);
2300 << val4Symbol->GetDescription(vm)->ToString(vm);
2303 Local<JSValueRef> val5 = map->Get(vm, IntegerRef::New(vm, num5));
2304 GTEST_LOG_(INFO) << "55 : " << val5->ToString(vm)->ToString(vm);
2307 Local<JSValueRef> val6 = map->Get(vm, IntegerRef::New(vm, num6));
2308 GTEST_LOG_(INFO) << "66 : " << val6->Int32Value(vm);
2309 Local<JSValueRef> val7 = map->Get(vm, BooleanRef::New(vm, true));
2310 GTEST_LOG_(INFO) << "true : " << val7->ToString(vm)->ToString(vm);
2312 Local<JSValueRef> val8 = map->Get(vm, symbolKey);
2313 GTEST_LOG_(INFO) << "SymbolRef(key8) : " << val8->ToString(vm)->ToString(vm);
2315 Local<JSValueRef> val82 = map->Get(vm, SymbolRef::New(vm, StringRef::NewFromUtf8(vm, "key8")));
2318 int32_t size = map->GetSize(vm);
2320 int32_t totalElement = map->GetTotalElements(vm);
2324 Local<JSValueRef> jsKey = map->GetKey(vm, i);
2325 Local<JSValueRef> jsVal = map->GetValue(vm, i);
2326 GTEST_LOG_(INFO) << "for map index : " << i << " key : " << jsValue2String(vm, jsKey) << " val : " <<
2327 jsValue2String(vm, jsVal);
2331 void MapIteratorGetValue(EcmaVM *vm, Local<MapRef> &map)
2333 Local<MapIteratorRef> mapIter = MapIteratorRef::New(vm, map);
2334 ecmascript::EcmaRuntimeCallInfo *mapIterInfo = mapIter->GetEcmaRuntimeCallInfo(vm);
2336 Local<StringRef> kind = mapIter->GetKind(vm);
2337 GTEST_LOG_(INFO) << "Map Iterator kind : " << kind->ToString(vm);
2339 for (Local<ArrayRef> array = MapIteratorRef::Next(vm, mapIterInfo); array->IsArray(vm);
2340 array = MapIteratorRef::Next(vm, mapIterInfo)) {
2342 Local<JSValueRef> jsKey = ArrayRef::GetValueAt(vm, array, 0);
2343 Local<JSValueRef> jsVal = ArrayRef::GetValueAt(vm, array, 1);
2344 GTEST_LOG_(INFO) << "for map iterator index : " << index << " key : " << jsValue2String(vm, jsKey) <<
2345 " val : " << jsValue2String(vm, jsVal);
2473 void JsonObjGetValue(EcmaVM *vm, Local<ObjectRef> obj)
2475 Local<JSValueRef> jsVal1 = obj->Get(vm, StringRef::NewFromUtf8(vm, "str1"));
2476 bool jsVal1IsString = jsVal1->IsString(vm);
2477 Local<StringRef> val1 = jsVal1->ToString(vm);
2478 GTEST_LOG_(INFO) << "str1 : is string : " << jsVal1IsString << " value : " << val1->ToString(vm);
2479 Local<JSValueRef> jsVal2 = obj->Get(vm, StringRef::NewFromUtf8(vm, "str2"));
2481 int val2 = jsVal2->Int32Value(vm);
2483 Local<JSValueRef> jsVal3 = obj->Get(vm, StringRef::NewFromUtf8(vm, "333"));
2484 int val3 = jsVal3->Int32Value(vm);
2486 Local<JSValueRef> jsVal4 = obj->Get(vm, StringRef::NewFromUtf8(vm, "444"));
2487 Local<StringRef> val4 = jsVal4->ToString(vm);
2488 GTEST_LOG_(INFO) << "str4 : " << val4->ToString(vm);
2490 Local<JSValueRef> jsVal8 = obj->Get(vm, StringRef::NewFromUtf8(vm, "b8"));
2498 void JsonObjGetArray(EcmaVM *vm, Local<ObjectRef> obj)
2500 Local<JSValueRef> jsVal5 = obj->Get(vm, StringRef::NewFromUtf8(vm, "arr5"));
2502 int length = val5Obj->Get(vm, StringRef::NewFromUtf8(vm, "length"))->Int32Value(vm);
2505 Local<JSValueRef> val5Item = val5Obj->Get(vm, NumberRef::New(vm, i));
2506 GTEST_LOG_(INFO) << "arr5 : " << i << " " << val5Item->Int32Value(vm);
2509 uint32_t length2 = val5Arr->Length(vm);
2512 Local<JSValueRef> val5Item = ArrayRef::GetValueAt(vm, val5Arr, i);
2513 GTEST_LOG_(INFO) << "arr5 : " << i << " " << val5Item->Int32Value(vm);
2515 Local<JSValueRef> jsVal6 = obj->Get(vm, StringRef::NewFromUtf8(vm, "arr6"));
2517 int length3 = val6Obj->Get(vm, StringRef::NewFromUtf8(vm, "length"))->Int32Value(vm);
2520 Local<JSValueRef> val6Item = val6Obj->Get(vm, NumberRef::New(vm, i));
2521 GTEST_LOG_(INFO) << "arr6 : " << i << " " << val6Item->ToString(vm)->ToString(vm);
2526 void JsonObjGetObject(EcmaVM *vm, Local<ObjectRef> obj)
2528 Local<JSValueRef> jsVal7 = obj->Get(vm, StringRef::NewFromUtf8(vm, "data7"));
2529 Local<ObjectRef> val7Obj = jsVal7->ToObject(vm);
2530 Local<ArrayRef> val7ObjKeys = val7Obj->GetOwnPropertyNames(vm);
2531 for (uint32_t i = 0; i < val7ObjKeys->Length(vm); ++i) {
2532 Local<JSValueRef> itemKey = ArrayRef::GetValueAt(vm, val7ObjKeys, i);
2533 Local<JSValueRef> itemVal = val7Obj->Get(vm, itemKey);
2534 GTEST_LOG_(INFO) << "data7 : item index:" << i << " Key:" << itemKey->ToString(vm)->ToString(vm) <<
2535 " val:" << itemVal->ToString(vm)->ToString(vm);
2889 Local<JSValueRef> ThrowErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2891 int i = par->Int32Value(vm);
2894 Local<JSValueRef> error = Exception::Error(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2895 JSNApi::ThrowException(vm, error);
2896 return JSValueRef::Undefined(vm);
2899 return NumberRef::New(vm, i * num);
2902 Local<JSValueRef> ThrowRangeErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2904 int i = par->Int32Value(vm);
2907 Local<JSValueRef> error = Exception::RangeError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2908 JSNApi::ThrowException(vm, error);
2909 return JSValueRef::Undefined(vm);
2912 return NumberRef::New(vm, i * num);
2915 Local<JSValueRef> ThrowReferenceErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2917 int i = par->Int32Value(vm);
2920 Local<JSValueRef> error = Exception::ReferenceError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2921 JSNApi::ThrowException(vm, error);
2922 return JSValueRef::Undefined(vm);
2925 return NumberRef::New(vm, i * num);
2928 Local<JSValueRef> ThrowSyntaxErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2930 int i = par->Int32Value(vm);
2933 Local<JSValueRef> error = Exception::SyntaxError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2934 JSNApi::ThrowException(vm, error);
2935 return JSValueRef::Undefined(vm);
2938 return NumberRef::New(vm, i * num);
2941 Local<JSValueRef> ThrowTypeErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2943 int i = par->Int32Value(vm);
2946 Local<JSValueRef> error = Exception::TypeError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2947 JSNApi::ThrowException(vm, error);
2948 return JSValueRef::Undefined(vm);
2951 return NumberRef::New(vm, i * num);
2954 Local<JSValueRef> ThrowAggregateErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2956 int i = par->Int32Value(vm);
2959 Local<JSValueRef> error = Exception::AggregateError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2960 JSNApi::ThrowException(vm, error);
2961 return JSValueRef::Undefined(vm);
2964 return NumberRef::New(vm, i * num);
2967 Local<JSValueRef> ThrowEvalErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2969 int i = par->Int32Value(vm);
2972 Local<JSValueRef> error = Exception::EvalError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2973 JSNApi::ThrowException(vm, error);
2974 return JSValueRef::Undefined(vm);
2977 return NumberRef::New(vm, i * num);
2980 Local<JSValueRef> ThrowOOMErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2982 int i = par->Int32Value(vm);
2985 Local<JSValueRef> error = Exception::OOMError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2986 JSNApi::ThrowException(vm, error);
2987 return JSValueRef::Undefined(vm);
2990 return NumberRef::New(vm, i * num);
2993 Local<JSValueRef> ThrowTerminationErrorFuncTest(const EcmaVM *vm, Local<NumberRef> par)
2995 int i = par->Int32Value(vm);
2998 Local<JSValueRef> error = Exception::TerminationError(vm, StringRef::NewFromUtf8(vm, errStr.c_str()));
2999 JSNApi::ThrowException(vm, error);
3000 return JSValueRef::Undefined(vm);
3003 return NumberRef::New(vm, i * num);
3007 void ClearAndPrintException4JSNApi(const EcmaVM *vm, const std::string log)
3009 if (!JSNApi::HasPendingException(vm)) {
3014 JSNApi::PrintExceptionInfo(vm);
3015 Local<ObjectRef> exception = JSNApi::GetAndClearUncaughtException(vm);
3016 std::string exceptionName = exception->Get(vm, StringRef::NewFromUtf8(vm, "name"))->ToString(vm)->ToString(vm);
3017 std::string exceptionMessage = exception->Get(vm, StringRef::NewFromUtf8(vm,
3018 "message"))->ToString(vm)->ToString(vm);
3019 std::string exceptionStack = exception->Get(vm,
3020 StringRef::NewFromUtf8(vm, "stack"))->ToString(vm)->ToString(vm);
3028 void ClearAndPrintException4TryCatch1(const EcmaVM *vm, const std::string log)
3030 TryCatch tryCatch(vm);
3036 std::string exceptionName = exception->Get(vm, StringRef::NewFromUtf8(vm, "name"))->ToString(vm)->ToString(vm);
3037 std::string exceptionMessage = exception->Get(vm,
3038 StringRef::NewFromUtf8(vm, "message"))->ToString(vm)->ToString(vm);
3039 std::string exceptionStack = exception->Get(vm, StringRef::NewFromUtf8(vm, "stack"))->ToString(vm)->ToString(vm);
3047 void ClearAndPrintException4TryCatch2(const EcmaVM *vm, const std::string log)
3049 TryCatch tryCatch(vm);
3057 std::string exceptionName = exception->Get(vm, StringRef::NewFromUtf8(vm, "name"))->ToString(vm)->ToString(vm);
3058 std::string exceptionMessage = exception->Get(vm,
3059 StringRef::NewFromUtf8(vm, "message"))->ToString(vm)->ToString(vm);
3060 std::string exceptionStack = exception->Get(vm, StringRef::NewFromUtf8(vm, "stack"))->ToString(vm)->ToString(vm);
3069 void PrintAndRethrowException4TryCatch3(const EcmaVM *vm, const std::string log)
3071 TryCatch tryCatch(vm);
3078 std::string exceptionName = exception->Get(vm, StringRef::NewFromUtf8(vm, "name"))->ToString(vm)->ToString(vm);
3079 std::string exceptionMessage = exception->Get(vm,
3080 StringRef::NewFromUtf8(vm, "message"))->ToString(vm)->ToString(vm);
3081 std::string exceptionStack = exception->Get(vm, StringRef::NewFromUtf8(vm, "stack"))->ToString(vm)->ToString(vm);