void VJSSharedWorkerClass::_Construct (XBOX::VJSParms_callAsConstructor &ioParms) { if (!ioParms.CountParams() || !ioParms.IsStringParam(1) || (ioParms.CountParams() >= 2 && !ioParms.IsStringParam(2))) { XBOX::vThrowError(XBOX::VE_INVALID_PARAMETER); ioParms.ReturnUndefined(); return; } XBOX::VString url, name; bool reUseContext; VJSWorker *outsideWorker; VJSWebWorkerObject *workerProxy; XBOX::VJSContext context(ioParms.GetContext()); XBOX::VJSObject constructedObject(context); ioParms.GetStringParam(1, url); if (ioParms.CountParams() == 2) ioParms.GetStringParam(2, name); outsideWorker = VJSWorker::RetainWorker(context); if (ioParms.CountParams() < 3 || !ioParms.IsBooleanParam(3) || !ioParms.GetBoolParam(3, &reUseContext)) reUseContext = false; if ((workerProxy = VJSWebWorkerObject::_CreateWorker(context, outsideWorker, reUseContext, url, false, name)) != NULL) { constructedObject = VJSDedicatedWorkerClass::CreateInstance(context, workerProxy); workerProxy->fOnErrorPort->SetObject(outsideWorker, constructedObject); XBOX::VJSObject messagePortObject(context); messagePortObject = VJSMessagePortClass::CreateInstance(context, workerProxy->fOnMessagePort); workerProxy->fOnMessagePort->SetObject(outsideWorker, messagePortObject); constructedObject.SetProperty("port", messagePortObject); } else constructedObject.SetNull(); ioParms.ReturnConstructedObject(constructedObject); XBOX::ReleaseRefCountable<VJSWorker>(&outsideWorker); }
XBOX::VJSObject VJSTextStream::_Construct (VJSParms_withArguments &ioParms) { XBOX::VJSObject constructedObject(ioParms.GetContext()); XBOX::VFile *file; constructedObject.SetUndefined(); if ((file = ioParms.RetainFileParam(1)) == NULL) { XBOX::vThrowError(XBOX::VE_JVSC_WRONG_PARAMETER_TYPE_FILE, "1"); return constructedObject; } XBOX::VString mode; bool forwrite, overwrite = false; CharSet defaultCharSet = VTC_UTF_8; sLONG xcharset = 0; if (ioParms.GetStringParam(2, mode) && mode == L"Overwrite") { forwrite = true; overwrite = true; } else forwrite = ioParms.GetBoolParam(2, L"Write", L"Read"); if (ioParms.GetLongParam(3, &xcharset) && xcharset != 0) defaultCharSet = (CharSet) xcharset; XBOX::VError err = XBOX::VE_OK; if (forwrite) { if (!file->Exists()) err = file->Create(); else if (overwrite) { if ((err = file->Delete()) == XBOX::VE_OK) err = file->Create(); } } VFileStream *stream = NULL; if (err == XBOX::VE_OK) { if ((stream = new VFileStream(file)) == NULL) XBOX::vThrowError(XBOX::VE_MEMORY_FULL); else if (forwrite) { if (err == XBOX::VE_OK) err = stream->OpenWriting(); if (err == XBOX::VE_OK) stream->SetCharSet(defaultCharSet); stream->SetPos(stream->GetSize()); } else { err = stream->OpenReading(); if (err == XBOX::VE_OK) { stream->GuessCharSetFromLeadingBytes(defaultCharSet); stream->SetCarriageReturnMode(eCRM_NATIVE); } } } if (stream != NULL && err == XBOX::VE_OK) { VJSTextStreamState *textStreamState; if ((textStreamState = new VJSTextStreamState()) == NULL) { delete stream; XBOX::vThrowError(XBOX::VE_MEMORY_FULL); } else { textStreamState->fStream = stream; textStreamState->fBuffer.Clear(); textStreamState->fIndex = 0; textStreamState->fPosition = 0; constructedObject = VJSTextStream::CreateInstance(ioParms.GetContextRef(), textStreamState); } } ReleaseRefCountable(&file); return constructedObject; }