Mercurial > projects > ldc
comparison gen/typinf.cpp @ 1382:a0a4d4dac1a4
Renamed !TypeInfoBuilder to !RTTIBuilder.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail com> |
---|---|
date | Sun, 17 May 2009 15:20:58 +0200 |
parents | a5d0e04298a8 |
children | 638d16625da2 |
comparison
equal
deleted
inserted
replaced
1381:44c8eef6e6ee | 1382:a0a4d4dac1a4 |
---|---|
371 void TypeInfoTypedefDeclaration::llvmDefine() | 371 void TypeInfoTypedefDeclaration::llvmDefine() |
372 { | 372 { |
373 Logger::println("TypeInfoTypedefDeclaration::llvmDefine() %s", toChars()); | 373 Logger::println("TypeInfoTypedefDeclaration::llvmDefine() %s", toChars()); |
374 LOG_SCOPE; | 374 LOG_SCOPE; |
375 | 375 |
376 TypeInfoBuilder b(Type::typeinfotypedef); | 376 RTTIBuilder b(Type::typeinfotypedef); |
377 | 377 |
378 assert(tinfo->ty == Ttypedef); | 378 assert(tinfo->ty == Ttypedef); |
379 TypeTypedef *tc = (TypeTypedef *)tinfo; | 379 TypeTypedef *tc = (TypeTypedef *)tinfo; |
380 TypedefDeclaration *sd = tc->sym; | 380 TypedefDeclaration *sd = tc->sym; |
381 | 381 |
409 void TypeInfoEnumDeclaration::llvmDefine() | 409 void TypeInfoEnumDeclaration::llvmDefine() |
410 { | 410 { |
411 Logger::println("TypeInfoEnumDeclaration::llvmDefine() %s", toChars()); | 411 Logger::println("TypeInfoEnumDeclaration::llvmDefine() %s", toChars()); |
412 LOG_SCOPE; | 412 LOG_SCOPE; |
413 | 413 |
414 TypeInfoBuilder b(Type::typeinfoenum); | 414 RTTIBuilder b(Type::typeinfoenum); |
415 | 415 |
416 assert(tinfo->ty == Tenum); | 416 assert(tinfo->ty == Tenum); |
417 TypeEnum *tc = (TypeEnum *)tinfo; | 417 TypeEnum *tc = (TypeEnum *)tinfo; |
418 EnumDeclaration *sd = tc->sym; | 418 EnumDeclaration *sd = tc->sym; |
419 | 419 |
447 void TypeInfoPointerDeclaration::llvmDefine() | 447 void TypeInfoPointerDeclaration::llvmDefine() |
448 { | 448 { |
449 Logger::println("TypeInfoPointerDeclaration::llvmDefine() %s", toChars()); | 449 Logger::println("TypeInfoPointerDeclaration::llvmDefine() %s", toChars()); |
450 LOG_SCOPE; | 450 LOG_SCOPE; |
451 | 451 |
452 TypeInfoBuilder b(Type::typeinfopointer); | 452 RTTIBuilder b(Type::typeinfopointer); |
453 // TypeInfo base | 453 // TypeInfo base |
454 b.push_typeinfo(tinfo->nextOf()); | 454 b.push_typeinfo(tinfo->nextOf()); |
455 // finish | 455 // finish |
456 b.finalize(ir.irGlobal); | 456 b.finalize(ir.irGlobal); |
457 } | 457 } |
461 void TypeInfoArrayDeclaration::llvmDefine() | 461 void TypeInfoArrayDeclaration::llvmDefine() |
462 { | 462 { |
463 Logger::println("TypeInfoArrayDeclaration::llvmDefine() %s", toChars()); | 463 Logger::println("TypeInfoArrayDeclaration::llvmDefine() %s", toChars()); |
464 LOG_SCOPE; | 464 LOG_SCOPE; |
465 | 465 |
466 TypeInfoBuilder b(Type::typeinfoarray); | 466 RTTIBuilder b(Type::typeinfoarray); |
467 // TypeInfo base | 467 // TypeInfo base |
468 b.push_typeinfo(tinfo->nextOf()); | 468 b.push_typeinfo(tinfo->nextOf()); |
469 // finish | 469 // finish |
470 b.finalize(ir.irGlobal); | 470 b.finalize(ir.irGlobal); |
471 } | 471 } |
478 LOG_SCOPE; | 478 LOG_SCOPE; |
479 | 479 |
480 assert(tinfo->ty == Tsarray); | 480 assert(tinfo->ty == Tsarray); |
481 TypeSArray *tc = (TypeSArray *)tinfo; | 481 TypeSArray *tc = (TypeSArray *)tinfo; |
482 | 482 |
483 TypeInfoBuilder b(Type::typeinfostaticarray); | 483 RTTIBuilder b(Type::typeinfostaticarray); |
484 | 484 |
485 // value typeinfo | 485 // value typeinfo |
486 b.push_typeinfo(tc->nextOf()); | 486 b.push_typeinfo(tc->nextOf()); |
487 | 487 |
488 // length | 488 // length |
500 LOG_SCOPE; | 500 LOG_SCOPE; |
501 | 501 |
502 assert(tinfo->ty == Taarray); | 502 assert(tinfo->ty == Taarray); |
503 TypeAArray *tc = (TypeAArray *)tinfo; | 503 TypeAArray *tc = (TypeAArray *)tinfo; |
504 | 504 |
505 TypeInfoBuilder b(Type::typeinfoassociativearray); | 505 RTTIBuilder b(Type::typeinfoassociativearray); |
506 | 506 |
507 // value typeinfo | 507 // value typeinfo |
508 b.push_typeinfo(tc->nextOf()); | 508 b.push_typeinfo(tc->nextOf()); |
509 | 509 |
510 // key typeinfo | 510 // key typeinfo |
519 void TypeInfoFunctionDeclaration::llvmDefine() | 519 void TypeInfoFunctionDeclaration::llvmDefine() |
520 { | 520 { |
521 Logger::println("TypeInfoFunctionDeclaration::llvmDefine() %s", toChars()); | 521 Logger::println("TypeInfoFunctionDeclaration::llvmDefine() %s", toChars()); |
522 LOG_SCOPE; | 522 LOG_SCOPE; |
523 | 523 |
524 TypeInfoBuilder b(Type::typeinfofunction); | 524 RTTIBuilder b(Type::typeinfofunction); |
525 // TypeInfo base | 525 // TypeInfo base |
526 b.push_typeinfo(tinfo->nextOf()); | 526 b.push_typeinfo(tinfo->nextOf()); |
527 // finish | 527 // finish |
528 b.finalize(ir.irGlobal); | 528 b.finalize(ir.irGlobal); |
529 } | 529 } |
536 LOG_SCOPE; | 536 LOG_SCOPE; |
537 | 537 |
538 assert(tinfo->ty == Tdelegate); | 538 assert(tinfo->ty == Tdelegate); |
539 Type* ret_type = tinfo->nextOf()->nextOf(); | 539 Type* ret_type = tinfo->nextOf()->nextOf(); |
540 | 540 |
541 TypeInfoBuilder b(Type::typeinfodelegate); | 541 RTTIBuilder b(Type::typeinfodelegate); |
542 // TypeInfo base | 542 // TypeInfo base |
543 b.push_typeinfo(ret_type); | 543 b.push_typeinfo(ret_type); |
544 // finish | 544 // finish |
545 b.finalize(ir.irGlobal); | 545 b.finalize(ir.irGlobal); |
546 } | 546 } |
580 } | 580 } |
581 | 581 |
582 sd->codegen(Type::sir); | 582 sd->codegen(Type::sir); |
583 IrStruct* irstruct = sd->ir.irStruct; | 583 IrStruct* irstruct = sd->ir.irStruct; |
584 | 584 |
585 TypeInfoBuilder b(Type::typeinfostruct); | 585 RTTIBuilder b(Type::typeinfostruct); |
586 | 586 |
587 // char[] name | 587 // char[] name |
588 b.push_string(sd->toPrettyChars()); | 588 b.push_string(sd->toPrettyChars()); |
589 | 589 |
590 // void[] init | 590 // void[] init |
668 // make sure class is resolved | 668 // make sure class is resolved |
669 assert(tinfo->ty == Tclass); | 669 assert(tinfo->ty == Tclass); |
670 TypeClass *tc = (TypeClass *)tinfo; | 670 TypeClass *tc = (TypeClass *)tinfo; |
671 tc->sym->codegen(Type::sir); | 671 tc->sym->codegen(Type::sir); |
672 | 672 |
673 TypeInfoBuilder b(Type::typeinfoclass); | 673 RTTIBuilder b(Type::typeinfoclass); |
674 | 674 |
675 // TypeInfo base | 675 // TypeInfo base |
676 b.push_classinfo(tc->sym); | 676 b.push_classinfo(tc->sym); |
677 | 677 |
678 // finish | 678 // finish |
689 // make sure interface is resolved | 689 // make sure interface is resolved |
690 assert(tinfo->ty == Tclass); | 690 assert(tinfo->ty == Tclass); |
691 TypeClass *tc = (TypeClass *)tinfo; | 691 TypeClass *tc = (TypeClass *)tinfo; |
692 tc->sym->codegen(Type::sir); | 692 tc->sym->codegen(Type::sir); |
693 | 693 |
694 TypeInfoBuilder b(Type::typeinfointerface); | 694 RTTIBuilder b(Type::typeinfointerface); |
695 | 695 |
696 // TypeInfo base | 696 // TypeInfo base |
697 b.push_classinfo(tc->sym); | 697 b.push_classinfo(tc->sym); |
698 | 698 |
699 // finish | 699 // finish |
725 | 725 |
726 // build array | 726 // build array |
727 const LLArrayType* arrTy = LLArrayType::get(tiTy, dim); | 727 const LLArrayType* arrTy = LLArrayType::get(tiTy, dim); |
728 LLConstant* arrC = llvm::ConstantArray::get(arrTy, arrInits); | 728 LLConstant* arrC = llvm::ConstantArray::get(arrTy, arrInits); |
729 | 729 |
730 TypeInfoBuilder b(Type::typeinfotypelist); | 730 RTTIBuilder b(Type::typeinfotypelist); |
731 | 731 |
732 // push TypeInfo[] | 732 // push TypeInfo[] |
733 b.push_array(arrC, dim, Type::typeinfo->type, NULL); | 733 b.push_array(arrC, dim, Type::typeinfo->type, NULL); |
734 | 734 |
735 // finish | 735 // finish |
743 void TypeInfoConstDeclaration::llvmDefine() | 743 void TypeInfoConstDeclaration::llvmDefine() |
744 { | 744 { |
745 Logger::println("TypeInfoConstDeclaration::llvmDefine() %s", toChars()); | 745 Logger::println("TypeInfoConstDeclaration::llvmDefine() %s", toChars()); |
746 LOG_SCOPE; | 746 LOG_SCOPE; |
747 | 747 |
748 TypeInfoBuilder b(Type::typeinfoconst); | 748 RTTIBuilder b(Type::typeinfoconst); |
749 // TypeInfo base | 749 // TypeInfo base |
750 b.push_typeinfo(tinfo->mutableOf()->merge()); | 750 b.push_typeinfo(tinfo->mutableOf()->merge()); |
751 // finish | 751 // finish |
752 b.finalize(ir.irGlobal); | 752 b.finalize(ir.irGlobal); |
753 } | 753 } |
757 void TypeInfoInvariantDeclaration::llvmDefine() | 757 void TypeInfoInvariantDeclaration::llvmDefine() |
758 { | 758 { |
759 Logger::println("TypeInfoInvariantDeclaration::llvmDefine() %s", toChars()); | 759 Logger::println("TypeInfoInvariantDeclaration::llvmDefine() %s", toChars()); |
760 LOG_SCOPE; | 760 LOG_SCOPE; |
761 | 761 |
762 TypeInfoBuilder b(Type::typeinfoinvariant); | 762 RTTIBuilder b(Type::typeinfoinvariant); |
763 // TypeInfo base | 763 // TypeInfo base |
764 b.push_typeinfo(tinfo->mutableOf()->merge()); | 764 b.push_typeinfo(tinfo->mutableOf()->merge()); |
765 // finish | 765 // finish |
766 b.finalize(ir.irGlobal); | 766 b.finalize(ir.irGlobal); |
767 } | 767 } |