static ejsval ConstantArray_get (ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_TYPE_ARG(0, array_type); REQ_ARRAY_ARG(1, elements); std::vector< llvm::Constant*> element_constants; for (int i = 0; i < EJSARRAY_LEN(elements); i ++) { element_constants.push_back (static_cast<llvm::Constant*>(Value_GetLLVMObj(EJSDENSEARRAY_ELEMENTS(elements)[i]))); } return Value_new (llvm::ConstantArray::get(static_cast<llvm::ArrayType*>(array_type), element_constants)); }
ejsval IRBuilder_createInBoundsGetElementPointer(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_VAL_ARG(0, val); REQ_ARRAY_ARG(1, idxv); FALLBACK_EMPTY_UTF8_ARG(2, name); std::vector<llvm::Value*> IdxV; for (unsigned i = 0, e = EJSARRAY_LEN(idxv); i != e; ++i) { IdxV.push_back (Value_GetLLVMObj(EJSDENSEARRAY_ELEMENTS(idxv)[i])); if (IdxV.back() == 0) abort(); // XXX throw an exception here } return Value_new (_llvm_builder.CreateInBoundsGEP(val, IdxV, name)); }
ejsval IRBuilder_createCall(ejsval env, ejsval _this, int argc, ejsval *args) { REQ_LLVM_VAL_ARG(0, callee); REQ_ARRAY_ARG(1, argv); FALLBACK_EMPTY_UTF8_ARG(2, name); std::vector<llvm::Value*> ArgsV; for (unsigned i = 0, e = EJSARRAY_LEN(argv); i != e; ++i) { ArgsV.push_back (Value_GetLLVMObj(EJSDENSEARRAY_ELEMENTS(argv)[i])); if (ArgsV.back() == 0) abort(); // XXX throw an exception here } return Call_new (_llvm_builder.CreateCall(callee, ArgsV, name)); }