1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved. 2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file. 4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch/** 6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Implementation for v8-experimental.h. 7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch */ 8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/api-experimental.h" 10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "include/v8-experimental.h" 1262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "include/v8.h" 13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/api.h" 143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/fast-accessor-assembler.h" 1562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "src/objects-inl.h" 16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace { 18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochv8::internal::FastAccessorAssembler* FromApi( 20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch v8::experimental::FastAccessorBuilder* builder) { 213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch return reinterpret_cast<v8::internal::FastAccessorAssembler*>(builder); 22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochv8::experimental::FastAccessorBuilder* FromInternal( 253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch v8::internal::FastAccessorAssembler* fast_accessor_assembler) { 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return reinterpret_cast<v8::experimental::FastAccessorBuilder*>( 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch fast_accessor_assembler); 28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace 31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 { 33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal { 34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace experimental { 35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochMaybeHandle<Code> BuildCodeFromFastAccessorBuilder( 38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch v8::experimental::FastAccessorBuilder* fast_handler) { 39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch i::MaybeHandle<i::Code> code; 40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (fast_handler != nullptr) { 41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch auto faa = FromApi(fast_handler); 42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch code = faa->Build(); 43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch CHECK(!code.is_null()); 44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch delete faa; 45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return code; 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace experimental 50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace experimental { 54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder* FastAccessorBuilder::New(Isolate* isolate) { 57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); 583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch internal::FastAccessorAssembler* faa = 593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch new internal::FastAccessorAssembler(i_isolate); 60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromInternal(faa); 61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::IntegerConstant( 65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int const_value) { 66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromApi(this)->IntegerConstant(const_value); 67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::GetReceiver() { 71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromApi(this)->GetReceiver(); 72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 75014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalField( 76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch ValueId value, int field_no) { 77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromApi(this)->LoadInternalField(value, field_no); 78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 79014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 80f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalFieldUnchecked( 81f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch ValueId value, int field_no) { 82f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch return FromApi(this)->LoadInternalFieldUnchecked(value, field_no); 83f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 84014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 85014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadValue(ValueId value_id, 86014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int offset) { 87014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromApi(this)->LoadValue(value_id, offset); 88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadObject(ValueId value_id, 92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch int offset) { 93014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromApi(this)->LoadObject(value_id, offset); 94014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 95014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 96f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::ToSmi(ValueId value_id) { 97f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch return FromApi(this)->ToSmi(value_id); 98f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 99014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 100014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::ReturnValue(ValueId value) { 101014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FromApi(this)->ReturnValue(value); 102014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 103014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 104014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 105014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::CheckFlagSetOrReturnNull(ValueId value_id, int mask) { 106014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FromApi(this)->CheckFlagSetOrReturnNull(value_id, mask); 107014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::CheckNotZeroOrReturnNull(ValueId value_id) { 111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FromApi(this)->CheckNotZeroOrReturnNull(value_id); 112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 114014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::LabelId FastAccessorBuilder::MakeLabel() { 116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch return FromApi(this)->MakeLabel(); 117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::SetLabel(LabelId label_id) { 121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FromApi(this)->SetLabel(label_id); 122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 124f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochvoid FastAccessorBuilder::Goto(LabelId label_id) { 125f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch FromApi(this)->Goto(label_id); 126f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch} 127014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::CheckNotZeroOrJump(ValueId value_id, 129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch LabelId label_id) { 130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch FromApi(this)->CheckNotZeroOrJump(value_id, label_id); 131014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} 132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch 133109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::Call( 134109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch v8::FunctionCallback callback, ValueId value_id) { 135109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch return FromApi(this)->Call(callback, value_id); 136109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch} 137109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch 138014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace experimental 139014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 140