2012-02-03 13 views
7

kullanarak Objective-C için anahtar kelime ekleyin? Örneğin, [NSNumber numberWithBool:YES] ile eşleşen bir @yes değişkeni ekleyerek.Ben Clang derleyici kullanarak Objective-C için nispeten önemsiz anahtar kelime eklemeyi mi gider nasıl clang

Ben Clang için (mükemmel) kaynak koduna bakıp yapmam gerekir işlerin çoğunu lib/Rewrite/RewriteObjC.cpp olduğuna inanıyoruz var. literal NSString * örnekleri için aynı işi yapar yöntem RewriteObjC::RewriteObjCStringLiteral (önceki bağlantıya bakınız) mevcuttur.

Ben Clang olarak bu soru çok modüler ve ben .td dosyaları, .h dosyaları (tablegen bakınız) hangi emin değilim ve AST ziyaretçi benim hedefe ulaşmak için değiştirmek gerekir geçer sorun.

+0

Bunu neden isteyeyim? Kodunuzun yalnızca tweaked derleyiciniz tarafından derlenmesini mi istiyorsunuz? – Krizz

+4

@Krizz Clang'ın iç işleyişi hakkında daha fazla şey öğrenmek için bu yüzden! Bir eğitim egzersizi :) –

+0

sadece bu clang iç yapısına dalmadan olmadan @yes istiyorsanız, bu bkz: http://stackoverflow.com/a/17837531/598057 –

cevap

1

Clang'ın kodunu doğru olarak anlarsam (hala öğreniyorum, bu yüzden dikkatli ol), bence bu tür bir ekleme için başlangıç ​​noktası Parser :: ParseObjCAtExpression içinde clang/lib/Parse/ParseObjc.cpp içinde olacağını düşünüyorum. . Unutulmaması gereken

Bir şey Ayrıştırıcı sınıfı (görünüşte giriş dile göre ayrılmış) çeşitli dosyalarda uygulandığını, ancak clang içinde// Parser.h dahil tamamen bildirildi.

Ayrıştırıcı örn ParseObjCAt deseni, ParseObjCAtExpression ParseObjCAtStatement aşağıdaki birçok yöntemleri vardır ParseObjCAtDirectives vb ..

Özellikle, ParseObjc.cpp hattı 1779 çözümleyici bir Objective-C dize algılar nereye görünüyor @ "foo" şeklinde değişmez. Ancak, henüz tam olarak anlamadığım ParsePostfixExpressionSuffix'i de çağırıyor. Bir dizgi literalini (örneğin, bir Synchronize'e karşı) ayrıştırmayı nasıl bildiğini anlayamadım. Eğer henüz ziyaret clang en "Getting Started" sayfa derleme başlamak için varsa

ExprResult Parser::ParseObjCAtExpression(SourceLocation AtLoc) { 
... 
     return ParsePostfixExpressionSuffix(ParseObjCStringLiteral(AtLoc)); 
... 
} 

.