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 }