Mercurial > projects > ldc
comparison gen/toir.cpp @ 183:3cdf4b0c75a1 trunk
[svn r199] Fixed: still some small issues with string literals implicitly converting to different pointer types. Should be fixed now!
author | lindquist |
---|---|
date | Wed, 07 May 2008 20:22:42 +0200 |
parents | 8873b7f1457e |
children | aca17e55b7a5 |
comparison
equal
deleted
inserted
replaced
182:6526cf5bb2be | 183:3cdf4b0c75a1 |
---|---|
414 ct = llvm::Type::Int8Ty; | 414 ct = llvm::Type::Int8Ty; |
415 //printf("ct = %s\n", type->next->toChars()); | 415 //printf("ct = %s\n", type->next->toChars()); |
416 const llvm::ArrayType* at = llvm::ArrayType::get(ct,len+1); | 416 const llvm::ArrayType* at = llvm::ArrayType::get(ct,len+1); |
417 | 417 |
418 llvm::Constant* _init; | 418 llvm::Constant* _init; |
419 if (cty->ty == Tchar || cty->ty == Tvoid) { | 419 if (cty->size() == 1) { |
420 uint8_t* str = (uint8_t*)string; | 420 uint8_t* str = (uint8_t*)string; |
421 std::string cont((char*)str, len); | 421 std::string cont((char*)str, len); |
422 _init = llvm::ConstantArray::get(cont,true); | 422 _init = llvm::ConstantArray::get(cont,true); |
423 } | 423 } |
424 else if (cty->ty == Twchar) { | 424 else if (cty->size() == 2) { |
425 uint16_t* str = (uint16_t*)string; | 425 uint16_t* str = (uint16_t*)string; |
426 std::vector<llvm::Constant*> vals; | 426 std::vector<llvm::Constant*> vals; |
427 for(size_t i=0; i<len; ++i) { | 427 for(size_t i=0; i<len; ++i) { |
428 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 428 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
429 } | 429 } |
430 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); | 430 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); |
431 _init = llvm::ConstantArray::get(at,vals); | 431 _init = llvm::ConstantArray::get(at,vals); |
432 } | 432 } |
433 else if (cty->ty == Tdchar) { | 433 else if (cty->size() == 4) { |
434 uint32_t* str = (uint32_t*)string; | 434 uint32_t* str = (uint32_t*)string; |
435 std::vector<llvm::Constant*> vals; | 435 std::vector<llvm::Constant*> vals; |
436 for(size_t i=0; i<len; ++i) { | 436 for(size_t i=0; i<len; ++i) { |
437 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 437 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
438 } | 438 } |
498 | 498 |
499 const llvm::Type* ct = DtoType(cty); | 499 const llvm::Type* ct = DtoType(cty); |
500 const llvm::ArrayType* at = llvm::ArrayType::get(ct,endlen); | 500 const llvm::ArrayType* at = llvm::ArrayType::get(ct,endlen); |
501 | 501 |
502 llvm::Constant* _init; | 502 llvm::Constant* _init; |
503 if (cty->ty == Tchar || cty->ty == Tvoid) { | 503 if (cty->size() == 1) { |
504 uint8_t* str = (uint8_t*)string; | 504 uint8_t* str = (uint8_t*)string; |
505 std::string cont((char*)str, len); | 505 std::string cont((char*)str, len); |
506 _init = llvm::ConstantArray::get(cont, nullterm); | 506 _init = llvm::ConstantArray::get(cont, nullterm); |
507 } | 507 } |
508 else if (cty->ty == Twchar) { | 508 else if (cty->size() == 2) { |
509 uint16_t* str = (uint16_t*)string; | 509 uint16_t* str = (uint16_t*)string; |
510 std::vector<llvm::Constant*> vals; | 510 std::vector<llvm::Constant*> vals; |
511 for(size_t i=0; i<len; ++i) { | 511 for(size_t i=0; i<len; ++i) { |
512 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 512 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
513 } | 513 } |
514 if (nullterm) | 514 if (nullterm) |
515 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); | 515 vals.push_back(llvm::ConstantInt::get(ct, 0, false)); |
516 _init = llvm::ConstantArray::get(at,vals); | 516 _init = llvm::ConstantArray::get(at,vals); |
517 } | 517 } |
518 else if (cty->ty == Tdchar) { | 518 else if (cty->size() == 4) { |
519 uint32_t* str = (uint32_t*)string; | 519 uint32_t* str = (uint32_t*)string; |
520 std::vector<llvm::Constant*> vals; | 520 std::vector<llvm::Constant*> vals; |
521 for(size_t i=0; i<len; ++i) { | 521 for(size_t i=0; i<len; ++i) { |
522 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; | 522 vals.push_back(llvm::ConstantInt::get(ct, str[i], false));; |
523 } | 523 } |