From: Alexandre Terrasa Date: Wed, 6 Mar 2013 19:56:55 +0000 (-0500) Subject: layout_builders: modified nitg-s & nitg-e to use PropertyLayoutBuilderInterface X-Git-Tag: v0.6~77^2~5 X-Git-Url: http://nitlanguage.org layout_builders: modified nitg-s & nitg-e to use PropertyLayoutBuilderInterface Removed old CLPropertyLayoutBuilder Signed-off-by: Alexandre Terrasa --- diff --git a/src/layout_builders.nit b/src/layout_builders.nit index 0254210..029afac 100644 --- a/src/layout_builders.nit +++ b/src/layout_builders.nit @@ -51,28 +51,6 @@ interface PropertyLayoutBuilder[E: MProperty] fun build_layout(elements: Set[MClass]): Layout[E] is abstract end -# Layout builder for MProperty using Coloring (CL) -class CLPropertyLayoutBuilder[E: MProperty] - super PropertyLayoutBuilder[E] - - private var colorer: MPropertyColorer[E] - - init(colorer: MPropertyColorer[E]) do - self.colorer = colorer - end - - # Compute mclasses ids and position using BM - redef fun build_layout(mclasses) do - return self.colorer.build_layout(mclasses) - end -end - -# Layout builder for MProperty using Perfect Hashing (PH) -# TODO implement this class without sublcassing CL builder -class PHPropertyLayoutBuilder[E: MProperty] - super CLPropertyLayoutBuilder[E] -end - interface ResolutionLayoutBuilder # Build resolution table layout fun build_layout(elements: Map[MClassType, Set[MType]]): Layout[MType] is abstract @@ -680,6 +658,12 @@ class MClassHasher end end +# Layout builder for MProperty using Perfect Hashing (PH) +# TODO implement this class without sublcassing CL builder +class MPropertyHasher[E: MProperty] + super MPropertyColorer[E] +end + class ResolutionHasher super PerfectHasher[MClassType, MType] super ResolutionLayoutBuilder diff --git a/src/separate_compiler.nit b/src/separate_compiler.nit index 40bd7f1..b3a29e2 100644 --- a/src/separate_compiler.nit +++ b/src/separate_compiler.nit @@ -211,14 +211,14 @@ class SeparateCompiler var mclasses = new HashSet[MClass].from(modelbuilder.model.mclasses) # methods coloration - var method_coloring = new CLPropertyLayoutBuilder[MMethod](new MMethodColorer(mainmodule)) + var method_coloring = new MMethodColorer(mainmodule) var method_layout = method_coloring.build_layout(mclasses) self.method_tables = build_method_tables(mclasses, method_layout) self.compile_color_consts(method_layout.pos) self.method_layout = method_layout # attributes coloration - var attribute_coloring = new CLPropertyLayoutBuilder[MAttribute](new MAttributeColorer(mainmodule)) + var attribute_coloring = new MAttributeColorer(mainmodule) var attr_layout = attribute_coloring.build_layout(mclasses) self.attr_tables = build_attr_tables(mclasses, attr_layout) self.compile_color_consts(attr_layout.pos) diff --git a/src/separate_erasure_compiler.nit b/src/separate_erasure_compiler.nit index f0350a9..1442af0 100644 --- a/src/separate_erasure_compiler.nit +++ b/src/separate_erasure_compiler.nit @@ -89,7 +89,7 @@ class SeparateErasureCompiler self.class_tables = self.build_class_typing_tables(mclasses) # vt coloration - var vt_coloring = new CLPropertyLayoutBuilder[MVirtualTypeProp](new MVirtualTypePropColorer(mainmodule)) + var vt_coloring = new MVirtualTypePropColorer(mainmodule) var vt_layout = vt_coloring.build_layout(mclasses) self.vt_tables = build_vt_tables(mclasses, vt_layout) self.compile_color_consts(vt_layout.pos) @@ -175,7 +175,7 @@ class SeparateErasureCompiler self.header.add_decl("struct type_table \{ int size; int table[1]; \}; /* colorized type table. */") self.header.add_decl("struct vts_entry \{ short int is_nullable; struct class *class; \}; /* link (nullable or not) between the vts and is bound. */") - if self.vt_layout isa PHPropertyLayoutBuilder[MVirtualTypeProp] then + if self.vt_layout isa PHLayout[MClass, MVirtualTypeProp] then self.header.add_decl("struct vts_table \{ int mask; struct vts_entry vts[1]; \}; /* vts list of a C type representation. */") else self.header.add_decl("struct vts_table \{ struct vts_entry vts[1]; \}; /* vts list of a C type representation. */") @@ -330,7 +330,7 @@ class SeparateErasureCompiler self.header.add_decl("extern const struct vts_table_{mclass.c_name} vts_table_{mclass.c_name};") self.header.add_decl("struct vts_table_{mclass.c_name} \{") - if self.vt_layout isa PHPropertyLayoutBuilder[MVirtualTypeProp] then + if self.vt_layout isa PHLayout[MClass, MVirtualTypeProp] then self.header.add_decl("int mask;") end self.header.add_decl("struct vts_entry vts[{self.vt_tables[mclass].length}];") @@ -338,7 +338,7 @@ class SeparateErasureCompiler var v = new_visitor v.add_decl("const struct vts_table_{mclass.c_name} vts_table_{mclass.c_name} = \{") - if self.vt_layout isa PHPropertyLayoutBuilder[MVirtualTypeProp] then + if self.vt_layout isa PHLayout[MClass, MVirtualTypeProp] then #TODO redo this when PHPropertyLayoutBuilder will be implemented #v.add_decl("{vt_masks[mclass]},") end @@ -513,7 +513,7 @@ class SeparateErasureCompilerVisitor end var entry = self.get_name("entry") self.add("struct vts_entry {entry};") - if self.compiler.as(SeparateErasureCompiler).vt_layout isa PHPropertyLayoutBuilder[MVirtualTypeProp] then + if self.compiler.as(SeparateErasureCompiler).vt_layout isa PHLayout[MClass, MVirtualTypeProp] then self.add("{entry} = {recv_ptr}vts_table->vts[HASH({recv_ptr}vts_table->mask, {mtype.mproperty.const_color})];") else self.add("{entry} = {recv_ptr}vts_table->vts[{mtype.mproperty.const_color}];")