浏览代码

* converted ncgrtti to the high level typed constant builder
o the result is still not very clean due to the fact that this data
is almost completely unstructured due to variable-length strings
everywhere, which means that
a) we cannot just load recorddefs from the system or typeinfo unit
and use those as templates
b) we cannot easily reuse the recorddefs we create ourselves (except
if the strings have the same length -- this is the reason for all
of the names specified to begin_anonymous_record: to reuse defs
as much as possible rather than creating new ones all the time)
c) we have to add explicitly aligned subrecords everywhere to insert
explicit alignment on platforms that need it

git-svn-id: trunk@31255 -

Jonas Maebe 10 年之前
父节点
当前提交
d7f6744f7b
共有 2 个文件被更改,包括 378 次插入245 次删除
  1. 354 243
      compiler/ncgrtti.pas
  2. 24 2
      compiler/symconst.pas

文件差异内容过多而无法显示
+ 354 - 243
compiler/ncgrtti.pas


+ 24 - 2
compiler/symconst.pas

@@ -632,6 +632,7 @@ type
   { prefixes for internally generated type names (centralised to avoid
   { prefixes for internally generated type names (centralised to avoid
     accidental collisions) }
     accidental collisions) }
   tinternaltypeprefix = (
   tinternaltypeprefix = (
+    itp_1byte,
     itp_llvmstruct,
     itp_llvmstruct,
     itp_vmtdef,
     itp_vmtdef,
     itp_vmt_tstringmesssagetable,
     itp_vmt_tstringmesssagetable,
@@ -639,7 +640,17 @@ type
     itp_vmt_tmethod_name_table,
     itp_vmt_tmethod_name_table,
     itp_vmt_intern_msgint_table,
     itp_vmt_intern_msgint_table,
     itp_vmt_intern_tmethodnamerec,
     itp_vmt_intern_tmethodnamerec,
-    itp_vmt_intern_tmethodnametable
+    itp_vmt_intern_tmethodnametable,
+    itp_rttidef,
+    itp_rtti_header,
+    itp_rtti_prop,
+    itp_rtti_ansistr,
+    itp_rtti_ord_outer,
+    itp_rtti_ord_inner,
+    itp_rtti_ord_64bit,
+    itp_rtti_normal_array,
+    itp_rtti_dyn_array,
+    itp_rtti_proc_param
   );
   );
 
 
   { The order is from low priority to high priority,
   { The order is from low priority to high priority,
@@ -742,6 +753,7 @@ inherited_objectoptions : tobjectoptions = [oo_has_virtual,oo_has_private,oo_has
      );
      );
 
 
      internaltypeprefixName : array[tinternaltypeprefix] of TSymStr = (
      internaltypeprefixName : array[tinternaltypeprefix] of TSymStr = (
+       '$1byte$',
        '$llvmstruct$',
        '$llvmstruct$',
        '$vmtdef$',
        '$vmtdef$',
        '$vmt_TStringMesssageTable$',
        '$vmt_TStringMesssageTable$',
@@ -749,7 +761,17 @@ inherited_objectoptions : tobjectoptions = [oo_has_virtual,oo_has_private,oo_has
        '$vmt_tmethod_name_table$',
        '$vmt_tmethod_name_table$',
        '$vmt_intern_msgint_table$',
        '$vmt_intern_msgint_table$',
        '$vmt_intern_tmethodnamerec$',
        '$vmt_intern_tmethodnamerec$',
-       '$vmt_intern_tmethodnametable$'
+       '$vmt_intern_tmethodnametable$',
+       '$rttidef$',
+       '$rtti_header$',
+       '$rtti_prop$',
+       '$rtti_ansistr$',
+       '$rtti_ord_outer$',
+       '$rtti_ord_inner$',
+       '$rtti_ord_64bit$',
+       '$rtti_normal_array$',
+       '$rtti_dyn_array$',
+       '$rtti_proc_param$'
      );
      );
 
 
 
 

部分文件因为文件数量过多而无法显示