| 237 | return valueMarshaller->unmarshallProxyObject(proxyObject, referenceInfoBuilder, exceptionTracker); |
| 238 | } else { |
| 239 | auto object = makeWrappedObject(jsContext, proxyObject, exceptionTracker, true); |
| 240 | if (!exceptionTracker) { |
| 241 | return jsContext.newUndefined(); |
| 242 | } |
| 243 | |
| 244 | if (!inflateJSValueFromTypedObject( |
| 245 | jsContext, proxyObject->getTypedObject(), referenceInfoBuilder, object.get(), exceptionTracker)) { |
| 246 | return jsContext.newUndefined(); |
| 247 | } |
| 248 | |
| 249 | return object; |
| 250 | } |
| 251 | } |
| 252 | |
| 253 | JSValueRef valueToJSValue(IJavaScriptContext& jsContext, |
| 254 | const Valdi::Value& value, |
| 255 | JSValueForNativeObjectResolver* nativeObjectResolver, |
| 256 | const ReferenceInfoBuilder& referenceInfoBuilder, |
| 257 | JSExceptionTracker& exceptionTracker) { |
| 258 | switch (value.getType()) { |
| 259 | case ValueType::InternedString: |
| 260 | return jsContext.newStringUTF8(value.toStringBox().toStringView(), exceptionTracker); |
| 261 | case ValueType::StaticString: |
| 262 | return jsContext.newString(*value.getStaticString(), exceptionTracker); |
| 263 | case ValueType::Double: |
| 264 | return jsContext.newNumber(value.toDouble()); |
| 265 | case ValueType::Int: |
| 266 | return jsContext.newNumber(value.toInt()); |
| 267 | case ValueType::Long: |
| 268 | return jsContext.newLong(value.toLong(), exceptionTracker); |
| 269 | case ValueType::Bool: |
| 270 | return jsContext.newBool(value.toBool()); |
| 271 | case ValueType::Null: |
| 272 | return jsContext.newNull(); |
| 273 | case ValueType::Undefined: |
| 274 | return jsContext.newUndefined(); |
| 275 | case ValueType::TypedObject: |
| 276 | return typedObjectToJSValue(jsContext, value.getTypedObjectRef(), referenceInfoBuilder, exceptionTracker); |
| 277 | case ValueType::ProxyTypedObject: |
| 278 | return proxyObjectToJSValue( |
| 279 | jsContext, value.getTypedProxyObjectRef(), referenceInfoBuilder, exceptionTracker); |
| 280 | case ValueType::ValdiObject: { |
| 281 | auto jsValue = |
| 282 | unwrapJSValueIfNeeded(jsContext, value.getValdiObject().get(), nativeObjectResolver, exceptionTracker); |
| 283 | if (!exceptionTracker) { |
| 284 | return jsContext.newUndefined(); |
| 285 | } |
| 286 | |
| 287 | if (jsValue) { |
| 288 | return JSValueRef::makeRetained(jsContext, jsValue.value()); |
| 289 | } |
| 290 | |
| 291 | return makeWrappedObject(jsContext, value.getValdiObject(), exceptionTracker, true); |
| 292 | } |
| 293 | case ValueType::Map: { |
| 294 | const auto& map = *value.getMap(); |
| 295 | |
| 296 | auto object = jsContext.newObject(exceptionTracker); |
no test coverage detected