16313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// Copyright 2012 the V8 project authors. All rights reserved. 26313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be 36313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// found in the LICENSE file. 46313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 56313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#ifndef V8_CODE_FACTORY_H_ 66313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#define V8_CODE_FACTORY_H_ 76313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 86313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/allocation.h" 96313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/assembler.h" 106313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/codegen.h" 116313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/globals.h" 126313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#include "src/interface-descriptors.h" 136313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 146313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgnamespace v8 { 156313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgnamespace internal { 166313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 176313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org// Associates a body of code with an interface descriptor. 186313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass Callable FINAL BASE_EMBEDDED { 196313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 206313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org Callable(Handle<Code> code, CallInterfaceDescriptor descriptor) 216313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org : code_(code), descriptor_(descriptor) {} 226313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 236313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org Handle<Code> code() const { return code_; } 246313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallInterfaceDescriptor descriptor() const { return descriptor_; } 256313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 266313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org private: 276313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org const Handle<Code> code_; 286313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org const CallInterfaceDescriptor descriptor_; 296313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 306313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 316313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 326313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.orgclass CodeFactory FINAL { 336313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org public: 346313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org // Initial states for ICs. 356313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable LoadIC(Isolate* isolate, ContextualMode mode); 366313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable KeyedLoadIC(Isolate* isolate); 376313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable StoreIC(Isolate* isolate, StrictMode mode); 386313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable KeyedStoreIC(Isolate* isolate, StrictMode mode); 396313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 406313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable CompareIC(Isolate* isolate, Token::Value op); 416313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 426313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable BinaryOpIC(Isolate* isolate, Token::Value op, 436313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org OverwriteMode mode = NO_OVERWRITE); 446313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 456313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org // Code stubs. Add methods here as needed to reduce dependency on 466313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org // code-stubs.h. 476313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable ToBoolean( 486313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org Isolate* isolate, ToBooleanStub::ResultMode mode, 496313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org ToBooleanStub::Types types = ToBooleanStub::Types()); 506313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 516313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable ToNumber(Isolate* isolate); 526313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 536313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable StringAdd(Isolate* isolate, StringAddFlags flags, 546313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org PretenureFlag pretenure_flag); 556313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org 566313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org static Callable CallFunction(Isolate* isolate, int argc, 576313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org CallFunctionFlags flags); 586313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org}; 596313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 606313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org} 616313e220249748eb26e1ddcee2bbe857fef03b42machenbach@chromium.org#endif // V8_CODE_FACTORY_H_ 62