2016-03-05 62 views
2

我正在爲Free Pascal提供SWIG模塊。 Pascal是不區分大小寫的語言。符號名稱不區分大小寫。 像AName和aName這樣的兩個不同的C名字在Pascal中將是相同的ANAME。 我知道SWIG支持超載。但不區分大小寫並不是真正的超載。 (順便說一句,Pascal支持自然超載,不需要重命名Pascal中的重載函數)。SWIG。 FreePascal模塊。不區分大小寫的名稱

我需要什麼,對於C AName和aName,SWIG應該自動在Pascal中創建AName和aName_SWIG_1。

我目前的做法:

  1. 爲每名(大寫),我通過在同一水平以前的兄弟姐妹,有相同的大寫的符號搜索:名稱。
  2. 如果找到N個兄弟,我將SWIG_N設置爲新屬性「sym:cisuffix」
  3. 當爲Pascal生成名稱時,我檢查是否存在「sym:cisuffix」,並將其附加到名稱。

有沒有更好的方法?

謝謝?

回答

0

我修改了方法。不是在同一節點級別掃描,而是在開始時從symtab製作的不區分大小寫的cisymtab List中掃描。 cisymtab列表使用同一個symtab中的節點進行製作。 每個節點還通過以下屬性添加: 「pascal:ciname」(uppercased syn:name); 「pascal:cinumber」(1,2 ...等)和「pascal:cisuffix」(即「__SWIG_1」)

我知道這不是100%可靠。例如,被覆蓋的虛擬方法可能會被錯誤地命名爲後代類。 可能我會從這個自動CI分辨率中排除虛擬方法....

任何其他想法?