Home | History | Annotate | Download | only in src
      1 // Copyright 2014 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 #include "src/v8.h"
      6 
      7 #include "src/bootstrapper.h"
      8 #include "src/code-factory.h"
      9 #include "src/ic/ic.h"
     10 
     11 namespace v8 {
     12 namespace internal {
     13 
     14 // static
     15 Callable CodeFactory::LoadIC(Isolate* isolate, ContextualMode mode) {
     16   return Callable(
     17       LoadIC::initialize_stub(isolate, LoadICState(mode).GetExtraICState()),
     18       LoadDescriptor(isolate));
     19 }
     20 
     21 
     22 // static
     23 Callable CodeFactory::KeyedLoadIC(Isolate* isolate) {
     24   return Callable(isolate->builtins()->KeyedLoadIC_Initialize(),
     25                   LoadDescriptor(isolate));
     26 }
     27 
     28 
     29 // static
     30 Callable CodeFactory::StoreIC(Isolate* isolate, StrictMode mode) {
     31   return Callable(StoreIC::initialize_stub(isolate, mode),
     32                   StoreDescriptor(isolate));
     33 }
     34 
     35 
     36 // static
     37 Callable CodeFactory::KeyedStoreIC(Isolate* isolate, StrictMode mode) {
     38   Handle<Code> ic = mode == SLOPPY
     39                         ? isolate->builtins()->KeyedStoreIC_Initialize()
     40                         : isolate->builtins()->KeyedStoreIC_Initialize_Strict();
     41   return Callable(ic, StoreDescriptor(isolate));
     42 }
     43 
     44 
     45 // static
     46 Callable CodeFactory::CompareIC(Isolate* isolate, Token::Value op) {
     47   Handle<Code> code = CompareIC::GetUninitialized(isolate, op);
     48   return Callable(code, BinaryOpDescriptor(isolate));
     49 }
     50 
     51 
     52 // static
     53 Callable CodeFactory::BinaryOpIC(Isolate* isolate, Token::Value op,
     54                                  OverwriteMode mode) {
     55   BinaryOpICStub stub(isolate, op, mode);
     56   return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor());
     57 }
     58 
     59 
     60 // static
     61 Callable CodeFactory::ToBoolean(Isolate* isolate,
     62                                 ToBooleanStub::ResultMode mode,
     63                                 ToBooleanStub::Types types) {
     64   ToBooleanStub stub(isolate, mode, types);
     65   return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor());
     66 }
     67 
     68 
     69 // static
     70 Callable CodeFactory::ToNumber(Isolate* isolate) {
     71   ToNumberStub stub(isolate);
     72   return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor());
     73 }
     74 
     75 
     76 // static
     77 Callable CodeFactory::StringAdd(Isolate* isolate, StringAddFlags flags,
     78                                 PretenureFlag pretenure_flag) {
     79   StringAddStub stub(isolate, flags, pretenure_flag);
     80   return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor());
     81 }
     82 
     83 
     84 // static
     85 Callable CodeFactory::CallFunction(Isolate* isolate, int argc,
     86                                    CallFunctionFlags flags) {
     87   CallFunctionStub stub(isolate, argc, flags);
     88   return Callable(stub.GetCode(), stub.GetCallInterfaceDescriptor());
     89 }
     90 
     91 }  // namespace internal
     92 }  // namespace v8
     93