1 // Copyright 2012 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_CODE_FACTORY_H_ 6 #define V8_CODE_FACTORY_H_ 7 8 #include "src/allocation.h" 9 #include "src/assembler.h" 10 #include "src/codegen.h" 11 #include "src/globals.h" 12 #include "src/interface-descriptors.h" 13 14 namespace v8 { 15 namespace internal { 16 17 // Associates a body of code with an interface descriptor. 18 class Callable FINAL BASE_EMBEDDED { 19 public: Callable(Handle<Code> code,CallInterfaceDescriptor descriptor)20 Callable(Handle<Code> code, CallInterfaceDescriptor descriptor) 21 : code_(code), descriptor_(descriptor) {} 22 code()23 Handle<Code> code() const { return code_; } descriptor()24 CallInterfaceDescriptor descriptor() const { return descriptor_; } 25 26 private: 27 const Handle<Code> code_; 28 const CallInterfaceDescriptor descriptor_; 29 }; 30 31 32 class CodeFactory FINAL { 33 public: 34 // Initial states for ICs. 35 static Callable LoadIC(Isolate* isolate, ContextualMode mode); 36 static Callable KeyedLoadIC(Isolate* isolate); 37 static Callable StoreIC(Isolate* isolate, StrictMode mode); 38 static Callable KeyedStoreIC(Isolate* isolate, StrictMode mode); 39 40 static Callable CompareIC(Isolate* isolate, Token::Value op); 41 42 static Callable BinaryOpIC(Isolate* isolate, Token::Value op, 43 OverwriteMode mode = NO_OVERWRITE); 44 45 // Code stubs. Add methods here as needed to reduce dependency on 46 // code-stubs.h. 47 static Callable ToBoolean( 48 Isolate* isolate, ToBooleanStub::ResultMode mode, 49 ToBooleanStub::Types types = ToBooleanStub::Types()); 50 51 static Callable ToNumber(Isolate* isolate); 52 53 static Callable StringAdd(Isolate* isolate, StringAddFlags flags, 54 PretenureFlag pretenure_flag); 55 56 static Callable CallFunction(Isolate* isolate, int argc, 57 CallFunctionFlags flags); 58 }; 59 } 60 } 61 #endif // V8_CODE_FACTORY_H_ 62