OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/fm2js/xfa_fm2jscontext.h" | 7 #include "xfa/fxfa/fm2js/xfa_fm2jscontext.h" |
8 | 8 |
9 #include <time.h> | 9 #include <time.h> |
10 | 10 |
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
510 const CFX_ByteStringC& szFuncName, | 510 const CFX_ByteStringC& szFuncName, |
511 CFXJSE_Arguments& args) { | 511 CFXJSE_Arguments& args) { |
512 if (args.GetLength() != 1) { | 512 if (args.GetLength() != 1) { |
513 ToJSContext(pThis, nullptr) | 513 ToJSContext(pThis, nullptr) |
514 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Abs"); | 514 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Abs"); |
515 return; | 515 return; |
516 } | 516 } |
517 | 517 |
518 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 518 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
519 if (ValueIsNull(pThis, argOne.get())) { | 519 if (ValueIsNull(pThis, argOne.get())) { |
520 FXJSE_Value_SetNull(args.GetReturnValue()); | 520 args.GetReturnValue()->SetNull(); |
521 return; | 521 return; |
522 } | 522 } |
523 | 523 |
524 FX_DOUBLE dValue = ValueToDouble(pThis, argOne.get()); | 524 FX_DOUBLE dValue = ValueToDouble(pThis, argOne.get()); |
525 if (dValue < 0) | 525 if (dValue < 0) |
526 dValue = -dValue; | 526 dValue = -dValue; |
527 | 527 |
528 FXJSE_Value_SetDouble(args.GetReturnValue(), dValue); | 528 args.GetReturnValue()->SetDouble(dValue); |
529 } | 529 } |
530 | 530 |
531 // static | 531 // static |
532 void CXFA_FM2JSContext::Avg(CFXJSE_Value* pThis, | 532 void CXFA_FM2JSContext::Avg(CFXJSE_Value* pThis, |
533 const CFX_ByteStringC& szFuncName, | 533 const CFX_ByteStringC& szFuncName, |
534 CFXJSE_Arguments& args) { | 534 CFXJSE_Arguments& args) { |
535 int32_t argc = args.GetLength(); | 535 int32_t argc = args.GetLength(); |
536 if (argc < 1) { | 536 if (argc < 1) { |
537 FXJSE_Value_SetNull(args.GetReturnValue()); | 537 args.GetReturnValue()->SetNull(); |
538 return; | 538 return; |
539 } | 539 } |
540 | 540 |
541 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 541 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
542 uint32_t uCount = 0; | 542 uint32_t uCount = 0; |
543 FX_DOUBLE dSum = 0.0; | 543 FX_DOUBLE dSum = 0.0; |
544 for (int32_t i = 0; i < argc; i++) { | 544 for (int32_t i = 0; i < argc; i++) { |
545 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); | 545 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); |
546 if (FXJSE_Value_IsNull(argValue.get())) | 546 if (FXJSE_Value_IsNull(argValue.get())) |
547 continue; | 547 continue; |
548 | 548 |
549 if (!FXJSE_Value_IsArray(argValue.get())) { | 549 if (!FXJSE_Value_IsArray(argValue.get())) { |
550 dSum += ValueToDouble(pThis, argValue.get()); | 550 dSum += ValueToDouble(pThis, argValue.get()); |
551 uCount++; | 551 uCount++; |
552 continue; | 552 continue; |
553 } | 553 } |
554 | 554 |
555 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 555 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
556 FXJSE_Value_GetObjectProp(argValue.get(), "length", lengthValue.get()); | 556 argValue->GetObjectProperty("length", lengthValue.get()); |
557 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 557 int32_t iLength = lengthValue->ToInteger(); |
558 | 558 |
559 if (iLength > 2) { | 559 if (iLength > 2) { |
560 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 560 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
561 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 1, propertyValue.get()); | 561 argValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
562 | 562 |
563 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 563 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
564 if (FXJSE_Value_IsNull(propertyValue.get())) { | 564 if (FXJSE_Value_IsNull(propertyValue.get())) { |
565 for (int32_t j = 2; j < iLength; j++) { | 565 for (int32_t j = 2; j < iLength; j++) { |
566 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 566 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
567 jsObjectValue.get()); | |
568 std::unique_ptr<CFXJSE_Value> defaultPropValue( | 567 std::unique_ptr<CFXJSE_Value> defaultPropValue( |
569 new CFXJSE_Value(pIsolate)); | 568 new CFXJSE_Value(pIsolate)); |
570 GetObjectDefaultValue(jsObjectValue.get(), defaultPropValue.get()); | 569 GetObjectDefaultValue(jsObjectValue.get(), defaultPropValue.get()); |
571 if (FXJSE_Value_IsNull(defaultPropValue.get())) | 570 if (FXJSE_Value_IsNull(defaultPropValue.get())) |
572 continue; | 571 continue; |
573 | 572 |
574 dSum += ValueToDouble(pThis, defaultPropValue.get()); | 573 dSum += ValueToDouble(pThis, defaultPropValue.get()); |
575 uCount++; | 574 uCount++; |
576 } | 575 } |
577 } else { | 576 } else { |
578 CFX_ByteString propertyStr; | 577 CFX_ByteString propertyStr; |
579 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 578 propertyValue->ToString(propertyStr); |
580 for (int32_t j = 2; j < iLength; j++) { | 579 for (int32_t j = 2; j < iLength; j++) { |
581 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 580 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
582 jsObjectValue.get()); | |
583 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 581 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
584 new CFXJSE_Value(pIsolate)); | 582 new CFXJSE_Value(pIsolate)); |
585 FXJSE_Value_GetObjectProp(jsObjectValue.get(), | 583 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
586 propertyStr.AsStringC(), | 584 newPropertyValue.get()); |
587 newPropertyValue.get()); | |
588 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 585 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
589 continue; | 586 continue; |
590 | 587 |
591 dSum += ValueToDouble(pThis, newPropertyValue.get()); | 588 dSum += ValueToDouble(pThis, newPropertyValue.get()); |
592 uCount++; | 589 uCount++; |
593 } | 590 } |
594 } | 591 } |
595 } | 592 } |
596 } | 593 } |
597 if (uCount == 0) { | 594 if (uCount == 0) { |
598 FXJSE_Value_SetNull(args.GetReturnValue()); | 595 args.GetReturnValue()->SetNull(); |
599 return; | 596 return; |
600 } | 597 } |
601 | 598 |
602 FXJSE_Value_SetDouble(args.GetReturnValue(), dSum / uCount); | 599 args.GetReturnValue()->SetDouble(dSum / uCount); |
603 } | 600 } |
604 | 601 |
605 // static | 602 // static |
606 void CXFA_FM2JSContext::Ceil(CFXJSE_Value* pThis, | 603 void CXFA_FM2JSContext::Ceil(CFXJSE_Value* pThis, |
607 const CFX_ByteStringC& szFuncName, | 604 const CFX_ByteStringC& szFuncName, |
608 CFXJSE_Arguments& args) { | 605 CFXJSE_Arguments& args) { |
609 if (args.GetLength() != 1) { | 606 if (args.GetLength() != 1) { |
610 ToJSContext(pThis, nullptr) | 607 ToJSContext(pThis, nullptr) |
611 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Ceil"); | 608 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Ceil"); |
612 return; | 609 return; |
613 } | 610 } |
614 | 611 |
615 std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, args, 0); | 612 std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, args, 0); |
616 if (ValueIsNull(pThis, argValue.get())) { | 613 if (ValueIsNull(pThis, argValue.get())) { |
617 FXJSE_Value_SetNull(args.GetReturnValue()); | 614 args.GetReturnValue()->SetNull(); |
618 return; | 615 return; |
619 } | 616 } |
620 | 617 |
621 FXJSE_Value_SetFloat(args.GetReturnValue(), | 618 args.GetReturnValue()->SetFloat( |
622 FXSYS_ceil(ValueToFloat(pThis, argValue.get()))); | 619 FXSYS_ceil(ValueToFloat(pThis, argValue.get()))); |
623 } | 620 } |
624 | 621 |
625 // static | 622 // static |
626 void CXFA_FM2JSContext::Count(CFXJSE_Value* pThis, | 623 void CXFA_FM2JSContext::Count(CFXJSE_Value* pThis, |
627 const CFX_ByteStringC& szFuncName, | 624 const CFX_ByteStringC& szFuncName, |
628 CFXJSE_Arguments& args) { | 625 CFXJSE_Arguments& args) { |
629 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 626 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
630 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 627 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
631 int32_t iCount = 0; | 628 int32_t iCount = 0; |
632 for (int32_t i = 0; i < args.GetLength(); i++) { | 629 for (int32_t i = 0; i < args.GetLength(); i++) { |
633 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); | 630 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); |
634 if (FXJSE_Value_IsNull(argValue.get())) | 631 if (FXJSE_Value_IsNull(argValue.get())) |
635 continue; | 632 continue; |
636 | 633 |
637 if (FXJSE_Value_IsArray(argValue.get())) { | 634 if (FXJSE_Value_IsArray(argValue.get())) { |
638 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 635 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
639 FXJSE_Value_GetObjectProp(argValue.get(), "length", lengthValue.get()); | 636 argValue->GetObjectProperty("length", lengthValue.get()); |
640 | 637 |
641 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 638 int32_t iLength = lengthValue->ToInteger(); |
642 if (iLength <= 2) { | 639 if (iLength <= 2) { |
643 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 640 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
644 return; | 641 return; |
645 } | 642 } |
646 | 643 |
647 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 644 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
648 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 645 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
649 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 646 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
650 new CFXJSE_Value(pIsolate)); | 647 new CFXJSE_Value(pIsolate)); |
651 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 1, propertyValue.get()); | 648 argValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
652 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 2, jsObjectValue.get()); | 649 argValue->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
653 if (FXJSE_Value_IsNull(propertyValue.get())) { | 650 if (FXJSE_Value_IsNull(propertyValue.get())) { |
654 for (int32_t j = 2; j < iLength; j++) { | 651 for (int32_t j = 2; j < iLength; j++) { |
655 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 652 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
656 jsObjectValue.get()); | |
657 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 653 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
658 if (!FXJSE_Value_IsNull(newPropertyValue.get())) | 654 if (!FXJSE_Value_IsNull(newPropertyValue.get())) |
659 iCount++; | 655 iCount++; |
660 } | 656 } |
661 } else { | 657 } else { |
662 CFX_ByteString propertyStr; | 658 CFX_ByteString propertyStr; |
663 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 659 propertyValue->ToString(propertyStr); |
664 for (int32_t j = 2; j < iLength; j++) { | 660 for (int32_t j = 2; j < iLength; j++) { |
665 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 661 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
666 jsObjectValue.get()); | 662 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
667 FXJSE_Value_GetObjectProp(jsObjectValue.get(), | 663 newPropertyValue.get()); |
668 propertyStr.AsStringC(), | |
669 newPropertyValue.get()); | |
670 iCount += (FXJSE_Value_IsNull(newPropertyValue.get()) ? 0 : 1); | 664 iCount += (FXJSE_Value_IsNull(newPropertyValue.get()) ? 0 : 1); |
671 } | 665 } |
672 } | 666 } |
673 } else if (FXJSE_Value_IsObject(argValue.get())) { | 667 } else if (FXJSE_Value_IsObject(argValue.get())) { |
674 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 668 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
675 new CFXJSE_Value(pIsolate)); | 669 new CFXJSE_Value(pIsolate)); |
676 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); | 670 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); |
677 if (!FXJSE_Value_IsNull(newPropertyValue.get())) | 671 if (!FXJSE_Value_IsNull(newPropertyValue.get())) |
678 iCount++; | 672 iCount++; |
679 } else { | 673 } else { |
680 iCount++; | 674 iCount++; |
681 } | 675 } |
682 } | 676 } |
683 FXJSE_Value_SetInteger(args.GetReturnValue(), iCount); | 677 args.GetReturnValue()->SetInteger(iCount); |
684 } | 678 } |
685 | 679 |
686 // static | 680 // static |
687 void CXFA_FM2JSContext::Floor(CFXJSE_Value* pThis, | 681 void CXFA_FM2JSContext::Floor(CFXJSE_Value* pThis, |
688 const CFX_ByteStringC& szFuncName, | 682 const CFX_ByteStringC& szFuncName, |
689 CFXJSE_Arguments& args) { | 683 CFXJSE_Arguments& args) { |
690 if (args.GetLength() != 1) { | 684 if (args.GetLength() != 1) { |
691 ToJSContext(pThis, nullptr) | 685 ToJSContext(pThis, nullptr) |
692 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Floor"); | 686 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Floor"); |
693 return; | 687 return; |
694 } | 688 } |
695 | 689 |
696 std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, args, 0); | 690 std::unique_ptr<CFXJSE_Value> argValue = GetSimpleValue(pThis, args, 0); |
697 if (ValueIsNull(pThis, argValue.get())) { | 691 if (ValueIsNull(pThis, argValue.get())) { |
698 FXJSE_Value_SetNull(args.GetReturnValue()); | 692 args.GetReturnValue()->SetNull(); |
699 return; | 693 return; |
700 } | 694 } |
701 | 695 |
702 FXJSE_Value_SetFloat(args.GetReturnValue(), | 696 args.GetReturnValue()->SetFloat( |
703 FXSYS_floor(ValueToFloat(pThis, argValue.get()))); | 697 FXSYS_floor(ValueToFloat(pThis, argValue.get()))); |
704 } | 698 } |
705 | 699 |
706 // static | 700 // static |
707 void CXFA_FM2JSContext::Max(CFXJSE_Value* pThis, | 701 void CXFA_FM2JSContext::Max(CFXJSE_Value* pThis, |
708 const CFX_ByteStringC& szFuncName, | 702 const CFX_ByteStringC& szFuncName, |
709 CFXJSE_Arguments& args) { | 703 CFXJSE_Arguments& args) { |
710 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 704 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
711 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 705 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
712 uint32_t uCount = 0; | 706 uint32_t uCount = 0; |
713 FX_DOUBLE dMaxValue = 0.0; | 707 FX_DOUBLE dMaxValue = 0.0; |
714 for (int32_t i = 0; i < args.GetLength(); i++) { | 708 for (int32_t i = 0; i < args.GetLength(); i++) { |
715 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); | 709 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); |
716 if (FXJSE_Value_IsNull(argValue.get())) | 710 if (FXJSE_Value_IsNull(argValue.get())) |
717 continue; | 711 continue; |
718 | 712 |
719 if (FXJSE_Value_IsArray(argValue.get())) { | 713 if (FXJSE_Value_IsArray(argValue.get())) { |
720 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 714 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
721 FXJSE_Value_GetObjectProp(argValue.get(), "length", lengthValue.get()); | 715 argValue->GetObjectProperty("length", lengthValue.get()); |
722 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 716 int32_t iLength = lengthValue->ToInteger(); |
723 if (iLength <= 2) { | 717 if (iLength <= 2) { |
724 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 718 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
725 return; | 719 return; |
726 } | 720 } |
727 | 721 |
728 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 722 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
729 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 723 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
730 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 724 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
731 new CFXJSE_Value(pIsolate)); | 725 new CFXJSE_Value(pIsolate)); |
732 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 1, propertyValue.get()); | 726 argValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
733 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 2, jsObjectValue.get()); | 727 argValue->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
734 if (FXJSE_Value_IsNull(propertyValue.get())) { | 728 if (FXJSE_Value_IsNull(propertyValue.get())) { |
735 for (int32_t j = 2; j < iLength; j++) { | 729 for (int32_t j = 2; j < iLength; j++) { |
736 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 730 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
737 jsObjectValue.get()); | |
738 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 731 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
739 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 732 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
740 continue; | 733 continue; |
741 | 734 |
742 uCount++; | 735 uCount++; |
743 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); | 736 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); |
744 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); | 737 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); |
745 } | 738 } |
746 } else { | 739 } else { |
747 CFX_ByteString propertyStr; | 740 CFX_ByteString propertyStr; |
748 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 741 propertyValue->ToString(propertyStr); |
749 for (int32_t j = 2; j < iLength; j++) { | 742 for (int32_t j = 2; j < iLength; j++) { |
750 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 743 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
751 jsObjectValue.get()); | 744 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
752 FXJSE_Value_GetObjectProp(jsObjectValue.get(), | 745 newPropertyValue.get()); |
753 propertyStr.AsStringC(), | |
754 newPropertyValue.get()); | |
755 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 746 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
756 continue; | 747 continue; |
757 | 748 |
758 uCount++; | 749 uCount++; |
759 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); | 750 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); |
760 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); | 751 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); |
761 } | 752 } |
762 } | 753 } |
763 } else if (FXJSE_Value_IsObject(argValue.get())) { | 754 } else if (FXJSE_Value_IsObject(argValue.get())) { |
764 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 755 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
765 new CFXJSE_Value(pIsolate)); | 756 new CFXJSE_Value(pIsolate)); |
766 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); | 757 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); |
767 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 758 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
768 continue; | 759 continue; |
769 | 760 |
770 uCount++; | 761 uCount++; |
771 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); | 762 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); |
772 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); | 763 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); |
773 } else { | 764 } else { |
774 uCount++; | 765 uCount++; |
775 FX_DOUBLE dValue = ValueToDouble(pThis, argValue.get()); | 766 FX_DOUBLE dValue = ValueToDouble(pThis, argValue.get()); |
776 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); | 767 dMaxValue = (uCount == 1) ? dValue : std::max(dMaxValue, dValue); |
777 } | 768 } |
778 } | 769 } |
779 if (uCount == 0) { | 770 if (uCount == 0) { |
780 FXJSE_Value_SetNull(args.GetReturnValue()); | 771 args.GetReturnValue()->SetNull(); |
781 return; | 772 return; |
782 } | 773 } |
783 | 774 |
784 FXJSE_Value_SetDouble(args.GetReturnValue(), dMaxValue); | 775 args.GetReturnValue()->SetDouble(dMaxValue); |
785 } | 776 } |
786 | 777 |
787 // static | 778 // static |
788 void CXFA_FM2JSContext::Min(CFXJSE_Value* pThis, | 779 void CXFA_FM2JSContext::Min(CFXJSE_Value* pThis, |
789 const CFX_ByteStringC& szFuncName, | 780 const CFX_ByteStringC& szFuncName, |
790 CFXJSE_Arguments& args) { | 781 CFXJSE_Arguments& args) { |
791 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 782 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
792 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 783 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
793 uint32_t uCount = 0; | 784 uint32_t uCount = 0; |
794 FX_DOUBLE dMinValue = 0.0; | 785 FX_DOUBLE dMinValue = 0.0; |
795 for (int32_t i = 0; i < args.GetLength(); i++) { | 786 for (int32_t i = 0; i < args.GetLength(); i++) { |
796 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); | 787 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); |
797 if (FXJSE_Value_IsNull(argValue.get())) | 788 if (FXJSE_Value_IsNull(argValue.get())) |
798 continue; | 789 continue; |
799 | 790 |
800 if (FXJSE_Value_IsArray(argValue.get())) { | 791 if (FXJSE_Value_IsArray(argValue.get())) { |
801 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 792 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
802 FXJSE_Value_GetObjectProp(argValue.get(), "length", lengthValue.get()); | 793 argValue->GetObjectProperty("length", lengthValue.get()); |
803 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 794 int32_t iLength = lengthValue->ToInteger(); |
804 if (iLength <= 2) { | 795 if (iLength <= 2) { |
805 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 796 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
806 return; | 797 return; |
807 } | 798 } |
808 | 799 |
809 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 800 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
810 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 801 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
811 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 802 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
812 new CFXJSE_Value(pIsolate)); | 803 new CFXJSE_Value(pIsolate)); |
813 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 1, propertyValue.get()); | 804 argValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
814 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 2, jsObjectValue.get()); | 805 argValue->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
815 if (FXJSE_Value_IsNull(propertyValue.get())) { | 806 if (FXJSE_Value_IsNull(propertyValue.get())) { |
816 for (int32_t j = 2; j < iLength; j++) { | 807 for (int32_t j = 2; j < iLength; j++) { |
817 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 808 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
818 jsObjectValue.get()); | |
819 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 809 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
820 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 810 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
821 continue; | 811 continue; |
822 | 812 |
823 uCount++; | 813 uCount++; |
824 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); | 814 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); |
825 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); | 815 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); |
826 } | 816 } |
827 } else { | 817 } else { |
828 CFX_ByteString propertyStr; | 818 CFX_ByteString propertyStr; |
829 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 819 propertyValue->ToString(propertyStr); |
830 for (int32_t j = 2; j < iLength; j++) { | 820 for (int32_t j = 2; j < iLength; j++) { |
831 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 821 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
832 jsObjectValue.get()); | 822 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
833 FXJSE_Value_GetObjectProp(jsObjectValue.get(), | 823 newPropertyValue.get()); |
834 propertyStr.AsStringC(), | |
835 newPropertyValue.get()); | |
836 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 824 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
837 continue; | 825 continue; |
838 | 826 |
839 uCount++; | 827 uCount++; |
840 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); | 828 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); |
841 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); | 829 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); |
842 } | 830 } |
843 } | 831 } |
844 } else if (FXJSE_Value_IsObject(argValue.get())) { | 832 } else if (FXJSE_Value_IsObject(argValue.get())) { |
845 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 833 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
846 new CFXJSE_Value(pIsolate)); | 834 new CFXJSE_Value(pIsolate)); |
847 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); | 835 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); |
848 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 836 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
849 continue; | 837 continue; |
850 | 838 |
851 uCount++; | 839 uCount++; |
852 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); | 840 FX_DOUBLE dValue = ValueToDouble(pThis, newPropertyValue.get()); |
853 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); | 841 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); |
854 } else { | 842 } else { |
855 uCount++; | 843 uCount++; |
856 FX_DOUBLE dValue = ValueToDouble(pThis, argValue.get()); | 844 FX_DOUBLE dValue = ValueToDouble(pThis, argValue.get()); |
857 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); | 845 dMinValue = uCount == 1 ? dValue : std::min(dMinValue, dValue); |
858 } | 846 } |
859 } | 847 } |
860 if (uCount == 0) { | 848 if (uCount == 0) { |
861 FXJSE_Value_SetNull(args.GetReturnValue()); | 849 args.GetReturnValue()->SetNull(); |
862 return; | 850 return; |
863 } | 851 } |
864 | 852 |
865 FXJSE_Value_SetDouble(args.GetReturnValue(), dMinValue); | 853 args.GetReturnValue()->SetDouble(dMinValue); |
866 } | 854 } |
867 | 855 |
868 // static | 856 // static |
869 void CXFA_FM2JSContext::Mod(CFXJSE_Value* pThis, | 857 void CXFA_FM2JSContext::Mod(CFXJSE_Value* pThis, |
870 const CFX_ByteStringC& szFuncName, | 858 const CFX_ByteStringC& szFuncName, |
871 CFXJSE_Arguments& args) { | 859 CFXJSE_Arguments& args) { |
872 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 860 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
873 if (args.GetLength() != 2) { | 861 if (args.GetLength() != 2) { |
874 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Mod"); | 862 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Mod"); |
875 return; | 863 return; |
876 } | 864 } |
877 | 865 |
878 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 866 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
879 std::unique_ptr<CFXJSE_Value> argTwo = args.GetValue(1); | 867 std::unique_ptr<CFXJSE_Value> argTwo = args.GetValue(1); |
880 if (FXJSE_Value_IsNull(argOne.get()) || FXJSE_Value_IsNull(argTwo.get())) { | 868 if (FXJSE_Value_IsNull(argOne.get()) || FXJSE_Value_IsNull(argTwo.get())) { |
881 FXJSE_Value_SetNull(args.GetReturnValue()); | 869 args.GetReturnValue()->SetNull(); |
882 return; | 870 return; |
883 } | 871 } |
884 | 872 |
885 bool argOneResult; | 873 bool argOneResult; |
886 FX_DOUBLE dDividend = ExtractDouble(pThis, argOne.get(), &argOneResult); | 874 FX_DOUBLE dDividend = ExtractDouble(pThis, argOne.get(), &argOneResult); |
887 bool argTwoResult; | 875 bool argTwoResult; |
888 FX_DOUBLE dDivisor = ExtractDouble(pThis, argTwo.get(), &argTwoResult); | 876 FX_DOUBLE dDivisor = ExtractDouble(pThis, argTwo.get(), &argTwoResult); |
889 if (!argOneResult || !argTwoResult) { | 877 if (!argOneResult || !argTwoResult) { |
890 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 878 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
891 return; | 879 return; |
892 } | 880 } |
893 | 881 |
894 if (dDivisor == 0.0) { | 882 if (dDivisor == 0.0) { |
895 pContext->ThrowException(XFA_IDS_DIVIDE_ZERO); | 883 pContext->ThrowException(XFA_IDS_DIVIDE_ZERO); |
896 return; | 884 return; |
897 } | 885 } |
898 | 886 |
899 FXJSE_Value_SetDouble(args.GetReturnValue(), | 887 args.GetReturnValue()->SetDouble(dDividend - |
900 dDividend - dDivisor * (int32_t)(dDividend / dDivisor)); | 888 dDivisor * (int32_t)(dDividend / dDivisor)); |
901 } | 889 } |
902 | 890 |
903 // static | 891 // static |
904 void CXFA_FM2JSContext::Round(CFXJSE_Value* pThis, | 892 void CXFA_FM2JSContext::Round(CFXJSE_Value* pThis, |
905 const CFX_ByteStringC& szFuncName, | 893 const CFX_ByteStringC& szFuncName, |
906 CFXJSE_Arguments& args) { | 894 CFXJSE_Arguments& args) { |
907 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 895 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
908 int32_t argc = args.GetLength(); | 896 int32_t argc = args.GetLength(); |
909 if (argc < 1 || argc > 2) { | 897 if (argc < 1 || argc > 2) { |
910 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Round"); | 898 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Round"); |
911 return; | 899 return; |
912 } | 900 } |
913 | 901 |
914 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 902 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
915 if (FXJSE_Value_IsNull(argOne.get())) { | 903 if (FXJSE_Value_IsNull(argOne.get())) { |
916 FXJSE_Value_SetNull(args.GetReturnValue()); | 904 args.GetReturnValue()->SetNull(); |
917 return; | 905 return; |
918 } | 906 } |
919 | 907 |
920 bool dValueRet; | 908 bool dValueRet; |
921 FX_DOUBLE dValue = ExtractDouble(pThis, argOne.get(), &dValueRet); | 909 FX_DOUBLE dValue = ExtractDouble(pThis, argOne.get(), &dValueRet); |
922 if (!dValueRet) { | 910 if (!dValueRet) { |
923 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 911 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
924 return; | 912 return; |
925 } | 913 } |
926 | 914 |
927 uint8_t uPrecision = 0; | 915 uint8_t uPrecision = 0; |
928 if (argc > 1) { | 916 if (argc > 1) { |
929 std::unique_ptr<CFXJSE_Value> argTwo = args.GetValue(1); | 917 std::unique_ptr<CFXJSE_Value> argTwo = args.GetValue(1); |
930 if (FXJSE_Value_IsNull(argTwo.get())) { | 918 if (FXJSE_Value_IsNull(argTwo.get())) { |
931 FXJSE_Value_SetNull(args.GetReturnValue()); | 919 args.GetReturnValue()->SetNull(); |
932 return; | 920 return; |
933 } | 921 } |
934 | 922 |
935 bool dPrecisionRet; | 923 bool dPrecisionRet; |
936 FX_DOUBLE dPrecision = ExtractDouble(pThis, argTwo.get(), &dPrecisionRet); | 924 FX_DOUBLE dPrecision = ExtractDouble(pThis, argTwo.get(), &dPrecisionRet); |
937 if (!dPrecisionRet) { | 925 if (!dPrecisionRet) { |
938 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 926 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
939 return; | 927 return; |
940 } | 928 } |
941 | 929 |
942 uPrecision = | 930 uPrecision = |
943 static_cast<uint8_t>(std::min(std::max(dPrecision, 0.0), 12.0)); | 931 static_cast<uint8_t>(std::min(std::max(dPrecision, 0.0), 12.0)); |
944 } | 932 } |
945 | 933 |
946 CFX_Decimal decimalValue((FX_FLOAT)dValue, uPrecision); | 934 CFX_Decimal decimalValue((FX_FLOAT)dValue, uPrecision); |
947 CFX_WideString wsValue = decimalValue; | 935 CFX_WideString wsValue = decimalValue; |
948 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 936 args.GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringC()); |
949 wsValue.UTF8Encode().AsStringC()); | |
950 } | 937 } |
951 | 938 |
952 // static | 939 // static |
953 void CXFA_FM2JSContext::Sum(CFXJSE_Value* pThis, | 940 void CXFA_FM2JSContext::Sum(CFXJSE_Value* pThis, |
954 const CFX_ByteStringC& szFuncName, | 941 const CFX_ByteStringC& szFuncName, |
955 CFXJSE_Arguments& args) { | 942 CFXJSE_Arguments& args) { |
956 int32_t argc = args.GetLength(); | 943 int32_t argc = args.GetLength(); |
957 if (argc == 0) { | 944 if (argc == 0) { |
958 FXJSE_Value_SetNull(args.GetReturnValue()); | 945 args.GetReturnValue()->SetNull(); |
959 return; | 946 return; |
960 } | 947 } |
961 | 948 |
962 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 949 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
963 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 950 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
964 uint32_t uCount = 0; | 951 uint32_t uCount = 0; |
965 FX_DOUBLE dSum = 0.0; | 952 FX_DOUBLE dSum = 0.0; |
966 for (int32_t i = 0; i < argc; i++) { | 953 for (int32_t i = 0; i < argc; i++) { |
967 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); | 954 std::unique_ptr<CFXJSE_Value> argValue = args.GetValue(i); |
968 if (FXJSE_Value_IsNull(argValue.get())) | 955 if (FXJSE_Value_IsNull(argValue.get())) |
969 continue; | 956 continue; |
970 | 957 |
971 if (FXJSE_Value_IsArray(argValue.get())) { | 958 if (FXJSE_Value_IsArray(argValue.get())) { |
972 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 959 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
973 FXJSE_Value_GetObjectProp(argValue.get(), "length", lengthValue.get()); | 960 argValue->GetObjectProperty("length", lengthValue.get()); |
974 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 961 int32_t iLength = lengthValue->ToInteger(); |
975 if (iLength <= 2) { | 962 if (iLength <= 2) { |
976 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 963 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
977 return; | 964 return; |
978 } | 965 } |
979 | 966 |
980 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 967 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
981 FXJSE_Value_GetObjectPropByIdx(argValue.get(), 1, propertyValue.get()); | 968 argValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
982 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 969 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
983 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 970 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
984 new CFXJSE_Value(pIsolate)); | 971 new CFXJSE_Value(pIsolate)); |
985 if (FXJSE_Value_IsNull(propertyValue.get())) { | 972 if (FXJSE_Value_IsNull(propertyValue.get())) { |
986 for (int32_t j = 2; j < iLength; j++) { | 973 for (int32_t j = 2; j < iLength; j++) { |
987 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 974 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
988 jsObjectValue.get()); | |
989 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 975 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
990 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 976 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
991 continue; | 977 continue; |
992 | 978 |
993 dSum += ValueToDouble(pThis, jsObjectValue.get()); | 979 dSum += ValueToDouble(pThis, jsObjectValue.get()); |
994 uCount++; | 980 uCount++; |
995 } | 981 } |
996 } else { | 982 } else { |
997 CFX_ByteString propertyStr; | 983 CFX_ByteString propertyStr; |
998 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 984 propertyValue->ToString(propertyStr); |
999 for (int32_t j = 2; j < iLength; j++) { | 985 for (int32_t j = 2; j < iLength; j++) { |
1000 FXJSE_Value_GetObjectPropByIdx(argValue.get(), j, | 986 argValue->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
1001 jsObjectValue.get()); | 987 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
1002 FXJSE_Value_GetObjectProp(jsObjectValue.get(), | 988 newPropertyValue.get()); |
1003 propertyStr.AsStringC(), | |
1004 newPropertyValue.get()); | |
1005 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 989 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
1006 continue; | 990 continue; |
1007 | 991 |
1008 dSum += ValueToDouble(pThis, newPropertyValue.get()); | 992 dSum += ValueToDouble(pThis, newPropertyValue.get()); |
1009 uCount++; | 993 uCount++; |
1010 } | 994 } |
1011 } | 995 } |
1012 } else if (FXJSE_Value_IsObject(argValue.get())) { | 996 } else if (FXJSE_Value_IsObject(argValue.get())) { |
1013 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 997 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
1014 new CFXJSE_Value(pIsolate)); | 998 new CFXJSE_Value(pIsolate)); |
1015 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); | 999 GetObjectDefaultValue(argValue.get(), newPropertyValue.get()); |
1016 if (FXJSE_Value_IsNull(newPropertyValue.get())) | 1000 if (FXJSE_Value_IsNull(newPropertyValue.get())) |
1017 continue; | 1001 continue; |
1018 | 1002 |
1019 dSum += ValueToDouble(pThis, argValue.get()); | 1003 dSum += ValueToDouble(pThis, argValue.get()); |
1020 uCount++; | 1004 uCount++; |
1021 } else { | 1005 } else { |
1022 dSum += ValueToDouble(pThis, argValue.get()); | 1006 dSum += ValueToDouble(pThis, argValue.get()); |
1023 uCount++; | 1007 uCount++; |
1024 } | 1008 } |
1025 } | 1009 } |
1026 if (uCount == 0) { | 1010 if (uCount == 0) { |
1027 FXJSE_Value_SetNull(args.GetReturnValue()); | 1011 args.GetReturnValue()->SetNull(); |
1028 return; | 1012 return; |
1029 } | 1013 } |
1030 | 1014 |
1031 FXJSE_Value_SetDouble(args.GetReturnValue(), dSum); | 1015 args.GetReturnValue()->SetDouble(dSum); |
1032 } | 1016 } |
1033 | 1017 |
1034 // static | 1018 // static |
1035 void CXFA_FM2JSContext::Date(CFXJSE_Value* pThis, | 1019 void CXFA_FM2JSContext::Date(CFXJSE_Value* pThis, |
1036 const CFX_ByteStringC& szFuncName, | 1020 const CFX_ByteStringC& szFuncName, |
1037 CFXJSE_Arguments& args) { | 1021 CFXJSE_Arguments& args) { |
1038 if (args.GetLength() != 0) { | 1022 if (args.GetLength() != 0) { |
1039 ToJSContext(pThis, nullptr) | 1023 ToJSContext(pThis, nullptr) |
1040 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Date"); | 1024 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Date"); |
1041 return; | 1025 return; |
1042 } | 1026 } |
1043 | 1027 |
1044 time_t currentTime; | 1028 time_t currentTime; |
1045 time(¤tTime); | 1029 time(¤tTime); |
1046 struct tm* pTmStruct = gmtime(¤tTime); | 1030 struct tm* pTmStruct = gmtime(¤tTime); |
1047 | 1031 |
1048 CFX_ByteString bufferYear; | 1032 CFX_ByteString bufferYear; |
1049 CFX_ByteString bufferMon; | 1033 CFX_ByteString bufferMon; |
1050 CFX_ByteString bufferDay; | 1034 CFX_ByteString bufferDay; |
1051 bufferYear.Format("%d", pTmStruct->tm_year + 1900); | 1035 bufferYear.Format("%d", pTmStruct->tm_year + 1900); |
1052 bufferMon.Format("%02d", pTmStruct->tm_mon + 1); | 1036 bufferMon.Format("%02d", pTmStruct->tm_mon + 1); |
1053 bufferDay.Format("%02d", pTmStruct->tm_mday); | 1037 bufferDay.Format("%02d", pTmStruct->tm_mday); |
1054 | 1038 |
1055 CFX_ByteString bufferCurrent = bufferYear + bufferMon + bufferDay; | 1039 CFX_ByteString bufferCurrent = bufferYear + bufferMon + bufferDay; |
1056 FXJSE_Value_SetInteger(args.GetReturnValue(), | 1040 args.GetReturnValue()->SetInteger(DateString2Num(bufferCurrent.AsStringC())); |
1057 DateString2Num(bufferCurrent.AsStringC())); | |
1058 } | 1041 } |
1059 | 1042 |
1060 // static | 1043 // static |
1061 void CXFA_FM2JSContext::Date2Num(CFXJSE_Value* pThis, | 1044 void CXFA_FM2JSContext::Date2Num(CFXJSE_Value* pThis, |
1062 const CFX_ByteStringC& szFuncName, | 1045 const CFX_ByteStringC& szFuncName, |
1063 CFXJSE_Arguments& args) { | 1046 CFXJSE_Arguments& args) { |
1064 int32_t argc = args.GetLength(); | 1047 int32_t argc = args.GetLength(); |
1065 if (argc < 1 || argc > 3) { | 1048 if (argc < 1 || argc > 3) { |
1066 ToJSContext(pThis, nullptr) | 1049 ToJSContext(pThis, nullptr) |
1067 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Date2Num"); | 1050 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Date2Num"); |
1068 return; | 1051 return; |
1069 } | 1052 } |
1070 | 1053 |
1071 std::unique_ptr<CFXJSE_Value> dateValue = GetSimpleValue(pThis, args, 0); | 1054 std::unique_ptr<CFXJSE_Value> dateValue = GetSimpleValue(pThis, args, 0); |
1072 if (ValueIsNull(pThis, dateValue.get())) { | 1055 if (ValueIsNull(pThis, dateValue.get())) { |
1073 FXJSE_Value_SetNull(args.GetReturnValue()); | 1056 args.GetReturnValue()->SetNull(); |
1074 return; | 1057 return; |
1075 } | 1058 } |
1076 | 1059 |
1077 CFX_ByteString dateString; | 1060 CFX_ByteString dateString; |
1078 ValueToUTF8String(dateValue.get(), dateString); | 1061 ValueToUTF8String(dateValue.get(), dateString); |
1079 | 1062 |
1080 CFX_ByteString formatString; | 1063 CFX_ByteString formatString; |
1081 if (argc > 1) { | 1064 if (argc > 1) { |
1082 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); | 1065 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); |
1083 if (ValueIsNull(pThis, formatValue.get())) { | 1066 if (ValueIsNull(pThis, formatValue.get())) { |
1084 FXJSE_Value_SetNull(args.GetReturnValue()); | 1067 args.GetReturnValue()->SetNull(); |
1085 return; | 1068 return; |
1086 } | 1069 } |
1087 ValueToUTF8String(formatValue.get(), formatString); | 1070 ValueToUTF8String(formatValue.get(), formatString); |
1088 } | 1071 } |
1089 | 1072 |
1090 CFX_ByteString localString; | 1073 CFX_ByteString localString; |
1091 if (argc > 2) { | 1074 if (argc > 2) { |
1092 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1075 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
1093 if (ValueIsNull(pThis, localValue.get())) { | 1076 if (ValueIsNull(pThis, localValue.get())) { |
1094 FXJSE_Value_SetNull(args.GetReturnValue()); | 1077 args.GetReturnValue()->SetNull(); |
1095 return; | 1078 return; |
1096 } | 1079 } |
1097 ValueToUTF8String(localValue.get(), localString); | 1080 ValueToUTF8String(localValue.get(), localString); |
1098 } | 1081 } |
1099 | 1082 |
1100 CFX_ByteString szIsoDateString; | 1083 CFX_ByteString szIsoDateString; |
1101 if (!Local2IsoDate(pThis, dateString.AsStringC(), formatString.AsStringC(), | 1084 if (!Local2IsoDate(pThis, dateString.AsStringC(), formatString.AsStringC(), |
1102 localString.AsStringC(), szIsoDateString)) { | 1085 localString.AsStringC(), szIsoDateString)) { |
1103 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 1086 args.GetReturnValue()->SetInteger(0); |
1104 return; | 1087 return; |
1105 } | 1088 } |
1106 | 1089 |
1107 FXJSE_Value_SetInteger(args.GetReturnValue(), | 1090 args.GetReturnValue()->SetInteger( |
1108 DateString2Num(szIsoDateString.AsStringC())); | 1091 DateString2Num(szIsoDateString.AsStringC())); |
1109 } | 1092 } |
1110 | 1093 |
1111 // static | 1094 // static |
1112 void CXFA_FM2JSContext::DateFmt(CFXJSE_Value* pThis, | 1095 void CXFA_FM2JSContext::DateFmt(CFXJSE_Value* pThis, |
1113 const CFX_ByteStringC& szFuncName, | 1096 const CFX_ByteStringC& szFuncName, |
1114 CFXJSE_Arguments& args) { | 1097 CFXJSE_Arguments& args) { |
1115 int32_t argc = args.GetLength(); | 1098 int32_t argc = args.GetLength(); |
1116 if (argc > 2) { | 1099 if (argc > 2) { |
1117 ToJSContext(pThis, nullptr) | 1100 ToJSContext(pThis, nullptr) |
1118 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Date2Num"); | 1101 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Date2Num"); |
1119 return; | 1102 return; |
1120 } | 1103 } |
1121 | 1104 |
1122 int32_t iStyle = 0; | 1105 int32_t iStyle = 0; |
1123 if (argc > 0) { | 1106 if (argc > 0) { |
1124 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); | 1107 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); |
1125 if (FXJSE_Value_IsNull(argStyle.get())) { | 1108 if (FXJSE_Value_IsNull(argStyle.get())) { |
1126 FXJSE_Value_SetNull(args.GetReturnValue()); | 1109 args.GetReturnValue()->SetNull(); |
1127 return; | 1110 return; |
1128 } | 1111 } |
1129 | 1112 |
1130 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); | 1113 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); |
1131 if (iStyle < 0 || iStyle > 4) | 1114 if (iStyle < 0 || iStyle > 4) |
1132 iStyle = 0; | 1115 iStyle = 0; |
1133 } | 1116 } |
1134 | 1117 |
1135 CFX_ByteString szLocal; | 1118 CFX_ByteString szLocal; |
1136 if (argc > 1) { | 1119 if (argc > 1) { |
1137 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); | 1120 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); |
1138 if (FXJSE_Value_IsNull(argLocal.get())) { | 1121 if (FXJSE_Value_IsNull(argLocal.get())) { |
1139 FXJSE_Value_SetNull(args.GetReturnValue()); | 1122 args.GetReturnValue()->SetNull(); |
1140 return; | 1123 return; |
1141 } | 1124 } |
1142 ValueToUTF8String(argLocal.get(), szLocal); | 1125 ValueToUTF8String(argLocal.get(), szLocal); |
1143 } | 1126 } |
1144 | 1127 |
1145 CFX_ByteString formatStr; | 1128 CFX_ByteString formatStr; |
1146 GetStandardDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr); | 1129 GetStandardDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr); |
1147 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr.AsStringC()); | 1130 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
1148 } | 1131 } |
1149 | 1132 |
1150 // static | 1133 // static |
1151 void CXFA_FM2JSContext::IsoDate2Num(CFXJSE_Value* pThis, | 1134 void CXFA_FM2JSContext::IsoDate2Num(CFXJSE_Value* pThis, |
1152 const CFX_ByteStringC& szFuncName, | 1135 const CFX_ByteStringC& szFuncName, |
1153 CFXJSE_Arguments& args) { | 1136 CFXJSE_Arguments& args) { |
1154 if (args.GetLength() != 1) { | 1137 if (args.GetLength() != 1) { |
1155 ToJSContext(pThis, nullptr) | 1138 ToJSContext(pThis, nullptr) |
1156 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"IsoDate2Num"); | 1139 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"IsoDate2Num"); |
1157 return; | 1140 return; |
1158 } | 1141 } |
1159 | 1142 |
1160 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 1143 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
1161 if (FXJSE_Value_IsNull(argOne.get())) { | 1144 if (FXJSE_Value_IsNull(argOne.get())) { |
1162 FXJSE_Value_SetNull(args.GetReturnValue()); | 1145 args.GetReturnValue()->SetNull(); |
1163 return; | 1146 return; |
1164 } | 1147 } |
1165 | 1148 |
1166 CFX_ByteString szArgString; | 1149 CFX_ByteString szArgString; |
1167 ValueToUTF8String(argOne.get(), szArgString); | 1150 ValueToUTF8String(argOne.get(), szArgString); |
1168 FXJSE_Value_SetInteger(args.GetReturnValue(), | 1151 args.GetReturnValue()->SetInteger(DateString2Num(szArgString.AsStringC())); |
1169 DateString2Num(szArgString.AsStringC())); | |
1170 } | 1152 } |
1171 | 1153 |
1172 // static | 1154 // static |
1173 void CXFA_FM2JSContext::IsoTime2Num(CFXJSE_Value* pThis, | 1155 void CXFA_FM2JSContext::IsoTime2Num(CFXJSE_Value* pThis, |
1174 const CFX_ByteStringC& szFuncName, | 1156 const CFX_ByteStringC& szFuncName, |
1175 CFXJSE_Arguments& args) { | 1157 CFXJSE_Arguments& args) { |
1176 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 1158 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
1177 if (args.GetLength() != 1) { | 1159 if (args.GetLength() != 1) { |
1178 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, | 1160 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, |
1179 L"IsoTime2Num"); | 1161 L"IsoTime2Num"); |
1180 return; | 1162 return; |
1181 } | 1163 } |
1182 | 1164 |
1183 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 1165 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
1184 if (ValueIsNull(pThis, argOne.get())) { | 1166 if (ValueIsNull(pThis, argOne.get())) { |
1185 FXJSE_Value_SetNull(args.GetReturnValue()); | 1167 args.GetReturnValue()->SetNull(); |
1186 return; | 1168 return; |
1187 } | 1169 } |
1188 | 1170 |
1189 CXFA_Document* pDoc = pContext->GetDocument(); | 1171 CXFA_Document* pDoc = pContext->GetDocument(); |
1190 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 1172 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
1191 | 1173 |
1192 CFX_ByteString szArgString; | 1174 CFX_ByteString szArgString; |
1193 ValueToUTF8String(argOne.get(), szArgString); | 1175 ValueToUTF8String(argOne.get(), szArgString); |
1194 szArgString = szArgString.Mid(szArgString.Find('T', 0) + 1); | 1176 szArgString = szArgString.Mid(szArgString.Find('T', 0) + 1); |
1195 if (szArgString.IsEmpty()) { | 1177 if (szArgString.IsEmpty()) { |
1196 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 1178 args.GetReturnValue()->SetInteger(0); |
1197 return; | 1179 return; |
1198 } | 1180 } |
1199 | 1181 |
1200 CXFA_LocaleValue timeValue( | 1182 CXFA_LocaleValue timeValue( |
1201 XFA_VT_TIME, CFX_WideString::FromUTF8(szArgString.AsStringC()), pMgr); | 1183 XFA_VT_TIME, CFX_WideString::FromUTF8(szArgString.AsStringC()), pMgr); |
1202 if (!timeValue.IsValid()) { | 1184 if (!timeValue.IsValid()) { |
1203 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 1185 args.GetReturnValue()->SetInteger(0); |
1204 return; | 1186 return; |
1205 } | 1187 } |
1206 | 1188 |
1207 CFX_Unitime uniTime = timeValue.GetTime(); | 1189 CFX_Unitime uniTime = timeValue.GetTime(); |
1208 int32_t hour = uniTime.GetHour(); | 1190 int32_t hour = uniTime.GetHour(); |
1209 int32_t min = uniTime.GetMinute(); | 1191 int32_t min = uniTime.GetMinute(); |
1210 int32_t second = uniTime.GetSecond(); | 1192 int32_t second = uniTime.GetSecond(); |
1211 int32_t milSecond = uniTime.GetMillisecond(); | 1193 int32_t milSecond = uniTime.GetMillisecond(); |
1212 | 1194 |
1213 FX_TIMEZONE tzLocale; | 1195 FX_TIMEZONE tzLocale; |
1214 pMgr->GetDefLocale()->GetTimeZone(tzLocale); | 1196 pMgr->GetDefLocale()->GetTimeZone(tzLocale); |
1215 | 1197 |
1216 // TODO(dsinclair): See if there is other time conversion code in pdfium and | 1198 // TODO(dsinclair): See if there is other time conversion code in pdfium and |
1217 // consolidate. | 1199 // consolidate. |
1218 int32_t mins = hour * 60 + min; | 1200 int32_t mins = hour * 60 + min; |
1219 mins -= (tzLocale.tzHour * 60); | 1201 mins -= (tzLocale.tzHour * 60); |
1220 while (mins > 1440) | 1202 while (mins > 1440) |
1221 mins -= 1440; | 1203 mins -= 1440; |
1222 while (mins < 0) | 1204 while (mins < 0) |
1223 mins += 1440; | 1205 mins += 1440; |
1224 hour = mins / 60; | 1206 hour = mins / 60; |
1225 min = mins % 60; | 1207 min = mins % 60; |
1226 int32_t iResult = | 1208 |
1227 hour * 3600000 + min * 60000 + second * 1000 + milSecond + 1; | 1209 args.GetReturnValue()->SetInteger(hour * 3600000 + min * 60000 + |
1228 FXJSE_Value_SetInteger(args.GetReturnValue(), iResult); | 1210 second * 1000 + milSecond + 1); |
1229 } | 1211 } |
1230 | 1212 |
1231 // static | 1213 // static |
1232 void CXFA_FM2JSContext::LocalDateFmt(CFXJSE_Value* pThis, | 1214 void CXFA_FM2JSContext::LocalDateFmt(CFXJSE_Value* pThis, |
1233 const CFX_ByteStringC& szFuncName, | 1215 const CFX_ByteStringC& szFuncName, |
1234 CFXJSE_Arguments& args) { | 1216 CFXJSE_Arguments& args) { |
1235 int32_t argc = args.GetLength(); | 1217 int32_t argc = args.GetLength(); |
1236 if (argc > 2) { | 1218 if (argc > 2) { |
1237 ToJSContext(pThis, nullptr) | 1219 ToJSContext(pThis, nullptr) |
1238 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"LocalDateFmt"); | 1220 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"LocalDateFmt"); |
1239 return; | 1221 return; |
1240 } | 1222 } |
1241 | 1223 |
1242 int32_t iStyle = 0; | 1224 int32_t iStyle = 0; |
1243 if (argc > 0) { | 1225 if (argc > 0) { |
1244 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); | 1226 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); |
1245 if (FXJSE_Value_IsNull(argStyle.get())) { | 1227 if (FXJSE_Value_IsNull(argStyle.get())) { |
1246 FXJSE_Value_SetNull(args.GetReturnValue()); | 1228 args.GetReturnValue()->SetNull(); |
1247 return; | 1229 return; |
1248 } | 1230 } |
1249 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); | 1231 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); |
1250 if (iStyle > 4 || iStyle < 0) | 1232 if (iStyle > 4 || iStyle < 0) |
1251 iStyle = 0; | 1233 iStyle = 0; |
1252 } | 1234 } |
1253 | 1235 |
1254 CFX_ByteString szLocal; | 1236 CFX_ByteString szLocal; |
1255 if (argc > 1) { | 1237 if (argc > 1) { |
1256 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); | 1238 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); |
1257 if (FXJSE_Value_IsNull(argLocal.get())) { | 1239 if (FXJSE_Value_IsNull(argLocal.get())) { |
1258 FXJSE_Value_SetNull(args.GetReturnValue()); | 1240 args.GetReturnValue()->SetNull(); |
1259 return; | 1241 return; |
1260 } | 1242 } |
1261 ValueToUTF8String(argLocal.get(), szLocal); | 1243 ValueToUTF8String(argLocal.get(), szLocal); |
1262 } | 1244 } |
1263 | 1245 |
1264 CFX_ByteString formatStr; | 1246 CFX_ByteString formatStr; |
1265 GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, FALSE); | 1247 GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, FALSE); |
1266 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr.AsStringC()); | 1248 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
1267 } | 1249 } |
1268 | 1250 |
1269 // static | 1251 // static |
1270 void CXFA_FM2JSContext::LocalTimeFmt(CFXJSE_Value* pThis, | 1252 void CXFA_FM2JSContext::LocalTimeFmt(CFXJSE_Value* pThis, |
1271 const CFX_ByteStringC& szFuncName, | 1253 const CFX_ByteStringC& szFuncName, |
1272 CFXJSE_Arguments& args) { | 1254 CFXJSE_Arguments& args) { |
1273 int32_t argc = args.GetLength(); | 1255 int32_t argc = args.GetLength(); |
1274 if (argc > 2) { | 1256 if (argc > 2) { |
1275 ToJSContext(pThis, nullptr) | 1257 ToJSContext(pThis, nullptr) |
1276 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"LocalTimeFmt"); | 1258 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"LocalTimeFmt"); |
1277 return; | 1259 return; |
1278 } | 1260 } |
1279 | 1261 |
1280 int32_t iStyle = 0; | 1262 int32_t iStyle = 0; |
1281 if (argc > 0) { | 1263 if (argc > 0) { |
1282 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); | 1264 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); |
1283 if (FXJSE_Value_IsNull(argStyle.get())) { | 1265 if (FXJSE_Value_IsNull(argStyle.get())) { |
1284 FXJSE_Value_SetNull(args.GetReturnValue()); | 1266 args.GetReturnValue()->SetNull(); |
1285 return; | 1267 return; |
1286 } | 1268 } |
1287 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); | 1269 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); |
1288 if (iStyle > 4 || iStyle < 0) | 1270 if (iStyle > 4 || iStyle < 0) |
1289 iStyle = 0; | 1271 iStyle = 0; |
1290 } | 1272 } |
1291 | 1273 |
1292 CFX_ByteString szLocal; | 1274 CFX_ByteString szLocal; |
1293 if (argc > 1) { | 1275 if (argc > 1) { |
1294 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); | 1276 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); |
1295 if (FXJSE_Value_IsNull(argLocal.get())) { | 1277 if (FXJSE_Value_IsNull(argLocal.get())) { |
1296 FXJSE_Value_SetNull(args.GetReturnValue()); | 1278 args.GetReturnValue()->SetNull(); |
1297 return; | 1279 return; |
1298 } | 1280 } |
1299 ValueToUTF8String(argLocal.get(), szLocal); | 1281 ValueToUTF8String(argLocal.get(), szLocal); |
1300 } | 1282 } |
1301 | 1283 |
1302 CFX_ByteString formatStr; | 1284 CFX_ByteString formatStr; |
1303 GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, FALSE); | 1285 GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr, FALSE); |
1304 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr.AsStringC()); | 1286 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
1305 } | 1287 } |
1306 | 1288 |
1307 // static | 1289 // static |
1308 void CXFA_FM2JSContext::Num2Date(CFXJSE_Value* pThis, | 1290 void CXFA_FM2JSContext::Num2Date(CFXJSE_Value* pThis, |
1309 const CFX_ByteStringC& szFuncName, | 1291 const CFX_ByteStringC& szFuncName, |
1310 CFXJSE_Arguments& args) { | 1292 CFXJSE_Arguments& args) { |
1311 int32_t argc = args.GetLength(); | 1293 int32_t argc = args.GetLength(); |
1312 if (argc < 1 || argc > 3) { | 1294 if (argc < 1 || argc > 3) { |
1313 ToJSContext(pThis, nullptr) | 1295 ToJSContext(pThis, nullptr) |
1314 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Num2Date"); | 1296 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Num2Date"); |
1315 return; | 1297 return; |
1316 } | 1298 } |
1317 | 1299 |
1318 std::unique_ptr<CFXJSE_Value> dateValue = GetSimpleValue(pThis, args, 0); | 1300 std::unique_ptr<CFXJSE_Value> dateValue = GetSimpleValue(pThis, args, 0); |
1319 if (ValueIsNull(pThis, dateValue.get())) { | 1301 if (ValueIsNull(pThis, dateValue.get())) { |
1320 FXJSE_Value_SetNull(args.GetReturnValue()); | 1302 args.GetReturnValue()->SetNull(); |
1321 return; | 1303 return; |
1322 } | 1304 } |
1323 int32_t dDate = (int32_t)ValueToFloat(pThis, dateValue.get()); | 1305 int32_t dDate = (int32_t)ValueToFloat(pThis, dateValue.get()); |
1324 if (dDate < 1) { | 1306 if (dDate < 1) { |
1325 FXJSE_Value_SetNull(args.GetReturnValue()); | 1307 args.GetReturnValue()->SetNull(); |
1326 return; | 1308 return; |
1327 } | 1309 } |
1328 | 1310 |
1329 CFX_ByteString formatString; | 1311 CFX_ByteString formatString; |
1330 if (argc > 1) { | 1312 if (argc > 1) { |
1331 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); | 1313 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); |
1332 if (ValueIsNull(pThis, formatValue.get())) { | 1314 if (ValueIsNull(pThis, formatValue.get())) { |
1333 FXJSE_Value_SetNull(args.GetReturnValue()); | 1315 args.GetReturnValue()->SetNull(); |
1334 return; | 1316 return; |
1335 } | 1317 } |
1336 ValueToUTF8String(formatValue.get(), formatString); | 1318 ValueToUTF8String(formatValue.get(), formatString); |
1337 } | 1319 } |
1338 | 1320 |
1339 CFX_ByteString localString; | 1321 CFX_ByteString localString; |
1340 if (argc > 2) { | 1322 if (argc > 2) { |
1341 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1323 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
1342 if (ValueIsNull(pThis, localValue.get())) { | 1324 if (ValueIsNull(pThis, localValue.get())) { |
1343 FXJSE_Value_SetNull(args.GetReturnValue()); | 1325 args.GetReturnValue()->SetNull(); |
1344 return; | 1326 return; |
1345 } | 1327 } |
1346 ValueToUTF8String(localValue.get(), localString); | 1328 ValueToUTF8String(localValue.get(), localString); |
1347 } | 1329 } |
1348 | 1330 |
1349 int32_t iYear = 1900; | 1331 int32_t iYear = 1900; |
1350 int32_t iMonth = 1; | 1332 int32_t iMonth = 1; |
1351 int32_t iDay = 1; | 1333 int32_t iDay = 1; |
1352 int32_t i = 0; | 1334 int32_t i = 0; |
1353 while (dDate > 0) { | 1335 while (dDate > 0) { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 } | 1418 } |
1437 } | 1419 } |
1438 } | 1420 } |
1439 } | 1421 } |
1440 | 1422 |
1441 CFX_ByteString szIsoDateString; | 1423 CFX_ByteString szIsoDateString; |
1442 szIsoDateString.Format("%d%02d%02d", iYear + i, iMonth, iDay); | 1424 szIsoDateString.Format("%d%02d%02d", iYear + i, iMonth, iDay); |
1443 CFX_ByteString szLocalDateString; | 1425 CFX_ByteString szLocalDateString; |
1444 IsoDate2Local(pThis, szIsoDateString.AsStringC(), formatString.AsStringC(), | 1426 IsoDate2Local(pThis, szIsoDateString.AsStringC(), formatString.AsStringC(), |
1445 localString.AsStringC(), szLocalDateString); | 1427 localString.AsStringC(), szLocalDateString); |
1446 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 1428 args.GetReturnValue()->SetString(szLocalDateString.AsStringC()); |
1447 szLocalDateString.AsStringC()); | |
1448 } | 1429 } |
1449 | 1430 |
1450 // static | 1431 // static |
1451 void CXFA_FM2JSContext::Num2GMTime(CFXJSE_Value* pThis, | 1432 void CXFA_FM2JSContext::Num2GMTime(CFXJSE_Value* pThis, |
1452 const CFX_ByteStringC& szFuncName, | 1433 const CFX_ByteStringC& szFuncName, |
1453 CFXJSE_Arguments& args) { | 1434 CFXJSE_Arguments& args) { |
1454 int32_t argc = args.GetLength(); | 1435 int32_t argc = args.GetLength(); |
1455 if (argc < 1 || argc > 3) { | 1436 if (argc < 1 || argc > 3) { |
1456 ToJSContext(pThis, nullptr) | 1437 ToJSContext(pThis, nullptr) |
1457 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Num2GMTime"); | 1438 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Num2GMTime"); |
1458 return; | 1439 return; |
1459 } | 1440 } |
1460 | 1441 |
1461 std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0); | 1442 std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0); |
1462 if (FXJSE_Value_IsNull(timeValue.get())) { | 1443 if (FXJSE_Value_IsNull(timeValue.get())) { |
1463 FXJSE_Value_SetNull(args.GetReturnValue()); | 1444 args.GetReturnValue()->SetNull(); |
1464 return; | 1445 return; |
1465 } | 1446 } |
1466 int32_t iTime = (int32_t)ValueToFloat(pThis, timeValue.get()); | 1447 int32_t iTime = (int32_t)ValueToFloat(pThis, timeValue.get()); |
1467 if (FXSYS_abs(iTime) < 1.0) { | 1448 if (FXSYS_abs(iTime) < 1.0) { |
1468 FXJSE_Value_SetNull(args.GetReturnValue()); | 1449 args.GetReturnValue()->SetNull(); |
1469 return; | 1450 return; |
1470 } | 1451 } |
1471 | 1452 |
1472 CFX_ByteString formatString; | 1453 CFX_ByteString formatString; |
1473 if (argc > 1) { | 1454 if (argc > 1) { |
1474 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); | 1455 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); |
1475 if (FXJSE_Value_IsNull(formatValue.get())) { | 1456 if (FXJSE_Value_IsNull(formatValue.get())) { |
1476 FXJSE_Value_SetNull(args.GetReturnValue()); | 1457 args.GetReturnValue()->SetNull(); |
1477 return; | 1458 return; |
1478 } | 1459 } |
1479 ValueToUTF8String(formatValue.get(), formatString); | 1460 ValueToUTF8String(formatValue.get(), formatString); |
1480 } | 1461 } |
1481 | 1462 |
1482 CFX_ByteString localString; | 1463 CFX_ByteString localString; |
1483 if (argc > 2) { | 1464 if (argc > 2) { |
1484 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1465 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
1485 if (FXJSE_Value_IsNull(localValue.get())) { | 1466 if (FXJSE_Value_IsNull(localValue.get())) { |
1486 FXJSE_Value_SetNull(args.GetReturnValue()); | 1467 args.GetReturnValue()->SetNull(); |
1487 return; | 1468 return; |
1488 } | 1469 } |
1489 ValueToUTF8String(localValue.get(), localString); | 1470 ValueToUTF8String(localValue.get(), localString); |
1490 } | 1471 } |
1491 | 1472 |
1492 CFX_ByteString szGMTTimeString; | 1473 CFX_ByteString szGMTTimeString; |
1493 Num2AllTime(pThis, iTime, formatString.AsStringC(), localString.AsStringC(), | 1474 Num2AllTime(pThis, iTime, formatString.AsStringC(), localString.AsStringC(), |
1494 TRUE, szGMTTimeString); | 1475 TRUE, szGMTTimeString); |
1495 FXJSE_Value_SetUTF8String(args.GetReturnValue(), szGMTTimeString.AsStringC()); | 1476 args.GetReturnValue()->SetString(szGMTTimeString.AsStringC()); |
1496 } | 1477 } |
1497 | 1478 |
1498 // static | 1479 // static |
1499 void CXFA_FM2JSContext::Num2Time(CFXJSE_Value* pThis, | 1480 void CXFA_FM2JSContext::Num2Time(CFXJSE_Value* pThis, |
1500 const CFX_ByteStringC& szFuncName, | 1481 const CFX_ByteStringC& szFuncName, |
1501 CFXJSE_Arguments& args) { | 1482 CFXJSE_Arguments& args) { |
1502 int32_t argc = args.GetLength(); | 1483 int32_t argc = args.GetLength(); |
1503 if (argc < 1 || argc > 3) { | 1484 if (argc < 1 || argc > 3) { |
1504 ToJSContext(pThis, nullptr) | 1485 ToJSContext(pThis, nullptr) |
1505 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Num2Time"); | 1486 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Num2Time"); |
1506 return; | 1487 return; |
1507 } | 1488 } |
1508 | 1489 |
1509 std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0); | 1490 std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0); |
1510 if (FXJSE_Value_IsNull(timeValue.get())) { | 1491 if (FXJSE_Value_IsNull(timeValue.get())) { |
1511 FXJSE_Value_SetNull(args.GetReturnValue()); | 1492 args.GetReturnValue()->SetNull(); |
1512 return; | 1493 return; |
1513 } | 1494 } |
1514 FX_FLOAT fTime = ValueToFloat(pThis, timeValue.get()); | 1495 FX_FLOAT fTime = ValueToFloat(pThis, timeValue.get()); |
1515 if (FXSYS_fabs(fTime) < 1.0) { | 1496 if (FXSYS_fabs(fTime) < 1.0) { |
1516 FXJSE_Value_SetNull(args.GetReturnValue()); | 1497 args.GetReturnValue()->SetNull(); |
1517 return; | 1498 return; |
1518 } | 1499 } |
1519 | 1500 |
1520 CFX_ByteString formatString; | 1501 CFX_ByteString formatString; |
1521 if (argc > 1) { | 1502 if (argc > 1) { |
1522 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); | 1503 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); |
1523 if (FXJSE_Value_IsNull(formatValue.get())) { | 1504 if (FXJSE_Value_IsNull(formatValue.get())) { |
1524 FXJSE_Value_SetNull(args.GetReturnValue()); | 1505 args.GetReturnValue()->SetNull(); |
1525 return; | 1506 return; |
1526 } | 1507 } |
1527 ValueToUTF8String(formatValue.get(), formatString); | 1508 ValueToUTF8String(formatValue.get(), formatString); |
1528 } | 1509 } |
1529 | 1510 |
1530 CFX_ByteString localString; | 1511 CFX_ByteString localString; |
1531 if (argc > 2) { | 1512 if (argc > 2) { |
1532 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1513 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
1533 if (FXJSE_Value_IsNull(localValue.get())) { | 1514 if (FXJSE_Value_IsNull(localValue.get())) { |
1534 FXJSE_Value_SetNull(args.GetReturnValue()); | 1515 args.GetReturnValue()->SetNull(); |
1535 return; | 1516 return; |
1536 } | 1517 } |
1537 ValueToUTF8String(localValue.get(), localString); | 1518 ValueToUTF8String(localValue.get(), localString); |
1538 } | 1519 } |
1539 | 1520 |
1540 CFX_ByteString szLocalTimeString; | 1521 CFX_ByteString szLocalTimeString; |
1541 Num2AllTime(pThis, (int32_t)fTime, formatString.AsStringC(), | 1522 Num2AllTime(pThis, (int32_t)fTime, formatString.AsStringC(), |
1542 localString.AsStringC(), FALSE, szLocalTimeString); | 1523 localString.AsStringC(), FALSE, szLocalTimeString); |
1543 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 1524 args.GetReturnValue()->SetString(szLocalTimeString.AsStringC()); |
1544 szLocalTimeString.AsStringC()); | |
1545 } | 1525 } |
1546 | 1526 |
1547 // static | 1527 // static |
1548 void CXFA_FM2JSContext::Time(CFXJSE_Value* pThis, | 1528 void CXFA_FM2JSContext::Time(CFXJSE_Value* pThis, |
1549 const CFX_ByteStringC& szFuncName, | 1529 const CFX_ByteStringC& szFuncName, |
1550 CFXJSE_Arguments& args) { | 1530 CFXJSE_Arguments& args) { |
1551 if (args.GetLength() != 0) { | 1531 if (args.GetLength() != 0) { |
1552 ToJSContext(pThis, nullptr) | 1532 ToJSContext(pThis, nullptr) |
1553 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Time"); | 1533 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Time"); |
1554 return; | 1534 return; |
1555 } | 1535 } |
1556 | 1536 |
1557 time_t now; | 1537 time_t now; |
1558 time(&now); | 1538 time(&now); |
1559 | 1539 |
1560 struct tm* pGmt = gmtime(&now); | 1540 struct tm* pGmt = gmtime(&now); |
1561 FXJSE_Value_SetInteger( | 1541 args.GetReturnValue()->SetInteger( |
1562 args.GetReturnValue(), | 1542 (pGmt->tm_hour * 3600 + pGmt->tm_min * 60 + pGmt->tm_sec) * 1000); |
1563 ((pGmt->tm_hour * 3600 + pGmt->tm_min * 60 + pGmt->tm_sec) * 1000)); | |
1564 } | 1543 } |
1565 | 1544 |
1566 // static | 1545 // static |
1567 void CXFA_FM2JSContext::Time2Num(CFXJSE_Value* pThis, | 1546 void CXFA_FM2JSContext::Time2Num(CFXJSE_Value* pThis, |
1568 const CFX_ByteStringC& szFuncName, | 1547 const CFX_ByteStringC& szFuncName, |
1569 CFXJSE_Arguments& args) { | 1548 CFXJSE_Arguments& args) { |
1570 int32_t argc = args.GetLength(); | 1549 int32_t argc = args.GetLength(); |
1571 if (argc < 1 || argc > 3) { | 1550 if (argc < 1 || argc > 3) { |
1572 ToJSContext(pThis, nullptr) | 1551 ToJSContext(pThis, nullptr) |
1573 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Time2Num"); | 1552 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Time2Num"); |
1574 return; | 1553 return; |
1575 } | 1554 } |
1576 | 1555 |
1577 CFX_ByteString timeString; | 1556 CFX_ByteString timeString; |
1578 std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0); | 1557 std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0); |
1579 if (ValueIsNull(pThis, timeValue.get())) { | 1558 if (ValueIsNull(pThis, timeValue.get())) { |
1580 FXJSE_Value_SetNull(args.GetReturnValue()); | 1559 args.GetReturnValue()->SetNull(); |
1581 return; | 1560 return; |
1582 } | 1561 } |
1583 ValueToUTF8String(timeValue.get(), timeString); | 1562 ValueToUTF8String(timeValue.get(), timeString); |
1584 | 1563 |
1585 CFX_ByteString formatString; | 1564 CFX_ByteString formatString; |
1586 if (argc > 1) { | 1565 if (argc > 1) { |
1587 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); | 1566 std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1); |
1588 if (ValueIsNull(pThis, formatValue.get())) { | 1567 if (ValueIsNull(pThis, formatValue.get())) { |
1589 FXJSE_Value_SetNull(args.GetReturnValue()); | 1568 args.GetReturnValue()->SetNull(); |
1590 return; | 1569 return; |
1591 } | 1570 } |
1592 ValueToUTF8String(formatValue.get(), formatString); | 1571 ValueToUTF8String(formatValue.get(), formatString); |
1593 } | 1572 } |
1594 | 1573 |
1595 CFX_ByteString localString; | 1574 CFX_ByteString localString; |
1596 if (argc > 2) { | 1575 if (argc > 2) { |
1597 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); | 1576 std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2); |
1598 if (ValueIsNull(pThis, localValue.get())) { | 1577 if (ValueIsNull(pThis, localValue.get())) { |
1599 FXJSE_Value_SetNull(args.GetReturnValue()); | 1578 args.GetReturnValue()->SetNull(); |
1600 return; | 1579 return; |
1601 } | 1580 } |
1602 ValueToUTF8String(localValue.get(), localString); | 1581 ValueToUTF8String(localValue.get(), localString); |
1603 } | 1582 } |
1604 | 1583 |
1605 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); | 1584 CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument(); |
1606 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); | 1585 CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr(); |
1607 IFX_Locale* pLocale = nullptr; | 1586 IFX_Locale* pLocale = nullptr; |
1608 if (localString.IsEmpty()) { | 1587 if (localString.IsEmpty()) { |
1609 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 1588 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
(...skipping 11 matching lines...) Expand all Loading... |
1621 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); | 1600 pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default, wsFormat); |
1622 else | 1601 else |
1623 wsFormat = CFX_WideString::FromUTF8(formatString.AsStringC()); | 1602 wsFormat = CFX_WideString::FromUTF8(formatString.AsStringC()); |
1624 | 1603 |
1625 wsFormat = FX_WSTRC(L"time{") + wsFormat; | 1604 wsFormat = FX_WSTRC(L"time{") + wsFormat; |
1626 wsFormat += FX_WSTRC(L"}"); | 1605 wsFormat += FX_WSTRC(L"}"); |
1627 CXFA_LocaleValue localeValue(XFA_VT_TIME, | 1606 CXFA_LocaleValue localeValue(XFA_VT_TIME, |
1628 CFX_WideString::FromUTF8(timeString.AsStringC()), | 1607 CFX_WideString::FromUTF8(timeString.AsStringC()), |
1629 wsFormat, pLocale, pMgr); | 1608 wsFormat, pLocale, pMgr); |
1630 if (!localeValue.IsValid()) { | 1609 if (!localeValue.IsValid()) { |
1631 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 1610 args.GetReturnValue()->SetInteger(0); |
1632 return; | 1611 return; |
1633 } | 1612 } |
1634 | 1613 |
1635 CFX_Unitime uniTime = localeValue.GetTime(); | 1614 CFX_Unitime uniTime = localeValue.GetTime(); |
1636 int32_t hour = uniTime.GetHour(); | 1615 int32_t hour = uniTime.GetHour(); |
1637 int32_t min = uniTime.GetMinute(); | 1616 int32_t min = uniTime.GetMinute(); |
1638 int32_t second = uniTime.GetSecond(); | 1617 int32_t second = uniTime.GetSecond(); |
1639 int32_t milSecond = uniTime.GetMillisecond(); | 1618 int32_t milSecond = uniTime.GetMillisecond(); |
1640 int32_t mins = hour * 60 + min; | 1619 int32_t mins = hour * 60 + min; |
1641 CXFA_TimeZoneProvider* pProvider = CXFA_TimeZoneProvider::Get(); | 1620 CXFA_TimeZoneProvider* pProvider = CXFA_TimeZoneProvider::Get(); |
1642 if (pProvider) { | 1621 if (pProvider) { |
1643 FX_TIMEZONE tz; | 1622 FX_TIMEZONE tz; |
1644 pProvider->GetTimeZone(tz); | 1623 pProvider->GetTimeZone(tz); |
1645 mins -= (tz.tzHour * 60); | 1624 mins -= (tz.tzHour * 60); |
1646 while (mins > 1440) | 1625 while (mins > 1440) |
1647 mins -= 1440; | 1626 mins -= 1440; |
1648 while (mins < 0) | 1627 while (mins < 0) |
1649 mins += 1440; | 1628 mins += 1440; |
1650 | 1629 |
1651 hour = mins / 60; | 1630 hour = mins / 60; |
1652 min = mins % 60; | 1631 min = mins % 60; |
1653 } | 1632 } |
1654 FXJSE_Value_SetInteger( | 1633 args.GetReturnValue()->SetInteger(hour * 3600000 + min * 60000 + |
1655 args.GetReturnValue(), | 1634 second * 1000 + milSecond + 1); |
1656 hour * 3600000 + min * 60000 + second * 1000 + milSecond + 1); | |
1657 } | 1635 } |
1658 | 1636 |
1659 // static | 1637 // static |
1660 void CXFA_FM2JSContext::TimeFmt(CFXJSE_Value* pThis, | 1638 void CXFA_FM2JSContext::TimeFmt(CFXJSE_Value* pThis, |
1661 const CFX_ByteStringC& szFuncName, | 1639 const CFX_ByteStringC& szFuncName, |
1662 CFXJSE_Arguments& args) { | 1640 CFXJSE_Arguments& args) { |
1663 int32_t argc = args.GetLength(); | 1641 int32_t argc = args.GetLength(); |
1664 if (argc > 2) { | 1642 if (argc > 2) { |
1665 ToJSContext(pThis, nullptr) | 1643 ToJSContext(pThis, nullptr) |
1666 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"TimeFmt"); | 1644 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"TimeFmt"); |
1667 return; | 1645 return; |
1668 } | 1646 } |
1669 | 1647 |
1670 int32_t iStyle = 0; | 1648 int32_t iStyle = 0; |
1671 if (argc > 0) { | 1649 if (argc > 0) { |
1672 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); | 1650 std::unique_ptr<CFXJSE_Value> argStyle = GetSimpleValue(pThis, args, 0); |
1673 if (FXJSE_Value_IsNull(argStyle.get())) { | 1651 if (FXJSE_Value_IsNull(argStyle.get())) { |
1674 FXJSE_Value_SetNull(args.GetReturnValue()); | 1652 args.GetReturnValue()->SetNull(); |
1675 return; | 1653 return; |
1676 } | 1654 } |
1677 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); | 1655 iStyle = (int32_t)ValueToFloat(pThis, argStyle.get()); |
1678 if (iStyle > 4 || iStyle < 0) | 1656 if (iStyle > 4 || iStyle < 0) |
1679 iStyle = 0; | 1657 iStyle = 0; |
1680 } | 1658 } |
1681 | 1659 |
1682 CFX_ByteString szLocal; | 1660 CFX_ByteString szLocal; |
1683 if (argc > 1) { | 1661 if (argc > 1) { |
1684 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); | 1662 std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1); |
1685 if (FXJSE_Value_IsNull(argLocal.get())) { | 1663 if (FXJSE_Value_IsNull(argLocal.get())) { |
1686 FXJSE_Value_SetNull(args.GetReturnValue()); | 1664 args.GetReturnValue()->SetNull(); |
1687 return; | 1665 return; |
1688 } | 1666 } |
1689 ValueToUTF8String(argLocal.get(), szLocal); | 1667 ValueToUTF8String(argLocal.get(), szLocal); |
1690 } | 1668 } |
1691 | 1669 |
1692 CFX_ByteString formatStr; | 1670 CFX_ByteString formatStr; |
1693 GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr); | 1671 GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC(), formatStr); |
1694 FXJSE_Value_SetUTF8String(args.GetReturnValue(), formatStr.AsStringC()); | 1672 args.GetReturnValue()->SetString(formatStr.AsStringC()); |
1695 } | 1673 } |
1696 | 1674 |
1697 // static | 1675 // static |
1698 FX_BOOL CXFA_FM2JSContext::IsIsoDateFormat(const FX_CHAR* pData, | 1676 FX_BOOL CXFA_FM2JSContext::IsIsoDateFormat(const FX_CHAR* pData, |
1699 int32_t iLength, | 1677 int32_t iLength, |
1700 int32_t& iStyle, | 1678 int32_t& iStyle, |
1701 int32_t& iYear, | 1679 int32_t& iYear, |
1702 int32_t& iMonth, | 1680 int32_t& iMonth, |
1703 int32_t& iDay) { | 1681 int32_t& iDay) { |
1704 iYear = 0; | 1682 iYear = 0; |
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2399 if (args.GetLength() != 3) { | 2377 if (args.GetLength() != 3) { |
2400 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Apr"); | 2378 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Apr"); |
2401 return; | 2379 return; |
2402 } | 2380 } |
2403 | 2381 |
2404 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2382 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2405 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2383 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2406 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2384 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2407 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2385 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2408 ValueIsNull(pThis, argThree.get())) { | 2386 ValueIsNull(pThis, argThree.get())) { |
2409 FXJSE_Value_SetNull(args.GetReturnValue()); | 2387 args.GetReturnValue()->SetNull(); |
2410 return; | 2388 return; |
2411 } | 2389 } |
2412 | 2390 |
2413 FX_DOUBLE nPrincipal = ValueToDouble(pThis, argOne.get()); | 2391 FX_DOUBLE nPrincipal = ValueToDouble(pThis, argOne.get()); |
2414 FX_DOUBLE nPayment = ValueToDouble(pThis, argTwo.get()); | 2392 FX_DOUBLE nPayment = ValueToDouble(pThis, argTwo.get()); |
2415 FX_DOUBLE nPeriods = ValueToDouble(pThis, argThree.get()); | 2393 FX_DOUBLE nPeriods = ValueToDouble(pThis, argThree.get()); |
2416 if (nPrincipal <= 0 || nPayment <= 0 || nPeriods <= 0) { | 2394 if (nPrincipal <= 0 || nPayment <= 0 || nPeriods <= 0) { |
2417 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2395 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2418 return; | 2396 return; |
2419 } | 2397 } |
2420 | 2398 |
2421 FX_DOUBLE r = | 2399 FX_DOUBLE r = |
2422 2 * (nPeriods * nPayment - nPrincipal) / (nPeriods * nPrincipal); | 2400 2 * (nPeriods * nPayment - nPrincipal) / (nPeriods * nPrincipal); |
2423 FX_DOUBLE nTemp = 1; | 2401 FX_DOUBLE nTemp = 1; |
2424 for (int32_t i = 0; i < nPeriods; ++i) | 2402 for (int32_t i = 0; i < nPeriods; ++i) |
2425 nTemp *= (1 + r); | 2403 nTemp *= (1 + r); |
2426 | 2404 |
2427 FX_DOUBLE nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal; | 2405 FX_DOUBLE nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal; |
2428 while (fabs(nRet) > kFinancialPrecision) { | 2406 while (fabs(nRet) > kFinancialPrecision) { |
2429 FX_DOUBLE nDerivative = | 2407 FX_DOUBLE nDerivative = |
2430 ((nTemp + r * nPeriods * (nTemp / (1 + r))) * (nTemp - 1) - | 2408 ((nTemp + r * nPeriods * (nTemp / (1 + r))) * (nTemp - 1) - |
2431 (r * nTemp * nPeriods * (nTemp / (1 + r)))) / | 2409 (r * nTemp * nPeriods * (nTemp / (1 + r)))) / |
2432 ((nTemp - 1) * (nTemp - 1)); | 2410 ((nTemp - 1) * (nTemp - 1)); |
2433 if (nDerivative == 0) { | 2411 if (nDerivative == 0) { |
2434 FXJSE_Value_SetNull(args.GetReturnValue()); | 2412 args.GetReturnValue()->SetNull(); |
2435 return; | 2413 return; |
2436 } | 2414 } |
2437 | 2415 |
2438 r = r - nRet / nDerivative; | 2416 r = r - nRet / nDerivative; |
2439 nTemp = 1; | 2417 nTemp = 1; |
2440 for (int32_t i = 0; i < nPeriods; ++i) { | 2418 for (int32_t i = 0; i < nPeriods; ++i) { |
2441 nTemp *= (1 + r); | 2419 nTemp *= (1 + r); |
2442 } | 2420 } |
2443 nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal; | 2421 nRet = r * nTemp / (nTemp - 1) - nPayment / nPrincipal; |
2444 } | 2422 } |
2445 FXJSE_Value_SetDouble(args.GetReturnValue(), r * 12); | 2423 args.GetReturnValue()->SetDouble(r * 12); |
2446 } | 2424 } |
2447 | 2425 |
2448 // static | 2426 // static |
2449 void CXFA_FM2JSContext::CTerm(CFXJSE_Value* pThis, | 2427 void CXFA_FM2JSContext::CTerm(CFXJSE_Value* pThis, |
2450 const CFX_ByteStringC& szFuncName, | 2428 const CFX_ByteStringC& szFuncName, |
2451 CFXJSE_Arguments& args) { | 2429 CFXJSE_Arguments& args) { |
2452 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2430 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2453 if (args.GetLength() != 3) { | 2431 if (args.GetLength() != 3) { |
2454 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"CTerm"); | 2432 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"CTerm"); |
2455 return; | 2433 return; |
2456 } | 2434 } |
2457 | 2435 |
2458 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2436 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2459 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2437 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2460 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2438 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2461 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2439 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2462 ValueIsNull(pThis, argThree.get())) { | 2440 ValueIsNull(pThis, argThree.get())) { |
2463 FXJSE_Value_SetNull(args.GetReturnValue()); | 2441 args.GetReturnValue()->SetNull(); |
2464 return; | 2442 return; |
2465 } | 2443 } |
2466 | 2444 |
2467 FX_FLOAT nRate = ValueToFloat(pThis, argOne.get()); | 2445 FX_FLOAT nRate = ValueToFloat(pThis, argOne.get()); |
2468 FX_FLOAT nFutureValue = ValueToFloat(pThis, argTwo.get()); | 2446 FX_FLOAT nFutureValue = ValueToFloat(pThis, argTwo.get()); |
2469 FX_FLOAT nInitAmount = ValueToFloat(pThis, argThree.get()); | 2447 FX_FLOAT nInitAmount = ValueToFloat(pThis, argThree.get()); |
2470 if ((nRate <= 0) || (nFutureValue <= 0) || (nInitAmount <= 0)) { | 2448 if ((nRate <= 0) || (nFutureValue <= 0) || (nInitAmount <= 0)) { |
2471 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2449 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2472 return; | 2450 return; |
2473 } | 2451 } |
2474 | 2452 |
2475 FXJSE_Value_SetFloat(args.GetReturnValue(), | 2453 args.GetReturnValue()->SetFloat( |
2476 FXSYS_log((FX_FLOAT)(nFutureValue / nInitAmount)) / | 2454 FXSYS_log((FX_FLOAT)(nFutureValue / nInitAmount)) / |
2477 FXSYS_log((FX_FLOAT)(1 + nRate))); | 2455 FXSYS_log((FX_FLOAT)(1 + nRate))); |
2478 } | 2456 } |
2479 | 2457 |
2480 // static | 2458 // static |
2481 void CXFA_FM2JSContext::FV(CFXJSE_Value* pThis, | 2459 void CXFA_FM2JSContext::FV(CFXJSE_Value* pThis, |
2482 const CFX_ByteStringC& szFuncName, | 2460 const CFX_ByteStringC& szFuncName, |
2483 CFXJSE_Arguments& args) { | 2461 CFXJSE_Arguments& args) { |
2484 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2462 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2485 if (args.GetLength() != 3) { | 2463 if (args.GetLength() != 3) { |
2486 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"FV"); | 2464 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"FV"); |
2487 return; | 2465 return; |
2488 } | 2466 } |
2489 | 2467 |
2490 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2468 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2491 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2469 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2492 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2470 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2493 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2471 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2494 ValueIsNull(pThis, argThree.get())) { | 2472 ValueIsNull(pThis, argThree.get())) { |
2495 FXJSE_Value_SetNull(args.GetReturnValue()); | 2473 args.GetReturnValue()->SetNull(); |
2496 return; | 2474 return; |
2497 } | 2475 } |
2498 | 2476 |
2499 FX_DOUBLE nAmount = ValueToDouble(pThis, argOne.get()); | 2477 FX_DOUBLE nAmount = ValueToDouble(pThis, argOne.get()); |
2500 FX_DOUBLE nRate = ValueToDouble(pThis, argTwo.get()); | 2478 FX_DOUBLE nRate = ValueToDouble(pThis, argTwo.get()); |
2501 FX_DOUBLE nPeriod = ValueToDouble(pThis, argThree.get()); | 2479 FX_DOUBLE nPeriod = ValueToDouble(pThis, argThree.get()); |
2502 if ((nRate < 0) || (nPeriod <= 0) || (nAmount <= 0)) { | 2480 if ((nRate < 0) || (nPeriod <= 0) || (nAmount <= 0)) { |
2503 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2481 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2504 return; | 2482 return; |
2505 } | 2483 } |
2506 | 2484 |
2507 FX_DOUBLE dResult = 0; | 2485 FX_DOUBLE dResult = 0; |
2508 if (nRate) { | 2486 if (nRate) { |
2509 FX_DOUBLE nTemp = 1; | 2487 FX_DOUBLE nTemp = 1; |
2510 for (int i = 0; i < nPeriod; ++i) { | 2488 for (int i = 0; i < nPeriod; ++i) { |
2511 nTemp *= 1 + nRate; | 2489 nTemp *= 1 + nRate; |
2512 } | 2490 } |
2513 dResult = nAmount * (nTemp - 1) / nRate; | 2491 dResult = nAmount * (nTemp - 1) / nRate; |
2514 } else { | 2492 } else { |
2515 dResult = nAmount * nPeriod; | 2493 dResult = nAmount * nPeriod; |
2516 } | 2494 } |
2517 | 2495 |
2518 FXJSE_Value_SetDouble(args.GetReturnValue(), dResult); | 2496 args.GetReturnValue()->SetDouble(dResult); |
2519 } | 2497 } |
2520 | 2498 |
2521 // static | 2499 // static |
2522 void CXFA_FM2JSContext::IPmt(CFXJSE_Value* pThis, | 2500 void CXFA_FM2JSContext::IPmt(CFXJSE_Value* pThis, |
2523 const CFX_ByteStringC& szFuncName, | 2501 const CFX_ByteStringC& szFuncName, |
2524 CFXJSE_Arguments& args) { | 2502 CFXJSE_Arguments& args) { |
2525 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2503 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2526 if (args.GetLength() != 5) { | 2504 if (args.GetLength() != 5) { |
2527 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"IPmt"); | 2505 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"IPmt"); |
2528 return; | 2506 return; |
2529 } | 2507 } |
2530 | 2508 |
2531 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2509 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2532 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2510 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2533 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2511 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2534 std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, args, 3); | 2512 std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, args, 3); |
2535 std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, args, 4); | 2513 std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, args, 4); |
2536 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2514 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2537 ValueIsNull(pThis, argThree.get()) || ValueIsNull(pThis, argFour.get()) || | 2515 ValueIsNull(pThis, argThree.get()) || ValueIsNull(pThis, argFour.get()) || |
2538 ValueIsNull(pThis, argFive.get())) { | 2516 ValueIsNull(pThis, argFive.get())) { |
2539 FXJSE_Value_SetNull(args.GetReturnValue()); | 2517 args.GetReturnValue()->SetNull(); |
2540 return; | 2518 return; |
2541 } | 2519 } |
2542 | 2520 |
2543 FX_FLOAT nPrincipalAmount = ValueToFloat(pThis, argOne.get()); | 2521 FX_FLOAT nPrincipalAmount = ValueToFloat(pThis, argOne.get()); |
2544 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); | 2522 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); |
2545 FX_FLOAT nPayment = ValueToFloat(pThis, argThree.get()); | 2523 FX_FLOAT nPayment = ValueToFloat(pThis, argThree.get()); |
2546 FX_FLOAT nFirstMonth = ValueToFloat(pThis, argFour.get()); | 2524 FX_FLOAT nFirstMonth = ValueToFloat(pThis, argFour.get()); |
2547 FX_FLOAT nNumberOfMonths = ValueToFloat(pThis, argFive.get()); | 2525 FX_FLOAT nNumberOfMonths = ValueToFloat(pThis, argFive.get()); |
2548 if ((nPrincipalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || | 2526 if ((nPrincipalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || |
2549 (nFirstMonth < 0) || (nNumberOfMonths < 0)) { | 2527 (nFirstMonth < 0) || (nNumberOfMonths < 0)) { |
2550 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2528 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2551 return; | 2529 return; |
2552 } | 2530 } |
2553 | 2531 |
2554 FX_FLOAT nRateOfMonth = nRate / 12; | 2532 FX_FLOAT nRateOfMonth = nRate / 12; |
2555 int32_t iNums = (int32_t)( | 2533 int32_t iNums = (int32_t)( |
2556 (FXSYS_log10((FX_FLOAT)(nPayment / nPrincipalAmount)) - | 2534 (FXSYS_log10((FX_FLOAT)(nPayment / nPrincipalAmount)) - |
2557 FXSYS_log10((FX_FLOAT)(nPayment / nPrincipalAmount - nRateOfMonth))) / | 2535 FXSYS_log10((FX_FLOAT)(nPayment / nPrincipalAmount - nRateOfMonth))) / |
2558 FXSYS_log10((FX_FLOAT)(1 + nRateOfMonth))); | 2536 FXSYS_log10((FX_FLOAT)(1 + nRateOfMonth))); |
2559 int32_t iEnd = std::min((int32_t)(nFirstMonth + nNumberOfMonths - 1), iNums); | 2537 int32_t iEnd = std::min((int32_t)(nFirstMonth + nNumberOfMonths - 1), iNums); |
2560 | 2538 |
2561 if (nPayment < nPrincipalAmount * nRateOfMonth) { | 2539 if (nPayment < nPrincipalAmount * nRateOfMonth) { |
2562 FXJSE_Value_SetFloat(args.GetReturnValue(), 0); | 2540 args.GetReturnValue()->SetFloat(0); |
2563 return; | 2541 return; |
2564 } | 2542 } |
2565 | 2543 |
2566 int32_t i = 0; | 2544 int32_t i = 0; |
2567 for (i = 0; i < nFirstMonth - 1; ++i) | 2545 for (i = 0; i < nFirstMonth - 1; ++i) |
2568 nPrincipalAmount -= nPayment - nPrincipalAmount * nRateOfMonth; | 2546 nPrincipalAmount -= nPayment - nPrincipalAmount * nRateOfMonth; |
2569 | 2547 |
2570 FX_FLOAT nSum = 0; | 2548 FX_FLOAT nSum = 0; |
2571 for (; i < iEnd; ++i) { | 2549 for (; i < iEnd; ++i) { |
2572 nSum += nPrincipalAmount * nRateOfMonth; | 2550 nSum += nPrincipalAmount * nRateOfMonth; |
2573 nPrincipalAmount -= nPayment - nPrincipalAmount * nRateOfMonth; | 2551 nPrincipalAmount -= nPayment - nPrincipalAmount * nRateOfMonth; |
2574 } | 2552 } |
2575 FXJSE_Value_SetFloat(args.GetReturnValue(), nSum); | 2553 args.GetReturnValue()->SetFloat(nSum); |
2576 } | 2554 } |
2577 | 2555 |
2578 // static | 2556 // static |
2579 void CXFA_FM2JSContext::NPV(CFXJSE_Value* pThis, | 2557 void CXFA_FM2JSContext::NPV(CFXJSE_Value* pThis, |
2580 const CFX_ByteStringC& szFuncName, | 2558 const CFX_ByteStringC& szFuncName, |
2581 CFXJSE_Arguments& args) { | 2559 CFXJSE_Arguments& args) { |
2582 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2560 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2583 int32_t argc = args.GetLength(); | 2561 int32_t argc = args.GetLength(); |
2584 if (argc < 3) { | 2562 if (argc < 3) { |
2585 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"NPV"); | 2563 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"NPV"); |
2586 return; | 2564 return; |
2587 } | 2565 } |
2588 | 2566 |
2589 std::vector<std::unique_ptr<CFXJSE_Value>> argValues; | 2567 std::vector<std::unique_ptr<CFXJSE_Value>> argValues; |
2590 for (int32_t i = 0; i < argc; i++) { | 2568 for (int32_t i = 0; i < argc; i++) { |
2591 argValues.push_back(GetSimpleValue(pThis, args, i)); | 2569 argValues.push_back(GetSimpleValue(pThis, args, i)); |
2592 if (ValueIsNull(pThis, argValues[i].get())) { | 2570 if (ValueIsNull(pThis, argValues[i].get())) { |
2593 FXJSE_Value_SetNull(args.GetReturnValue()); | 2571 args.GetReturnValue()->SetNull(); |
2594 return; | 2572 return; |
2595 } | 2573 } |
2596 } | 2574 } |
2597 | 2575 |
2598 FX_DOUBLE nRate = ValueToDouble(pThis, argValues[0].get()); | 2576 FX_DOUBLE nRate = ValueToDouble(pThis, argValues[0].get()); |
2599 if (nRate <= 0) { | 2577 if (nRate <= 0) { |
2600 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2578 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2601 return; | 2579 return; |
2602 } | 2580 } |
2603 | 2581 |
2604 std::vector<FX_DOUBLE> data(argc - 1); | 2582 std::vector<FX_DOUBLE> data(argc - 1); |
2605 for (int32_t i = 1; i < argc; i++) | 2583 for (int32_t i = 1; i < argc; i++) |
2606 data.push_back(ValueToDouble(pThis, argValues[i].get())); | 2584 data.push_back(ValueToDouble(pThis, argValues[i].get())); |
2607 | 2585 |
2608 FX_DOUBLE nSum = 0; | 2586 FX_DOUBLE nSum = 0; |
2609 int32_t iIndex = 0; | 2587 int32_t iIndex = 0; |
2610 for (int32_t i = 0; i < argc - 1; i++) { | 2588 for (int32_t i = 0; i < argc - 1; i++) { |
2611 FX_DOUBLE nTemp = 1; | 2589 FX_DOUBLE nTemp = 1; |
2612 for (int32_t j = 0; j <= i; j++) | 2590 for (int32_t j = 0; j <= i; j++) |
2613 nTemp *= 1 + nRate; | 2591 nTemp *= 1 + nRate; |
2614 | 2592 |
2615 FX_DOUBLE nNum = data[iIndex++]; | 2593 FX_DOUBLE nNum = data[iIndex++]; |
2616 nSum += nNum / nTemp; | 2594 nSum += nNum / nTemp; |
2617 } | 2595 } |
2618 FXJSE_Value_SetDouble(args.GetReturnValue(), nSum); | 2596 args.GetReturnValue()->SetDouble(nSum); |
2619 } | 2597 } |
2620 | 2598 |
2621 // static | 2599 // static |
2622 void CXFA_FM2JSContext::Pmt(CFXJSE_Value* pThis, | 2600 void CXFA_FM2JSContext::Pmt(CFXJSE_Value* pThis, |
2623 const CFX_ByteStringC& szFuncName, | 2601 const CFX_ByteStringC& szFuncName, |
2624 CFXJSE_Arguments& args) { | 2602 CFXJSE_Arguments& args) { |
2625 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2603 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2626 if (args.GetLength() != 3) { | 2604 if (args.GetLength() != 3) { |
2627 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Pmt"); | 2605 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Pmt"); |
2628 return; | 2606 return; |
2629 } | 2607 } |
2630 | 2608 |
2631 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2609 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2632 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2610 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2633 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2611 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2634 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2612 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2635 ValueIsNull(pThis, argThree.get())) { | 2613 ValueIsNull(pThis, argThree.get())) { |
2636 FXJSE_Value_SetNull(args.GetReturnValue()); | 2614 args.GetReturnValue()->SetNull(); |
2637 return; | 2615 return; |
2638 } | 2616 } |
2639 | 2617 |
2640 FX_FLOAT nPrincipal = ValueToFloat(pThis, argOne.get()); | 2618 FX_FLOAT nPrincipal = ValueToFloat(pThis, argOne.get()); |
2641 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); | 2619 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); |
2642 FX_FLOAT nPeriods = ValueToFloat(pThis, argThree.get()); | 2620 FX_FLOAT nPeriods = ValueToFloat(pThis, argThree.get()); |
2643 if ((nPrincipal <= 0) || (nRate <= 0) || (nPeriods <= 0)) { | 2621 if ((nPrincipal <= 0) || (nRate <= 0) || (nPeriods <= 0)) { |
2644 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2622 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2645 return; | 2623 return; |
2646 } | 2624 } |
2647 | 2625 |
2648 FX_FLOAT nTmp = 1 + nRate; | 2626 FX_FLOAT nTmp = 1 + nRate; |
2649 FX_FLOAT nSum = nTmp; | 2627 FX_FLOAT nSum = nTmp; |
2650 for (int32_t i = 0; i < nPeriods - 1; ++i) | 2628 for (int32_t i = 0; i < nPeriods - 1; ++i) |
2651 nSum *= nTmp; | 2629 nSum *= nTmp; |
2652 | 2630 |
2653 FXJSE_Value_SetFloat(args.GetReturnValue(), | 2631 args.GetReturnValue()->SetFloat((nPrincipal * nRate * nSum) / (nSum - 1)); |
2654 (nPrincipal * nRate * nSum) / (nSum - 1)); | |
2655 } | 2632 } |
2656 | 2633 |
2657 // static | 2634 // static |
2658 void CXFA_FM2JSContext::PPmt(CFXJSE_Value* pThis, | 2635 void CXFA_FM2JSContext::PPmt(CFXJSE_Value* pThis, |
2659 const CFX_ByteStringC& szFuncName, | 2636 const CFX_ByteStringC& szFuncName, |
2660 CFXJSE_Arguments& args) { | 2637 CFXJSE_Arguments& args) { |
2661 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2638 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2662 if (args.GetLength() != 5) { | 2639 if (args.GetLength() != 5) { |
2663 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"PPmt"); | 2640 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"PPmt"); |
2664 return; | 2641 return; |
2665 } | 2642 } |
2666 | 2643 |
2667 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2644 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2668 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2645 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2669 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2646 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2670 std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, args, 3); | 2647 std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, args, 3); |
2671 std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, args, 4); | 2648 std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, args, 4); |
2672 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2649 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2673 ValueIsNull(pThis, argThree.get()) || ValueIsNull(pThis, argFour.get()) || | 2650 ValueIsNull(pThis, argThree.get()) || ValueIsNull(pThis, argFour.get()) || |
2674 ValueIsNull(pThis, argFive.get())) { | 2651 ValueIsNull(pThis, argFive.get())) { |
2675 FXJSE_Value_SetNull(args.GetReturnValue()); | 2652 args.GetReturnValue()->SetNull(); |
2676 return; | 2653 return; |
2677 } | 2654 } |
2678 | 2655 |
2679 FX_FLOAT nPrincipalAmount = ValueToFloat(pThis, argOne.get()); | 2656 FX_FLOAT nPrincipalAmount = ValueToFloat(pThis, argOne.get()); |
2680 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); | 2657 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); |
2681 FX_FLOAT nPayment = ValueToFloat(pThis, argThree.get()); | 2658 FX_FLOAT nPayment = ValueToFloat(pThis, argThree.get()); |
2682 FX_FLOAT nFirstMonth = ValueToFloat(pThis, argFour.get()); | 2659 FX_FLOAT nFirstMonth = ValueToFloat(pThis, argFour.get()); |
2683 FX_FLOAT nNumberOfMonths = ValueToFloat(pThis, argFive.get()); | 2660 FX_FLOAT nNumberOfMonths = ValueToFloat(pThis, argFive.get()); |
2684 if ((nPrincipalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || | 2661 if ((nPrincipalAmount <= 0) || (nRate <= 0) || (nPayment <= 0) || |
2685 (nFirstMonth < 0) || (nNumberOfMonths < 0)) { | 2662 (nFirstMonth < 0) || (nNumberOfMonths < 0)) { |
(...skipping 16 matching lines...) Expand all Loading... |
2702 for (i = 0; i < nFirstMonth - 1; ++i) | 2679 for (i = 0; i < nFirstMonth - 1; ++i) |
2703 nPrincipalAmount -= nPayment - nPrincipalAmount * nRateOfMonth; | 2680 nPrincipalAmount -= nPayment - nPrincipalAmount * nRateOfMonth; |
2704 | 2681 |
2705 FX_FLOAT nTemp = 0; | 2682 FX_FLOAT nTemp = 0; |
2706 FX_FLOAT nSum = 0; | 2683 FX_FLOAT nSum = 0; |
2707 for (; i < iEnd; ++i) { | 2684 for (; i < iEnd; ++i) { |
2708 nTemp = nPayment - nPrincipalAmount * nRateOfMonth; | 2685 nTemp = nPayment - nPrincipalAmount * nRateOfMonth; |
2709 nSum += nTemp; | 2686 nSum += nTemp; |
2710 nPrincipalAmount -= nTemp; | 2687 nPrincipalAmount -= nTemp; |
2711 } | 2688 } |
2712 FXJSE_Value_SetFloat(args.GetReturnValue(), nSum); | 2689 args.GetReturnValue()->SetFloat(nSum); |
2713 } | 2690 } |
2714 | 2691 |
2715 // static | 2692 // static |
2716 void CXFA_FM2JSContext::PV(CFXJSE_Value* pThis, | 2693 void CXFA_FM2JSContext::PV(CFXJSE_Value* pThis, |
2717 const CFX_ByteStringC& szFuncName, | 2694 const CFX_ByteStringC& szFuncName, |
2718 CFXJSE_Arguments& args) { | 2695 CFXJSE_Arguments& args) { |
2719 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2696 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2720 if (args.GetLength() != 3) { | 2697 if (args.GetLength() != 3) { |
2721 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"PV"); | 2698 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"PV"); |
2722 return; | 2699 return; |
2723 } | 2700 } |
2724 | 2701 |
2725 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2702 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2726 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2703 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2727 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2704 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2728 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2705 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2729 ValueIsNull(pThis, argThree.get())) { | 2706 ValueIsNull(pThis, argThree.get())) { |
2730 FXJSE_Value_SetNull(args.GetReturnValue()); | 2707 args.GetReturnValue()->SetNull(); |
2731 return; | 2708 return; |
2732 } | 2709 } |
2733 | 2710 |
2734 FX_DOUBLE nAmount = ValueToDouble(pThis, argOne.get()); | 2711 FX_DOUBLE nAmount = ValueToDouble(pThis, argOne.get()); |
2735 FX_DOUBLE nRate = ValueToDouble(pThis, argTwo.get()); | 2712 FX_DOUBLE nRate = ValueToDouble(pThis, argTwo.get()); |
2736 FX_DOUBLE nPeriod = ValueToDouble(pThis, argThree.get()); | 2713 FX_DOUBLE nPeriod = ValueToDouble(pThis, argThree.get()); |
2737 if ((nAmount <= 0) || (nRate < 0) || (nPeriod <= 0)) { | 2714 if ((nAmount <= 0) || (nRate < 0) || (nPeriod <= 0)) { |
2738 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2715 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2739 return; | 2716 return; |
2740 } | 2717 } |
2741 | 2718 |
2742 FX_DOUBLE nTemp = 1; | 2719 FX_DOUBLE nTemp = 1; |
2743 for (int32_t i = 0; i < nPeriod; ++i) | 2720 for (int32_t i = 0; i < nPeriod; ++i) |
2744 nTemp *= 1 + nRate; | 2721 nTemp *= 1 + nRate; |
2745 | 2722 |
2746 nTemp = 1 / nTemp; | 2723 nTemp = 1 / nTemp; |
2747 FXJSE_Value_SetDouble(args.GetReturnValue(), nAmount * ((1 - nTemp) / nRate)); | 2724 args.GetReturnValue()->SetDouble(nAmount * ((1 - nTemp) / nRate)); |
2748 } | 2725 } |
2749 | 2726 |
2750 // static | 2727 // static |
2751 void CXFA_FM2JSContext::Rate(CFXJSE_Value* pThis, | 2728 void CXFA_FM2JSContext::Rate(CFXJSE_Value* pThis, |
2752 const CFX_ByteStringC& szFuncName, | 2729 const CFX_ByteStringC& szFuncName, |
2753 CFXJSE_Arguments& args) { | 2730 CFXJSE_Arguments& args) { |
2754 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2731 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2755 if (args.GetLength() != 3) { | 2732 if (args.GetLength() != 3) { |
2756 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Rate"); | 2733 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Rate"); |
2757 return; | 2734 return; |
2758 } | 2735 } |
2759 | 2736 |
2760 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2737 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2761 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2738 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2762 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2739 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2763 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2740 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2764 ValueIsNull(pThis, argThree.get())) { | 2741 ValueIsNull(pThis, argThree.get())) { |
2765 FXJSE_Value_SetNull(args.GetReturnValue()); | 2742 args.GetReturnValue()->SetNull(); |
2766 return; | 2743 return; |
2767 } | 2744 } |
2768 | 2745 |
2769 FX_FLOAT nFuture = ValueToFloat(pThis, argOne.get()); | 2746 FX_FLOAT nFuture = ValueToFloat(pThis, argOne.get()); |
2770 FX_FLOAT nPresent = ValueToFloat(pThis, argTwo.get()); | 2747 FX_FLOAT nPresent = ValueToFloat(pThis, argTwo.get()); |
2771 FX_FLOAT nTotalNumber = ValueToFloat(pThis, argThree.get()); | 2748 FX_FLOAT nTotalNumber = ValueToFloat(pThis, argThree.get()); |
2772 if ((nFuture <= 0) || (nPresent < 0) || (nTotalNumber <= 0)) { | 2749 if ((nFuture <= 0) || (nPresent < 0) || (nTotalNumber <= 0)) { |
2773 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2750 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2774 return; | 2751 return; |
2775 } | 2752 } |
2776 | 2753 |
2777 FXJSE_Value_SetFloat( | 2754 args.GetReturnValue()->SetFloat( |
2778 args.GetReturnValue(), | 2755 FXSYS_pow((FX_FLOAT)(nFuture / nPresent), (FX_FLOAT)(1 / nTotalNumber)) - |
2779 (FXSYS_pow((FX_FLOAT)(nFuture / nPresent), (FX_FLOAT)(1 / nTotalNumber)) - | 2756 1); |
2780 1)); | |
2781 } | 2757 } |
2782 | 2758 |
2783 // static | 2759 // static |
2784 void CXFA_FM2JSContext::Term(CFXJSE_Value* pThis, | 2760 void CXFA_FM2JSContext::Term(CFXJSE_Value* pThis, |
2785 const CFX_ByteStringC& szFuncName, | 2761 const CFX_ByteStringC& szFuncName, |
2786 CFXJSE_Arguments& args) { | 2762 CFXJSE_Arguments& args) { |
2787 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2763 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2788 if (args.GetLength() != 3) { | 2764 if (args.GetLength() != 3) { |
2789 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Term"); | 2765 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Term"); |
2790 return; | 2766 return; |
2791 } | 2767 } |
2792 | 2768 |
2793 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2769 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2794 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 2770 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
2795 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 2771 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
2796 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || | 2772 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get()) || |
2797 ValueIsNull(pThis, argThree.get())) { | 2773 ValueIsNull(pThis, argThree.get())) { |
2798 FXJSE_Value_SetNull(args.GetReturnValue()); | 2774 args.GetReturnValue()->SetNull(); |
2799 return; | 2775 return; |
2800 } | 2776 } |
2801 | 2777 |
2802 FX_FLOAT nMount = ValueToFloat(pThis, argOne.get()); | 2778 FX_FLOAT nMount = ValueToFloat(pThis, argOne.get()); |
2803 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); | 2779 FX_FLOAT nRate = ValueToFloat(pThis, argTwo.get()); |
2804 FX_FLOAT nFuture = ValueToFloat(pThis, argThree.get()); | 2780 FX_FLOAT nFuture = ValueToFloat(pThis, argThree.get()); |
2805 if ((nMount <= 0) || (nRate <= 0) || (nFuture <= 0)) { | 2781 if ((nMount <= 0) || (nRate <= 0) || (nFuture <= 0)) { |
2806 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 2782 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
2807 return; | 2783 return; |
2808 } | 2784 } |
2809 | 2785 |
2810 FXJSE_Value_SetFloat(args.GetReturnValue(), | 2786 args.GetReturnValue()->SetFloat( |
2811 (FXSYS_log((FX_FLOAT)(nFuture / nMount * nRate) + 1) / | 2787 FXSYS_log((FX_FLOAT)(nFuture / nMount * nRate) + 1) / |
2812 FXSYS_log((FX_FLOAT)(1 + nRate)))); | 2788 FXSYS_log((FX_FLOAT)(1 + nRate))); |
2813 } | 2789 } |
2814 | 2790 |
2815 // static | 2791 // static |
2816 void CXFA_FM2JSContext::Choose(CFXJSE_Value* pThis, | 2792 void CXFA_FM2JSContext::Choose(CFXJSE_Value* pThis, |
2817 const CFX_ByteStringC& szFuncName, | 2793 const CFX_ByteStringC& szFuncName, |
2818 CFXJSE_Arguments& args) { | 2794 CFXJSE_Arguments& args) { |
2819 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2795 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
2820 int32_t argc = args.GetLength(); | 2796 int32_t argc = args.GetLength(); |
2821 if (argc < 2) { | 2797 if (argc < 2) { |
2822 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Choose"); | 2798 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Choose"); |
2823 return; | 2799 return; |
2824 } | 2800 } |
2825 | 2801 |
2826 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 2802 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
2827 if (ValueIsNull(pThis, argOne.get())) { | 2803 if (ValueIsNull(pThis, argOne.get())) { |
2828 FXJSE_Value_SetNull(args.GetReturnValue()); | 2804 args.GetReturnValue()->SetNull(); |
2829 return; | 2805 return; |
2830 } | 2806 } |
2831 | 2807 |
2832 int32_t iIndex = (int32_t)ValueToFloat(pThis, argOne.get()); | 2808 int32_t iIndex = (int32_t)ValueToFloat(pThis, argOne.get()); |
2833 if (iIndex < 1) { | 2809 if (iIndex < 1) { |
2834 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 2810 args.GetReturnValue()->SetString(""); |
2835 return; | 2811 return; |
2836 } | 2812 } |
2837 | 2813 |
2838 FX_BOOL bFound = FALSE; | 2814 FX_BOOL bFound = FALSE; |
2839 FX_BOOL bStopCounterFlags = FALSE; | 2815 FX_BOOL bStopCounterFlags = FALSE; |
2840 int32_t iArgIndex = 1; | 2816 int32_t iArgIndex = 1; |
2841 int32_t iValueIndex = 0; | 2817 int32_t iValueIndex = 0; |
2842 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 2818 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
2843 while (!bFound && !bStopCounterFlags && (iArgIndex < argc)) { | 2819 while (!bFound && !bStopCounterFlags && (iArgIndex < argc)) { |
2844 std::unique_ptr<CFXJSE_Value> argIndexValue = args.GetValue(iArgIndex); | 2820 std::unique_ptr<CFXJSE_Value> argIndexValue = args.GetValue(iArgIndex); |
2845 if (FXJSE_Value_IsArray(argIndexValue.get())) { | 2821 if (FXJSE_Value_IsArray(argIndexValue.get())) { |
2846 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 2822 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
2847 FXJSE_Value_GetObjectProp(argIndexValue.get(), "length", | 2823 argIndexValue->GetObjectProperty("length", lengthValue.get()); |
2848 lengthValue.get()); | 2824 int32_t iLength = lengthValue->ToInteger(); |
2849 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | |
2850 if (iLength > 3) | 2825 if (iLength > 3) |
2851 bStopCounterFlags = TRUE; | 2826 bStopCounterFlags = TRUE; |
2852 | 2827 |
2853 iValueIndex += (iLength - 2); | 2828 iValueIndex += (iLength - 2); |
2854 if (iValueIndex >= iIndex) { | 2829 if (iValueIndex >= iIndex) { |
2855 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 2830 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
2856 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 2831 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
2857 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 2832 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
2858 new CFXJSE_Value(pIsolate)); | 2833 new CFXJSE_Value(pIsolate)); |
2859 FXJSE_Value_GetObjectPropByIdx(argIndexValue.get(), 1, | 2834 argIndexValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
2860 propertyValue.get()); | 2835 argIndexValue->GetObjectPropertyByIdx( |
2861 FXJSE_Value_GetObjectPropByIdx(argIndexValue.get(), | 2836 (iLength - 1) - (iValueIndex - iIndex), jsObjectValue.get()); |
2862 ((iLength - 1) - (iValueIndex - iIndex)), | |
2863 jsObjectValue.get()); | |
2864 if (FXJSE_Value_IsNull(propertyValue.get())) { | 2837 if (FXJSE_Value_IsNull(propertyValue.get())) { |
2865 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 2838 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
2866 } else { | 2839 } else { |
2867 CFX_ByteString propStr; | 2840 CFX_ByteString propStr; |
2868 FXJSE_Value_ToUTF8String(propertyValue.get(), propStr); | 2841 propertyValue->ToString(propStr); |
2869 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propStr.AsStringC(), | 2842 jsObjectValue->GetObjectProperty(propStr.AsStringC(), |
2870 newPropertyValue.get()); | 2843 newPropertyValue.get()); |
2871 } | 2844 } |
2872 CFX_ByteString bsChoosed; | 2845 CFX_ByteString bsChoosed; |
2873 ValueToUTF8String(newPropertyValue.get(), bsChoosed); | 2846 ValueToUTF8String(newPropertyValue.get(), bsChoosed); |
2874 FXJSE_Value_SetUTF8String(args.GetReturnValue(), bsChoosed.AsStringC()); | 2847 args.GetReturnValue()->SetString(bsChoosed.AsStringC()); |
2875 bFound = TRUE; | 2848 bFound = TRUE; |
2876 } | 2849 } |
2877 } else { | 2850 } else { |
2878 iValueIndex++; | 2851 iValueIndex++; |
2879 if (iValueIndex == iIndex) { | 2852 if (iValueIndex == iIndex) { |
2880 CFX_ByteString bsChoosed; | 2853 CFX_ByteString bsChoosed; |
2881 ValueToUTF8String(argIndexValue.get(), bsChoosed); | 2854 ValueToUTF8String(argIndexValue.get(), bsChoosed); |
2882 FXJSE_Value_SetUTF8String(args.GetReturnValue(), bsChoosed.AsStringC()); | 2855 args.GetReturnValue()->SetString(bsChoosed.AsStringC()); |
2883 bFound = TRUE; | 2856 bFound = TRUE; |
2884 } | 2857 } |
2885 } | 2858 } |
2886 iArgIndex++; | 2859 iArgIndex++; |
2887 } | 2860 } |
2888 if (!bFound) | 2861 if (!bFound) |
2889 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 2862 args.GetReturnValue()->SetString(""); |
2890 } | 2863 } |
2891 | 2864 |
2892 // static | 2865 // static |
2893 void CXFA_FM2JSContext::Exists(CFXJSE_Value* pThis, | 2866 void CXFA_FM2JSContext::Exists(CFXJSE_Value* pThis, |
2894 const CFX_ByteStringC& szFuncName, | 2867 const CFX_ByteStringC& szFuncName, |
2895 CFXJSE_Arguments& args) { | 2868 CFXJSE_Arguments& args) { |
2896 if (args.GetLength() != 1) { | 2869 if (args.GetLength() != 1) { |
2897 ToJSContext(pThis, nullptr) | 2870 ToJSContext(pThis, nullptr) |
2898 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Exists"); | 2871 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Exists"); |
2899 return; | 2872 return; |
2900 } | 2873 } |
2901 | 2874 |
2902 FXJSE_Value_SetInteger(args.GetReturnValue(), | 2875 args.GetReturnValue()->SetInteger( |
2903 FXJSE_Value_IsObject(args.GetValue(0).get())); | 2876 FXJSE_Value_IsObject(args.GetValue(0).get())); |
2904 } | 2877 } |
2905 | 2878 |
2906 // static | 2879 // static |
2907 void CXFA_FM2JSContext::HasValue(CFXJSE_Value* pThis, | 2880 void CXFA_FM2JSContext::HasValue(CFXJSE_Value* pThis, |
2908 const CFX_ByteStringC& szFuncName, | 2881 const CFX_ByteStringC& szFuncName, |
2909 CFXJSE_Arguments& args) { | 2882 CFXJSE_Arguments& args) { |
2910 if (args.GetLength() != 1) { | 2883 if (args.GetLength() != 1) { |
2911 ToJSContext(pThis, nullptr) | 2884 ToJSContext(pThis, nullptr) |
2912 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"HasValue"); | 2885 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"HasValue"); |
2913 return; | 2886 return; |
2914 } | 2887 } |
2915 | 2888 |
2916 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2889 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2917 if (!FXJSE_Value_IsUTF8String(argOne.get())) { | 2890 if (!FXJSE_Value_IsUTF8String(argOne.get())) { |
2918 FXJSE_Value_SetInteger(args.GetReturnValue(), | 2891 args.GetReturnValue()->SetInteger(FXJSE_Value_IsNumber(argOne.get()) || |
2919 FXJSE_Value_IsNumber(argOne.get()) || | 2892 FXJSE_Value_IsBoolean(argOne.get())); |
2920 FXJSE_Value_IsBoolean(argOne.get())); | |
2921 return; | 2893 return; |
2922 } | 2894 } |
2923 | 2895 |
2924 CFX_ByteString valueStr; | 2896 CFX_ByteString valueStr; |
2925 FXJSE_Value_ToUTF8String(argOne.get(), valueStr); | 2897 argOne->ToString(valueStr); |
2926 valueStr.TrimLeft(); | 2898 valueStr.TrimLeft(); |
2927 FXJSE_Value_SetInteger(args.GetReturnValue(), (!valueStr.IsEmpty())); | 2899 args.GetReturnValue()->SetInteger(!valueStr.IsEmpty()); |
2928 } | 2900 } |
2929 | 2901 |
2930 // static | 2902 // static |
2931 void CXFA_FM2JSContext::Oneof(CFXJSE_Value* pThis, | 2903 void CXFA_FM2JSContext::Oneof(CFXJSE_Value* pThis, |
2932 const CFX_ByteStringC& szFuncName, | 2904 const CFX_ByteStringC& szFuncName, |
2933 CFXJSE_Arguments& args) { | 2905 CFXJSE_Arguments& args) { |
2934 if (args.GetLength() < 2) { | 2906 if (args.GetLength() < 2) { |
2935 ToJSContext(pThis, nullptr) | 2907 ToJSContext(pThis, nullptr) |
2936 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Oneof"); | 2908 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Oneof"); |
2937 return; | 2909 return; |
2938 } | 2910 } |
2939 | 2911 |
2940 FX_BOOL bFlags = FALSE; | 2912 FX_BOOL bFlags = FALSE; |
2941 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2913 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2942 CFXJSE_Value** parametersValue = nullptr; | 2914 CFXJSE_Value** parametersValue = nullptr; |
2943 int32_t iCount = 0; | 2915 int32_t iCount = 0; |
2944 unfoldArgs(pThis, args, parametersValue, iCount, 1); | 2916 unfoldArgs(pThis, args, parametersValue, iCount, 1); |
2945 for (int32_t i = 0; i < iCount; i++) { | 2917 for (int32_t i = 0; i < iCount; i++) { |
2946 if (simpleValueCompare(pThis, argOne.get(), parametersValue[i])) { | 2918 if (simpleValueCompare(pThis, argOne.get(), parametersValue[i])) { |
2947 bFlags = TRUE; | 2919 bFlags = TRUE; |
2948 break; | 2920 break; |
2949 } | 2921 } |
2950 } | 2922 } |
2951 for (int32_t i = 0; i < iCount; i++) | 2923 for (int32_t i = 0; i < iCount; i++) |
2952 delete parametersValue[i]; | 2924 delete parametersValue[i]; |
2953 FX_Free(parametersValue); | 2925 FX_Free(parametersValue); |
2954 | 2926 |
2955 FXJSE_Value_SetInteger(args.GetReturnValue(), bFlags); | 2927 args.GetReturnValue()->SetInteger(bFlags); |
2956 } | 2928 } |
2957 | 2929 |
2958 // static | 2930 // static |
2959 void CXFA_FM2JSContext::Within(CFXJSE_Value* pThis, | 2931 void CXFA_FM2JSContext::Within(CFXJSE_Value* pThis, |
2960 const CFX_ByteStringC& szFuncName, | 2932 const CFX_ByteStringC& szFuncName, |
2961 CFXJSE_Arguments& args) { | 2933 CFXJSE_Arguments& args) { |
2962 if (args.GetLength() != 3) { | 2934 if (args.GetLength() != 3) { |
2963 ToJSContext(pThis, nullptr) | 2935 ToJSContext(pThis, nullptr) |
2964 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Within"); | 2936 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Within"); |
2965 return; | 2937 return; |
2966 } | 2938 } |
2967 | 2939 |
2968 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 2940 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
2969 if (FXJSE_Value_IsNull(argOne.get())) { | 2941 if (FXJSE_Value_IsNull(argOne.get())) { |
2970 FXJSE_Value_SetUndefined(args.GetReturnValue()); | 2942 args.GetReturnValue()->SetUndefined(); |
2971 return; | 2943 return; |
2972 } | 2944 } |
2973 | 2945 |
2974 std::unique_ptr<CFXJSE_Value> argLow = GetSimpleValue(pThis, args, 1); | 2946 std::unique_ptr<CFXJSE_Value> argLow = GetSimpleValue(pThis, args, 1); |
2975 std::unique_ptr<CFXJSE_Value> argHigh = GetSimpleValue(pThis, args, 2); | 2947 std::unique_ptr<CFXJSE_Value> argHigh = GetSimpleValue(pThis, args, 2); |
2976 if (FXJSE_Value_IsNumber(argOne.get())) { | 2948 if (FXJSE_Value_IsNumber(argOne.get())) { |
2977 FX_FLOAT oneNumber = ValueToFloat(pThis, argOne.get()); | 2949 FX_FLOAT oneNumber = ValueToFloat(pThis, argOne.get()); |
2978 FX_FLOAT lowNumber = ValueToFloat(pThis, argLow.get()); | 2950 FX_FLOAT lowNumber = ValueToFloat(pThis, argLow.get()); |
2979 FX_FLOAT heightNumber = ValueToFloat(pThis, argHigh.get()); | 2951 FX_FLOAT heightNumber = ValueToFloat(pThis, argHigh.get()); |
2980 FXJSE_Value_SetInteger( | 2952 args.GetReturnValue()->SetInteger((oneNumber >= lowNumber) && |
2981 args.GetReturnValue(), | 2953 (oneNumber <= heightNumber)); |
2982 ((oneNumber >= lowNumber) && (oneNumber <= heightNumber))); | |
2983 return; | 2954 return; |
2984 } | 2955 } |
2985 | 2956 |
2986 CFX_ByteString oneString; | 2957 CFX_ByteString oneString; |
2987 CFX_ByteString lowString; | 2958 CFX_ByteString lowString; |
2988 CFX_ByteString heightString; | 2959 CFX_ByteString heightString; |
2989 ValueToUTF8String(argOne.get(), oneString); | 2960 ValueToUTF8String(argOne.get(), oneString); |
2990 ValueToUTF8String(argLow.get(), lowString); | 2961 ValueToUTF8String(argLow.get(), lowString); |
2991 ValueToUTF8String(argHigh.get(), heightString); | 2962 ValueToUTF8String(argHigh.get(), heightString); |
2992 FXJSE_Value_SetInteger(args.GetReturnValue(), | 2963 args.GetReturnValue()->SetInteger( |
2993 ((oneString.Compare(lowString.AsStringC()) >= 0) && | 2964 (oneString.Compare(lowString.AsStringC()) >= 0) && |
2994 (oneString.Compare(heightString.AsStringC()) <= 0))); | 2965 (oneString.Compare(heightString.AsStringC()) <= 0)); |
2995 } | 2966 } |
2996 | 2967 |
2997 // static | 2968 // static |
2998 void CXFA_FM2JSContext::If(CFXJSE_Value* pThis, | 2969 void CXFA_FM2JSContext::If(CFXJSE_Value* pThis, |
2999 const CFX_ByteStringC& szFuncName, | 2970 const CFX_ByteStringC& szFuncName, |
3000 CFXJSE_Arguments& args) { | 2971 CFXJSE_Arguments& args) { |
3001 if (args.GetLength() != 3) { | 2972 if (args.GetLength() != 3) { |
3002 ToJSContext(pThis, nullptr) | 2973 ToJSContext(pThis, nullptr) |
3003 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"If"); | 2974 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"If"); |
3004 return; | 2975 return; |
3005 } | 2976 } |
3006 | 2977 |
3007 FXJSE_Value_Set(args.GetReturnValue(), | 2978 args.GetReturnValue()->Assign(GetSimpleValue(pThis, args, 0)->ToBoolean() |
3008 FXJSE_Value_ToBoolean(GetSimpleValue(pThis, args, 0).get()) | 2979 ? GetSimpleValue(pThis, args, 1).get() |
3009 ? GetSimpleValue(pThis, args, 1).get() | 2980 : GetSimpleValue(pThis, args, 2).get()); |
3010 : GetSimpleValue(pThis, args, 2).get()); | |
3011 } | 2981 } |
3012 | 2982 |
3013 // static | 2983 // static |
3014 void CXFA_FM2JSContext::Eval(CFXJSE_Value* pThis, | 2984 void CXFA_FM2JSContext::Eval(CFXJSE_Value* pThis, |
3015 const CFX_ByteStringC& szFuncName, | 2985 const CFX_ByteStringC& szFuncName, |
3016 CFXJSE_Arguments& args) { | 2986 CFXJSE_Arguments& args) { |
3017 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 2987 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
3018 if (args.GetLength() != 1) { | 2988 if (args.GetLength() != 1) { |
3019 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Eval"); | 2989 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Eval"); |
3020 return; | 2990 return; |
3021 } | 2991 } |
3022 | 2992 |
3023 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 2993 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
3024 std::unique_ptr<CFXJSE_Value> scriptValue = GetSimpleValue(pThis, args, 0); | 2994 std::unique_ptr<CFXJSE_Value> scriptValue = GetSimpleValue(pThis, args, 0); |
3025 CFX_ByteString utf8ScriptString; | 2995 CFX_ByteString utf8ScriptString; |
3026 ValueToUTF8String(scriptValue.get(), utf8ScriptString); | 2996 ValueToUTF8String(scriptValue.get(), utf8ScriptString); |
3027 if (utf8ScriptString.IsEmpty()) { | 2997 if (utf8ScriptString.IsEmpty()) { |
3028 FXJSE_Value_SetNull(args.GetReturnValue()); | 2998 args.GetReturnValue()->SetNull(); |
3029 return; | 2999 return; |
3030 } | 3000 } |
3031 | 3001 |
3032 CFX_WideTextBuf wsJavaScriptBuf; | 3002 CFX_WideTextBuf wsJavaScriptBuf; |
3033 CFX_WideString wsError; | 3003 CFX_WideString wsError; |
3034 CXFA_FM2JSContext::Translate( | 3004 CXFA_FM2JSContext::Translate( |
3035 CFX_WideString::FromUTF8(utf8ScriptString.AsStringC()).AsStringC(), | 3005 CFX_WideString::FromUTF8(utf8ScriptString.AsStringC()).AsStringC(), |
3036 wsJavaScriptBuf, wsError); | 3006 wsJavaScriptBuf, wsError); |
3037 CFXJSE_Context* pNewContext = | 3007 CFXJSE_Context* pNewContext = |
3038 FXJSE_Context_Create(pIsolate, nullptr, nullptr); | 3008 FXJSE_Context_Create(pIsolate, nullptr, nullptr); |
3039 | 3009 |
3040 std::unique_ptr<CFXJSE_Value> returnValue(new CFXJSE_Value(pIsolate)); | 3010 std::unique_ptr<CFXJSE_Value> returnValue(new CFXJSE_Value(pIsolate)); |
3041 CFX_WideString javaScript(wsJavaScriptBuf.AsStringC()); | 3011 CFX_WideString javaScript(wsJavaScriptBuf.AsStringC()); |
3042 FXJSE_ExecuteScript( | 3012 FXJSE_ExecuteScript( |
3043 pNewContext, | 3013 pNewContext, |
3044 FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()).c_str(), | 3014 FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()).c_str(), |
3045 returnValue.get()); | 3015 returnValue.get()); |
3046 | 3016 |
3047 FXJSE_Value_Set(args.GetReturnValue(), returnValue.get()); | 3017 args.GetReturnValue()->Assign(returnValue.get()); |
3048 FXJSE_Context_Release(pNewContext); | 3018 FXJSE_Context_Release(pNewContext); |
3049 } | 3019 } |
3050 | 3020 |
3051 // static | 3021 // static |
3052 void CXFA_FM2JSContext::Ref(CFXJSE_Value* pThis, | 3022 void CXFA_FM2JSContext::Ref(CFXJSE_Value* pThis, |
3053 const CFX_ByteStringC& szFuncName, | 3023 const CFX_ByteStringC& szFuncName, |
3054 CFXJSE_Arguments& args) { | 3024 CFXJSE_Arguments& args) { |
3055 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 3025 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
3056 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 3026 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
3057 if (args.GetLength() != 1) { | 3027 if (args.GetLength() != 1) { |
3058 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Ref"); | 3028 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Ref"); |
3059 return; | 3029 return; |
3060 } | 3030 } |
3061 | 3031 |
3062 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 3032 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
3063 if (!FXJSE_Value_IsArray(argOne.get()) && | 3033 if (!FXJSE_Value_IsArray(argOne.get()) && |
3064 !FXJSE_Value_IsObject(argOne.get()) && | 3034 !FXJSE_Value_IsObject(argOne.get()) && |
3065 !FXJSE_Value_IsBoolean(argOne.get()) && | 3035 !FXJSE_Value_IsBoolean(argOne.get()) && |
3066 !FXJSE_Value_IsUTF8String(argOne.get()) && | 3036 !FXJSE_Value_IsUTF8String(argOne.get()) && |
3067 !FXJSE_Value_IsNull(argOne.get()) && | 3037 !FXJSE_Value_IsNull(argOne.get()) && |
3068 !FXJSE_Value_IsNumber(argOne.get())) { | 3038 !FXJSE_Value_IsNumber(argOne.get())) { |
3069 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 3039 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
3070 return; | 3040 return; |
3071 } | 3041 } |
3072 | 3042 |
3073 if (FXJSE_Value_IsBoolean(argOne.get()) || | 3043 if (FXJSE_Value_IsBoolean(argOne.get()) || |
3074 FXJSE_Value_IsUTF8String(argOne.get()) || | 3044 FXJSE_Value_IsUTF8String(argOne.get()) || |
3075 FXJSE_Value_IsNumber(argOne.get())) { | 3045 FXJSE_Value_IsNumber(argOne.get())) { |
3076 FXJSE_Value_Set(args.GetReturnValue(), argOne.get()); | 3046 args.GetReturnValue()->Assign(argOne.get()); |
3077 return; | 3047 return; |
3078 } | 3048 } |
3079 | 3049 |
3080 CFXJSE_Value* rgValues[3]; | 3050 CFXJSE_Value* rgValues[3]; |
3081 for (int32_t i = 0; i < 3; i++) | 3051 for (int32_t i = 0; i < 3; i++) |
3082 rgValues[i] = new CFXJSE_Value(pIsolate); | 3052 rgValues[i] = new CFXJSE_Value(pIsolate); |
3083 | 3053 |
3084 int intVal = 3; | 3054 int intVal = 3; |
3085 if (FXJSE_Value_IsNull(argOne.get())) { | 3055 if (FXJSE_Value_IsNull(argOne.get())) { |
3086 intVal = 4; | 3056 intVal = 4; |
3087 FXJSE_Value_SetNull(rgValues[2]); | 3057 rgValues[2]->SetNull(); |
3088 } else if (FXJSE_Value_IsArray(argOne.get())) { | 3058 } else if (FXJSE_Value_IsArray(argOne.get())) { |
3089 #ifndef NDEBUG | 3059 #ifndef NDEBUG |
3090 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 3060 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
3091 FXJSE_Value_GetObjectProp(argOne.get(), "length", lengthValue.get()); | 3061 argOne->GetObjectProperty("length", lengthValue.get()); |
3092 ASSERT(FXJSE_Value_ToInteger(lengthValue.get()) >= 3); | 3062 ASSERT(lengthValue->ToInteger() >= 3); |
3093 #endif | 3063 #endif |
3094 | 3064 |
3095 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 3065 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
3096 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 3066 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
3097 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 1, propertyValue.get()); | 3067 argOne->GetObjectPropertyByIdx(1, propertyValue.get()); |
3098 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 2, jsObjectValue.get()); | 3068 argOne->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
3099 if (!FXJSE_Value_IsNull(propertyValue.get()) || | 3069 if (!FXJSE_Value_IsNull(propertyValue.get()) || |
3100 FXJSE_Value_IsNull(jsObjectValue.get())) { | 3070 FXJSE_Value_IsNull(jsObjectValue.get())) { |
3101 for (int32_t i = 0; i < 3; i++) | 3071 for (int32_t i = 0; i < 3; i++) |
3102 delete rgValues[i]; | 3072 delete rgValues[i]; |
3103 | 3073 |
3104 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 3074 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
3105 return; | 3075 return; |
3106 } | 3076 } |
3107 | 3077 |
3108 FXJSE_Value_Set(rgValues[2], jsObjectValue.get()); | 3078 rgValues[2]->Assign(jsObjectValue.get()); |
3109 } else if (FXJSE_Value_IsObject(argOne.get())) { | 3079 } else if (FXJSE_Value_IsObject(argOne.get())) { |
3110 FXJSE_Value_Set(rgValues[2], argOne.get()); | 3080 rgValues[2]->Assign(argOne.get()); |
3111 } | 3081 } |
3112 | 3082 |
3113 FXJSE_Value_SetInteger(rgValues[0], intVal); | 3083 rgValues[0]->SetInteger(intVal); |
3114 FXJSE_Value_SetNull(rgValues[1]); | 3084 rgValues[1]->SetNull(); |
3115 FXJSE_Value_SetArray(args.GetReturnValue(), 3, rgValues); | 3085 args.GetReturnValue()->SetArray(3, rgValues); |
3116 | 3086 |
3117 for (int32_t i = 0; i < 3; i++) | 3087 for (int32_t i = 0; i < 3; i++) |
3118 delete rgValues[i]; | 3088 delete rgValues[i]; |
3119 } | 3089 } |
3120 | 3090 |
3121 // static | 3091 // static |
3122 void CXFA_FM2JSContext::UnitType(CFXJSE_Value* pThis, | 3092 void CXFA_FM2JSContext::UnitType(CFXJSE_Value* pThis, |
3123 const CFX_ByteStringC& szFuncName, | 3093 const CFX_ByteStringC& szFuncName, |
3124 CFXJSE_Arguments& args) { | 3094 CFXJSE_Arguments& args) { |
3125 if (args.GetLength() != 1) { | 3095 if (args.GetLength() != 1) { |
3126 ToJSContext(pThis, nullptr) | 3096 ToJSContext(pThis, nullptr) |
3127 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"UnitType"); | 3097 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"UnitType"); |
3128 return; | 3098 return; |
3129 } | 3099 } |
3130 | 3100 |
3131 std::unique_ptr<CFXJSE_Value> unitspanValue = GetSimpleValue(pThis, args, 0); | 3101 std::unique_ptr<CFXJSE_Value> unitspanValue = GetSimpleValue(pThis, args, 0); |
3132 if (FXJSE_Value_IsNull(unitspanValue.get())) { | 3102 if (FXJSE_Value_IsNull(unitspanValue.get())) { |
3133 FXJSE_Value_SetNull(args.GetReturnValue()); | 3103 args.GetReturnValue()->SetNull(); |
3134 return; | 3104 return; |
3135 } | 3105 } |
3136 | 3106 |
3137 CFX_ByteString unitspanString; | 3107 CFX_ByteString unitspanString; |
3138 ValueToUTF8String(unitspanValue.get(), unitspanString); | 3108 ValueToUTF8String(unitspanValue.get(), unitspanString); |
3139 if (unitspanString.IsEmpty()) { | 3109 if (unitspanString.IsEmpty()) { |
3140 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "in"); | 3110 args.GetReturnValue()->SetString("in"); |
3141 return; | 3111 return; |
3142 } | 3112 } |
3143 | 3113 |
3144 enum XFA_FM2JS_VALUETYPE_ParserStatus { | 3114 enum XFA_FM2JS_VALUETYPE_ParserStatus { |
3145 VALUETYPE_START, | 3115 VALUETYPE_START, |
3146 VALUETYPE_HAVEINVALIDCHAR, | 3116 VALUETYPE_HAVEINVALIDCHAR, |
3147 VALUETYPE_HAVEDIGIT, | 3117 VALUETYPE_HAVEDIGIT, |
3148 VALUETYPE_HAVEDIGITWHITE, | 3118 VALUETYPE_HAVEDIGITWHITE, |
3149 VALUETYPE_ISCM, | 3119 VALUETYPE_ISCM, |
3150 VALUETYPE_ISMM, | 3120 VALUETYPE_ISMM, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3207 } | 3177 } |
3208 break; | 3178 break; |
3209 } | 3179 } |
3210 } else { | 3180 } else { |
3211 eParserStatus = VALUETYPE_HAVEINVALIDCHAR; | 3181 eParserStatus = VALUETYPE_HAVEINVALIDCHAR; |
3212 } | 3182 } |
3213 u++; | 3183 u++; |
3214 } | 3184 } |
3215 switch (eParserStatus) { | 3185 switch (eParserStatus) { |
3216 case VALUETYPE_ISCM: | 3186 case VALUETYPE_ISCM: |
3217 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "cm"); | 3187 args.GetReturnValue()->SetString("cm"); |
3218 break; | 3188 break; |
3219 case VALUETYPE_ISMM: | 3189 case VALUETYPE_ISMM: |
3220 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "mm"); | 3190 args.GetReturnValue()->SetString("mm"); |
3221 break; | 3191 break; |
3222 case VALUETYPE_ISPT: | 3192 case VALUETYPE_ISPT: |
3223 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "pt"); | 3193 args.GetReturnValue()->SetString("pt"); |
3224 break; | 3194 break; |
3225 case VALUETYPE_ISMP: | 3195 case VALUETYPE_ISMP: |
3226 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "mp"); | 3196 args.GetReturnValue()->SetString("mp"); |
3227 break; | 3197 break; |
3228 default: | 3198 default: |
3229 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "in"); | 3199 args.GetReturnValue()->SetString("in"); |
3230 break; | 3200 break; |
3231 } | 3201 } |
3232 } | 3202 } |
3233 | 3203 |
3234 // static | 3204 // static |
3235 void CXFA_FM2JSContext::UnitValue(CFXJSE_Value* pThis, | 3205 void CXFA_FM2JSContext::UnitValue(CFXJSE_Value* pThis, |
3236 const CFX_ByteStringC& szFuncName, | 3206 const CFX_ByteStringC& szFuncName, |
3237 CFXJSE_Arguments& args) { | 3207 CFXJSE_Arguments& args) { |
3238 int32_t argc = args.GetLength(); | 3208 int32_t argc = args.GetLength(); |
3239 if (argc < 1 || argc > 2) { | 3209 if (argc < 1 || argc > 2) { |
3240 ToJSContext(pThis, nullptr) | 3210 ToJSContext(pThis, nullptr) |
3241 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"UnitValue"); | 3211 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"UnitValue"); |
3242 return; | 3212 return; |
3243 } | 3213 } |
3244 | 3214 |
3245 std::unique_ptr<CFXJSE_Value> unitspanValue = GetSimpleValue(pThis, args, 0); | 3215 std::unique_ptr<CFXJSE_Value> unitspanValue = GetSimpleValue(pThis, args, 0); |
3246 if (FXJSE_Value_IsNull(unitspanValue.get())) { | 3216 if (FXJSE_Value_IsNull(unitspanValue.get())) { |
3247 FXJSE_Value_SetNull(args.GetReturnValue()); | 3217 args.GetReturnValue()->SetNull(); |
3248 return; | 3218 return; |
3249 } | 3219 } |
3250 | 3220 |
3251 CFX_ByteString unitspanString; | 3221 CFX_ByteString unitspanString; |
3252 ValueToUTF8String(unitspanValue.get(), unitspanString); | 3222 ValueToUTF8String(unitspanValue.get(), unitspanString); |
3253 const FX_CHAR* pData = unitspanString.c_str(); | 3223 const FX_CHAR* pData = unitspanString.c_str(); |
3254 if (!pData) { | 3224 if (!pData) { |
3255 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 3225 args.GetReturnValue()->SetInteger(0); |
3256 return; | 3226 return; |
3257 } | 3227 } |
3258 | 3228 |
3259 int32_t u = 0; | 3229 int32_t u = 0; |
3260 while (IsWhitespace(pData[u])) | 3230 while (IsWhitespace(pData[u])) |
3261 ++u; | 3231 ++u; |
3262 | 3232 |
3263 while (u < unitspanString.GetLength()) { | 3233 while (u < unitspanString.GetLength()) { |
3264 if ((pData[u] > '9' || pData[u] < '0') && pData[u] != '.' && | 3234 if ((pData[u] > '9' || pData[u] < '0') && pData[u] != '.' && |
3265 pData[u] != '-') { | 3235 pData[u] != '-') { |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3366 dResult = dFirstNumber / 72000 * 25.4; | 3336 dResult = dFirstNumber / 72000 * 25.4; |
3367 else if (strUnit == "cm" || strUnit == "centimeters") | 3337 else if (strUnit == "cm" || strUnit == "centimeters") |
3368 dResult = dFirstNumber / 72000 * 2.54; | 3338 dResult = dFirstNumber / 72000 * 2.54; |
3369 else if (strUnit == "pt" || strUnit == "points") | 3339 else if (strUnit == "pt" || strUnit == "points") |
3370 dResult = dFirstNumber / 1000; | 3340 dResult = dFirstNumber / 1000; |
3371 else if (strUnit == "mp" || strUnit == "millipoints") | 3341 else if (strUnit == "mp" || strUnit == "millipoints") |
3372 dResult = dFirstNumber; | 3342 dResult = dFirstNumber; |
3373 else | 3343 else |
3374 dResult = dFirstNumber / 72000; | 3344 dResult = dFirstNumber / 72000; |
3375 } | 3345 } |
3376 FXJSE_Value_SetDouble(args.GetReturnValue(), dResult); | 3346 args.GetReturnValue()->SetDouble(dResult); |
3377 } | 3347 } |
3378 | 3348 |
3379 // static | 3349 // static |
3380 void CXFA_FM2JSContext::At(CFXJSE_Value* pThis, | 3350 void CXFA_FM2JSContext::At(CFXJSE_Value* pThis, |
3381 const CFX_ByteStringC& szFuncName, | 3351 const CFX_ByteStringC& szFuncName, |
3382 CFXJSE_Arguments& args) { | 3352 CFXJSE_Arguments& args) { |
3383 if (args.GetLength() != 2) { | 3353 if (args.GetLength() != 2) { |
3384 ToJSContext(pThis, nullptr) | 3354 ToJSContext(pThis, nullptr) |
3385 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"At"); | 3355 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"At"); |
3386 return; | 3356 return; |
3387 } | 3357 } |
3388 | 3358 |
3389 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 3359 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
3390 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 3360 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
3391 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) { | 3361 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) { |
3392 FXJSE_Value_SetNull(args.GetReturnValue()); | 3362 args.GetReturnValue()->SetNull(); |
3393 return; | 3363 return; |
3394 } | 3364 } |
3395 | 3365 |
3396 CFX_ByteString stringTwo; | 3366 CFX_ByteString stringTwo; |
3397 ValueToUTF8String(argTwo.get(), stringTwo); | 3367 ValueToUTF8String(argTwo.get(), stringTwo); |
3398 if (stringTwo.IsEmpty()) { | 3368 if (stringTwo.IsEmpty()) { |
3399 FXJSE_Value_SetInteger(args.GetReturnValue(), 1); | 3369 args.GetReturnValue()->SetInteger(1); |
3400 return; | 3370 return; |
3401 } | 3371 } |
3402 | 3372 |
3403 CFX_ByteString stringOne; | 3373 CFX_ByteString stringOne; |
3404 ValueToUTF8String(argOne.get(), stringOne); | 3374 ValueToUTF8String(argOne.get(), stringOne); |
3405 FX_STRSIZE iPosition = stringOne.Find(stringTwo.AsStringC()); | 3375 FX_STRSIZE iPosition = stringOne.Find(stringTwo.AsStringC()); |
3406 FXJSE_Value_SetInteger(args.GetReturnValue(), iPosition + 1); | 3376 args.GetReturnValue()->SetInteger(iPosition + 1); |
3407 } | 3377 } |
3408 | 3378 |
3409 // static | 3379 // static |
3410 void CXFA_FM2JSContext::Concat(CFXJSE_Value* pThis, | 3380 void CXFA_FM2JSContext::Concat(CFXJSE_Value* pThis, |
3411 const CFX_ByteStringC& szFuncName, | 3381 const CFX_ByteStringC& szFuncName, |
3412 CFXJSE_Arguments& args) { | 3382 CFXJSE_Arguments& args) { |
3413 int32_t argc = args.GetLength(); | 3383 int32_t argc = args.GetLength(); |
3414 if (argc < 1) { | 3384 if (argc < 1) { |
3415 ToJSContext(pThis, nullptr) | 3385 ToJSContext(pThis, nullptr) |
3416 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Concat"); | 3386 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Concat"); |
3417 return; | 3387 return; |
3418 } | 3388 } |
3419 | 3389 |
3420 CFX_ByteString resultString; | 3390 CFX_ByteString resultString; |
3421 FX_BOOL bAllNull = TRUE; | 3391 FX_BOOL bAllNull = TRUE; |
3422 for (int32_t i = 0; i < argc; i++) { | 3392 for (int32_t i = 0; i < argc; i++) { |
3423 std::unique_ptr<CFXJSE_Value> value = GetSimpleValue(pThis, args, i); | 3393 std::unique_ptr<CFXJSE_Value> value = GetSimpleValue(pThis, args, i); |
3424 if (ValueIsNull(pThis, value.get())) | 3394 if (ValueIsNull(pThis, value.get())) |
3425 continue; | 3395 continue; |
3426 | 3396 |
3427 bAllNull = FALSE; | 3397 bAllNull = FALSE; |
3428 | 3398 |
3429 CFX_ByteString valueStr; | 3399 CFX_ByteString valueStr; |
3430 ValueToUTF8String(value.get(), valueStr); | 3400 ValueToUTF8String(value.get(), valueStr); |
3431 resultString += valueStr; | 3401 resultString += valueStr; |
3432 } | 3402 } |
3433 | 3403 |
3434 if (bAllNull) { | 3404 if (bAllNull) { |
3435 FXJSE_Value_SetNull(args.GetReturnValue()); | 3405 args.GetReturnValue()->SetNull(); |
3436 return; | 3406 return; |
3437 } | 3407 } |
3438 | 3408 |
3439 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultString.AsStringC()); | 3409 args.GetReturnValue()->SetString(resultString.AsStringC()); |
3440 } | 3410 } |
3441 | 3411 |
3442 // static | 3412 // static |
3443 void CXFA_FM2JSContext::Decode(CFXJSE_Value* pThis, | 3413 void CXFA_FM2JSContext::Decode(CFXJSE_Value* pThis, |
3444 const CFX_ByteStringC& szFuncName, | 3414 const CFX_ByteStringC& szFuncName, |
3445 CFXJSE_Arguments& args) { | 3415 CFXJSE_Arguments& args) { |
3446 int32_t argc = args.GetLength(); | 3416 int32_t argc = args.GetLength(); |
3447 if (argc < 1 || argc > 2) { | 3417 if (argc < 1 || argc > 2) { |
3448 ToJSContext(pThis, nullptr) | 3418 ToJSContext(pThis, nullptr) |
3449 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Decode"); | 3419 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Decode"); |
3450 return; | 3420 return; |
3451 } | 3421 } |
3452 | 3422 |
3453 if (argc == 1) { | 3423 if (argc == 1) { |
3454 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 3424 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
3455 if (ValueIsNull(pThis, argOne.get())) { | 3425 if (ValueIsNull(pThis, argOne.get())) { |
3456 FXJSE_Value_SetNull(args.GetReturnValue()); | 3426 args.GetReturnValue()->SetNull(); |
3457 return; | 3427 return; |
3458 } | 3428 } |
3459 | 3429 |
3460 CFX_ByteString toDecodeString; | 3430 CFX_ByteString toDecodeString; |
3461 ValueToUTF8String(argOne.get(), toDecodeString); | 3431 ValueToUTF8String(argOne.get(), toDecodeString); |
3462 CFX_ByteTextBuf resultBuf; | 3432 CFX_ByteTextBuf resultBuf; |
3463 DecodeURL(toDecodeString.AsStringC(), resultBuf); | 3433 DecodeURL(toDecodeString.AsStringC(), resultBuf); |
3464 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultBuf.AsStringC()); | 3434 args.GetReturnValue()->SetString(resultBuf.AsStringC()); |
3465 return; | 3435 return; |
3466 } | 3436 } |
3467 | 3437 |
3468 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 3438 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
3469 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 3439 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
3470 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) { | 3440 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) { |
3471 FXJSE_Value_SetNull(args.GetReturnValue()); | 3441 args.GetReturnValue()->SetNull(); |
3472 return; | 3442 return; |
3473 } | 3443 } |
3474 | 3444 |
3475 CFX_ByteString toDecodeString; | 3445 CFX_ByteString toDecodeString; |
3476 ValueToUTF8String(argOne.get(), toDecodeString); | 3446 ValueToUTF8String(argOne.get(), toDecodeString); |
3477 | 3447 |
3478 CFX_ByteString identifyString; | 3448 CFX_ByteString identifyString; |
3479 ValueToUTF8String(argTwo.get(), identifyString); | 3449 ValueToUTF8String(argTwo.get(), identifyString); |
3480 | 3450 |
3481 CFX_ByteTextBuf resultBuf; | 3451 CFX_ByteTextBuf resultBuf; |
3482 if (identifyString.EqualNoCase("html")) | 3452 if (identifyString.EqualNoCase("html")) |
3483 DecodeHTML(toDecodeString.AsStringC(), resultBuf); | 3453 DecodeHTML(toDecodeString.AsStringC(), resultBuf); |
3484 else if (identifyString.EqualNoCase("xml")) | 3454 else if (identifyString.EqualNoCase("xml")) |
3485 DecodeXML(toDecodeString.AsStringC(), resultBuf); | 3455 DecodeXML(toDecodeString.AsStringC(), resultBuf); |
3486 else | 3456 else |
3487 DecodeURL(toDecodeString.AsStringC(), resultBuf); | 3457 DecodeURL(toDecodeString.AsStringC(), resultBuf); |
3488 | 3458 |
3489 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultBuf.AsStringC()); | 3459 args.GetReturnValue()->SetString(resultBuf.AsStringC()); |
3490 } | 3460 } |
3491 | 3461 |
3492 // static | 3462 // static |
3493 void CXFA_FM2JSContext::DecodeURL(const CFX_ByteStringC& szURLString, | 3463 void CXFA_FM2JSContext::DecodeURL(const CFX_ByteStringC& szURLString, |
3494 CFX_ByteTextBuf& szResultString) { | 3464 CFX_ByteTextBuf& szResultString) { |
3495 CFX_WideString wsURLString = CFX_WideString::FromUTF8(szURLString); | 3465 CFX_WideString wsURLString = CFX_WideString::FromUTF8(szURLString); |
3496 const FX_WCHAR* pData = wsURLString.c_str(); | 3466 const FX_WCHAR* pData = wsURLString.c_str(); |
3497 int32_t i = 0; | 3467 int32_t i = 0; |
3498 CFX_WideTextBuf wsResultBuf; | 3468 CFX_WideTextBuf wsResultBuf; |
3499 while (i < wsURLString.GetLength()) { | 3469 while (i < wsURLString.GetLength()) { |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3715 } | 3685 } |
3716 | 3686 |
3717 // static | 3687 // static |
3718 void CXFA_FM2JSContext::Encode(CFXJSE_Value* pThis, | 3688 void CXFA_FM2JSContext::Encode(CFXJSE_Value* pThis, |
3719 const CFX_ByteStringC& szFuncName, | 3689 const CFX_ByteStringC& szFuncName, |
3720 CFXJSE_Arguments& args) { | 3690 CFXJSE_Arguments& args) { |
3721 int32_t argc = args.GetLength(); | 3691 int32_t argc = args.GetLength(); |
3722 if (argc == 1) { | 3692 if (argc == 1) { |
3723 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 3693 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
3724 if (ValueIsNull(pThis, argOne.get())) { | 3694 if (ValueIsNull(pThis, argOne.get())) { |
3725 FXJSE_Value_SetNull(args.GetReturnValue()); | 3695 args.GetReturnValue()->SetNull(); |
3726 } else { | 3696 } else { |
3727 CFX_ByteString toEncodeString; | 3697 CFX_ByteString toEncodeString; |
3728 ValueToUTF8String(argOne.get(), toEncodeString); | 3698 ValueToUTF8String(argOne.get(), toEncodeString); |
3729 CFX_ByteTextBuf resultBuf; | 3699 CFX_ByteTextBuf resultBuf; |
3730 EncodeURL(toEncodeString.AsStringC(), resultBuf); | 3700 EncodeURL(toEncodeString.AsStringC(), resultBuf); |
3731 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultBuf.AsStringC()); | 3701 args.GetReturnValue()->SetString(resultBuf.AsStringC()); |
3732 } | 3702 } |
3733 } else if (argc == 2) { | 3703 } else if (argc == 2) { |
3734 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 3704 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
3735 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 3705 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
3736 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) { | 3706 if (ValueIsNull(pThis, argOne.get()) || ValueIsNull(pThis, argTwo.get())) { |
3737 FXJSE_Value_SetNull(args.GetReturnValue()); | 3707 args.GetReturnValue()->SetNull(); |
3738 } else { | 3708 } else { |
3739 CFX_ByteString toEncodeString; | 3709 CFX_ByteString toEncodeString; |
3740 ValueToUTF8String(argOne.get(), toEncodeString); | 3710 ValueToUTF8String(argOne.get(), toEncodeString); |
3741 CFX_ByteString identifyString; | 3711 CFX_ByteString identifyString; |
3742 ValueToUTF8String(argTwo.get(), identifyString); | 3712 ValueToUTF8String(argTwo.get(), identifyString); |
3743 CFX_ByteTextBuf resultBuf; | 3713 CFX_ByteTextBuf resultBuf; |
3744 if (identifyString.EqualNoCase("html")) { | 3714 if (identifyString.EqualNoCase("html")) { |
3745 EncodeHTML(toEncodeString.AsStringC(), resultBuf); | 3715 EncodeHTML(toEncodeString.AsStringC(), resultBuf); |
3746 } else if (identifyString.EqualNoCase("xml")) { | 3716 } else if (identifyString.EqualNoCase("xml")) { |
3747 EncodeXML(toEncodeString.AsStringC(), resultBuf); | 3717 EncodeXML(toEncodeString.AsStringC(), resultBuf); |
3748 } else { | 3718 } else { |
3749 EncodeURL(toEncodeString.AsStringC(), resultBuf); | 3719 EncodeURL(toEncodeString.AsStringC(), resultBuf); |
3750 } | 3720 } |
3751 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultBuf.AsStringC()); | 3721 args.GetReturnValue()->SetString(resultBuf.AsStringC()); |
3752 } | 3722 } |
3753 } else { | 3723 } else { |
3754 ToJSContext(pThis, nullptr) | 3724 ToJSContext(pThis, nullptr) |
3755 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Encode"); | 3725 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Encode"); |
3756 } | 3726 } |
3757 } | 3727 } |
3758 | 3728 |
3759 // static | 3729 // static |
3760 void CXFA_FM2JSContext::EncodeURL(const CFX_ByteStringC& szURLString, | 3730 void CXFA_FM2JSContext::EncodeURL(const CFX_ByteStringC& szURLString, |
3761 CFX_ByteTextBuf& szResultBuf) { | 3731 CFX_ByteTextBuf& szResultBuf) { |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4113 patternType = XFA_VT_TEXT; | 4083 patternType = XFA_VT_TEXT; |
4114 } | 4084 } |
4115 } break; | 4085 } break; |
4116 } | 4086 } |
4117 } | 4087 } |
4118 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, | 4088 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, |
4119 (CXFA_LocaleMgr*)pMgr); | 4089 (CXFA_LocaleMgr*)pMgr); |
4120 CFX_WideString wsRet; | 4090 CFX_WideString wsRet; |
4121 if (localeValue.FormatPatterns(wsRet, wsPattern, pLocale, | 4091 if (localeValue.FormatPatterns(wsRet, wsPattern, pLocale, |
4122 XFA_VALUEPICTURE_Display)) { | 4092 XFA_VALUEPICTURE_Display)) { |
4123 FXJSE_Value_SetUTF8String( | 4093 args.GetReturnValue()->SetString( |
4124 args.GetReturnValue(), | |
4125 FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()).AsStringC()); | 4094 FX_UTF8Encode(wsRet.c_str(), wsRet.GetLength()).AsStringC()); |
4126 } else { | 4095 } else { |
4127 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4096 args.GetReturnValue()->SetString(""); |
4128 } | 4097 } |
4129 } else { | 4098 } else { |
4130 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Format"); | 4099 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Format"); |
4131 } | 4100 } |
4132 } | 4101 } |
4133 | 4102 |
4134 // static | 4103 // static |
4135 void CXFA_FM2JSContext::Left(CFXJSE_Value* pThis, | 4104 void CXFA_FM2JSContext::Left(CFXJSE_Value* pThis, |
4136 const CFX_ByteStringC& szFuncName, | 4105 const CFX_ByteStringC& szFuncName, |
4137 CFXJSE_Arguments& args) { | 4106 CFXJSE_Arguments& args) { |
4138 if (args.GetLength() == 2) { | 4107 if (args.GetLength() == 2) { |
4139 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4108 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4140 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 4109 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
4141 FX_BOOL argIsNull = FALSE; | 4110 FX_BOOL argIsNull = FALSE; |
4142 if ((ValueIsNull(pThis, argOne.get())) || | 4111 if ((ValueIsNull(pThis, argOne.get())) || |
4143 (ValueIsNull(pThis, argTwo.get()))) { | 4112 (ValueIsNull(pThis, argTwo.get()))) { |
4144 argIsNull = TRUE; | 4113 argIsNull = TRUE; |
4145 } | 4114 } |
4146 if (argIsNull) { | 4115 if (argIsNull) { |
4147 FXJSE_Value_SetNull(args.GetReturnValue()); | 4116 args.GetReturnValue()->SetNull(); |
4148 } else { | 4117 } else { |
4149 CFX_ByteString sourceString; | 4118 CFX_ByteString sourceString; |
4150 ValueToUTF8String(argOne.get(), sourceString); | 4119 ValueToUTF8String(argOne.get(), sourceString); |
4151 int32_t count = ValueToInteger(pThis, argTwo.get()); | 4120 int32_t count = ValueToInteger(pThis, argTwo.get()); |
4152 if (count < 0) { | 4121 if (count < 0) { |
4153 count = 0; | 4122 count = 0; |
4154 } | 4123 } |
4155 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4124 args.GetReturnValue()->SetString(sourceString.Left(count).AsStringC()); |
4156 sourceString.Left(count).AsStringC()); | |
4157 } | 4125 } |
4158 } else { | 4126 } else { |
4159 ToJSContext(pThis, nullptr) | 4127 ToJSContext(pThis, nullptr) |
4160 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Left"); | 4128 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Left"); |
4161 } | 4129 } |
4162 } | 4130 } |
4163 | 4131 |
4164 // static | 4132 // static |
4165 void CXFA_FM2JSContext::Len(CFXJSE_Value* pThis, | 4133 void CXFA_FM2JSContext::Len(CFXJSE_Value* pThis, |
4166 const CFX_ByteStringC& szFuncName, | 4134 const CFX_ByteStringC& szFuncName, |
4167 CFXJSE_Arguments& args) { | 4135 CFXJSE_Arguments& args) { |
4168 if (args.GetLength() == 1) { | 4136 if (args.GetLength() == 1) { |
4169 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4137 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4170 if (ValueIsNull(pThis, argOne.get())) { | 4138 if (ValueIsNull(pThis, argOne.get())) { |
4171 FXJSE_Value_SetNull(args.GetReturnValue()); | 4139 args.GetReturnValue()->SetNull(); |
4172 } else { | 4140 } else { |
4173 CFX_ByteString sourceString; | 4141 CFX_ByteString sourceString; |
4174 ValueToUTF8String(argOne.get(), sourceString); | 4142 ValueToUTF8String(argOne.get(), sourceString); |
4175 FXJSE_Value_SetInteger(args.GetReturnValue(), sourceString.GetLength()); | 4143 args.GetReturnValue()->SetInteger(sourceString.GetLength()); |
4176 } | 4144 } |
4177 } else { | 4145 } else { |
4178 ToJSContext(pThis, nullptr) | 4146 ToJSContext(pThis, nullptr) |
4179 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Len"); | 4147 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Len"); |
4180 } | 4148 } |
4181 } | 4149 } |
4182 | 4150 |
4183 // static | 4151 // static |
4184 void CXFA_FM2JSContext::Lower(CFXJSE_Value* pThis, | 4152 void CXFA_FM2JSContext::Lower(CFXJSE_Value* pThis, |
4185 const CFX_ByteStringC& szFuncName, | 4153 const CFX_ByteStringC& szFuncName, |
4186 CFXJSE_Arguments& args) { | 4154 CFXJSE_Arguments& args) { |
4187 int32_t argc = args.GetLength(); | 4155 int32_t argc = args.GetLength(); |
4188 if ((argc > 0) && (argc < 3)) { | 4156 if ((argc > 0) && (argc < 3)) { |
4189 CFX_ByteString argString; | 4157 CFX_ByteString argString; |
4190 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4158 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4191 if (ValueIsNull(pThis, argOne.get())) { | 4159 if (ValueIsNull(pThis, argOne.get())) { |
4192 FXJSE_Value_SetNull(args.GetReturnValue()); | 4160 args.GetReturnValue()->SetNull(); |
4193 } else { | 4161 } else { |
4194 ValueToUTF8String(argOne.get(), argString); | 4162 ValueToUTF8String(argOne.get(), argString); |
4195 CFX_WideTextBuf lowStringBuf; | 4163 CFX_WideTextBuf lowStringBuf; |
4196 CFX_WideString wsArgString = | 4164 CFX_WideString wsArgString = |
4197 CFX_WideString::FromUTF8(argString.AsStringC()); | 4165 CFX_WideString::FromUTF8(argString.AsStringC()); |
4198 const FX_WCHAR* pData = wsArgString.c_str(); | 4166 const FX_WCHAR* pData = wsArgString.c_str(); |
4199 int32_t iLen = argString.GetLength(); | 4167 int32_t iLen = argString.GetLength(); |
4200 int32_t i = 0; | 4168 int32_t i = 0; |
4201 int32_t ch = 0; | 4169 int32_t ch = 0; |
4202 while (i < iLen) { | 4170 while (i < iLen) { |
4203 ch = pData[i]; | 4171 ch = pData[i]; |
4204 if (ch >= 0x41 && ch <= 0x5A) { | 4172 if (ch >= 0x41 && ch <= 0x5A) { |
4205 ch += 32; | 4173 ch += 32; |
4206 } else if (ch >= 0xC0 && ch <= 0xDE) { | 4174 } else if (ch >= 0xC0 && ch <= 0xDE) { |
4207 ch += 32; | 4175 ch += 32; |
4208 } else if (ch == 0x100 || ch == 0x102 || ch == 0x104) { | 4176 } else if (ch == 0x100 || ch == 0x102 || ch == 0x104) { |
4209 ch += 1; | 4177 ch += 1; |
4210 } | 4178 } |
4211 lowStringBuf.AppendChar(ch); | 4179 lowStringBuf.AppendChar(ch); |
4212 ++i; | 4180 ++i; |
4213 } | 4181 } |
4214 lowStringBuf.AppendChar(0); | 4182 lowStringBuf.AppendChar(0); |
4215 FXJSE_Value_SetUTF8String( | 4183 args.GetReturnValue()->SetString( |
4216 args.GetReturnValue(), | |
4217 FX_UTF8Encode(lowStringBuf.GetBuffer(), lowStringBuf.GetLength()) | 4184 FX_UTF8Encode(lowStringBuf.GetBuffer(), lowStringBuf.GetLength()) |
4218 .AsStringC()); | 4185 .AsStringC()); |
4219 } | 4186 } |
4220 } else { | 4187 } else { |
4221 ToJSContext(pThis, nullptr) | 4188 ToJSContext(pThis, nullptr) |
4222 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Lower"); | 4189 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Lower"); |
4223 } | 4190 } |
4224 } | 4191 } |
4225 | 4192 |
4226 // static | 4193 // static |
4227 void CXFA_FM2JSContext::Ltrim(CFXJSE_Value* pThis, | 4194 void CXFA_FM2JSContext::Ltrim(CFXJSE_Value* pThis, |
4228 const CFX_ByteStringC& szFuncName, | 4195 const CFX_ByteStringC& szFuncName, |
4229 CFXJSE_Arguments& args) { | 4196 CFXJSE_Arguments& args) { |
4230 if (args.GetLength() == 1) { | 4197 if (args.GetLength() == 1) { |
4231 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4198 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4232 if (ValueIsNull(pThis, argOne.get())) { | 4199 if (ValueIsNull(pThis, argOne.get())) { |
4233 FXJSE_Value_SetNull(args.GetReturnValue()); | 4200 args.GetReturnValue()->SetNull(); |
4234 } else { | 4201 } else { |
4235 CFX_ByteString sourceString; | 4202 CFX_ByteString sourceString; |
4236 ValueToUTF8String(argOne.get(), sourceString); | 4203 ValueToUTF8String(argOne.get(), sourceString); |
4237 sourceString.TrimLeft(); | 4204 sourceString.TrimLeft(); |
4238 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4205 args.GetReturnValue()->SetString(sourceString.AsStringC()); |
4239 sourceString.AsStringC()); | |
4240 } | 4206 } |
4241 } else { | 4207 } else { |
4242 ToJSContext(pThis, nullptr) | 4208 ToJSContext(pThis, nullptr) |
4243 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Ltrim"); | 4209 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Ltrim"); |
4244 } | 4210 } |
4245 } | 4211 } |
4246 | 4212 |
4247 // static | 4213 // static |
4248 void CXFA_FM2JSContext::Parse(CFXJSE_Value* pThis, | 4214 void CXFA_FM2JSContext::Parse(CFXJSE_Value* pThis, |
4249 const CFX_ByteStringC& szFuncName, | 4215 const CFX_ByteStringC& szFuncName, |
4250 CFXJSE_Arguments& args) { | 4216 CFXJSE_Arguments& args) { |
4251 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 4217 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
4252 if (args.GetLength() == 2) { | 4218 if (args.GetLength() == 2) { |
4253 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4219 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4254 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 4220 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
4255 if (ValueIsNull(pThis, argTwo.get())) { | 4221 if (ValueIsNull(pThis, argTwo.get())) { |
4256 FXJSE_Value_SetNull(args.GetReturnValue()); | 4222 args.GetReturnValue()->SetNull(); |
4257 } else { | 4223 } else { |
4258 CFX_ByteString szPattern; | 4224 CFX_ByteString szPattern; |
4259 ValueToUTF8String(argOne.get(), szPattern); | 4225 ValueToUTF8String(argOne.get(), szPattern); |
4260 CFX_ByteString szValue; | 4226 CFX_ByteString szValue; |
4261 ValueToUTF8String(argTwo.get(), szValue); | 4227 ValueToUTF8String(argTwo.get(), szValue); |
4262 CXFA_Document* pDoc = pContext->GetDocument(); | 4228 CXFA_Document* pDoc = pContext->GetDocument(); |
4263 IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); | 4229 IFX_LocaleMgr* pMgr = (IFX_LocaleMgr*)pDoc->GetLocalMgr(); |
4264 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); | 4230 CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject()); |
4265 ASSERT(pThisNode); | 4231 ASSERT(pThisNode); |
4266 CXFA_WidgetData widgetData(pThisNode); | 4232 CXFA_WidgetData widgetData(pThisNode); |
4267 IFX_Locale* pLocale = widgetData.GetLocal(); | 4233 IFX_Locale* pLocale = widgetData.GetLocal(); |
4268 uint32_t patternType; | 4234 uint32_t patternType; |
4269 CFX_WideString wsPattern = | 4235 CFX_WideString wsPattern = |
4270 CFX_WideString::FromUTF8(szPattern.AsStringC()); | 4236 CFX_WideString::FromUTF8(szPattern.AsStringC()); |
4271 CFX_WideString wsValue = CFX_WideString::FromUTF8(szValue.AsStringC()); | 4237 CFX_WideString wsValue = CFX_WideString::FromUTF8(szValue.AsStringC()); |
4272 CFX_ByteString szParsedValue; | 4238 CFX_ByteString szParsedValue; |
4273 if (PatternStringType(szPattern.AsStringC(), patternType)) { | 4239 if (PatternStringType(szPattern.AsStringC(), patternType)) { |
4274 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, | 4240 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, |
4275 (CXFA_LocaleMgr*)pMgr); | 4241 (CXFA_LocaleMgr*)pMgr); |
4276 if (localeValue.IsValid()) { | 4242 if (localeValue.IsValid()) { |
4277 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); | 4243 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); |
4278 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4244 args.GetReturnValue()->SetString(szParsedValue.AsStringC()); |
4279 szParsedValue.AsStringC()); | |
4280 } else { | 4245 } else { |
4281 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4246 args.GetReturnValue()->SetString(""); |
4282 } | 4247 } |
4283 } else { | 4248 } else { |
4284 switch (patternType) { | 4249 switch (patternType) { |
4285 case XFA_VT_DATETIME: { | 4250 case XFA_VT_DATETIME: { |
4286 FX_STRSIZE iTChar = wsPattern.Find(L'T'); | 4251 FX_STRSIZE iTChar = wsPattern.Find(L'T'); |
4287 CFX_WideString wsDatePattern(L"date{"); | 4252 CFX_WideString wsDatePattern(L"date{"); |
4288 wsDatePattern += wsPattern.Left(iTChar); | 4253 wsDatePattern += wsPattern.Left(iTChar); |
4289 wsDatePattern += FX_WSTRC(L"} "); | 4254 wsDatePattern += FX_WSTRC(L"} "); |
4290 CFX_WideString wsTimePattern(L"time{"); | 4255 CFX_WideString wsTimePattern(L"time{"); |
4291 wsTimePattern += wsPattern.Mid(iTChar + 1); | 4256 wsTimePattern += wsPattern.Mid(iTChar + 1); |
4292 wsTimePattern += FX_WSTRC(L"}"); | 4257 wsTimePattern += FX_WSTRC(L"}"); |
4293 wsPattern = wsDatePattern + wsTimePattern; | 4258 wsPattern = wsDatePattern + wsTimePattern; |
4294 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, | 4259 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, |
4295 pLocale, (CXFA_LocaleMgr*)pMgr); | 4260 pLocale, (CXFA_LocaleMgr*)pMgr); |
4296 if (localeValue.IsValid()) { | 4261 if (localeValue.IsValid()) { |
4297 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); | 4262 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); |
4298 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4263 args.GetReturnValue()->SetString(szParsedValue.AsStringC()); |
4299 szParsedValue.AsStringC()); | |
4300 } else { | 4264 } else { |
4301 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4265 args.GetReturnValue()->SetString(""); |
4302 } | 4266 } |
4303 } break; | 4267 } break; |
4304 case XFA_VT_DATE: { | 4268 case XFA_VT_DATE: { |
4305 wsPattern = FX_WSTRC(L"date{") + wsPattern; | 4269 wsPattern = FX_WSTRC(L"date{") + wsPattern; |
4306 wsPattern += FX_WSTRC(L"}"); | 4270 wsPattern += FX_WSTRC(L"}"); |
4307 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, | 4271 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, |
4308 pLocale, (CXFA_LocaleMgr*)pMgr); | 4272 pLocale, (CXFA_LocaleMgr*)pMgr); |
4309 if (localeValue.IsValid()) { | 4273 if (localeValue.IsValid()) { |
4310 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); | 4274 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); |
4311 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4275 args.GetReturnValue()->SetString(szParsedValue.AsStringC()); |
4312 szParsedValue.AsStringC()); | |
4313 } else { | 4276 } else { |
4314 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4277 args.GetReturnValue()->SetString(""); |
4315 } | 4278 } |
4316 } break; | 4279 } break; |
4317 case XFA_VT_TIME: { | 4280 case XFA_VT_TIME: { |
4318 wsPattern = FX_WSTRC(L"time{") + wsPattern; | 4281 wsPattern = FX_WSTRC(L"time{") + wsPattern; |
4319 wsPattern += FX_WSTRC(L"}"); | 4282 wsPattern += FX_WSTRC(L"}"); |
4320 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, | 4283 CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, |
4321 pLocale, (CXFA_LocaleMgr*)pMgr); | 4284 pLocale, (CXFA_LocaleMgr*)pMgr); |
4322 if (localeValue.IsValid()) { | 4285 if (localeValue.IsValid()) { |
4323 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); | 4286 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); |
4324 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4287 args.GetReturnValue()->SetString(szParsedValue.AsStringC()); |
4325 szParsedValue.AsStringC()); | |
4326 } else { | 4288 } else { |
4327 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4289 args.GetReturnValue()->SetString(""); |
4328 } | 4290 } |
4329 } break; | 4291 } break; |
4330 case XFA_VT_TEXT: { | 4292 case XFA_VT_TEXT: { |
4331 wsPattern = FX_WSTRC(L"text{") + wsPattern; | 4293 wsPattern = FX_WSTRC(L"text{") + wsPattern; |
4332 wsPattern += FX_WSTRC(L"}"); | 4294 wsPattern += FX_WSTRC(L"}"); |
4333 CXFA_LocaleValue localeValue(XFA_VT_TEXT, wsValue, wsPattern, | 4295 CXFA_LocaleValue localeValue(XFA_VT_TEXT, wsValue, wsPattern, |
4334 pLocale, (CXFA_LocaleMgr*)pMgr); | 4296 pLocale, (CXFA_LocaleMgr*)pMgr); |
4335 if (localeValue.IsValid()) { | 4297 if (localeValue.IsValid()) { |
4336 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); | 4298 szParsedValue = FX_UTF8Encode(localeValue.GetValue()); |
4337 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4299 args.GetReturnValue()->SetString(szParsedValue.AsStringC()); |
4338 szParsedValue.AsStringC()); | |
4339 } else { | 4300 } else { |
4340 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4301 args.GetReturnValue()->SetString(""); |
4341 } | 4302 } |
4342 } break; | 4303 } break; |
4343 case XFA_VT_FLOAT: { | 4304 case XFA_VT_FLOAT: { |
4344 wsPattern = FX_WSTRC(L"num{") + wsPattern; | 4305 wsPattern = FX_WSTRC(L"num{") + wsPattern; |
4345 wsPattern += FX_WSTRC(L"}"); | 4306 wsPattern += FX_WSTRC(L"}"); |
4346 CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsPattern, | 4307 CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsPattern, |
4347 pLocale, (CXFA_LocaleMgr*)pMgr); | 4308 pLocale, (CXFA_LocaleMgr*)pMgr); |
4348 if (localeValue.IsValid()) { | 4309 if (localeValue.IsValid()) { |
4349 FXJSE_Value_SetDouble(args.GetReturnValue(), | 4310 args.GetReturnValue()->SetDouble(localeValue.GetDoubleNum()); |
4350 localeValue.GetDoubleNum()); | |
4351 } else { | 4311 } else { |
4352 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4312 args.GetReturnValue()->SetString(""); |
4353 } | 4313 } |
4354 } break; | 4314 } break; |
4355 default: { | 4315 default: { |
4356 CFX_WideString wsTestPattern; | 4316 CFX_WideString wsTestPattern; |
4357 wsTestPattern = FX_WSTRC(L"num{") + wsPattern; | 4317 wsTestPattern = FX_WSTRC(L"num{") + wsPattern; |
4358 wsTestPattern += FX_WSTRC(L"}"); | 4318 wsTestPattern += FX_WSTRC(L"}"); |
4359 CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsTestPattern, | 4319 CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsTestPattern, |
4360 pLocale, (CXFA_LocaleMgr*)pMgr); | 4320 pLocale, (CXFA_LocaleMgr*)pMgr); |
4361 if (localeValue.IsValid()) { | 4321 if (localeValue.IsValid()) { |
4362 FXJSE_Value_SetDouble(args.GetReturnValue(), | 4322 args.GetReturnValue()->SetDouble(localeValue.GetDoubleNum()); |
4363 localeValue.GetDoubleNum()); | |
4364 } else { | 4323 } else { |
4365 wsTestPattern = FX_WSTRC(L"text{") + wsPattern; | 4324 wsTestPattern = FX_WSTRC(L"text{") + wsPattern; |
4366 wsTestPattern += FX_WSTRC(L"}"); | 4325 wsTestPattern += FX_WSTRC(L"}"); |
4367 CXFA_LocaleValue localeValue2(XFA_VT_TEXT, wsValue, wsTestPattern, | 4326 CXFA_LocaleValue localeValue2(XFA_VT_TEXT, wsValue, wsTestPattern, |
4368 pLocale, (CXFA_LocaleMgr*)pMgr); | 4327 pLocale, (CXFA_LocaleMgr*)pMgr); |
4369 if (localeValue2.IsValid()) { | 4328 if (localeValue2.IsValid()) { |
4370 szParsedValue = FX_UTF8Encode(localeValue2.GetValue()); | 4329 szParsedValue = FX_UTF8Encode(localeValue2.GetValue()); |
4371 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4330 args.GetReturnValue()->SetString(szParsedValue.AsStringC()); |
4372 szParsedValue.AsStringC()); | |
4373 } else { | 4331 } else { |
4374 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4332 args.GetReturnValue()->SetString(""); |
4375 } | 4333 } |
4376 } | 4334 } |
4377 } break; | 4335 } break; |
4378 } | 4336 } |
4379 } | 4337 } |
4380 } | 4338 } |
4381 } else { | 4339 } else { |
4382 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Parse"); | 4340 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Parse"); |
4383 } | 4341 } |
4384 } | 4342 } |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4429 u += iFindLen - 1; | 4387 u += iFindLen - 1; |
4430 iFindIndex = 0; | 4388 iFindIndex = 0; |
4431 } else { | 4389 } else { |
4432 resultString.AppendChar(ch); | 4390 resultString.AppendChar(ch); |
4433 } | 4391 } |
4434 } else { | 4392 } else { |
4435 resultString.AppendChar(ch); | 4393 resultString.AppendChar(ch); |
4436 } | 4394 } |
4437 } | 4395 } |
4438 resultString.AppendChar(0); | 4396 resultString.AppendChar(0); |
4439 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultString.AsStringC()); | 4397 args.GetReturnValue()->SetString(resultString.AsStringC()); |
4440 } else { | 4398 } else { |
4441 ToJSContext(pThis, nullptr) | 4399 ToJSContext(pThis, nullptr) |
4442 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Replace"); | 4400 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Replace"); |
4443 } | 4401 } |
4444 } | 4402 } |
4445 | 4403 |
4446 // static | 4404 // static |
4447 void CXFA_FM2JSContext::Right(CFXJSE_Value* pThis, | 4405 void CXFA_FM2JSContext::Right(CFXJSE_Value* pThis, |
4448 const CFX_ByteStringC& szFuncName, | 4406 const CFX_ByteStringC& szFuncName, |
4449 CFXJSE_Arguments& args) { | 4407 CFXJSE_Arguments& args) { |
4450 if (args.GetLength() == 2) { | 4408 if (args.GetLength() == 2) { |
4451 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4409 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4452 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); | 4410 std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1); |
4453 FX_BOOL argIsNull = FALSE; | 4411 FX_BOOL argIsNull = FALSE; |
4454 if ((ValueIsNull(pThis, argOne.get())) || | 4412 if ((ValueIsNull(pThis, argOne.get())) || |
4455 (ValueIsNull(pThis, argTwo.get()))) { | 4413 (ValueIsNull(pThis, argTwo.get()))) { |
4456 argIsNull = TRUE; | 4414 argIsNull = TRUE; |
4457 } | 4415 } |
4458 if (argIsNull) { | 4416 if (argIsNull) { |
4459 FXJSE_Value_SetNull(args.GetReturnValue()); | 4417 args.GetReturnValue()->SetNull(); |
4460 } else { | 4418 } else { |
4461 CFX_ByteString sourceString; | 4419 CFX_ByteString sourceString; |
4462 ValueToUTF8String(argOne.get(), sourceString); | 4420 ValueToUTF8String(argOne.get(), sourceString); |
4463 int32_t count = ValueToInteger(pThis, argTwo.get()); | 4421 int32_t count = ValueToInteger(pThis, argTwo.get()); |
4464 if (count < 0) { | 4422 if (count < 0) { |
4465 count = 0; | 4423 count = 0; |
4466 } | 4424 } |
4467 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4425 args.GetReturnValue()->SetString(sourceString.Right(count).AsStringC()); |
4468 sourceString.Right(count).AsStringC()); | |
4469 } | 4426 } |
4470 } else { | 4427 } else { |
4471 ToJSContext(pThis, nullptr) | 4428 ToJSContext(pThis, nullptr) |
4472 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Right"); | 4429 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Right"); |
4473 } | 4430 } |
4474 } | 4431 } |
4475 | 4432 |
4476 // static | 4433 // static |
4477 void CXFA_FM2JSContext::Rtrim(CFXJSE_Value* pThis, | 4434 void CXFA_FM2JSContext::Rtrim(CFXJSE_Value* pThis, |
4478 const CFX_ByteStringC& szFuncName, | 4435 const CFX_ByteStringC& szFuncName, |
4479 CFXJSE_Arguments& args) { | 4436 CFXJSE_Arguments& args) { |
4480 if (args.GetLength() == 1) { | 4437 if (args.GetLength() == 1) { |
4481 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4438 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4482 if (ValueIsNull(pThis, argOne.get())) { | 4439 if (ValueIsNull(pThis, argOne.get())) { |
4483 FXJSE_Value_SetNull(args.GetReturnValue()); | 4440 args.GetReturnValue()->SetNull(); |
4484 } else { | 4441 } else { |
4485 CFX_ByteString sourceString; | 4442 CFX_ByteString sourceString; |
4486 ValueToUTF8String(argOne.get(), sourceString); | 4443 ValueToUTF8String(argOne.get(), sourceString); |
4487 sourceString.TrimRight(); | 4444 sourceString.TrimRight(); |
4488 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4445 args.GetReturnValue()->SetString(sourceString.AsStringC()); |
4489 sourceString.AsStringC()); | |
4490 } | 4446 } |
4491 } else { | 4447 } else { |
4492 ToJSContext(pThis, nullptr) | 4448 ToJSContext(pThis, nullptr) |
4493 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Rtrim"); | 4449 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Rtrim"); |
4494 } | 4450 } |
4495 } | 4451 } |
4496 | 4452 |
4497 // static | 4453 // static |
4498 void CXFA_FM2JSContext::Space(CFXJSE_Value* pThis, | 4454 void CXFA_FM2JSContext::Space(CFXJSE_Value* pThis, |
4499 const CFX_ByteStringC& szFuncName, | 4455 const CFX_ByteStringC& szFuncName, |
4500 CFXJSE_Arguments& args) { | 4456 CFXJSE_Arguments& args) { |
4501 if (args.GetLength() == 1) { | 4457 if (args.GetLength() == 1) { |
4502 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4458 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4503 if (FXJSE_Value_IsNull(argOne.get())) { | 4459 if (FXJSE_Value_IsNull(argOne.get())) { |
4504 FXJSE_Value_SetNull(args.GetReturnValue()); | 4460 args.GetReturnValue()->SetNull(); |
4505 } else { | 4461 } else { |
4506 int32_t count = 0; | 4462 int32_t count = 0; |
4507 count = ValueToInteger(pThis, argOne.get()); | 4463 count = ValueToInteger(pThis, argOne.get()); |
4508 count = (count < 0) ? 0 : count; | 4464 count = (count < 0) ? 0 : count; |
4509 CFX_ByteTextBuf spaceString; | 4465 CFX_ByteTextBuf spaceString; |
4510 int32_t index = 0; | 4466 int32_t index = 0; |
4511 while (index < count) { | 4467 while (index < count) { |
4512 spaceString.AppendByte(' '); | 4468 spaceString.AppendByte(' '); |
4513 index++; | 4469 index++; |
4514 } | 4470 } |
4515 spaceString.AppendByte(0); | 4471 spaceString.AppendByte(0); |
4516 FXJSE_Value_SetUTF8String(args.GetReturnValue(), spaceString.AsStringC()); | 4472 args.GetReturnValue()->SetString(spaceString.AsStringC()); |
4517 } | 4473 } |
4518 } else { | 4474 } else { |
4519 ToJSContext(pThis, nullptr) | 4475 ToJSContext(pThis, nullptr) |
4520 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Space"); | 4476 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Space"); |
4521 } | 4477 } |
4522 } | 4478 } |
4523 | 4479 |
4524 // static | 4480 // static |
4525 void CXFA_FM2JSContext::Str(CFXJSE_Value* pThis, | 4481 void CXFA_FM2JSContext::Str(CFXJSE_Value* pThis, |
4526 const CFX_ByteStringC& szFuncName, | 4482 const CFX_ByteStringC& szFuncName, |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4622 ++i; | 4578 ++i; |
4623 ++u; | 4579 ++u; |
4624 } | 4580 } |
4625 while (i < iPrecision) { | 4581 while (i < iPrecision) { |
4626 resultBuf.AppendChar('0'); | 4582 resultBuf.AppendChar('0'); |
4627 ++i; | 4583 ++i; |
4628 } | 4584 } |
4629 resultBuf.AppendChar(0); | 4585 resultBuf.AppendChar(0); |
4630 } | 4586 } |
4631 } | 4587 } |
4632 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultBuf.AsStringC()); | 4588 args.GetReturnValue()->SetString(resultBuf.AsStringC()); |
4633 } else { | 4589 } else { |
4634 FXJSE_Value_SetNull(args.GetReturnValue()); | 4590 args.GetReturnValue()->SetNull(); |
4635 } | 4591 } |
4636 } else { | 4592 } else { |
4637 ToJSContext(pThis, nullptr) | 4593 ToJSContext(pThis, nullptr) |
4638 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Str"); | 4594 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Str"); |
4639 } | 4595 } |
4640 } | 4596 } |
4641 | 4597 |
4642 // static | 4598 // static |
4643 void CXFA_FM2JSContext::Stuff(CFXJSE_Value* pThis, | 4599 void CXFA_FM2JSContext::Stuff(CFXJSE_Value* pThis, |
4644 const CFX_ByteStringC& szFuncName, | 4600 const CFX_ByteStringC& szFuncName, |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4682 resultString.AppendChar(sourceString.GetAt(i)); | 4638 resultString.AppendChar(sourceString.GetAt(i)); |
4683 ++i; | 4639 ++i; |
4684 } | 4640 } |
4685 resultString << insertString.AsStringC(); | 4641 resultString << insertString.AsStringC(); |
4686 i = iStart + iDelete; | 4642 i = iStart + iDelete; |
4687 while (i < iLength) { | 4643 while (i < iLength) { |
4688 resultString.AppendChar(sourceString.GetAt(i)); | 4644 resultString.AppendChar(sourceString.GetAt(i)); |
4689 ++i; | 4645 ++i; |
4690 } | 4646 } |
4691 resultString.AppendChar(0); | 4647 resultString.AppendChar(0); |
4692 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultString.AsStringC()); | 4648 args.GetReturnValue()->SetString(resultString.AsStringC()); |
4693 } else { | 4649 } else { |
4694 ToJSContext(pThis, nullptr) | 4650 ToJSContext(pThis, nullptr) |
4695 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Stuff"); | 4651 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Stuff"); |
4696 } | 4652 } |
4697 } | 4653 } |
4698 | 4654 |
4699 // static | 4655 // static |
4700 void CXFA_FM2JSContext::Substr(CFXJSE_Value* pThis, | 4656 void CXFA_FM2JSContext::Substr(CFXJSE_Value* pThis, |
4701 const CFX_ByteStringC& szFuncName, | 4657 const CFX_ByteStringC& szFuncName, |
4702 CFXJSE_Arguments& args) { | 4658 CFXJSE_Arguments& args) { |
4703 if (args.GetLength() == 3) { | 4659 if (args.GetLength() == 3) { |
4704 std::unique_ptr<CFXJSE_Value> stringValue = GetSimpleValue(pThis, args, 0); | 4660 std::unique_ptr<CFXJSE_Value> stringValue = GetSimpleValue(pThis, args, 0); |
4705 std::unique_ptr<CFXJSE_Value> startValue = GetSimpleValue(pThis, args, 1); | 4661 std::unique_ptr<CFXJSE_Value> startValue = GetSimpleValue(pThis, args, 1); |
4706 std::unique_ptr<CFXJSE_Value> endValue = GetSimpleValue(pThis, args, 2); | 4662 std::unique_ptr<CFXJSE_Value> endValue = GetSimpleValue(pThis, args, 2); |
4707 if (ValueIsNull(pThis, stringValue.get()) || | 4663 if (ValueIsNull(pThis, stringValue.get()) || |
4708 (ValueIsNull(pThis, startValue.get())) || | 4664 (ValueIsNull(pThis, startValue.get())) || |
4709 (ValueIsNull(pThis, endValue.get()))) { | 4665 (ValueIsNull(pThis, endValue.get()))) { |
4710 FXJSE_Value_SetNull(args.GetReturnValue()); | 4666 args.GetReturnValue()->SetNull(); |
4711 } else { | 4667 } else { |
4712 CFX_ByteString szSourceStr; | 4668 CFX_ByteString szSourceStr; |
4713 int32_t iStart = 0; | 4669 int32_t iStart = 0; |
4714 int32_t iCount = 0; | 4670 int32_t iCount = 0; |
4715 ValueToUTF8String(stringValue.get(), szSourceStr); | 4671 ValueToUTF8String(stringValue.get(), szSourceStr); |
4716 int32_t iLength = szSourceStr.GetLength(); | 4672 int32_t iLength = szSourceStr.GetLength(); |
4717 if (iLength == 0) { | 4673 if (iLength == 0) { |
4718 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 4674 args.GetReturnValue()->SetString(""); |
4719 } else { | 4675 } else { |
4720 iStart = (int32_t)ValueToFloat(pThis, startValue.get()); | 4676 iStart = (int32_t)ValueToFloat(pThis, startValue.get()); |
4721 iCount = (int32_t)ValueToFloat(pThis, endValue.get()); | 4677 iCount = (int32_t)ValueToFloat(pThis, endValue.get()); |
4722 if (iStart < 1) { | 4678 if (iStart < 1) { |
4723 iStart = 1; | 4679 iStart = 1; |
4724 } | 4680 } |
4725 if (iStart > iLength) { | 4681 if (iStart > iLength) { |
4726 iStart = iLength; | 4682 iStart = iLength; |
4727 } | 4683 } |
4728 if (iCount <= 0) { | 4684 if (iCount <= 0) { |
4729 iCount = 0; | 4685 iCount = 0; |
4730 } | 4686 } |
4731 iStart -= 1; | 4687 iStart -= 1; |
4732 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 4688 args.GetReturnValue()->SetString( |
4733 szSourceStr.Mid(iStart, iCount).AsStringC()); | 4689 szSourceStr.Mid(iStart, iCount).AsStringC()); |
4734 } | 4690 } |
4735 } | 4691 } |
4736 } else { | 4692 } else { |
4737 ToJSContext(pThis, nullptr) | 4693 ToJSContext(pThis, nullptr) |
4738 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Substr"); | 4694 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Substr"); |
4739 } | 4695 } |
4740 } | 4696 } |
4741 | 4697 |
4742 // static | 4698 // static |
4743 void CXFA_FM2JSContext::Uuid(CFXJSE_Value* pThis, | 4699 void CXFA_FM2JSContext::Uuid(CFXJSE_Value* pThis, |
4744 const CFX_ByteStringC& szFuncName, | 4700 const CFX_ByteStringC& szFuncName, |
4745 CFXJSE_Arguments& args) { | 4701 CFXJSE_Arguments& args) { |
4746 int32_t argc = args.GetLength(); | 4702 int32_t argc = args.GetLength(); |
4747 if ((argc == 0) || (argc == 1)) { | 4703 if ((argc == 0) || (argc == 1)) { |
4748 int32_t iNum = 0; | 4704 int32_t iNum = 0; |
4749 if (argc > 0) { | 4705 if (argc > 0) { |
4750 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4706 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4751 iNum = (int32_t)ValueToFloat(pThis, argOne.get()); | 4707 iNum = (int32_t)ValueToFloat(pThis, argOne.get()); |
4752 } | 4708 } |
4753 FX_GUID guid; | 4709 FX_GUID guid; |
4754 FX_GUID_CreateV4(&guid); | 4710 FX_GUID_CreateV4(&guid); |
4755 CFX_ByteString bsUId; | 4711 CFX_ByteString bsUId; |
4756 FX_GUID_ToString(&guid, bsUId, iNum); | 4712 FX_GUID_ToString(&guid, bsUId, iNum); |
4757 FXJSE_Value_SetUTF8String(args.GetReturnValue(), bsUId.AsStringC()); | 4713 args.GetReturnValue()->SetString(bsUId.AsStringC()); |
4758 } else { | 4714 } else { |
4759 ToJSContext(pThis, nullptr) | 4715 ToJSContext(pThis, nullptr) |
4760 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Uuid"); | 4716 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Uuid"); |
4761 } | 4717 } |
4762 } | 4718 } |
4763 | 4719 |
4764 // static | 4720 // static |
4765 void CXFA_FM2JSContext::Upper(CFXJSE_Value* pThis, | 4721 void CXFA_FM2JSContext::Upper(CFXJSE_Value* pThis, |
4766 const CFX_ByteStringC& szFuncName, | 4722 const CFX_ByteStringC& szFuncName, |
4767 CFXJSE_Arguments& args) { | 4723 CFXJSE_Arguments& args) { |
4768 int32_t argc = args.GetLength(); | 4724 int32_t argc = args.GetLength(); |
4769 if ((argc > 0) && (argc < 3)) { | 4725 if ((argc > 0) && (argc < 3)) { |
4770 CFX_ByteString argString; | 4726 CFX_ByteString argString; |
4771 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 4727 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
4772 if (ValueIsNull(pThis, argOne.get())) { | 4728 if (ValueIsNull(pThis, argOne.get())) { |
4773 FXJSE_Value_SetNull(args.GetReturnValue()); | 4729 args.GetReturnValue()->SetNull(); |
4774 } else { | 4730 } else { |
4775 ValueToUTF8String(argOne.get(), argString); | 4731 ValueToUTF8String(argOne.get(), argString); |
4776 CFX_WideTextBuf upperStringBuf; | 4732 CFX_WideTextBuf upperStringBuf; |
4777 CFX_WideString wsArgString = | 4733 CFX_WideString wsArgString = |
4778 CFX_WideString::FromUTF8(argString.AsStringC()); | 4734 CFX_WideString::FromUTF8(argString.AsStringC()); |
4779 const FX_WCHAR* pData = wsArgString.c_str(); | 4735 const FX_WCHAR* pData = wsArgString.c_str(); |
4780 int32_t iLen = wsArgString.GetLength(); | 4736 int32_t iLen = wsArgString.GetLength(); |
4781 int32_t i = 0; | 4737 int32_t i = 0; |
4782 int32_t ch = 0; | 4738 int32_t ch = 0; |
4783 while (i < iLen) { | 4739 while (i < iLen) { |
4784 ch = pData[i]; | 4740 ch = pData[i]; |
4785 if (ch >= 0x61 && ch <= 0x7A) { | 4741 if (ch >= 0x61 && ch <= 0x7A) { |
4786 ch -= 32; | 4742 ch -= 32; |
4787 } else if (ch >= 0xE0 && ch <= 0xFE) { | 4743 } else if (ch >= 0xE0 && ch <= 0xFE) { |
4788 ch -= 32; | 4744 ch -= 32; |
4789 } else if (ch == 0x101 || ch == 0x103 || ch == 0x105) { | 4745 } else if (ch == 0x101 || ch == 0x103 || ch == 0x105) { |
4790 ch -= 1; | 4746 ch -= 1; |
4791 } | 4747 } |
4792 upperStringBuf.AppendChar(ch); | 4748 upperStringBuf.AppendChar(ch); |
4793 ++i; | 4749 ++i; |
4794 } | 4750 } |
4795 upperStringBuf.AppendChar(0); | 4751 upperStringBuf.AppendChar(0); |
4796 FXJSE_Value_SetUTF8String( | 4752 args.GetReturnValue()->SetString( |
4797 args.GetReturnValue(), | |
4798 FX_UTF8Encode(upperStringBuf.GetBuffer(), upperStringBuf.GetLength()) | 4753 FX_UTF8Encode(upperStringBuf.GetBuffer(), upperStringBuf.GetLength()) |
4799 .AsStringC()); | 4754 .AsStringC()); |
4800 } | 4755 } |
4801 } else { | 4756 } else { |
4802 ToJSContext(pThis, nullptr) | 4757 ToJSContext(pThis, nullptr) |
4803 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Upper"); | 4758 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Upper"); |
4804 } | 4759 } |
4805 } | 4760 } |
4806 | 4761 |
4807 // static | 4762 // static |
(...skipping 25 matching lines...) Expand all Loading... |
4833 std::unique_ptr<CFXJSE_Value> localeValue = | 4788 std::unique_ptr<CFXJSE_Value> localeValue = |
4834 GetSimpleValue(pThis, args, 2); | 4789 GetSimpleValue(pThis, args, 2); |
4835 if (FXJSE_Value_IsNull(localeValue.get())) { | 4790 if (FXJSE_Value_IsNull(localeValue.get())) { |
4836 bFlags = TRUE; | 4791 bFlags = TRUE; |
4837 } else { | 4792 } else { |
4838 ValueToUTF8String(localeValue.get(), localeString); | 4793 ValueToUTF8String(localeValue.get(), localeString); |
4839 } | 4794 } |
4840 } | 4795 } |
4841 if (!bFlags) { | 4796 if (!bFlags) { |
4842 if ((fNumber < 0) || (fNumber > 922337203685477550)) { | 4797 if ((fNumber < 0) || (fNumber > 922337203685477550)) { |
4843 FXJSE_Value_SetUTF8String(args.GetReturnValue(), "*"); | 4798 args.GetReturnValue()->SetString("*"); |
4844 } else { | 4799 } else { |
4845 CFX_ByteTextBuf resultBuf; | 4800 CFX_ByteTextBuf resultBuf; |
4846 CFX_ByteString numberString; | 4801 CFX_ByteString numberString; |
4847 numberString.Format("%.2f", fNumber); | 4802 numberString.Format("%.2f", fNumber); |
4848 WordUS(numberString.AsStringC(), iIdentifier, resultBuf); | 4803 WordUS(numberString.AsStringC(), iIdentifier, resultBuf); |
4849 FXJSE_Value_SetUTF8String(args.GetReturnValue(), resultBuf.AsStringC()); | 4804 args.GetReturnValue()->SetString(resultBuf.AsStringC()); |
4850 } | 4805 } |
4851 } else { | 4806 } else { |
4852 FXJSE_Value_SetNull(args.GetReturnValue()); | 4807 args.GetReturnValue()->SetNull(); |
4853 } | 4808 } |
4854 } else { | 4809 } else { |
4855 ToJSContext(pThis, nullptr) | 4810 ToJSContext(pThis, nullptr) |
4856 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"WordNum"); | 4811 ->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"WordNum"); |
4857 } | 4812 } |
4858 } | 4813 } |
4859 | 4814 |
4860 // static | 4815 // static |
4861 void CXFA_FM2JSContext::TrillionUS(const CFX_ByteStringC& szData, | 4816 void CXFA_FM2JSContext::TrillionUS(const CFX_ByteStringC& szData, |
4862 CFX_ByteTextBuf& strBuf) { | 4817 CFX_ByteTextBuf& strBuf) { |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5071 } | 5026 } |
5072 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 5027 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
5073 CFX_ByteString urlString; | 5028 CFX_ByteString urlString; |
5074 ValueToUTF8String(argOne.get(), urlString); | 5029 ValueToUTF8String(argOne.get(), urlString); |
5075 IFX_FileRead* pFile = pAppProvider->DownloadURL( | 5030 IFX_FileRead* pFile = pAppProvider->DownloadURL( |
5076 CFX_WideString::FromUTF8(urlString.AsStringC())); | 5031 CFX_WideString::FromUTF8(urlString.AsStringC())); |
5077 if (pFile) { | 5032 if (pFile) { |
5078 int32_t size = pFile->GetSize(); | 5033 int32_t size = pFile->GetSize(); |
5079 uint8_t* pData = FX_Alloc(uint8_t, size); | 5034 uint8_t* pData = FX_Alloc(uint8_t, size); |
5080 pFile->ReadBlock(pData, size); | 5035 pFile->ReadBlock(pData, size); |
5081 FXJSE_Value_SetUTF8String(args.GetReturnValue(), | 5036 args.GetReturnValue()->SetString(CFX_ByteStringC(pData, size)); |
5082 CFX_ByteStringC(pData, size)); | |
5083 FX_Free(pData); | 5037 FX_Free(pData); |
5084 pFile->Release(); | 5038 pFile->Release(); |
5085 } | 5039 } |
5086 } else { | 5040 } else { |
5087 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Get"); | 5041 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Get"); |
5088 } | 5042 } |
5089 } | 5043 } |
5090 | 5044 |
5091 // static | 5045 // static |
5092 void CXFA_FM2JSContext::Post(CFXJSE_Value* pThis, | 5046 void CXFA_FM2JSContext::Post(CFXJSE_Value* pThis, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5126 ValueToUTF8String(argFive.get(), bsHeader); | 5080 ValueToUTF8String(argFive.get(), bsHeader); |
5127 } | 5081 } |
5128 CFX_WideString decodedResponse; | 5082 CFX_WideString decodedResponse; |
5129 FX_BOOL bFlags = pAppProvider->PostRequestURL( | 5083 FX_BOOL bFlags = pAppProvider->PostRequestURL( |
5130 CFX_WideString::FromUTF8(bsURL.AsStringC()), | 5084 CFX_WideString::FromUTF8(bsURL.AsStringC()), |
5131 CFX_WideString::FromUTF8(bsData.AsStringC()), | 5085 CFX_WideString::FromUTF8(bsData.AsStringC()), |
5132 CFX_WideString::FromUTF8(bsContentType.AsStringC()), | 5086 CFX_WideString::FromUTF8(bsContentType.AsStringC()), |
5133 CFX_WideString::FromUTF8(bsEncode.AsStringC()), | 5087 CFX_WideString::FromUTF8(bsEncode.AsStringC()), |
5134 CFX_WideString::FromUTF8(bsHeader.AsStringC()), decodedResponse); | 5088 CFX_WideString::FromUTF8(bsHeader.AsStringC()), decodedResponse); |
5135 if (bFlags) { | 5089 if (bFlags) { |
5136 FXJSE_Value_SetUTF8String( | 5090 args.GetReturnValue()->SetString( |
5137 args.GetReturnValue(), | |
5138 FX_UTF8Encode(decodedResponse.c_str(), decodedResponse.GetLength()) | 5091 FX_UTF8Encode(decodedResponse.c_str(), decodedResponse.GetLength()) |
5139 .AsStringC()); | 5092 .AsStringC()); |
5140 } else { | 5093 } else { |
5141 pContext->ThrowException(XFA_IDS_SERVER_DENY); | 5094 pContext->ThrowException(XFA_IDS_SERVER_DENY); |
5142 } | 5095 } |
5143 } else { | 5096 } else { |
5144 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Post"); | 5097 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Post"); |
5145 } | 5098 } |
5146 } | 5099 } |
5147 | 5100 |
(...skipping 22 matching lines...) Expand all Loading... |
5170 ValueToUTF8String(argTwo.get(), bsData); | 5123 ValueToUTF8String(argTwo.get(), bsData); |
5171 if (argc > 2) { | 5124 if (argc > 2) { |
5172 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); | 5125 std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2); |
5173 ValueToUTF8String(argThree.get(), bsEncode); | 5126 ValueToUTF8String(argThree.get(), bsEncode); |
5174 } | 5127 } |
5175 FX_BOOL bFlags = pAppProvider->PutRequestURL( | 5128 FX_BOOL bFlags = pAppProvider->PutRequestURL( |
5176 CFX_WideString::FromUTF8(bsURL.AsStringC()), | 5129 CFX_WideString::FromUTF8(bsURL.AsStringC()), |
5177 CFX_WideString::FromUTF8(bsData.AsStringC()), | 5130 CFX_WideString::FromUTF8(bsData.AsStringC()), |
5178 CFX_WideString::FromUTF8(bsEncode.AsStringC())); | 5131 CFX_WideString::FromUTF8(bsEncode.AsStringC())); |
5179 if (bFlags) { | 5132 if (bFlags) { |
5180 FXJSE_Value_SetUTF8String(args.GetReturnValue(), ""); | 5133 args.GetReturnValue()->SetString(""); |
5181 } else { | 5134 } else { |
5182 pContext->ThrowException(XFA_IDS_SERVER_DENY); | 5135 pContext->ThrowException(XFA_IDS_SERVER_DENY); |
5183 } | 5136 } |
5184 } else { | 5137 } else { |
5185 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Put"); | 5138 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Put"); |
5186 } | 5139 } |
5187 } | 5140 } |
5188 | 5141 |
5189 // static | 5142 // static |
5190 void CXFA_FM2JSContext::assign_value_operator(CFXJSE_Value* pThis, | 5143 void CXFA_FM2JSContext::assign_value_operator(CFXJSE_Value* pThis, |
5191 const CFX_ByteStringC& szFuncName, | 5144 const CFX_ByteStringC& szFuncName, |
5192 CFXJSE_Arguments& args) { | 5145 CFXJSE_Arguments& args) { |
5193 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 5146 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
5194 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 5147 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
5195 if (args.GetLength() == 2) { | 5148 if (args.GetLength() == 2) { |
5196 std::unique_ptr<CFXJSE_Value> lValue = args.GetValue(0); | 5149 std::unique_ptr<CFXJSE_Value> lValue = args.GetValue(0); |
5197 std::unique_ptr<CFXJSE_Value> rValue = GetSimpleValue(pThis, args, 1); | 5150 std::unique_ptr<CFXJSE_Value> rValue = GetSimpleValue(pThis, args, 1); |
5198 FX_BOOL bSetStatus = TRUE; | 5151 FX_BOOL bSetStatus = TRUE; |
5199 if (FXJSE_Value_IsArray(lValue.get())) { | 5152 if (FXJSE_Value_IsArray(lValue.get())) { |
5200 std::unique_ptr<CFXJSE_Value> leftLengthValue(new CFXJSE_Value(pIsolate)); | 5153 std::unique_ptr<CFXJSE_Value> leftLengthValue(new CFXJSE_Value(pIsolate)); |
5201 FXJSE_Value_GetObjectProp(lValue.get(), "length", leftLengthValue.get()); | 5154 lValue->GetObjectProperty("length", leftLengthValue.get()); |
5202 int32_t iLeftLength = FXJSE_Value_ToInteger(leftLengthValue.get()); | 5155 int32_t iLeftLength = leftLengthValue->ToInteger(); |
5203 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 5156 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
5204 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 5157 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
5205 FXJSE_Value_GetObjectPropByIdx(lValue.get(), 1, propertyValue.get()); | 5158 lValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
5206 if (FXJSE_Value_IsNull(propertyValue.get())) { | 5159 if (FXJSE_Value_IsNull(propertyValue.get())) { |
5207 for (int32_t i = 2; i < iLeftLength; i++) { | 5160 for (int32_t i = 2; i < iLeftLength; i++) { |
5208 FXJSE_Value_GetObjectPropByIdx(lValue.get(), i, jsObjectValue.get()); | 5161 lValue->GetObjectPropertyByIdx(i, jsObjectValue.get()); |
5209 bSetStatus = SetObjectDefaultValue(jsObjectValue.get(), rValue.get()); | 5162 bSetStatus = SetObjectDefaultValue(jsObjectValue.get(), rValue.get()); |
5210 if (!bSetStatus) { | 5163 if (!bSetStatus) { |
5211 pContext->ThrowException(XFA_IDS_NOT_DEFAUL_VALUE); | 5164 pContext->ThrowException(XFA_IDS_NOT_DEFAUL_VALUE); |
5212 break; | 5165 break; |
5213 } | 5166 } |
5214 } | 5167 } |
5215 } else { | 5168 } else { |
5216 CFX_ByteString propertyStr; | 5169 CFX_ByteString propertyStr; |
5217 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 5170 propertyValue->ToString(propertyStr); |
5218 for (int32_t i = 2; i < iLeftLength; i++) { | 5171 for (int32_t i = 2; i < iLeftLength; i++) { |
5219 FXJSE_Value_GetObjectPropByIdx(lValue.get(), i, jsObjectValue.get()); | 5172 lValue->GetObjectPropertyByIdx(i, jsObjectValue.get()); |
5220 FXJSE_Value_SetObjectProp(jsObjectValue.get(), | 5173 jsObjectValue->SetObjectProperty(propertyStr.AsStringC(), |
5221 propertyStr.AsStringC(), rValue.get()); | 5174 rValue.get()); |
5222 } | 5175 } |
5223 } | 5176 } |
5224 } else if (FXJSE_Value_IsObject(lValue.get())) { | 5177 } else if (FXJSE_Value_IsObject(lValue.get())) { |
5225 bSetStatus = SetObjectDefaultValue(lValue.get(), rValue.get()); | 5178 bSetStatus = SetObjectDefaultValue(lValue.get(), rValue.get()); |
5226 if (!bSetStatus) { | 5179 if (!bSetStatus) { |
5227 pContext->ThrowException(XFA_IDS_NOT_DEFAUL_VALUE); | 5180 pContext->ThrowException(XFA_IDS_NOT_DEFAUL_VALUE); |
5228 } | 5181 } |
5229 } | 5182 } |
5230 FXJSE_Value_Set(args.GetReturnValue(), rValue.get()); | 5183 args.GetReturnValue()->Assign(rValue.get()); |
5231 } else { | 5184 } else { |
5232 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 5185 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
5233 } | 5186 } |
5234 } | 5187 } |
5235 | 5188 |
5236 // static | 5189 // static |
5237 void CXFA_FM2JSContext::logical_or_operator(CFXJSE_Value* pThis, | 5190 void CXFA_FM2JSContext::logical_or_operator(CFXJSE_Value* pThis, |
5238 const CFX_ByteStringC& szFuncName, | 5191 const CFX_ByteStringC& szFuncName, |
5239 CFXJSE_Arguments& args) { | 5192 CFXJSE_Arguments& args) { |
5240 if (args.GetLength() == 2) { | 5193 if (args.GetLength() == 2) { |
5241 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5194 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5242 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5195 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5243 if (FXJSE_Value_IsNull(argFirst.get()) && | 5196 if (FXJSE_Value_IsNull(argFirst.get()) && |
5244 FXJSE_Value_IsNull(argSecond.get())) { | 5197 FXJSE_Value_IsNull(argSecond.get())) { |
5245 FXJSE_Value_SetNull(args.GetReturnValue()); | 5198 args.GetReturnValue()->SetNull(); |
5246 } else { | 5199 } else { |
5247 FX_FLOAT first = ValueToFloat(pThis, argFirst.get()); | 5200 FX_FLOAT first = ValueToFloat(pThis, argFirst.get()); |
5248 FX_FLOAT second = ValueToFloat(pThis, argSecond.get()); | 5201 FX_FLOAT second = ValueToFloat(pThis, argSecond.get()); |
5249 FXJSE_Value_SetInteger(args.GetReturnValue(), (first || second) ? 1 : 0); | 5202 args.GetReturnValue()->SetInteger((first || second) ? 1 : 0); |
5250 } | 5203 } |
5251 } else { | 5204 } else { |
5252 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5205 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5253 } | 5206 } |
5254 } | 5207 } |
5255 | 5208 |
5256 // static | 5209 // static |
5257 void CXFA_FM2JSContext::logical_and_operator(CFXJSE_Value* pThis, | 5210 void CXFA_FM2JSContext::logical_and_operator(CFXJSE_Value* pThis, |
5258 const CFX_ByteStringC& szFuncName, | 5211 const CFX_ByteStringC& szFuncName, |
5259 CFXJSE_Arguments& args) { | 5212 CFXJSE_Arguments& args) { |
5260 if (args.GetLength() == 2) { | 5213 if (args.GetLength() == 2) { |
5261 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5214 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5262 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5215 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5263 if (FXJSE_Value_IsNull(argFirst.get()) && | 5216 if (FXJSE_Value_IsNull(argFirst.get()) && |
5264 FXJSE_Value_IsNull(argSecond.get())) { | 5217 FXJSE_Value_IsNull(argSecond.get())) { |
5265 FXJSE_Value_SetNull(args.GetReturnValue()); | 5218 args.GetReturnValue()->SetNull(); |
5266 } else { | 5219 } else { |
5267 FX_FLOAT first = ValueToFloat(pThis, argFirst.get()); | 5220 FX_FLOAT first = ValueToFloat(pThis, argFirst.get()); |
5268 FX_FLOAT second = ValueToFloat(pThis, argSecond.get()); | 5221 FX_FLOAT second = ValueToFloat(pThis, argSecond.get()); |
5269 FXJSE_Value_SetInteger(args.GetReturnValue(), (first && second) ? 1 : 0); | 5222 args.GetReturnValue()->SetInteger((first && second) ? 1 : 0); |
5270 } | 5223 } |
5271 } else { | 5224 } else { |
5272 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5225 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5273 } | 5226 } |
5274 } | 5227 } |
5275 | 5228 |
5276 // static | 5229 // static |
5277 void CXFA_FM2JSContext::equality_operator(CFXJSE_Value* pThis, | 5230 void CXFA_FM2JSContext::equality_operator(CFXJSE_Value* pThis, |
5278 const CFX_ByteStringC& szFuncName, | 5231 const CFX_ByteStringC& szFuncName, |
5279 CFXJSE_Arguments& args) { | 5232 CFXJSE_Arguments& args) { |
5280 if (args.GetLength() == 2) { | 5233 if (args.GetLength() == 2) { |
5281 if (fm_ref_equal(pThis, args)) { | 5234 if (fm_ref_equal(pThis, args)) { |
5282 FXJSE_Value_SetInteger(args.GetReturnValue(), 1); | 5235 args.GetReturnValue()->SetInteger(1); |
5283 } else { | 5236 } else { |
5284 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5237 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5285 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5238 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5286 if (FXJSE_Value_IsNull(argFirst.get()) || | 5239 if (FXJSE_Value_IsNull(argFirst.get()) || |
5287 FXJSE_Value_IsNull(argSecond.get())) { | 5240 FXJSE_Value_IsNull(argSecond.get())) { |
5288 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5241 args.GetReturnValue()->SetInteger((FXJSE_Value_IsNull(argFirst.get()) && |
5289 (FXJSE_Value_IsNull(argFirst.get()) && | 5242 FXJSE_Value_IsNull(argSecond.get())) |
5290 FXJSE_Value_IsNull(argSecond.get())) | 5243 ? 1 |
5291 ? 1 | 5244 : 0); |
5292 : 0); | |
5293 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && | 5245 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && |
5294 FXJSE_Value_IsUTF8String(argSecond.get())) { | 5246 FXJSE_Value_IsUTF8String(argSecond.get())) { |
5295 CFX_ByteString firstOutput; | 5247 CFX_ByteString firstOutput; |
5296 CFX_ByteString secondOutput; | 5248 CFX_ByteString secondOutput; |
5297 FXJSE_Value_ToUTF8String(argFirst.get(), firstOutput); | 5249 argFirst->ToString(firstOutput); |
5298 FXJSE_Value_ToUTF8String(argSecond.get(), secondOutput); | 5250 argSecond->ToString(secondOutput); |
5299 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5251 args.GetReturnValue()->SetInteger(firstOutput == secondOutput); |
5300 firstOutput == secondOutput); | |
5301 } else { | 5252 } else { |
5302 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5253 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5303 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5254 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5304 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5255 args.GetReturnValue()->SetInteger((first == second) ? 1 : 0); |
5305 (first == second) ? 1 : 0); | |
5306 } | 5256 } |
5307 } | 5257 } |
5308 } else { | 5258 } else { |
5309 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5259 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5310 } | 5260 } |
5311 } | 5261 } |
5312 | 5262 |
5313 // static | 5263 // static |
5314 void CXFA_FM2JSContext::notequality_operator(CFXJSE_Value* pThis, | 5264 void CXFA_FM2JSContext::notequality_operator(CFXJSE_Value* pThis, |
5315 const CFX_ByteStringC& szFuncName, | 5265 const CFX_ByteStringC& szFuncName, |
5316 CFXJSE_Arguments& args) { | 5266 CFXJSE_Arguments& args) { |
5317 if (args.GetLength() == 2) { | 5267 if (args.GetLength() == 2) { |
5318 if (fm_ref_equal(pThis, args)) { | 5268 if (fm_ref_equal(pThis, args)) { |
5319 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 5269 args.GetReturnValue()->SetInteger(0); |
5320 } else { | 5270 } else { |
5321 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5271 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5322 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5272 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5323 if (FXJSE_Value_IsNull(argFirst.get()) || | 5273 if (FXJSE_Value_IsNull(argFirst.get()) || |
5324 FXJSE_Value_IsNull(argSecond.get())) { | 5274 FXJSE_Value_IsNull(argSecond.get())) { |
5325 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5275 args.GetReturnValue()->SetInteger((FXJSE_Value_IsNull(argFirst.get()) && |
5326 (FXJSE_Value_IsNull(argFirst.get()) && | 5276 FXJSE_Value_IsNull(argSecond.get())) |
5327 FXJSE_Value_IsNull(argSecond.get())) | 5277 ? 0 |
5328 ? 0 | 5278 : 1); |
5329 : 1); | |
5330 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && | 5279 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && |
5331 FXJSE_Value_IsUTF8String(argSecond.get())) { | 5280 FXJSE_Value_IsUTF8String(argSecond.get())) { |
5332 CFX_ByteString firstOutput; | 5281 CFX_ByteString firstOutput; |
5333 CFX_ByteString secondOutput; | 5282 CFX_ByteString secondOutput; |
5334 FXJSE_Value_ToUTF8String(argFirst.get(), firstOutput); | 5283 argFirst->ToString(firstOutput); |
5335 FXJSE_Value_ToUTF8String(argSecond.get(), secondOutput); | 5284 argSecond->ToString(secondOutput); |
5336 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5285 args.GetReturnValue()->SetInteger(firstOutput != secondOutput); |
5337 firstOutput != secondOutput); | |
5338 } else { | 5286 } else { |
5339 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5287 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5340 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5288 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5341 FXJSE_Value_SetInteger(args.GetReturnValue(), first != second); | 5289 args.GetReturnValue()->SetInteger(first != second); |
5342 } | 5290 } |
5343 } | 5291 } |
5344 } else { | 5292 } else { |
5345 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5293 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5346 } | 5294 } |
5347 } | 5295 } |
5348 | 5296 |
5349 // static | 5297 // static |
5350 FX_BOOL CXFA_FM2JSContext::fm_ref_equal(CFXJSE_Value* pThis, | 5298 FX_BOOL CXFA_FM2JSContext::fm_ref_equal(CFXJSE_Value* pThis, |
5351 CFXJSE_Arguments& args) { | 5299 CFXJSE_Arguments& args) { |
5352 FX_BOOL bRet = FALSE; | 5300 FX_BOOL bRet = FALSE; |
5353 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 5301 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
5354 std::unique_ptr<CFXJSE_Value> argFirst = args.GetValue(0); | 5302 std::unique_ptr<CFXJSE_Value> argFirst = args.GetValue(0); |
5355 std::unique_ptr<CFXJSE_Value> argSecond = args.GetValue(1); | 5303 std::unique_ptr<CFXJSE_Value> argSecond = args.GetValue(1); |
5356 if (FXJSE_Value_IsArray(argFirst.get()) && | 5304 if (FXJSE_Value_IsArray(argFirst.get()) && |
5357 FXJSE_Value_IsArray(argSecond.get())) { | 5305 FXJSE_Value_IsArray(argSecond.get())) { |
5358 std::unique_ptr<CFXJSE_Value> firstFlagValue(new CFXJSE_Value(pIsolate)); | 5306 std::unique_ptr<CFXJSE_Value> firstFlagValue(new CFXJSE_Value(pIsolate)); |
5359 std::unique_ptr<CFXJSE_Value> secondFlagValue(new CFXJSE_Value(pIsolate)); | 5307 std::unique_ptr<CFXJSE_Value> secondFlagValue(new CFXJSE_Value(pIsolate)); |
5360 FXJSE_Value_GetObjectPropByIdx(argFirst.get(), 0, firstFlagValue.get()); | 5308 argFirst->GetObjectPropertyByIdx(0, firstFlagValue.get()); |
5361 FXJSE_Value_GetObjectPropByIdx(argSecond.get(), 0, secondFlagValue.get()); | 5309 argSecond->GetObjectPropertyByIdx(0, secondFlagValue.get()); |
5362 if ((FXJSE_Value_ToInteger(firstFlagValue.get()) == 3) && | 5310 if (firstFlagValue->ToInteger() == 3 && secondFlagValue->ToInteger() == 3) { |
5363 (FXJSE_Value_ToInteger(secondFlagValue.get()) == 3)) { | |
5364 std::unique_ptr<CFXJSE_Value> firstJSObject(new CFXJSE_Value(pIsolate)); | 5311 std::unique_ptr<CFXJSE_Value> firstJSObject(new CFXJSE_Value(pIsolate)); |
5365 std::unique_ptr<CFXJSE_Value> secondJSObject(new CFXJSE_Value(pIsolate)); | 5312 std::unique_ptr<CFXJSE_Value> secondJSObject(new CFXJSE_Value(pIsolate)); |
5366 FXJSE_Value_GetObjectPropByIdx(argFirst.get(), 2, firstJSObject.get()); | 5313 argFirst->GetObjectPropertyByIdx(2, firstJSObject.get()); |
5367 FXJSE_Value_GetObjectPropByIdx(argSecond.get(), 2, secondJSObject.get()); | 5314 argSecond->GetObjectPropertyByIdx(2, secondJSObject.get()); |
5368 if (!FXJSE_Value_IsNull(firstJSObject.get()) && | 5315 if (!FXJSE_Value_IsNull(firstJSObject.get()) && |
5369 !FXJSE_Value_IsNull(secondJSObject.get())) { | 5316 !FXJSE_Value_IsNull(secondJSObject.get())) { |
5370 bRet = (firstJSObject->ToHostObject(nullptr) == | 5317 bRet = (firstJSObject->ToHostObject(nullptr) == |
5371 secondJSObject->ToHostObject(nullptr)); | 5318 secondJSObject->ToHostObject(nullptr)); |
5372 } | 5319 } |
5373 } | 5320 } |
5374 } | 5321 } |
5375 return bRet; | 5322 return bRet; |
5376 } | 5323 } |
5377 | 5324 |
5378 // static | 5325 // static |
5379 void CXFA_FM2JSContext::less_operator(CFXJSE_Value* pThis, | 5326 void CXFA_FM2JSContext::less_operator(CFXJSE_Value* pThis, |
5380 const CFX_ByteStringC& szFuncName, | 5327 const CFX_ByteStringC& szFuncName, |
5381 CFXJSE_Arguments& args) { | 5328 CFXJSE_Arguments& args) { |
5382 if (args.GetLength() == 2) { | 5329 if (args.GetLength() == 2) { |
5383 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5330 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5384 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5331 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5385 if (FXJSE_Value_IsNull(argFirst.get()) || | 5332 if (FXJSE_Value_IsNull(argFirst.get()) || |
5386 FXJSE_Value_IsNull(argSecond.get())) { | 5333 FXJSE_Value_IsNull(argSecond.get())) { |
5387 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 5334 args.GetReturnValue()->SetInteger(0); |
5388 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && | 5335 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && |
5389 FXJSE_Value_IsUTF8String(argSecond.get())) { | 5336 FXJSE_Value_IsUTF8String(argSecond.get())) { |
5390 CFX_ByteString firstOutput; | 5337 CFX_ByteString firstOutput; |
5391 CFX_ByteString secondOutput; | 5338 CFX_ByteString secondOutput; |
5392 FXJSE_Value_ToUTF8String(argFirst.get(), firstOutput); | 5339 argFirst->ToString(firstOutput); |
5393 FXJSE_Value_ToUTF8String(argSecond.get(), secondOutput); | 5340 argSecond->ToString(secondOutput); |
5394 FXJSE_Value_SetInteger( | 5341 args.GetReturnValue()->SetInteger( |
5395 args.GetReturnValue(), | |
5396 firstOutput.Compare(secondOutput.AsStringC()) == -1); | 5342 firstOutput.Compare(secondOutput.AsStringC()) == -1); |
5397 } else { | 5343 } else { |
5398 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5344 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5399 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5345 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5400 FXJSE_Value_SetInteger(args.GetReturnValue(), (first < second) ? 1 : 0); | 5346 args.GetReturnValue()->SetInteger((first < second) ? 1 : 0); |
5401 } | 5347 } |
5402 } else { | 5348 } else { |
5403 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5349 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5404 } | 5350 } |
5405 } | 5351 } |
5406 | 5352 |
5407 // static | 5353 // static |
5408 void CXFA_FM2JSContext::lessequal_operator(CFXJSE_Value* pThis, | 5354 void CXFA_FM2JSContext::lessequal_operator(CFXJSE_Value* pThis, |
5409 const CFX_ByteStringC& szFuncName, | 5355 const CFX_ByteStringC& szFuncName, |
5410 CFXJSE_Arguments& args) { | 5356 CFXJSE_Arguments& args) { |
5411 if (args.GetLength() == 2) { | 5357 if (args.GetLength() == 2) { |
5412 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5358 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5413 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5359 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5414 if (FXJSE_Value_IsNull(argFirst.get()) || | 5360 if (FXJSE_Value_IsNull(argFirst.get()) || |
5415 FXJSE_Value_IsNull(argSecond.get())) { | 5361 FXJSE_Value_IsNull(argSecond.get())) { |
5416 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5362 args.GetReturnValue()->SetInteger((FXJSE_Value_IsNull(argFirst.get()) && |
5417 (FXJSE_Value_IsNull(argFirst.get()) && | 5363 FXJSE_Value_IsNull(argSecond.get())) |
5418 FXJSE_Value_IsNull(argSecond.get())) | 5364 ? 1 |
5419 ? 1 | 5365 : 0); |
5420 : 0); | |
5421 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && | 5366 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && |
5422 FXJSE_Value_IsUTF8String(argSecond.get())) { | 5367 FXJSE_Value_IsUTF8String(argSecond.get())) { |
5423 CFX_ByteString firstOutput; | 5368 CFX_ByteString firstOutput; |
5424 CFX_ByteString secondOutput; | 5369 CFX_ByteString secondOutput; |
5425 FXJSE_Value_ToUTF8String(argFirst.get(), firstOutput); | 5370 argFirst->ToString(firstOutput); |
5426 FXJSE_Value_ToUTF8String(argSecond.get(), secondOutput); | 5371 argSecond->ToString(secondOutput); |
5427 FXJSE_Value_SetInteger( | 5372 args.GetReturnValue()->SetInteger( |
5428 args.GetReturnValue(), | |
5429 firstOutput.Compare(secondOutput.AsStringC()) != 1); | 5373 firstOutput.Compare(secondOutput.AsStringC()) != 1); |
5430 } else { | 5374 } else { |
5431 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5375 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5432 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5376 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5433 FXJSE_Value_SetInteger(args.GetReturnValue(), (first <= second) ? 1 : 0); | 5377 args.GetReturnValue()->SetInteger((first <= second) ? 1 : 0); |
5434 } | 5378 } |
5435 } else { | 5379 } else { |
5436 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5380 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5437 } | 5381 } |
5438 } | 5382 } |
5439 | 5383 |
5440 // static | 5384 // static |
5441 void CXFA_FM2JSContext::greater_operator(CFXJSE_Value* pThis, | 5385 void CXFA_FM2JSContext::greater_operator(CFXJSE_Value* pThis, |
5442 const CFX_ByteStringC& szFuncName, | 5386 const CFX_ByteStringC& szFuncName, |
5443 CFXJSE_Arguments& args) { | 5387 CFXJSE_Arguments& args) { |
5444 if (args.GetLength() == 2) { | 5388 if (args.GetLength() == 2) { |
5445 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5389 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5446 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5390 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5447 if (FXJSE_Value_IsNull(argFirst.get()) || | 5391 if (FXJSE_Value_IsNull(argFirst.get()) || |
5448 FXJSE_Value_IsNull(argSecond.get())) { | 5392 FXJSE_Value_IsNull(argSecond.get())) { |
5449 FXJSE_Value_SetInteger(args.GetReturnValue(), 0); | 5393 args.GetReturnValue()->SetInteger(0); |
5450 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && | 5394 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && |
5451 FXJSE_Value_IsUTF8String(argSecond.get())) { | 5395 FXJSE_Value_IsUTF8String(argSecond.get())) { |
5452 CFX_ByteString firstOutput; | 5396 CFX_ByteString firstOutput; |
5453 CFX_ByteString secondOutput; | 5397 CFX_ByteString secondOutput; |
5454 FXJSE_Value_ToUTF8String(argFirst.get(), firstOutput); | 5398 argFirst->ToString(firstOutput); |
5455 FXJSE_Value_ToUTF8String(argSecond.get(), secondOutput); | 5399 argSecond->ToString(secondOutput); |
5456 FXJSE_Value_SetInteger( | 5400 args.GetReturnValue()->SetInteger( |
5457 args.GetReturnValue(), | |
5458 firstOutput.Compare(secondOutput.AsStringC()) == 1); | 5401 firstOutput.Compare(secondOutput.AsStringC()) == 1); |
5459 } else { | 5402 } else { |
5460 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5403 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5461 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5404 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5462 FXJSE_Value_SetInteger(args.GetReturnValue(), (first > second) ? 1 : 0); | 5405 args.GetReturnValue()->SetInteger((first > second) ? 1 : 0); |
5463 } | 5406 } |
5464 } else { | 5407 } else { |
5465 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5408 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5466 } | 5409 } |
5467 } | 5410 } |
5468 | 5411 |
5469 // static | 5412 // static |
5470 void CXFA_FM2JSContext::greaterequal_operator(CFXJSE_Value* pThis, | 5413 void CXFA_FM2JSContext::greaterequal_operator(CFXJSE_Value* pThis, |
5471 const CFX_ByteStringC& szFuncName, | 5414 const CFX_ByteStringC& szFuncName, |
5472 CFXJSE_Arguments& args) { | 5415 CFXJSE_Arguments& args) { |
5473 if (args.GetLength() == 2) { | 5416 if (args.GetLength() == 2) { |
5474 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5417 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5475 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5418 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5476 if (FXJSE_Value_IsNull(argFirst.get()) || | 5419 if (FXJSE_Value_IsNull(argFirst.get()) || |
5477 FXJSE_Value_IsNull(argSecond.get())) { | 5420 FXJSE_Value_IsNull(argSecond.get())) { |
5478 FXJSE_Value_SetInteger(args.GetReturnValue(), | 5421 args.GetReturnValue()->SetInteger((FXJSE_Value_IsNull(argFirst.get()) && |
5479 (FXJSE_Value_IsNull(argFirst.get()) && | 5422 FXJSE_Value_IsNull(argSecond.get())) |
5480 FXJSE_Value_IsNull(argSecond.get())) | 5423 ? 1 |
5481 ? 1 | 5424 : 0); |
5482 : 0); | |
5483 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && | 5425 } else if (FXJSE_Value_IsUTF8String(argFirst.get()) && |
5484 FXJSE_Value_IsUTF8String(argSecond.get())) { | 5426 FXJSE_Value_IsUTF8String(argSecond.get())) { |
5485 CFX_ByteString firstOutput; | 5427 CFX_ByteString firstOutput; |
5486 CFX_ByteString secondOutput; | 5428 CFX_ByteString secondOutput; |
5487 FXJSE_Value_ToUTF8String(argFirst.get(), firstOutput); | 5429 argFirst->ToString(firstOutput); |
5488 FXJSE_Value_ToUTF8String(argSecond.get(), secondOutput); | 5430 argSecond->ToString(secondOutput); |
5489 FXJSE_Value_SetInteger( | 5431 args.GetReturnValue()->SetInteger( |
5490 args.GetReturnValue(), | |
5491 firstOutput.Compare(secondOutput.AsStringC()) != -1); | 5432 firstOutput.Compare(secondOutput.AsStringC()) != -1); |
5492 } else { | 5433 } else { |
5493 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5434 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5494 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5435 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5495 FXJSE_Value_SetInteger(args.GetReturnValue(), (first >= second) ? 1 : 0); | 5436 args.GetReturnValue()->SetInteger((first >= second) ? 1 : 0); |
5496 } | 5437 } |
5497 } else { | 5438 } else { |
5498 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5439 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5499 } | 5440 } |
5500 } | 5441 } |
5501 | 5442 |
5502 // static | 5443 // static |
5503 void CXFA_FM2JSContext::plus_operator(CFXJSE_Value* pThis, | 5444 void CXFA_FM2JSContext::plus_operator(CFXJSE_Value* pThis, |
5504 const CFX_ByteStringC& szFuncName, | 5445 const CFX_ByteStringC& szFuncName, |
5505 CFXJSE_Arguments& args) { | 5446 CFXJSE_Arguments& args) { |
5506 if (args.GetLength() == 2) { | 5447 if (args.GetLength() == 2) { |
5507 std::unique_ptr<CFXJSE_Value> argFirst = args.GetValue(0); | 5448 std::unique_ptr<CFXJSE_Value> argFirst = args.GetValue(0); |
5508 std::unique_ptr<CFXJSE_Value> argSecond = args.GetValue(1); | 5449 std::unique_ptr<CFXJSE_Value> argSecond = args.GetValue(1); |
5509 if (ValueIsNull(pThis, argFirst.get()) && | 5450 if (ValueIsNull(pThis, argFirst.get()) && |
5510 ValueIsNull(pThis, argSecond.get())) { | 5451 ValueIsNull(pThis, argSecond.get())) { |
5511 FXJSE_Value_SetNull(args.GetReturnValue()); | 5452 args.GetReturnValue()->SetNull(); |
5512 } else { | 5453 } else { |
5513 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5454 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5514 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5455 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5515 FXJSE_Value_SetDouble(args.GetReturnValue(), first + second); | 5456 args.GetReturnValue()->SetDouble(first + second); |
5516 } | 5457 } |
5517 } else { | 5458 } else { |
5518 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5459 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5519 } | 5460 } |
5520 } | 5461 } |
5521 | 5462 |
5522 // static | 5463 // static |
5523 void CXFA_FM2JSContext::minus_operator(CFXJSE_Value* pThis, | 5464 void CXFA_FM2JSContext::minus_operator(CFXJSE_Value* pThis, |
5524 const CFX_ByteStringC& szFuncName, | 5465 const CFX_ByteStringC& szFuncName, |
5525 CFXJSE_Arguments& args) { | 5466 CFXJSE_Arguments& args) { |
5526 if (args.GetLength() == 2) { | 5467 if (args.GetLength() == 2) { |
5527 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5468 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5528 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5469 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5529 if (FXJSE_Value_IsNull(argFirst.get()) && | 5470 if (FXJSE_Value_IsNull(argFirst.get()) && |
5530 FXJSE_Value_IsNull(argSecond.get())) { | 5471 FXJSE_Value_IsNull(argSecond.get())) { |
5531 FXJSE_Value_SetNull(args.GetReturnValue()); | 5472 args.GetReturnValue()->SetNull(); |
5532 } else { | 5473 } else { |
5533 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5474 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5534 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5475 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5535 FXJSE_Value_SetDouble(args.GetReturnValue(), first - second); | 5476 args.GetReturnValue()->SetDouble(first - second); |
5536 } | 5477 } |
5537 } else { | 5478 } else { |
5538 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5479 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5539 } | 5480 } |
5540 } | 5481 } |
5541 | 5482 |
5542 // static | 5483 // static |
5543 void CXFA_FM2JSContext::multiple_operator(CFXJSE_Value* pThis, | 5484 void CXFA_FM2JSContext::multiple_operator(CFXJSE_Value* pThis, |
5544 const CFX_ByteStringC& szFuncName, | 5485 const CFX_ByteStringC& szFuncName, |
5545 CFXJSE_Arguments& args) { | 5486 CFXJSE_Arguments& args) { |
5546 if (args.GetLength() == 2) { | 5487 if (args.GetLength() == 2) { |
5547 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5488 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5548 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5489 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5549 if (FXJSE_Value_IsNull(argFirst.get()) && | 5490 if (FXJSE_Value_IsNull(argFirst.get()) && |
5550 FXJSE_Value_IsNull(argSecond.get())) { | 5491 FXJSE_Value_IsNull(argSecond.get())) { |
5551 FXJSE_Value_SetNull(args.GetReturnValue()); | 5492 args.GetReturnValue()->SetNull(); |
5552 } else { | 5493 } else { |
5553 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5494 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5554 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5495 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5555 FXJSE_Value_SetDouble(args.GetReturnValue(), first * second); | 5496 args.GetReturnValue()->SetDouble(first * second); |
5556 } | 5497 } |
5557 } else { | 5498 } else { |
5558 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5499 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5559 } | 5500 } |
5560 } | 5501 } |
5561 | 5502 |
5562 // static | 5503 // static |
5563 void CXFA_FM2JSContext::divide_operator(CFXJSE_Value* pThis, | 5504 void CXFA_FM2JSContext::divide_operator(CFXJSE_Value* pThis, |
5564 const CFX_ByteStringC& szFuncName, | 5505 const CFX_ByteStringC& szFuncName, |
5565 CFXJSE_Arguments& args) { | 5506 CFXJSE_Arguments& args) { |
5566 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 5507 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
5567 if (args.GetLength() == 2) { | 5508 if (args.GetLength() == 2) { |
5568 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); | 5509 std::unique_ptr<CFXJSE_Value> argFirst = GetSimpleValue(pThis, args, 0); |
5569 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); | 5510 std::unique_ptr<CFXJSE_Value> argSecond = GetSimpleValue(pThis, args, 1); |
5570 if (FXJSE_Value_IsNull(argFirst.get()) && | 5511 if (FXJSE_Value_IsNull(argFirst.get()) && |
5571 FXJSE_Value_IsNull(argSecond.get())) { | 5512 FXJSE_Value_IsNull(argSecond.get())) { |
5572 FXJSE_Value_SetNull(args.GetReturnValue()); | 5513 args.GetReturnValue()->SetNull(); |
5573 } else { | 5514 } else { |
5574 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); | 5515 FX_DOUBLE first = ValueToDouble(pThis, argFirst.get()); |
5575 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); | 5516 FX_DOUBLE second = ValueToDouble(pThis, argSecond.get()); |
5576 if (second == 0.0) { | 5517 if (second == 0.0) { |
5577 pContext->ThrowException(XFA_IDS_DIVIDE_ZERO); | 5518 pContext->ThrowException(XFA_IDS_DIVIDE_ZERO); |
5578 } else { | 5519 } else { |
5579 FXJSE_Value_SetDouble(args.GetReturnValue(), first / second); | 5520 args.GetReturnValue()->SetDouble(first / second); |
5580 } | 5521 } |
5581 } | 5522 } |
5582 } else { | 5523 } else { |
5583 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 5524 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
5584 } | 5525 } |
5585 } | 5526 } |
5586 | 5527 |
5587 // static | 5528 // static |
5588 void CXFA_FM2JSContext::positive_operator(CFXJSE_Value* pThis, | 5529 void CXFA_FM2JSContext::positive_operator(CFXJSE_Value* pThis, |
5589 const CFX_ByteStringC& szFuncName, | 5530 const CFX_ByteStringC& szFuncName, |
5590 CFXJSE_Arguments& args) { | 5531 CFXJSE_Arguments& args) { |
5591 if (args.GetLength() == 1) { | 5532 if (args.GetLength() == 1) { |
5592 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 5533 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
5593 if (FXJSE_Value_IsNull(argOne.get())) { | 5534 if (FXJSE_Value_IsNull(argOne.get())) { |
5594 FXJSE_Value_SetNull(args.GetReturnValue()); | 5535 args.GetReturnValue()->SetNull(); |
5595 } else { | 5536 } else { |
5596 FXJSE_Value_SetDouble(args.GetReturnValue(), | 5537 args.GetReturnValue()->SetDouble(0.0 + |
5597 0.0 + ValueToDouble(pThis, argOne.get())); | 5538 ValueToDouble(pThis, argOne.get())); |
5598 } | 5539 } |
5599 } else { | 5540 } else { |
5600 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5541 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5601 } | 5542 } |
5602 } | 5543 } |
5603 | 5544 |
5604 // static | 5545 // static |
5605 void CXFA_FM2JSContext::negative_operator(CFXJSE_Value* pThis, | 5546 void CXFA_FM2JSContext::negative_operator(CFXJSE_Value* pThis, |
5606 const CFX_ByteStringC& szFuncName, | 5547 const CFX_ByteStringC& szFuncName, |
5607 CFXJSE_Arguments& args) { | 5548 CFXJSE_Arguments& args) { |
5608 if (args.GetLength() == 1) { | 5549 if (args.GetLength() == 1) { |
5609 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 5550 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
5610 if (FXJSE_Value_IsNull(argOne.get())) { | 5551 if (FXJSE_Value_IsNull(argOne.get())) { |
5611 FXJSE_Value_SetNull(args.GetReturnValue()); | 5552 args.GetReturnValue()->SetNull(); |
5612 } else { | 5553 } else { |
5613 FXJSE_Value_SetDouble(args.GetReturnValue(), | 5554 args.GetReturnValue()->SetDouble(0.0 - |
5614 0.0 - ValueToDouble(pThis, argOne.get())); | 5555 ValueToDouble(pThis, argOne.get())); |
5615 } | 5556 } |
5616 } else { | 5557 } else { |
5617 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5558 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5618 } | 5559 } |
5619 } | 5560 } |
5620 | 5561 |
5621 // static | 5562 // static |
5622 void CXFA_FM2JSContext::logical_not_operator(CFXJSE_Value* pThis, | 5563 void CXFA_FM2JSContext::logical_not_operator(CFXJSE_Value* pThis, |
5623 const CFX_ByteStringC& szFuncName, | 5564 const CFX_ByteStringC& szFuncName, |
5624 CFXJSE_Arguments& args) { | 5565 CFXJSE_Arguments& args) { |
5625 if (args.GetLength() == 1) { | 5566 if (args.GetLength() == 1) { |
5626 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); | 5567 std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0); |
5627 if (FXJSE_Value_IsNull(argOne.get())) { | 5568 if (FXJSE_Value_IsNull(argOne.get())) { |
5628 FXJSE_Value_SetNull(args.GetReturnValue()); | 5569 args.GetReturnValue()->SetNull(); |
5629 } else { | 5570 } else { |
5630 FX_DOUBLE first = ValueToDouble(pThis, argOne.get()); | 5571 FX_DOUBLE first = ValueToDouble(pThis, argOne.get()); |
5631 FXJSE_Value_SetInteger(args.GetReturnValue(), (first == 0.0) ? 1 : 0); | 5572 args.GetReturnValue()->SetInteger((first == 0.0) ? 1 : 0); |
5632 } | 5573 } |
5633 } else { | 5574 } else { |
5634 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); | 5575 ToJSContext(pThis, nullptr)->ThrowException(XFA_IDS_COMPILER_ERROR); |
5635 } | 5576 } |
5636 } | 5577 } |
5637 | 5578 |
5638 // static | 5579 // static |
5639 void CXFA_FM2JSContext::dot_accessor(CFXJSE_Value* pThis, | 5580 void CXFA_FM2JSContext::dot_accessor(CFXJSE_Value* pThis, |
5640 const CFX_ByteStringC& szFuncName, | 5581 const CFX_ByteStringC& szFuncName, |
5641 CFXJSE_Arguments& args) { | 5582 CFXJSE_Arguments& args) { |
(...skipping 10 matching lines...) Expand all Loading... |
5652 if (argc > 4) { | 5593 if (argc > 4) { |
5653 bIsStar = FALSE; | 5594 bIsStar = FALSE; |
5654 std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(4); | 5595 std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(4); |
5655 iIndexValue = ValueToInteger(pThis, argIndex.get()); | 5596 iIndexValue = ValueToInteger(pThis, argIndex.get()); |
5656 } | 5597 } |
5657 CFX_ByteString szSomExp; | 5598 CFX_ByteString szSomExp; |
5658 GenerateSomExpression(szName.AsStringC(), iIndexFlags, iIndexValue, bIsStar, | 5599 GenerateSomExpression(szName.AsStringC(), iIndexFlags, iIndexValue, bIsStar, |
5659 szSomExp); | 5600 szSomExp); |
5660 if (FXJSE_Value_IsArray(argAccessor.get())) { | 5601 if (FXJSE_Value_IsArray(argAccessor.get())) { |
5661 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); | 5602 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
5662 FXJSE_Value_GetObjectProp(argAccessor.get(), "length", | 5603 argAccessor->GetObjectProperty("length", pLengthValue.get()); |
5663 pLengthValue.get()); | 5604 int32_t iLength = pLengthValue->ToInteger(); |
5664 int32_t iLength = FXJSE_Value_ToInteger(pLengthValue.get()); | |
5665 int32_t iCounter = 0; | 5605 int32_t iCounter = 0; |
5666 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); | 5606 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
5667 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); | 5607 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
5668 for (int32_t i = 0; i < (iLength - 2); i++) { | 5608 for (int32_t i = 0; i < (iLength - 2); i++) { |
5669 iSizes[i] = 0; | 5609 iSizes[i] = 0; |
5670 } | 5610 } |
5671 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); | 5611 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
5672 FX_BOOL bAttribute = FALSE; | 5612 FX_BOOL bAttribute = FALSE; |
5673 for (int32_t i = 2; i < iLength; i++) { | 5613 for (int32_t i = 2; i < iLength; i++) { |
5674 FXJSE_Value_GetObjectPropByIdx(argAccessor.get(), i, hJSObjValue.get()); | 5614 argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
5675 XFA_RESOLVENODE_RS resoveNodeRS; | 5615 XFA_RESOLVENODE_RS resoveNodeRS; |
5676 int32_t iRet = | 5616 int32_t iRet = |
5677 ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), | 5617 ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
5678 resoveNodeRS, TRUE, szName.IsEmpty()); | 5618 resoveNodeRS, TRUE, szName.IsEmpty()); |
5679 if (iRet > 0) { | 5619 if (iRet > 0) { |
5680 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), | 5620 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
5681 hResolveValues[i - 2], iSizes[i - 2], bAttribute); | 5621 hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
5682 iCounter += iSizes[i - 2]; | 5622 iCounter += iSizes[i - 2]; |
5683 } | 5623 } |
5684 } | 5624 } |
5685 if (iCounter > 0) { | 5625 if (iCounter > 0) { |
5686 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); | 5626 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); |
5687 for (int32_t i = 0; i < (iCounter + 2); i++) | 5627 for (int32_t i = 0; i < (iCounter + 2); i++) |
5688 rgValues[i] = new CFXJSE_Value(pIsolate); | 5628 rgValues[i] = new CFXJSE_Value(pIsolate); |
5689 | 5629 |
5690 FXJSE_Value_SetInteger(rgValues[0], 1); | 5630 rgValues[0]->SetInteger(1); |
5691 if (bAttribute) { | 5631 if (bAttribute) { |
5692 FXJSE_Value_SetUTF8String(rgValues[1], szName.AsStringC()); | 5632 rgValues[1]->SetString(szName.AsStringC()); |
5693 } else { | 5633 } else { |
5694 FXJSE_Value_SetNull(rgValues[1]); | 5634 rgValues[1]->SetNull(); |
5695 } | 5635 } |
5696 int32_t iIndex = 2; | 5636 int32_t iIndex = 2; |
5697 for (int32_t i = 0; i < iLength - 2; i++) { | 5637 for (int32_t i = 0; i < iLength - 2; i++) { |
5698 for (int32_t j = 0; j < iSizes[i]; j++) { | 5638 for (int32_t j = 0; j < iSizes[i]; j++) { |
5699 FXJSE_Value_Set(rgValues[iIndex], hResolveValues[i][j]); | 5639 rgValues[iIndex]->Assign(hResolveValues[i][j]); |
5700 iIndex++; | 5640 iIndex++; |
5701 } | 5641 } |
5702 } | 5642 } |
5703 FXJSE_Value_SetArray(args.GetReturnValue(), (iCounter + 2), rgValues); | 5643 args.GetReturnValue()->SetArray(iCounter + 2, rgValues); |
5704 for (int32_t i = 0; i < (iCounter + 2); i++) | 5644 for (int32_t i = 0; i < (iCounter + 2); i++) |
5705 delete rgValues[i]; | 5645 delete rgValues[i]; |
5706 | 5646 |
5707 FX_Free(rgValues); | 5647 FX_Free(rgValues); |
5708 } else { | 5648 } else { |
5709 CFX_WideString wsPropertyName = | 5649 CFX_WideString wsPropertyName = |
5710 CFX_WideString::FromUTF8(szName.AsStringC()); | 5650 CFX_WideString::FromUTF8(szName.AsStringC()); |
5711 CFX_WideString wsSomExpression = | 5651 CFX_WideString wsSomExpression = |
5712 CFX_WideString::FromUTF8(szSomExp.AsStringC()); | 5652 CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
5713 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, | 5653 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
(...skipping 29 matching lines...) Expand all Loading... |
5743 if (iRet > 0) { | 5683 if (iRet > 0) { |
5744 CFXJSE_Value** hResolveValues; | 5684 CFXJSE_Value** hResolveValues; |
5745 int32_t iSize = 0; | 5685 int32_t iSize = 0; |
5746 FX_BOOL bAttribute = FALSE; | 5686 FX_BOOL bAttribute = FALSE; |
5747 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), | 5687 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), |
5748 hResolveValues, iSize, bAttribute); | 5688 hResolveValues, iSize, bAttribute); |
5749 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); | 5689 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
5750 for (int32_t i = 0; i < (iSize + 2); i++) | 5690 for (int32_t i = 0; i < (iSize + 2); i++) |
5751 rgValues[i] = new CFXJSE_Value(pIsolate); | 5691 rgValues[i] = new CFXJSE_Value(pIsolate); |
5752 | 5692 |
5753 FXJSE_Value_SetInteger(rgValues[0], 1); | 5693 rgValues[0]->SetInteger(1); |
5754 if (bAttribute) { | 5694 if (bAttribute) { |
5755 FXJSE_Value_SetUTF8String(rgValues[1], szName.AsStringC()); | 5695 rgValues[1]->SetString(szName.AsStringC()); |
5756 } else { | 5696 } else { |
5757 FXJSE_Value_SetNull(rgValues[1]); | 5697 rgValues[1]->SetNull(); |
5758 } | 5698 } |
5759 for (int32_t i = 0; i < iSize; i++) { | 5699 for (int32_t i = 0; i < iSize; i++) { |
5760 FXJSE_Value_Set(rgValues[i + 2], hResolveValues[i]); | 5700 rgValues[i + 2]->Assign(hResolveValues[i]); |
5761 } | 5701 } |
5762 FXJSE_Value_SetArray(args.GetReturnValue(), (iSize + 2), rgValues); | 5702 args.GetReturnValue()->SetArray(iSize + 2, rgValues); |
5763 for (int32_t i = 0; i < (iSize + 2); i++) | 5703 for (int32_t i = 0; i < (iSize + 2); i++) |
5764 delete rgValues[i]; | 5704 delete rgValues[i]; |
5765 | 5705 |
5766 FX_Free(rgValues); | 5706 FX_Free(rgValues); |
5767 for (int32_t i = 0; i < iSize; i++) | 5707 for (int32_t i = 0; i < iSize; i++) |
5768 delete hResolveValues[i]; | 5708 delete hResolveValues[i]; |
5769 | 5709 |
5770 FX_Free(hResolveValues); | 5710 FX_Free(hResolveValues); |
5771 } else { | 5711 } else { |
5772 CFX_WideString wsPropertyName = | 5712 CFX_WideString wsPropertyName = |
(...skipping 27 matching lines...) Expand all Loading... |
5800 if (argc > 4) { | 5740 if (argc > 4) { |
5801 bIsStar = FALSE; | 5741 bIsStar = FALSE; |
5802 std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(4); | 5742 std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(4); |
5803 iIndexValue = ValueToInteger(pThis, argIndex.get()); | 5743 iIndexValue = ValueToInteger(pThis, argIndex.get()); |
5804 } | 5744 } |
5805 CFX_ByteString szSomExp; | 5745 CFX_ByteString szSomExp; |
5806 GenerateSomExpression(szName.AsStringC(), iIndexFlags, iIndexValue, bIsStar, | 5746 GenerateSomExpression(szName.AsStringC(), iIndexFlags, iIndexValue, bIsStar, |
5807 szSomExp); | 5747 szSomExp); |
5808 if (FXJSE_Value_IsArray(argAccessor.get())) { | 5748 if (FXJSE_Value_IsArray(argAccessor.get())) { |
5809 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); | 5749 std::unique_ptr<CFXJSE_Value> pLengthValue(new CFXJSE_Value(pIsolate)); |
5810 FXJSE_Value_GetObjectProp(argAccessor.get(), "length", | 5750 argAccessor->GetObjectProperty("length", pLengthValue.get()); |
5811 pLengthValue.get()); | 5751 int32_t iLength = pLengthValue->ToInteger(); |
5812 int32_t iLength = FXJSE_Value_ToInteger(pLengthValue.get()); | |
5813 int32_t iCounter = 0; | 5752 int32_t iCounter = 0; |
5814 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); | 5753 CFXJSE_Value*** hResolveValues = FX_Alloc(CFXJSE_Value**, iLength - 2); |
5815 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); | 5754 int32_t* iSizes = FX_Alloc(int32_t, iLength - 2); |
5816 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); | 5755 std::unique_ptr<CFXJSE_Value> hJSObjValue(new CFXJSE_Value(pIsolate)); |
5817 FX_BOOL bAttribute = FALSE; | 5756 FX_BOOL bAttribute = FALSE; |
5818 for (int32_t i = 2; i < iLength; i++) { | 5757 for (int32_t i = 2; i < iLength; i++) { |
5819 FXJSE_Value_GetObjectPropByIdx(argAccessor.get(), i, hJSObjValue.get()); | 5758 argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get()); |
5820 XFA_RESOLVENODE_RS resoveNodeRS; | 5759 XFA_RESOLVENODE_RS resoveNodeRS; |
5821 int32_t iRet = | 5760 int32_t iRet = |
5822 ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), | 5761 ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(), |
5823 resoveNodeRS, FALSE); | 5762 resoveNodeRS, FALSE); |
5824 if (iRet > 0) { | 5763 if (iRet > 0) { |
5825 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), | 5764 ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(), |
5826 hResolveValues[i - 2], iSizes[i - 2], bAttribute); | 5765 hResolveValues[i - 2], iSizes[i - 2], bAttribute); |
5827 iCounter += iSizes[i - 2]; | 5766 iCounter += iSizes[i - 2]; |
5828 } | 5767 } |
5829 } | 5768 } |
5830 if (iCounter > 0) { | 5769 if (iCounter > 0) { |
5831 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); | 5770 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iCounter + 2); |
5832 for (int32_t i = 0; i < (iCounter + 2); i++) | 5771 for (int32_t i = 0; i < (iCounter + 2); i++) |
5833 rgValues[i] = new CFXJSE_Value(pIsolate); | 5772 rgValues[i] = new CFXJSE_Value(pIsolate); |
5834 | 5773 |
5835 FXJSE_Value_SetInteger(rgValues[0], 1); | 5774 rgValues[0]->SetInteger(1); |
5836 if (bAttribute) { | 5775 if (bAttribute) { |
5837 FXJSE_Value_SetUTF8String(rgValues[1], szName.AsStringC()); | 5776 rgValues[1]->SetString(szName.AsStringC()); |
5838 } else { | 5777 } else { |
5839 FXJSE_Value_SetNull(rgValues[1]); | 5778 rgValues[1]->SetNull(); |
5840 } | 5779 } |
5841 int32_t iIndex = 2; | 5780 int32_t iIndex = 2; |
5842 for (int32_t i = 0; i < iLength - 2; i++) { | 5781 for (int32_t i = 0; i < iLength - 2; i++) { |
5843 for (int32_t j = 0; j < iSizes[i]; j++) { | 5782 for (int32_t j = 0; j < iSizes[i]; j++) { |
5844 FXJSE_Value_Set(rgValues[iIndex], hResolveValues[i][j]); | 5783 rgValues[iIndex]->Assign(hResolveValues[i][j]); |
5845 iIndex++; | 5784 iIndex++; |
5846 } | 5785 } |
5847 } | 5786 } |
5848 FXJSE_Value_SetArray(args.GetReturnValue(), (iCounter + 2), rgValues); | 5787 args.GetReturnValue()->SetArray(iCounter + 2, rgValues); |
5849 for (int32_t i = 0; i < (iCounter + 2); i++) | 5788 for (int32_t i = 0; i < (iCounter + 2); i++) |
5850 delete rgValues[i]; | 5789 delete rgValues[i]; |
5851 | 5790 |
5852 FX_Free(rgValues); | 5791 FX_Free(rgValues); |
5853 } else { | 5792 } else { |
5854 CFX_WideString wsPropertyName = | 5793 CFX_WideString wsPropertyName = |
5855 CFX_WideString::FromUTF8(szName.AsStringC()); | 5794 CFX_WideString::FromUTF8(szName.AsStringC()); |
5856 CFX_WideString wsSomExpression = | 5795 CFX_WideString wsSomExpression = |
5857 CFX_WideString::FromUTF8(szSomExp.AsStringC()); | 5796 CFX_WideString::FromUTF8(szSomExp.AsStringC()); |
5858 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, | 5797 pContext->ThrowException(XFA_IDS_ACCESS_PROPERTY_IN_NOT_OBJECT, |
(...skipping 27 matching lines...) Expand all Loading... |
5886 if (iRet > 0) { | 5825 if (iRet > 0) { |
5887 CFXJSE_Value** hResolveValues; | 5826 CFXJSE_Value** hResolveValues; |
5888 int32_t iSize = 0; | 5827 int32_t iSize = 0; |
5889 FX_BOOL bAttribute = FALSE; | 5828 FX_BOOL bAttribute = FALSE; |
5890 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), | 5829 ParseResolveResult(pThis, resoveNodeRS, argAccessor.get(), |
5891 hResolveValues, iSize, bAttribute); | 5830 hResolveValues, iSize, bAttribute); |
5892 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); | 5831 CFXJSE_Value** rgValues = FX_Alloc(CFXJSE_Value*, iSize + 2); |
5893 for (int32_t i = 0; i < (iSize + 2); i++) | 5832 for (int32_t i = 0; i < (iSize + 2); i++) |
5894 rgValues[i] = new CFXJSE_Value(pIsolate); | 5833 rgValues[i] = new CFXJSE_Value(pIsolate); |
5895 | 5834 |
5896 FXJSE_Value_SetInteger(rgValues[0], 1); | 5835 rgValues[0]->SetInteger(1); |
5897 if (bAttribute) { | 5836 if (bAttribute) { |
5898 FXJSE_Value_SetUTF8String(rgValues[1], szName.AsStringC()); | 5837 rgValues[1]->SetString(szName.AsStringC()); |
5899 } else { | 5838 } else { |
5900 FXJSE_Value_SetNull(rgValues[1]); | 5839 rgValues[1]->SetNull(); |
5901 } | 5840 } |
5902 for (int32_t i = 0; i < iSize; i++) { | 5841 for (int32_t i = 0; i < iSize; i++) { |
5903 FXJSE_Value_Set(rgValues[i + 2], hResolveValues[i]); | 5842 rgValues[i + 2]->Assign(hResolveValues[i]); |
5904 } | 5843 } |
5905 FXJSE_Value_SetArray(args.GetReturnValue(), (iSize + 2), rgValues); | 5844 args.GetReturnValue()->SetArray(iSize + 2, rgValues); |
5906 for (int32_t i = 0; i < (iSize + 2); i++) | 5845 for (int32_t i = 0; i < (iSize + 2); i++) |
5907 delete rgValues[i]; | 5846 delete rgValues[i]; |
5908 | 5847 |
5909 FX_Free(rgValues); | 5848 FX_Free(rgValues); |
5910 for (int32_t i = 0; i < iSize; i++) | 5849 for (int32_t i = 0; i < iSize; i++) |
5911 delete hResolveValues[i]; | 5850 delete hResolveValues[i]; |
5912 | 5851 |
5913 FX_Free(hResolveValues); | 5852 FX_Free(hResolveValues); |
5914 } else { | 5853 } else { |
5915 CFX_WideString wsPropertyName = | 5854 CFX_WideString wsPropertyName = |
(...skipping 23 matching lines...) Expand all Loading... |
5939 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); | 5878 pContext->ThrowException(XFA_IDS_ARGUMENT_MISMATCH); |
5940 } else { | 5879 } else { |
5941 CFX_WideString scriptString = | 5880 CFX_WideString scriptString = |
5942 CFX_WideString::FromUTF8(argString.AsStringC()); | 5881 CFX_WideString::FromUTF8(argString.AsStringC()); |
5943 CFX_WideTextBuf wsJavaScriptBuf; | 5882 CFX_WideTextBuf wsJavaScriptBuf; |
5944 CFX_WideString wsError; | 5883 CFX_WideString wsError; |
5945 CXFA_FM2JSContext::Translate(scriptString.AsStringC(), wsJavaScriptBuf, | 5884 CXFA_FM2JSContext::Translate(scriptString.AsStringC(), wsJavaScriptBuf, |
5946 wsError); | 5885 wsError); |
5947 if (wsError.IsEmpty()) { | 5886 if (wsError.IsEmpty()) { |
5948 CFX_WideString javaScript = wsJavaScriptBuf.MakeString(); | 5887 CFX_WideString javaScript = wsJavaScriptBuf.MakeString(); |
5949 FXJSE_Value_SetUTF8String( | 5888 args.GetReturnValue()->SetString( |
5950 args.GetReturnValue(), | |
5951 FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()) | 5889 FX_UTF8Encode(javaScript.c_str(), javaScript.GetLength()) |
5952 .AsStringC()); | 5890 .AsStringC()); |
5953 } else { | 5891 } else { |
5954 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 5892 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
5955 } | 5893 } |
5956 } | 5894 } |
5957 } else { | 5895 } else { |
5958 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Eval"); | 5896 pContext->ThrowException(XFA_IDS_INCORRECT_NUMBER_OF_METHOD, L"Eval"); |
5959 } | 5897 } |
5960 } | 5898 } |
5961 | 5899 |
5962 // static | 5900 // static |
5963 void CXFA_FM2JSContext::is_fm_object(CFXJSE_Value* pThis, | 5901 void CXFA_FM2JSContext::is_fm_object(CFXJSE_Value* pThis, |
5964 const CFX_ByteStringC& szFuncName, | 5902 const CFX_ByteStringC& szFuncName, |
5965 CFXJSE_Arguments& args) { | 5903 CFXJSE_Arguments& args) { |
5966 if (args.GetLength() == 1) { | 5904 if (args.GetLength() == 1) { |
5967 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5905 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
5968 FXJSE_Value_SetBoolean(args.GetReturnValue(), | 5906 args.GetReturnValue()->SetBoolean(FXJSE_Value_IsObject(argOne.get())); |
5969 FXJSE_Value_IsObject(argOne.get())); | |
5970 } else { | 5907 } else { |
5971 FXJSE_Value_SetBoolean(args.GetReturnValue(), FALSE); | 5908 args.GetReturnValue()->SetBoolean(FALSE); |
5972 } | 5909 } |
5973 } | 5910 } |
5974 | 5911 |
5975 // static | 5912 // static |
5976 void CXFA_FM2JSContext::is_fm_array(CFXJSE_Value* pThis, | 5913 void CXFA_FM2JSContext::is_fm_array(CFXJSE_Value* pThis, |
5977 const CFX_ByteStringC& szFuncName, | 5914 const CFX_ByteStringC& szFuncName, |
5978 CFXJSE_Arguments& args) { | 5915 CFXJSE_Arguments& args) { |
5979 if (args.GetLength() == 1) { | 5916 if (args.GetLength() == 1) { |
5980 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5917 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
5981 FX_BOOL bIsArray = FXJSE_Value_IsArray(argOne.get()); | 5918 FX_BOOL bIsArray = FXJSE_Value_IsArray(argOne.get()); |
5982 FXJSE_Value_SetBoolean(args.GetReturnValue(), bIsArray); | 5919 args.GetReturnValue()->SetBoolean(bIsArray); |
5983 } else { | 5920 } else { |
5984 FXJSE_Value_SetBoolean(args.GetReturnValue(), FALSE); | 5921 args.GetReturnValue()->SetBoolean(FALSE); |
5985 } | 5922 } |
5986 } | 5923 } |
5987 | 5924 |
5988 // static | 5925 // static |
5989 void CXFA_FM2JSContext::get_fm_value(CFXJSE_Value* pThis, | 5926 void CXFA_FM2JSContext::get_fm_value(CFXJSE_Value* pThis, |
5990 const CFX_ByteStringC& szFuncName, | 5927 const CFX_ByteStringC& szFuncName, |
5991 CFXJSE_Arguments& args) { | 5928 CFXJSE_Arguments& args) { |
5992 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 5929 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
5993 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 5930 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
5994 if (args.GetLength() == 1) { | 5931 if (args.GetLength() == 1) { |
5995 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5932 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
5996 if (FXJSE_Value_IsArray(argOne.get())) { | 5933 if (FXJSE_Value_IsArray(argOne.get())) { |
5997 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 5934 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
5998 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 5935 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
5999 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 1, propertyValue.get()); | 5936 argOne->GetObjectPropertyByIdx(1, propertyValue.get()); |
6000 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 2, jsObjectValue.get()); | 5937 argOne->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6001 if (FXJSE_Value_IsNull(propertyValue.get())) { | 5938 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6002 GetObjectDefaultValue(jsObjectValue.get(), args.GetReturnValue()); | 5939 GetObjectDefaultValue(jsObjectValue.get(), args.GetReturnValue()); |
6003 } else { | 5940 } else { |
6004 CFX_ByteString propertyStr; | 5941 CFX_ByteString propertyStr; |
6005 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 5942 propertyValue->ToString(propertyStr); |
6006 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 5943 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6007 args.GetReturnValue()); | 5944 args.GetReturnValue()); |
6008 } | 5945 } |
6009 } else if (FXJSE_Value_IsObject(argOne.get())) { | 5946 } else if (FXJSE_Value_IsObject(argOne.get())) { |
6010 GetObjectDefaultValue(argOne.get(), args.GetReturnValue()); | 5947 GetObjectDefaultValue(argOne.get(), args.GetReturnValue()); |
6011 } else { | 5948 } else { |
6012 FXJSE_Value_Set(args.GetReturnValue(), argOne.get()); | 5949 args.GetReturnValue()->Assign(argOne.get()); |
6013 } | 5950 } |
6014 } else { | 5951 } else { |
6015 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 5952 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
6016 } | 5953 } |
6017 } | 5954 } |
6018 | 5955 |
6019 // static | 5956 // static |
6020 void CXFA_FM2JSContext::get_fm_jsobj(CFXJSE_Value* pThis, | 5957 void CXFA_FM2JSContext::get_fm_jsobj(CFXJSE_Value* pThis, |
6021 const CFX_ByteStringC& szFuncName, | 5958 const CFX_ByteStringC& szFuncName, |
6022 CFXJSE_Arguments& args) { | 5959 CFXJSE_Arguments& args) { |
6023 if (args.GetLength() == 1) { | 5960 if (args.GetLength() == 1) { |
6024 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5961 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
6025 if (FXJSE_Value_IsArray(argOne.get())) { | 5962 if (FXJSE_Value_IsArray(argOne.get())) { |
6026 #ifndef NDEBUG | 5963 #ifndef NDEBUG |
6027 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 5964 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
6028 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 5965 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
6029 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 5966 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6030 FXJSE_Value_GetObjectProp(argOne.get(), "length", lengthValue.get()); | 5967 argOne->GetObjectProperty("length", lengthValue.get()); |
6031 ASSERT(FXJSE_Value_ToInteger(lengthValue.get()) >= 3); | 5968 ASSERT(lengthValue->ToInteger() >= 3); |
6032 #endif | 5969 #endif |
6033 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 2, args.GetReturnValue()); | 5970 argOne->GetObjectPropertyByIdx(2, args.GetReturnValue()); |
6034 } else { | 5971 } else { |
6035 FXJSE_Value_Set(args.GetReturnValue(), argOne.get()); | 5972 args.GetReturnValue()->Assign(argOne.get()); |
6036 } | 5973 } |
6037 } else { | 5974 } else { |
6038 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 5975 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
6039 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 5976 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
6040 } | 5977 } |
6041 } | 5978 } |
6042 | 5979 |
6043 // static | 5980 // static |
6044 void CXFA_FM2JSContext::fm_var_filter(CFXJSE_Value* pThis, | 5981 void CXFA_FM2JSContext::fm_var_filter(CFXJSE_Value* pThis, |
6045 const CFX_ByteStringC& szFuncName, | 5982 const CFX_ByteStringC& szFuncName, |
6046 CFXJSE_Arguments& args) { | 5983 CFXJSE_Arguments& args) { |
6047 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 5984 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
6048 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 5985 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
6049 if (args.GetLength() == 1) { | 5986 if (args.GetLength() == 1) { |
6050 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); | 5987 std::unique_ptr<CFXJSE_Value> argOne = args.GetValue(0); |
6051 if (FXJSE_Value_IsArray(argOne.get())) { | 5988 if (FXJSE_Value_IsArray(argOne.get())) { |
6052 #ifndef NDEBUG | 5989 #ifndef NDEBUG |
6053 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 5990 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6054 FXJSE_Value_GetObjectProp(argOne.get(), "length", lengthValue.get()); | 5991 argOne->GetObjectProperty("length", lengthValue.get()); |
6055 ASSERT(FXJSE_Value_ToInteger(lengthValue.get()) >= 3); | 5992 ASSERT(lengthValue->ToInteger() >= 3); |
6056 #endif | 5993 #endif |
6057 std::unique_ptr<CFXJSE_Value> flagsValue(new CFXJSE_Value(pIsolate)); | 5994 std::unique_ptr<CFXJSE_Value> flagsValue(new CFXJSE_Value(pIsolate)); |
6058 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 0, flagsValue.get()); | 5995 argOne->GetObjectPropertyByIdx(0, flagsValue.get()); |
6059 int32_t iFlags = FXJSE_Value_ToInteger(flagsValue.get()); | 5996 int32_t iFlags = flagsValue->ToInteger(); |
6060 if (iFlags == 4) { | 5997 if (iFlags == 4) { |
6061 CFXJSE_Value* rgValues[3]; | 5998 CFXJSE_Value* rgValues[3]; |
6062 for (int32_t i = 0; i < 3; i++) | 5999 for (int32_t i = 0; i < 3; i++) |
6063 rgValues[i] = new CFXJSE_Value(pIsolate); | 6000 rgValues[i] = new CFXJSE_Value(pIsolate); |
6064 | 6001 |
6065 FXJSE_Value_SetInteger(rgValues[0], 3); | 6002 rgValues[0]->SetInteger(3); |
6066 FXJSE_Value_SetNull(rgValues[1]); | 6003 rgValues[1]->SetNull(); |
6067 FXJSE_Value_SetNull(rgValues[2]); | 6004 rgValues[2]->SetNull(); |
6068 FXJSE_Value_SetArray(args.GetReturnValue(), 3, rgValues); | 6005 args.GetReturnValue()->SetArray(3, rgValues); |
6069 for (int32_t i = 0; i < 3; i++) | 6006 for (int32_t i = 0; i < 3; i++) |
6070 delete rgValues[i]; | 6007 delete rgValues[i]; |
6071 } else if (iFlags == 3) { | 6008 } else if (iFlags == 3) { |
6072 std::unique_ptr<CFXJSE_Value> objectValue(new CFXJSE_Value(pIsolate)); | 6009 std::unique_ptr<CFXJSE_Value> objectValue(new CFXJSE_Value(pIsolate)); |
6073 FXJSE_Value_GetObjectPropByIdx(argOne.get(), 2, objectValue.get()); | 6010 argOne->GetObjectPropertyByIdx(2, objectValue.get()); |
6074 if (!FXJSE_Value_IsNull(objectValue.get())) { | 6011 if (!FXJSE_Value_IsNull(objectValue.get())) { |
6075 FXJSE_Value_Set(args.GetReturnValue(), argOne.get()); | 6012 args.GetReturnValue()->Assign(argOne.get()); |
6076 } else { | 6013 } else { |
6077 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 6014 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
6078 } | 6015 } |
6079 } else { | 6016 } else { |
6080 std::unique_ptr<CFXJSE_Value> simpleValue = | 6017 std::unique_ptr<CFXJSE_Value> simpleValue = |
6081 GetSimpleValue(pThis, args, 0); | 6018 GetSimpleValue(pThis, args, 0); |
6082 FXJSE_Value_Set(args.GetReturnValue(), simpleValue.get()); | 6019 args.GetReturnValue()->Assign(simpleValue.get()); |
6083 } | 6020 } |
6084 } else { | 6021 } else { |
6085 std::unique_ptr<CFXJSE_Value> simpleValue = | 6022 std::unique_ptr<CFXJSE_Value> simpleValue = |
6086 GetSimpleValue(pThis, args, 0); | 6023 GetSimpleValue(pThis, args, 0); |
6087 FXJSE_Value_Set(args.GetReturnValue(), simpleValue.get()); | 6024 args.GetReturnValue()->Assign(simpleValue.get()); |
6088 } | 6025 } |
6089 } else { | 6026 } else { |
6090 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); | 6027 pContext->ThrowException(XFA_IDS_COMPILER_ERROR); |
6091 } | 6028 } |
6092 } | 6029 } |
6093 | 6030 |
6094 // static | 6031 // static |
6095 void CXFA_FM2JSContext::concat_fm_object(CFXJSE_Value* pThis, | 6032 void CXFA_FM2JSContext::concat_fm_object(CFXJSE_Value* pThis, |
6096 const CFX_ByteStringC& szFuncName, | 6033 const CFX_ByteStringC& szFuncName, |
6097 CFXJSE_Arguments& args) { | 6034 CFXJSE_Arguments& args) { |
6098 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6035 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6099 uint32_t iLength = 0; | 6036 uint32_t iLength = 0; |
6100 int32_t argc = args.GetLength(); | 6037 int32_t argc = args.GetLength(); |
6101 std::vector<std::unique_ptr<CFXJSE_Value>> argValues; | 6038 std::vector<std::unique_ptr<CFXJSE_Value>> argValues; |
6102 for (int32_t i = 0; i < argc; i++) { | 6039 for (int32_t i = 0; i < argc; i++) { |
6103 argValues.push_back(args.GetValue(i)); | 6040 argValues.push_back(args.GetValue(i)); |
6104 if (FXJSE_Value_IsArray(argValues[i].get())) { | 6041 if (FXJSE_Value_IsArray(argValues[i].get())) { |
6105 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6042 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6106 FXJSE_Value_GetObjectProp(argValues[i].get(), "length", | 6043 argValues[i]->GetObjectProperty("length", lengthValue.get()); |
6107 lengthValue.get()); | 6044 int32_t length = lengthValue->ToInteger(); |
6108 int32_t length = FXJSE_Value_ToInteger(lengthValue.get()); | |
6109 iLength = iLength + ((length > 2) ? (length - 2) : 0); | 6045 iLength = iLength + ((length > 2) ? (length - 2) : 0); |
6110 } | 6046 } |
6111 iLength += 1; | 6047 iLength += 1; |
6112 } | 6048 } |
6113 CFXJSE_Value** returnValues = FX_Alloc(CFXJSE_Value*, iLength); | 6049 CFXJSE_Value** returnValues = FX_Alloc(CFXJSE_Value*, iLength); |
6114 for (int32_t i = 0; i < (int32_t)iLength; i++) | 6050 for (int32_t i = 0; i < (int32_t)iLength; i++) |
6115 returnValues[i] = new CFXJSE_Value(pIsolate); | 6051 returnValues[i] = new CFXJSE_Value(pIsolate); |
6116 | 6052 |
6117 int32_t index = 0; | 6053 int32_t index = 0; |
6118 for (int32_t i = 0; i < argc; i++) { | 6054 for (int32_t i = 0; i < argc; i++) { |
6119 if (FXJSE_Value_IsArray(argValues[i].get())) { | 6055 if (FXJSE_Value_IsArray(argValues[i].get())) { |
6120 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6056 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6121 FXJSE_Value_GetObjectProp(argValues[i].get(), "length", | 6057 argValues[i]->GetObjectProperty("length", lengthValue.get()); |
6122 lengthValue.get()); | 6058 int32_t length = lengthValue->ToInteger(); |
6123 int32_t length = FXJSE_Value_ToInteger(lengthValue.get()); | |
6124 for (int32_t j = 2; j < length; j++) { | 6059 for (int32_t j = 2; j < length; j++) { |
6125 FXJSE_Value_GetObjectPropByIdx(argValues[i].get(), j, | 6060 argValues[i]->GetObjectPropertyByIdx(j, returnValues[index]); |
6126 returnValues[index]); | |
6127 index++; | 6061 index++; |
6128 } | 6062 } |
6129 } | 6063 } |
6130 FXJSE_Value_Set(returnValues[index], argValues[i].get()); | 6064 returnValues[index]->Assign(argValues[i].get()); |
6131 index++; | 6065 index++; |
6132 } | 6066 } |
6133 FXJSE_Value_SetArray(args.GetReturnValue(), iLength, returnValues); | 6067 args.GetReturnValue()->SetArray(iLength, returnValues); |
6134 for (int32_t i = 0; i < (int32_t)iLength; i++) | 6068 for (int32_t i = 0; i < (int32_t)iLength; i++) |
6135 delete returnValues[i]; | 6069 delete returnValues[i]; |
6136 | 6070 |
6137 FX_Free(returnValues); | 6071 FX_Free(returnValues); |
6138 } | 6072 } |
6139 | 6073 |
6140 // static | 6074 // static |
6141 std::unique_ptr<CFXJSE_Value> CXFA_FM2JSContext::GetSimpleValue( | 6075 std::unique_ptr<CFXJSE_Value> CXFA_FM2JSContext::GetSimpleValue( |
6142 CFXJSE_Value* pThis, | 6076 CFXJSE_Value* pThis, |
6143 CFXJSE_Arguments& args, | 6077 CFXJSE_Arguments& args, |
6144 uint32_t index) { | 6078 uint32_t index) { |
6145 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6079 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6146 ASSERT(index < (uint32_t)args.GetLength()); | 6080 ASSERT(index < (uint32_t)args.GetLength()); |
6147 std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(index); | 6081 std::unique_ptr<CFXJSE_Value> argIndex = args.GetValue(index); |
6148 if (FXJSE_Value_IsArray(argIndex.get())) { | 6082 if (FXJSE_Value_IsArray(argIndex.get())) { |
6149 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6083 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6150 FXJSE_Value_GetObjectProp(argIndex.get(), "length", lengthValue.get()); | 6084 argIndex->GetObjectProperty("length", lengthValue.get()); |
6151 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 6085 int32_t iLength = lengthValue->ToInteger(); |
6152 std::unique_ptr<CFXJSE_Value> simpleValue(new CFXJSE_Value(pIsolate)); | 6086 std::unique_ptr<CFXJSE_Value> simpleValue(new CFXJSE_Value(pIsolate)); |
6153 if (iLength > 2) { | 6087 if (iLength > 2) { |
6154 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6088 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6155 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6089 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6156 FXJSE_Value_GetObjectPropByIdx(argIndex.get(), 1, propertyValue.get()); | 6090 argIndex->GetObjectPropertyByIdx(1, propertyValue.get()); |
6157 FXJSE_Value_GetObjectPropByIdx(argIndex.get(), 2, jsObjectValue.get()); | 6091 argIndex->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6158 if (FXJSE_Value_IsNull(propertyValue.get())) { | 6092 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6159 GetObjectDefaultValue(jsObjectValue.get(), simpleValue.get()); | 6093 GetObjectDefaultValue(jsObjectValue.get(), simpleValue.get()); |
6160 } else { | 6094 } else { |
6161 CFX_ByteString propertyStr; | 6095 CFX_ByteString propertyStr; |
6162 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 6096 propertyValue->ToString(propertyStr); |
6163 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 6097 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6164 simpleValue.get()); | 6098 simpleValue.get()); |
6165 } | 6099 } |
6166 } else { | 6100 } else { |
6167 FXJSE_Value_SetUndefined(simpleValue.get()); | 6101 simpleValue.get()->SetUndefined(); |
6168 } | 6102 } |
6169 return simpleValue; | 6103 return simpleValue; |
6170 } else if (FXJSE_Value_IsObject(argIndex.get())) { | 6104 } else if (FXJSE_Value_IsObject(argIndex.get())) { |
6171 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); | 6105 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
6172 GetObjectDefaultValue(argIndex.get(), defaultValue.get()); | 6106 GetObjectDefaultValue(argIndex.get(), defaultValue.get()); |
6173 return defaultValue; | 6107 return defaultValue; |
6174 } else { | 6108 } else { |
6175 return argIndex; | 6109 return argIndex; |
6176 } | 6110 } |
6177 } | 6111 } |
6178 | 6112 |
6179 // static | 6113 // static |
6180 FX_BOOL CXFA_FM2JSContext::ValueIsNull(CFXJSE_Value* pThis, CFXJSE_Value* arg) { | 6114 FX_BOOL CXFA_FM2JSContext::ValueIsNull(CFXJSE_Value* pThis, CFXJSE_Value* arg) { |
6181 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6115 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6182 FX_BOOL isNull = FALSE; | 6116 FX_BOOL isNull = FALSE; |
6183 if (FXJSE_Value_IsNull(arg)) { | 6117 if (FXJSE_Value_IsNull(arg)) { |
6184 isNull = TRUE; | 6118 isNull = TRUE; |
6185 } else if (FXJSE_Value_IsArray(arg)) { | 6119 } else if (FXJSE_Value_IsArray(arg)) { |
6186 int32_t iLength = hvalue_get_array_length(pThis, arg); | 6120 int32_t iLength = hvalue_get_array_length(pThis, arg); |
6187 if (iLength > 2) { | 6121 if (iLength > 2) { |
6188 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6122 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6189 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6123 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6190 FXJSE_Value_GetObjectPropByIdx(arg, 1, propertyValue.get()); | 6124 arg->GetObjectPropertyByIdx(1, propertyValue.get()); |
6191 FXJSE_Value_GetObjectPropByIdx(arg, 2, jsObjectValue.get()); | 6125 arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6192 if (FXJSE_Value_IsNull(propertyValue.get())) { | 6126 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6193 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); | 6127 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
6194 GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get()); | 6128 GetObjectDefaultValue(jsObjectValue.get(), defaultValue.get()); |
6195 if (FXJSE_Value_IsNull(defaultValue.get())) { | 6129 if (FXJSE_Value_IsNull(defaultValue.get())) { |
6196 isNull = TRUE; | 6130 isNull = TRUE; |
6197 } | 6131 } |
6198 } else { | 6132 } else { |
6199 CFX_ByteString propertyStr; | 6133 CFX_ByteString propertyStr; |
6200 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 6134 propertyValue->ToString(propertyStr); |
6201 std::unique_ptr<CFXJSE_Value> newPropertyValue( | 6135 std::unique_ptr<CFXJSE_Value> newPropertyValue( |
6202 new CFXJSE_Value(pIsolate)); | 6136 new CFXJSE_Value(pIsolate)); |
6203 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 6137 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6204 newPropertyValue.get()); | 6138 newPropertyValue.get()); |
6205 if (FXJSE_Value_IsNull(newPropertyValue.get())) { | 6139 if (FXJSE_Value_IsNull(newPropertyValue.get())) { |
6206 isNull = TRUE; | 6140 isNull = TRUE; |
6207 } | 6141 } |
6208 } | 6142 } |
6209 } else { | 6143 } else { |
6210 isNull = TRUE; | 6144 isNull = TRUE; |
6211 } | 6145 } |
6212 } else if (FXJSE_Value_IsObject(arg)) { | 6146 } else if (FXJSE_Value_IsObject(arg)) { |
6213 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); | 6147 std::unique_ptr<CFXJSE_Value> defaultValue(new CFXJSE_Value(pIsolate)); |
6214 GetObjectDefaultValue(arg, defaultValue.get()); | 6148 GetObjectDefaultValue(arg, defaultValue.get()); |
6215 if (FXJSE_Value_IsNull(defaultValue.get())) { | 6149 if (FXJSE_Value_IsNull(defaultValue.get())) { |
6216 isNull = TRUE; | 6150 isNull = TRUE; |
6217 } | 6151 } |
6218 } | 6152 } |
6219 return isNull; | 6153 return isNull; |
6220 } | 6154 } |
6221 | 6155 |
6222 // static | 6156 // static |
6223 int32_t CXFA_FM2JSContext::hvalue_get_array_length(CFXJSE_Value* pThis, | 6157 int32_t CXFA_FM2JSContext::hvalue_get_array_length(CFXJSE_Value* pThis, |
6224 CFXJSE_Value* arg) { | 6158 CFXJSE_Value* arg) { |
6225 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6159 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6226 int32_t iLength = 0; | 6160 int32_t iLength = 0; |
6227 if (FXJSE_Value_IsArray(arg)) { | 6161 if (FXJSE_Value_IsArray(arg)) { |
6228 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6162 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6229 FXJSE_Value_GetObjectProp(arg, "length", lengthValue.get()); | 6163 arg->GetObjectProperty("length", lengthValue.get()); |
6230 iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 6164 iLength = lengthValue->ToInteger(); |
6231 } | 6165 } |
6232 return iLength; | 6166 return iLength; |
6233 } | 6167 } |
6234 | 6168 |
6235 // static | 6169 // static |
6236 FX_BOOL CXFA_FM2JSContext::simpleValueCompare(CFXJSE_Value* pThis, | 6170 FX_BOOL CXFA_FM2JSContext::simpleValueCompare(CFXJSE_Value* pThis, |
6237 CFXJSE_Value* firstValue, | 6171 CFXJSE_Value* firstValue, |
6238 CFXJSE_Value* secondValue) { | 6172 CFXJSE_Value* secondValue) { |
6239 FX_BOOL bReturn = FALSE; | 6173 FX_BOOL bReturn = FALSE; |
6240 if (FXJSE_Value_IsUTF8String(firstValue)) { | 6174 if (FXJSE_Value_IsUTF8String(firstValue)) { |
6241 CFX_ByteString firstString, secondString; | 6175 CFX_ByteString firstString, secondString; |
6242 ValueToUTF8String(firstValue, firstString); | 6176 ValueToUTF8String(firstValue, firstString); |
6243 ValueToUTF8String(secondValue, secondString); | 6177 ValueToUTF8String(secondValue, secondString); |
6244 bReturn = firstString == secondString; | 6178 bReturn = firstString == secondString; |
6245 } else if (FXJSE_Value_IsNumber(firstValue)) { | 6179 } else if (FXJSE_Value_IsNumber(firstValue)) { |
6246 FX_FLOAT first = ValueToFloat(pThis, firstValue); | 6180 FX_FLOAT first = ValueToFloat(pThis, firstValue); |
6247 FX_FLOAT second = ValueToFloat(pThis, secondValue); | 6181 FX_FLOAT second = ValueToFloat(pThis, secondValue); |
6248 bReturn = (first == second); | 6182 bReturn = (first == second); |
6249 } else if (FXJSE_Value_IsBoolean(firstValue)) { | 6183 } else if (FXJSE_Value_IsBoolean(firstValue)) { |
6250 bReturn = (FXJSE_Value_ToBoolean(firstValue) == | 6184 bReturn = (firstValue->ToBoolean() == secondValue->ToBoolean()); |
6251 FXJSE_Value_ToBoolean(secondValue)); | |
6252 } else if (FXJSE_Value_IsNull(firstValue) && | 6185 } else if (FXJSE_Value_IsNull(firstValue) && |
6253 FXJSE_Value_IsNull(secondValue)) { | 6186 FXJSE_Value_IsNull(secondValue)) { |
6254 bReturn = TRUE; | 6187 bReturn = TRUE; |
6255 } | 6188 } |
6256 return bReturn; | 6189 return bReturn; |
6257 } | 6190 } |
6258 | 6191 |
6259 // static | 6192 // static |
6260 void CXFA_FM2JSContext::unfoldArgs(CFXJSE_Value* pThis, | 6193 void CXFA_FM2JSContext::unfoldArgs(CFXJSE_Value* pThis, |
6261 CFXJSE_Arguments& args, | 6194 CFXJSE_Arguments& args, |
6262 CFXJSE_Value**& resultValues, | 6195 CFXJSE_Value**& resultValues, |
6263 int32_t& iCount, | 6196 int32_t& iCount, |
6264 int32_t iStart) { | 6197 int32_t iStart) { |
6265 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6198 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6266 iCount = 0; | 6199 iCount = 0; |
6267 int32_t argc = args.GetLength(); | 6200 int32_t argc = args.GetLength(); |
6268 std::vector<std::unique_ptr<CFXJSE_Value>> argsValue; | 6201 std::vector<std::unique_ptr<CFXJSE_Value>> argsValue; |
6269 for (int32_t i = 0; i < argc - iStart; i++) { | 6202 for (int32_t i = 0; i < argc - iStart; i++) { |
6270 argsValue.push_back(args.GetValue(i + iStart)); | 6203 argsValue.push_back(args.GetValue(i + iStart)); |
6271 if (FXJSE_Value_IsArray(argsValue[i].get())) { | 6204 if (FXJSE_Value_IsArray(argsValue[i].get())) { |
6272 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6205 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6273 FXJSE_Value_GetObjectProp(argsValue[i].get(), "length", | 6206 argsValue[i]->GetObjectProperty("length", lengthValue.get()); |
6274 lengthValue.get()); | 6207 int32_t iLength = lengthValue->ToInteger(); |
6275 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | |
6276 iCount += ((iLength > 2) ? (iLength - 2) : 0); | 6208 iCount += ((iLength > 2) ? (iLength - 2) : 0); |
6277 } else { | 6209 } else { |
6278 iCount += 1; | 6210 iCount += 1; |
6279 } | 6211 } |
6280 } | 6212 } |
6281 resultValues = FX_Alloc(CFXJSE_Value*, iCount); | 6213 resultValues = FX_Alloc(CFXJSE_Value*, iCount); |
6282 for (int32_t i = 0; i < iCount; i++) | 6214 for (int32_t i = 0; i < iCount; i++) |
6283 resultValues[i] = new CFXJSE_Value(pIsolate); | 6215 resultValues[i] = new CFXJSE_Value(pIsolate); |
6284 | 6216 |
6285 int32_t index = 0; | 6217 int32_t index = 0; |
6286 for (int32_t i = 0; i < argc - iStart; i++) { | 6218 for (int32_t i = 0; i < argc - iStart; i++) { |
6287 if (FXJSE_Value_IsArray(argsValue[i].get())) { | 6219 if (FXJSE_Value_IsArray(argsValue[i].get())) { |
6288 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6220 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6289 FXJSE_Value_GetObjectProp(argsValue[i].get(), "length", | 6221 argsValue[i]->GetObjectProperty("length", lengthValue.get()); |
6290 lengthValue.get()); | 6222 int32_t iLength = lengthValue->ToInteger(); |
6291 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | |
6292 if (iLength > 2) { | 6223 if (iLength > 2) { |
6293 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6224 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6294 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6225 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6295 FXJSE_Value_GetObjectPropByIdx(argsValue[i].get(), 1, | 6226 argsValue[i]->GetObjectPropertyByIdx(1, propertyValue.get()); |
6296 propertyValue.get()); | |
6297 if (FXJSE_Value_IsNull(propertyValue.get())) { | 6227 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6298 for (int32_t j = 2; j < iLength; j++) { | 6228 for (int32_t j = 2; j < iLength; j++) { |
6299 FXJSE_Value_GetObjectPropByIdx(argsValue[i].get(), j, | 6229 argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
6300 jsObjectValue.get()); | |
6301 GetObjectDefaultValue(jsObjectValue.get(), resultValues[index]); | 6230 GetObjectDefaultValue(jsObjectValue.get(), resultValues[index]); |
6302 index++; | 6231 index++; |
6303 } | 6232 } |
6304 } else { | 6233 } else { |
6305 CFX_ByteString propertyString; | 6234 CFX_ByteString propertyString; |
6306 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyString); | 6235 propertyValue->ToString(propertyString); |
6307 for (int32_t j = 2; j < iLength; j++) { | 6236 for (int32_t j = 2; j < iLength; j++) { |
6308 FXJSE_Value_GetObjectPropByIdx(argsValue[i].get(), j, | 6237 argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get()); |
6309 jsObjectValue.get()); | 6238 jsObjectValue->GetObjectProperty(propertyString.AsStringC(), |
6310 FXJSE_Value_GetObjectProp(jsObjectValue.get(), | 6239 resultValues[index]); |
6311 propertyString.AsStringC(), | |
6312 resultValues[index]); | |
6313 index++; | 6240 index++; |
6314 } | 6241 } |
6315 } | 6242 } |
6316 } | 6243 } |
6317 } else if (FXJSE_Value_IsObject(argsValue[i].get())) { | 6244 } else if (FXJSE_Value_IsObject(argsValue[i].get())) { |
6318 GetObjectDefaultValue(argsValue[i].get(), resultValues[index]); | 6245 GetObjectDefaultValue(argsValue[i].get(), resultValues[index]); |
6319 index++; | 6246 index++; |
6320 } else { | 6247 } else { |
6321 FXJSE_Value_Set(resultValues[index], argsValue[i].get()); | 6248 resultValues[index]->Assign(argsValue[i].get()); |
6322 index++; | 6249 index++; |
6323 } | 6250 } |
6324 } | 6251 } |
6325 } | 6252 } |
6326 | 6253 |
6327 // static | 6254 // static |
6328 void CXFA_FM2JSContext::GetObjectDefaultValue(CFXJSE_Value* pValue, | 6255 void CXFA_FM2JSContext::GetObjectDefaultValue(CFXJSE_Value* pValue, |
6329 CFXJSE_Value* pDefaultValue) { | 6256 CFXJSE_Value* pDefaultValue) { |
6330 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); | 6257 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); |
6331 if (!pNode) { | 6258 if (!pNode) { |
6332 FXJSE_Value_SetNull(pDefaultValue); | 6259 pDefaultValue->SetNull(); |
6333 return; | 6260 return; |
6334 } | 6261 } |
6335 pNode->Script_Som_DefaultValue(pDefaultValue, FALSE, (XFA_ATTRIBUTE)-1); | 6262 pNode->Script_Som_DefaultValue(pDefaultValue, FALSE, (XFA_ATTRIBUTE)-1); |
6336 } | 6263 } |
6337 | 6264 |
6338 // static | 6265 // static |
6339 FX_BOOL CXFA_FM2JSContext::SetObjectDefaultValue(CFXJSE_Value* pValue, | 6266 FX_BOOL CXFA_FM2JSContext::SetObjectDefaultValue(CFXJSE_Value* pValue, |
6340 CFXJSE_Value* hNewValue) { | 6267 CFXJSE_Value* hNewValue) { |
6341 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); | 6268 CXFA_Node* pNode = ToNode(CXFA_ScriptContext::ToObject(pValue, nullptr)); |
6342 if (!pNode) | 6269 if (!pNode) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6389 } | 6316 } |
6390 CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); | 6317 CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext(); |
6391 XFA_RESOLVENODE_RS resoveNodeRS; | 6318 XFA_RESOLVENODE_RS resoveNodeRS; |
6392 uint32_t dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 6319 uint32_t dwFlags = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
6393 XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; | 6320 XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent; |
6394 int32_t iRet = pScriptContext->ResolveObjects( | 6321 int32_t iRet = pScriptContext->ResolveObjects( |
6395 pScriptContext->GetThisObject(), | 6322 pScriptContext->GetThisObject(), |
6396 CFX_WideString::FromUTF8(szAccessorName).AsStringC(), resoveNodeRS, | 6323 CFX_WideString::FromUTF8(szAccessorName).AsStringC(), resoveNodeRS, |
6397 dwFlags); | 6324 dwFlags); |
6398 if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { | 6325 if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { |
6399 FXJSE_Value_Set(accessorValue, pScriptContext->GetJSValueFromMap( | 6326 accessorValue->Assign( |
6400 resoveNodeRS.nodes.GetAt(0))); | 6327 pScriptContext->GetJSValueFromMap(resoveNodeRS.nodes.GetAt(0))); |
6401 bFlags = TRUE; | 6328 bFlags = TRUE; |
6402 } | 6329 } |
6403 return bFlags; | 6330 return bFlags; |
6404 } | 6331 } |
6405 | 6332 |
6406 // static | 6333 // static |
6407 int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, | 6334 int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis, |
6408 CFXJSE_Value* pRefValue, | 6335 CFXJSE_Value* pRefValue, |
6409 const CFX_ByteStringC& bsSomExp, | 6336 const CFX_ByteStringC& bsSomExp, |
6410 XFA_RESOLVENODE_RS& resoveNodeRS, | 6337 XFA_RESOLVENODE_RS& resoveNodeRS, |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6465 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); | 6392 CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr); |
6466 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); | 6393 v8::Isolate* pIsolate = pContext->GetScriptRuntime(); |
6467 iSize = 0; | 6394 iSize = 0; |
6468 resultValues = nullptr; | 6395 resultValues = nullptr; |
6469 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { | 6396 if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) { |
6470 bAttribute = FALSE; | 6397 bAttribute = FALSE; |
6471 iSize = resoveNodeRS.nodes.GetSize(); | 6398 iSize = resoveNodeRS.nodes.GetSize(); |
6472 resultValues = FX_Alloc(CFXJSE_Value*, iSize); | 6399 resultValues = FX_Alloc(CFXJSE_Value*, iSize); |
6473 for (int32_t i = 0; i < iSize; i++) { | 6400 for (int32_t i = 0; i < iSize; i++) { |
6474 resultValues[i] = new CFXJSE_Value(pIsolate); | 6401 resultValues[i] = new CFXJSE_Value(pIsolate); |
6475 FXJSE_Value_Set( | 6402 resultValues[i]->Assign( |
6476 resultValues[i], | |
6477 pContext->GetDocument()->GetScriptContext()->GetJSValueFromMap( | 6403 pContext->GetDocument()->GetScriptContext()->GetJSValueFromMap( |
6478 resoveNodeRS.nodes.GetAt(i))); | 6404 resoveNodeRS.nodes.GetAt(i))); |
6479 } | 6405 } |
6480 } else { | 6406 } else { |
6481 CXFA_ValueArray objectProperties(pIsolate); | 6407 CXFA_ValueArray objectProperties(pIsolate); |
6482 int32_t iRet = resoveNodeRS.GetAttributeResult(objectProperties); | 6408 int32_t iRet = resoveNodeRS.GetAttributeResult(objectProperties); |
6483 bAttribute = (iRet == 0); | 6409 bAttribute = (iRet == 0); |
6484 if (bAttribute) { | 6410 if (bAttribute) { |
6485 if (FXJSE_Value_IsObject(pParentValue)) { | 6411 if (FXJSE_Value_IsObject(pParentValue)) { |
6486 iSize = 1; | 6412 iSize = 1; |
6487 resultValues = FX_Alloc(CFXJSE_Value*, 1); | 6413 resultValues = FX_Alloc(CFXJSE_Value*, 1); |
6488 resultValues[0] = new CFXJSE_Value(pIsolate); | 6414 resultValues[0] = new CFXJSE_Value(pIsolate); |
6489 FXJSE_Value_Set(resultValues[0], pParentValue); | 6415 resultValues[0]->Assign(pParentValue); |
6490 } | 6416 } |
6491 } else { | 6417 } else { |
6492 iSize = iRet; | 6418 iSize = iRet; |
6493 resultValues = FX_Alloc(CFXJSE_Value*, iSize); | 6419 resultValues = FX_Alloc(CFXJSE_Value*, iSize); |
6494 for (int32_t i = 0; i < iSize; i++) { | 6420 for (int32_t i = 0; i < iSize; i++) { |
6495 resultValues[i] = new CFXJSE_Value(pIsolate); | 6421 resultValues[i] = new CFXJSE_Value(pIsolate); |
6496 FXJSE_Value_Set(resultValues[i], objectProperties[i]); | 6422 resultValues[i]->Assign(objectProperties[i]); |
6497 } | 6423 } |
6498 } | 6424 } |
6499 } | 6425 } |
6500 } | 6426 } |
6501 | 6427 |
6502 // static | 6428 // static |
6503 int32_t CXFA_FM2JSContext::ValueToInteger(CFXJSE_Value* pThis, | 6429 int32_t CXFA_FM2JSContext::ValueToInteger(CFXJSE_Value* pThis, |
6504 CFXJSE_Value* pValue) { | 6430 CFXJSE_Value* pValue) { |
6505 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6431 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6506 int32_t iValue = 0; | 6432 int32_t iValue = 0; |
6507 if (FXJSE_Value_IsArray(pValue)) { | 6433 if (FXJSE_Value_IsArray(pValue)) { |
6508 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6434 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6509 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6435 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6510 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6436 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6511 FXJSE_Value_GetObjectPropByIdx(pValue, 1, propertyValue.get()); | 6437 pValue->GetObjectPropertyByIdx(1, propertyValue.get()); |
6512 FXJSE_Value_GetObjectPropByIdx(pValue, 2, jsObjectValue.get()); | 6438 pValue->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6513 if (FXJSE_Value_IsNull(propertyValue.get())) { | 6439 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6514 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 6440 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
6515 } else { | 6441 } else { |
6516 CFX_ByteString propertyStr; | 6442 CFX_ByteString propertyStr; |
6517 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 6443 propertyValue->ToString(propertyStr); |
6518 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 6444 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6519 newPropertyValue.get()); | 6445 newPropertyValue.get()); |
6520 } | 6446 } |
6521 iValue = ValueToInteger(pThis, newPropertyValue.get()); | 6447 iValue = ValueToInteger(pThis, newPropertyValue.get()); |
6522 return iValue; | 6448 return iValue; |
6523 } else if (FXJSE_Value_IsObject(pValue)) { | 6449 } else if (FXJSE_Value_IsObject(pValue)) { |
6524 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6450 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6525 GetObjectDefaultValue(pValue, newPropertyValue.get()); | 6451 GetObjectDefaultValue(pValue, newPropertyValue.get()); |
6526 iValue = ValueToInteger(pThis, newPropertyValue.get()); | 6452 iValue = ValueToInteger(pThis, newPropertyValue.get()); |
6527 return iValue; | 6453 return iValue; |
6528 } else if (FXJSE_Value_IsUTF8String(pValue)) { | 6454 } else if (FXJSE_Value_IsUTF8String(pValue)) { |
6529 CFX_ByteString szValue; | 6455 CFX_ByteString szValue; |
6530 FXJSE_Value_ToUTF8String(pValue, szValue); | 6456 pValue->ToString(szValue); |
6531 iValue = FXSYS_atoi(szValue.c_str()); | 6457 iValue = FXSYS_atoi(szValue.c_str()); |
6532 } else { | 6458 } else { |
6533 iValue = FXJSE_Value_ToInteger(pValue); | 6459 iValue = pValue->ToInteger(); |
6534 } | 6460 } |
6535 return iValue; | 6461 return iValue; |
6536 } | 6462 } |
6537 | 6463 |
6538 // static | 6464 // static |
6539 FX_FLOAT CXFA_FM2JSContext::ValueToFloat(CFXJSE_Value* pThis, | 6465 FX_FLOAT CXFA_FM2JSContext::ValueToFloat(CFXJSE_Value* pThis, |
6540 CFXJSE_Value* arg) { | 6466 CFXJSE_Value* arg) { |
6541 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6467 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6542 FX_FLOAT fRet = 0.0f; | 6468 FX_FLOAT fRet = 0.0f; |
6543 if (FXJSE_Value_IsArray(arg)) { | 6469 if (FXJSE_Value_IsArray(arg)) { |
6544 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6470 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6545 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6471 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6546 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6472 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6547 FXJSE_Value_GetObjectPropByIdx(arg, 1, propertyValue.get()); | 6473 arg->GetObjectPropertyByIdx(1, propertyValue.get()); |
6548 FXJSE_Value_GetObjectPropByIdx(arg, 2, jsObjectValue.get()); | 6474 arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6549 if (FXJSE_Value_IsNull(propertyValue.get())) { | 6475 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6550 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 6476 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
6551 } else { | 6477 } else { |
6552 CFX_ByteString propertyStr; | 6478 CFX_ByteString propertyStr; |
6553 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 6479 propertyValue->ToString(propertyStr); |
6554 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 6480 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6555 newPropertyValue.get()); | 6481 newPropertyValue.get()); |
6556 } | 6482 } |
6557 fRet = ValueToFloat(pThis, newPropertyValue.get()); | 6483 fRet = ValueToFloat(pThis, newPropertyValue.get()); |
6558 } else if (FXJSE_Value_IsObject(arg)) { | 6484 } else if (FXJSE_Value_IsObject(arg)) { |
6559 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6485 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6560 GetObjectDefaultValue(arg, newPropertyValue.get()); | 6486 GetObjectDefaultValue(arg, newPropertyValue.get()); |
6561 fRet = ValueToFloat(pThis, newPropertyValue.get()); | 6487 fRet = ValueToFloat(pThis, newPropertyValue.get()); |
6562 } else if (FXJSE_Value_IsUTF8String(arg)) { | 6488 } else if (FXJSE_Value_IsUTF8String(arg)) { |
6563 CFX_ByteString bsOutput; | 6489 CFX_ByteString bsOutput; |
6564 FXJSE_Value_ToUTF8String(arg, bsOutput); | 6490 arg->ToString(bsOutput); |
6565 fRet = (FX_FLOAT)XFA_ByteStringToDouble(bsOutput.AsStringC()); | 6491 fRet = (FX_FLOAT)XFA_ByteStringToDouble(bsOutput.AsStringC()); |
6566 } else if (FXJSE_Value_IsUndefined(arg)) { | 6492 } else if (FXJSE_Value_IsUndefined(arg)) { |
6567 fRet = 0; | 6493 fRet = 0; |
6568 } else { | 6494 } else { |
6569 fRet = FXJSE_Value_ToFloat(arg); | 6495 fRet = arg->ToFloat(); |
6570 } | 6496 } |
6571 return fRet; | 6497 return fRet; |
6572 } | 6498 } |
6573 | 6499 |
6574 // static | 6500 // static |
6575 FX_DOUBLE CXFA_FM2JSContext::ValueToDouble(CFXJSE_Value* pThis, | 6501 FX_DOUBLE CXFA_FM2JSContext::ValueToDouble(CFXJSE_Value* pThis, |
6576 CFXJSE_Value* arg) { | 6502 CFXJSE_Value* arg) { |
6577 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6503 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6578 FX_DOUBLE dRet = 0; | 6504 FX_DOUBLE dRet = 0; |
6579 if (FXJSE_Value_IsArray(arg)) { | 6505 if (FXJSE_Value_IsArray(arg)) { |
6580 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6506 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6581 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6507 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6582 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6508 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6583 FXJSE_Value_GetObjectPropByIdx(arg, 1, propertyValue.get()); | 6509 arg->GetObjectPropertyByIdx(1, propertyValue.get()); |
6584 FXJSE_Value_GetObjectPropByIdx(arg, 2, jsObjectValue.get()); | 6510 arg->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6585 if (FXJSE_Value_IsNull(propertyValue.get())) { | 6511 if (FXJSE_Value_IsNull(propertyValue.get())) { |
6586 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); | 6512 GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get()); |
6587 } else { | 6513 } else { |
6588 CFX_ByteString propertyStr; | 6514 CFX_ByteString propertyStr; |
6589 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 6515 propertyValue->ToString(propertyStr); |
6590 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 6516 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6591 newPropertyValue.get()); | 6517 newPropertyValue.get()); |
6592 } | 6518 } |
6593 dRet = ValueToDouble(pThis, newPropertyValue.get()); | 6519 dRet = ValueToDouble(pThis, newPropertyValue.get()); |
6594 } else if (FXJSE_Value_IsObject(arg)) { | 6520 } else if (FXJSE_Value_IsObject(arg)) { |
6595 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6521 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6596 GetObjectDefaultValue(arg, newPropertyValue.get()); | 6522 GetObjectDefaultValue(arg, newPropertyValue.get()); |
6597 dRet = ValueToDouble(pThis, newPropertyValue.get()); | 6523 dRet = ValueToDouble(pThis, newPropertyValue.get()); |
6598 } else if (FXJSE_Value_IsUTF8String(arg)) { | 6524 } else if (FXJSE_Value_IsUTF8String(arg)) { |
6599 CFX_ByteString bsOutput; | 6525 CFX_ByteString bsOutput; |
6600 FXJSE_Value_ToUTF8String(arg, bsOutput); | 6526 arg->ToString(bsOutput); |
6601 dRet = XFA_ByteStringToDouble(bsOutput.AsStringC()); | 6527 dRet = XFA_ByteStringToDouble(bsOutput.AsStringC()); |
6602 } else if (FXJSE_Value_IsUndefined(arg)) { | 6528 } else if (FXJSE_Value_IsUndefined(arg)) { |
6603 dRet = 0; | 6529 dRet = 0; |
6604 } else { | 6530 } else { |
6605 dRet = FXJSE_Value_ToDouble(arg); | 6531 dRet = arg->ToDouble(); |
6606 } | 6532 } |
6607 return dRet; | 6533 return dRet; |
6608 } | 6534 } |
6609 | 6535 |
6610 // static. | 6536 // static. |
6611 double CXFA_FM2JSContext::ExtractDouble(CFXJSE_Value* pThis, | 6537 double CXFA_FM2JSContext::ExtractDouble(CFXJSE_Value* pThis, |
6612 CFXJSE_Value* src, | 6538 CFXJSE_Value* src, |
6613 bool* ret) { | 6539 bool* ret) { |
6614 ASSERT(ret); | 6540 ASSERT(ret); |
6615 | 6541 |
6616 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); | 6542 v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime(); |
6617 *ret = true; | 6543 *ret = true; |
6618 | 6544 |
6619 if (FXJSE_Value_IsArray(src)) { | 6545 if (FXJSE_Value_IsArray(src)) { |
6620 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); | 6546 std::unique_ptr<CFXJSE_Value> lengthValue(new CFXJSE_Value(pIsolate)); |
6621 FXJSE_Value_GetObjectProp(src, "length", lengthValue.get()); | 6547 src->GetObjectProperty("length", lengthValue.get()); |
6622 int32_t iLength = FXJSE_Value_ToInteger(lengthValue.get()); | 6548 int32_t iLength = lengthValue->ToInteger(); |
6623 if (iLength <= 2) { | 6549 if (iLength <= 2) { |
6624 *ret = false; | 6550 *ret = false; |
6625 return 0.0; | 6551 return 0.0; |
6626 } | 6552 } |
6627 | 6553 |
6628 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); | 6554 std::unique_ptr<CFXJSE_Value> propertyValue(new CFXJSE_Value(pIsolate)); |
6629 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); | 6555 std::unique_ptr<CFXJSE_Value> jsObjectValue(new CFXJSE_Value(pIsolate)); |
6630 FXJSE_Value_GetObjectPropByIdx(src, 1, propertyValue.get()); | 6556 src->GetObjectPropertyByIdx(1, propertyValue.get()); |
6631 FXJSE_Value_GetObjectPropByIdx(src, 2, jsObjectValue.get()); | 6557 src->GetObjectPropertyByIdx(2, jsObjectValue.get()); |
6632 if (FXJSE_Value_IsNull(propertyValue.get())) | 6558 if (FXJSE_Value_IsNull(propertyValue.get())) |
6633 return ValueToDouble(pThis, jsObjectValue.get()); | 6559 return ValueToDouble(pThis, jsObjectValue.get()); |
6634 | 6560 |
6635 CFX_ByteString propertyStr; | 6561 CFX_ByteString propertyStr; |
6636 FXJSE_Value_ToUTF8String(propertyValue.get(), propertyStr); | 6562 propertyValue->ToString(propertyStr); |
6637 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); | 6563 std::unique_ptr<CFXJSE_Value> newPropertyValue(new CFXJSE_Value(pIsolate)); |
6638 FXJSE_Value_GetObjectProp(jsObjectValue.get(), propertyStr.AsStringC(), | 6564 jsObjectValue->GetObjectProperty(propertyStr.AsStringC(), |
6639 newPropertyValue.get()); | 6565 newPropertyValue.get()); |
6640 return ValueToDouble(pThis, newPropertyValue.get()); | 6566 return ValueToDouble(pThis, newPropertyValue.get()); |
6641 } | 6567 } |
6642 return ValueToDouble(pThis, src); | 6568 return ValueToDouble(pThis, src); |
6643 } | 6569 } |
6644 | 6570 |
6645 // static | 6571 // static |
6646 void CXFA_FM2JSContext::ValueToUTF8String(CFXJSE_Value* arg, | 6572 void CXFA_FM2JSContext::ValueToUTF8String(CFXJSE_Value* arg, |
6647 CFX_ByteString& szOutputString) { | 6573 CFX_ByteString& szOutputString) { |
6648 if (FXJSE_Value_IsNull(arg) || FXJSE_Value_IsUndefined(arg)) { | 6574 if (FXJSE_Value_IsNull(arg) || FXJSE_Value_IsUndefined(arg)) { |
6649 szOutputString = ""; | 6575 szOutputString = ""; |
6650 } else if (FXJSE_Value_IsBoolean(arg)) { | 6576 } else if (FXJSE_Value_IsBoolean(arg)) { |
6651 szOutputString = FXJSE_Value_ToBoolean(arg) ? "1" : "0"; | 6577 szOutputString = arg->ToBoolean() ? "1" : "0"; |
6652 } else { | 6578 } else { |
6653 szOutputString = ""; | 6579 szOutputString = ""; |
6654 FXJSE_Value_ToUTF8String(arg, szOutputString); | 6580 arg->ToString(szOutputString); |
6655 } | 6581 } |
6656 } | 6582 } |
6657 | 6583 |
6658 // static. | 6584 // static. |
6659 int32_t CXFA_FM2JSContext::Translate(const CFX_WideStringC& wsFormcalc, | 6585 int32_t CXFA_FM2JSContext::Translate(const CFX_WideStringC& wsFormcalc, |
6660 CFX_WideTextBuf& wsJavascript, | 6586 CFX_WideTextBuf& wsJavascript, |
6661 CFX_WideString& wsError) { | 6587 CFX_WideString& wsError) { |
6662 if (wsFormcalc.IsEmpty()) { | 6588 if (wsFormcalc.IsEmpty()) { |
6663 wsJavascript.Clear(); | 6589 wsJavascript.Clear(); |
6664 wsError.clear(); | 6590 wsError.clear(); |
(...skipping 15 matching lines...) Expand all Loading... |
6680 return 0; | 6606 return 0; |
6681 } | 6607 } |
6682 | 6608 |
6683 CXFA_FM2JSContext::CXFA_FM2JSContext(v8::Isolate* pScriptIsolate, | 6609 CXFA_FM2JSContext::CXFA_FM2JSContext(v8::Isolate* pScriptIsolate, |
6684 CFXJSE_Context* pScriptContext, | 6610 CFXJSE_Context* pScriptContext, |
6685 CXFA_Document* pDoc) | 6611 CXFA_Document* pDoc) |
6686 : m_pIsolate(pScriptIsolate), | 6612 : m_pIsolate(pScriptIsolate), |
6687 m_pFMClass(FXJSE_DefineClass(pScriptContext, &formcalc_fm2js_descriptor)), | 6613 m_pFMClass(FXJSE_DefineClass(pScriptContext, &formcalc_fm2js_descriptor)), |
6688 m_pValue(new CFXJSE_Value(pScriptIsolate)), | 6614 m_pValue(new CFXJSE_Value(pScriptIsolate)), |
6689 m_pDocument(pDoc) { | 6615 m_pDocument(pDoc) { |
6690 FXJSE_Value_SetNull(m_pValue.get()); | 6616 m_pValue.get()->SetNull(); |
6691 FXJSE_Value_SetObject(m_pValue.get(), this, m_pFMClass); | 6617 m_pValue.get()->SetObject(this, m_pFMClass); |
6692 } | 6618 } |
6693 | 6619 |
6694 CXFA_FM2JSContext::~CXFA_FM2JSContext() {} | 6620 CXFA_FM2JSContext::~CXFA_FM2JSContext() {} |
6695 | 6621 |
6696 void CXFA_FM2JSContext::GlobalPropertyGetter(CFXJSE_Value* pValue) { | 6622 void CXFA_FM2JSContext::GlobalPropertyGetter(CFXJSE_Value* pValue) { |
6697 FXJSE_Value_Set(pValue, m_pValue.get()); | 6623 pValue->Assign(m_pValue.get()); |
6698 } | 6624 } |
6699 | 6625 |
6700 void CXFA_FM2JSContext::ThrowException(int32_t iStringID, ...) { | 6626 void CXFA_FM2JSContext::ThrowException(int32_t iStringID, ...) { |
6701 IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); | 6627 IXFA_AppProvider* pAppProvider = m_pDocument->GetNotify()->GetAppProvider(); |
6702 ASSERT(pAppProvider); | 6628 ASSERT(pAppProvider); |
6703 CFX_WideString wsFormat; | 6629 CFX_WideString wsFormat; |
6704 pAppProvider->LoadString(iStringID, wsFormat); | 6630 pAppProvider->LoadString(iStringID, wsFormat); |
6705 CFX_WideString wsMessage; | 6631 CFX_WideString wsMessage; |
6706 va_list arg_ptr; | 6632 va_list arg_ptr; |
6707 va_start(arg_ptr, iStringID); | 6633 va_start(arg_ptr, iStringID); |
6708 wsMessage.FormatV(wsFormat.c_str(), arg_ptr); | 6634 wsMessage.FormatV(wsFormat.c_str(), arg_ptr); |
6709 va_end(arg_ptr); | 6635 va_end(arg_ptr); |
6710 FXJSE_ThrowMessage( | 6636 FXJSE_ThrowMessage( |
6711 "", FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC()); | 6637 "", FX_UTF8Encode(wsMessage.c_str(), wsMessage.GetLength()).AsStringC()); |
6712 } | 6638 } |
OLD | NEW |