Var AsmJsChangeHeapBuffer(RecyclableObject * function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); Assert(!(callInfo.Flags & CallFlags_New)); if (args.Info.Count < 1 || !ArrayBuffer::Is(args[1])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_NeedArrayBufferObject); } ArrayBuffer* newArrayBuffer = ArrayBuffer::FromVar(args[1]); if (newArrayBuffer->IsDetached() || newArrayBuffer->GetByteLength() & 0xffffff || newArrayBuffer->GetByteLength() <= 0xffffff || newArrayBuffer->GetByteLength() > 0x80000000) { return JavascriptBoolean::ToVar(FALSE, scriptContext); } FrameDisplay* frame = ((ScriptFunction*)function)->GetEnvironment(); Var* moduleArrayBuffer = (Var*)frame->GetItem(0) + AsmJsModuleMemory::MemoryTableBeginOffset; *moduleArrayBuffer = newArrayBuffer; return JavascriptBoolean::ToVar(TRUE, scriptContext); }
Var DiagStackFrame::GetScopeObjectFromFrameDisplay(uint index) { FrameDisplay * display = GetFrameDisplay(); return (display != NULL && display->GetLength() > index) ? display->GetItem(index) : NULL; }