2016-03-05 41 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分辨率中排除虚拟方法....

任何其他想法?