blob: dd84ff91cdad434e5b5850eee1a3f4d85332e849 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
#include "Node.hh"
namespace pcc {
StringLiteralNode::StringLiteralNode(Driver* driver, char* value)
: BaseNode(driver)
, value_(value) {}
Value StringLiteralNode::CodeGen() {
llvm::Module* module = driver_->GetModule();
llvm::LLVMContext& context = module->getContext();
llvm::Constant* str = llvm::ConstantDataArray::getString(context, value_);
llvm::Type* type = str->getType();
llvm::GlobalVariable* var = new llvm::GlobalVariable(
*module, type, true, llvm::GlobalVariable::InternalLinkage, str);
llvm::Constant* zero =
llvm::Constant::getNullValue(llvm::IntegerType::getInt32Ty(context));
llvm::Constant* indices[] = {zero, zero};
llvm::Constant* ptr =
llvm::ConstantExpr::getGetElementPtr(type, var, indices, true);
return ptr;
}
} // namespace pcc
|