@@ -599,6 +599,37 @@ CHAKRA_API JsCreateCustomExternalObject(
599599 });
600600}
601601
602+ CHAKRA_API JsCreateTracedExternalObject (
603+ _In_opt_ void *data,
604+ _In_opt_ size_t inlineSlotSize,
605+ _In_opt_ JsTraceCallback traceCallback,
606+ _In_opt_ JsFinalizeCallback finalizeCallback,
607+ _In_opt_ JsValueRef prototype,
608+ _Out_ JsValueRef *object)
609+ {
610+ return ContextAPINoScriptWrapper ([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode {
611+ PERFORM_JSRT_TTD_RECORD_ACTION (scriptContext, RecordJsRTAllocateExternalObject, prototype);
612+
613+ PARAM_NOT_NULL (object);
614+
615+ Js::RecyclableObject * prototypeObject = nullptr ;
616+ if (prototype != JS_INVALID_REFERENCE)
617+ {
618+ VALIDATE_INCOMING_OBJECT_OR_NULL (prototype, scriptContext);
619+ prototypeObject = Js::VarTo<Js::RecyclableObject>(prototype);
620+ }
621+ if (inlineSlotSize > UINT32_MAX)
622+ {
623+ return JsErrorInvalidArgument;
624+ }
625+ *object = JsrtExternalObject::Create (data, (uint)inlineSlotSize, traceCallback, finalizeCallback, prototypeObject, scriptContext, nullptr );
626+
627+ PERFORM_JSRT_TTD_RECORD_ACTION_RESULT (scriptContext, object);
628+
629+ return JsNoError;
630+ });
631+ }
632+
602633CHAKRA_API JsPrivateHasProperty (
603634 _In_ JsValueRef object,
604635 _In_ JsValueRef key,
@@ -830,99 +861,6 @@ CHAKRA_API JsCreateStringUtf16(
830861}
831862
832863
833- template <class CopyFunc >
834- JsErrorCode WriteStringCopy (
835- JsValueRef value,
836- int start,
837- int length,
838- _Out_opt_ size_t * written,
839- const CopyFunc& copyFunc)
840- {
841- if (written)
842- {
843- *written = 0 ; // init to 0 for default
844- }
845-
846- const char16* str = nullptr ;
847- size_t strLength = 0 ;
848- JsErrorCode errorCode = JsStringToPointer (value, &str, &strLength);
849- if (errorCode != JsNoError)
850- {
851- return errorCode;
852- }
853-
854- if (start < 0 || (size_t )start > strLength)
855- {
856- return JsErrorInvalidArgument; // start out of range, no chars written
857- }
858-
859- size_t count = min (static_cast <size_t >(length), strLength - start);
860- if (count == 0 )
861- {
862- return JsNoError; // no chars written
863- }
864-
865- errorCode = copyFunc (str + start, count, written);
866- if (errorCode != JsNoError)
867- {
868- return errorCode;
869- }
870-
871- if (written)
872- {
873- *written = count;
874- }
875-
876- return JsNoError;
877- }
878-
879- CHAKRA_API JsCopyStringUtf16 (
880- _In_ JsValueRef value,
881- _In_ int start,
882- _In_ int length,
883- _Out_opt_ uint16_t * buffer,
884- _Out_opt_ size_t * written)
885- {
886- PARAM_NOT_NULL (value);
887- VALIDATE_JSREF (value);
888-
889- return WriteStringCopy (value, start, length, written,
890- [buffer](const char16* src, size_t count, size_t *needed)
891- {
892- if (buffer)
893- {
894- memmove (buffer, src, sizeof (char16) * count);
895- }
896- return JsNoError;
897- });
898- }
899-
900- CHAKRA_API JsCopyString (
901- _In_ JsValueRef value,
902- _Out_opt_ char * buffer,
903- _In_ size_t bufferSize,
904- _Out_opt_ size_t * length)
905- {
906- PARAM_NOT_NULL (value);
907- VALIDATE_JSREF (value);
908-
909- const char16* str = nullptr ;
910- size_t strLength = 0 ;
911- JsErrorCode errorCode = JsStringToPointer (value, &str, &strLength);
912- if (errorCode != JsNoError)
913- {
914- return errorCode;
915- }
916-
917- utf8::WideToNarrow utf8Str (str, strLength, buffer, bufferSize);
918- if (length)
919- {
920- *length = utf8Str.Length ();
921- }
922-
923- return JsNoError;
924- }
925-
926864CHAKRA_API JsCreatePropertyString (
927865 _In_z_ const char *name,
928866 _In_ size_t length,
@@ -943,50 +881,6 @@ CHAKRA_API JsCreatePropertyString(
943881 });
944882}
945883
946- CHAKRA_API JsCopyPropertyId (
947- _In_ JsPropertyIdRef propertyId,
948- _Out_ char * buffer,
949- _In_ size_t bufferSize,
950- _Out_ size_t * length)
951- {
952- PARAM_NOT_NULL (propertyId);
953-
954- const char16* str = nullptr ;
955- JsErrorCode errorCode = JsGetPropertyNameFromId (propertyId, &str);
956-
957- if (errorCode != JsNoError)
958- {
959- return errorCode;
960- }
961-
962- utf8::WideToNarrow utf8Str (str);
963- if (!buffer)
964- {
965- if (length)
966- {
967- *length = utf8Str.Length ();
968- }
969- }
970- else
971- {
972- size_t count = min (bufferSize, utf8Str.Length ());
973- // Try to copy whole characters if buffer size insufficient
974- auto maxFitChars = utf8::ByteIndexIntoCharacterIndex (
975- (LPCUTF8)(const char *)utf8Str, count,
976- utf8::DecodeOptions::doChunkedEncoding);
977- count = utf8::CharacterIndexToByteIndex (
978- (LPCUTF8)(const char *)utf8Str, utf8Str.Length (), maxFitChars);
979-
980- memmove (buffer, utf8Str, sizeof (char ) * count);
981- if (length)
982- {
983- *length = count;
984- }
985- }
986-
987- return JsNoError;
988- }
989-
990884CHAKRA_API JsCreatePromise (_Out_ JsValueRef *promise, _Out_ JsValueRef *resolve, _Out_ JsValueRef *reject)
991885{
992886 return ContextAPIWrapper<JSRT_MAYBE_TRUE>([&](Js::ScriptContext *scriptContext, TTDRecorder& _actionEntryPopper) -> JsErrorCode {
@@ -1219,29 +1113,6 @@ CHAKRA_API JsGetAndClearExceptionWithMetadata(_Out_ JsValueRef *metadata)
12191113 });
12201114}
12211115
1222- CHAKRA_API JsCopyStringOneByte (
1223- _In_ JsValueRef value,
1224- _In_ int start,
1225- _In_ int length,
1226- _Out_opt_ char * buffer,
1227- _Out_opt_ size_t * written)
1228- {
1229- PARAM_NOT_NULL (value);
1230- VALIDATE_JSREF (value);
1231- return WriteStringCopy (value, start, length, written,
1232- [buffer](const char16* src, size_t count, size_t *needed)
1233- {
1234- if (buffer)
1235- {
1236- for (size_t i = 0 ; i < count; i++)
1237- {
1238- buffer[i] = (char )src[i];
1239- }
1240- }
1241- return JsNoError;
1242- });
1243- }
1244-
12451116CHAKRA_API JsGetDataViewInfo (
12461117 _In_ JsValueRef dataView,
12471118 _Out_opt_ JsValueRef *arrayBuffer,
0 commit comments