From: Alexandre Terrasa Date: Thu, 7 Feb 2013 21:37:30 +0000 (-0500) Subject: nitg-s: merged TypeLayout and ClassLayout into generic TypingLayout X-Git-Tag: v0.6~77^2~52 X-Git-Url: http://nitlanguage.org nitg-s: merged TypeLayout and ClassLayout into generic TypingLayout Signed-off-by: Alexandre Terrasa --- diff --git a/src/coloring.nit b/src/coloring.nit index 2df793f..eb0fd81 100644 --- a/src/coloring.nit +++ b/src/coloring.nit @@ -19,41 +19,26 @@ import typing # Layouts -class TypeLayout - # Unic ids or each Mtype - var ids: Map[MType, Int] = new HashMap[MType, Int] - # Fixed positions of each MType in all tables - var pos: Map[MType, Int] = new HashMap[MType, Int] +class TypingLayout[E] + # Unic ids or each element + var ids: Map[E, Int] = new HashMap[E, Int] + # Fixed positions of each element in all tables + var pos: Map[E, Int] = new HashMap[E, Int] end -class PHTypeLayout - super TypeLayout +class PHTypingLayout[E] + super TypingLayout[E] # Masks used by hash function - var masks: Map[MType, Int] = new HashMap[MType, Int] - # Positions of each MType for each tables - var hashes: Map[MType, Map[MType, Int]] = new HashMap[MType, Map[MType, Int]] -end - -class ClassLayout - # Unic ids or each MClass - var ids: Map[MClass, Int] = new HashMap[MClass, Int] - # Fixed positions of each MClass in all tables - var pos: Map[MClass, Int] = new HashMap[MClass, Int] -end - -class PHClassLayout - super ClassLayout - # Masks used by hash function - var masks: Map[MClass, Int] = new HashMap[MClass, Int] - # Positions of each MClass for each tables - var hashes: Map[MClass, Map[MClass, Int]] = new HashMap[MClass, Map[MClass, Int]] + var masks: Map[E, Int] = new HashMap[E, Int] + # Positions of each element for each tables + var hashes: Map[E, Map[E, Int]] = new HashMap[E, Map[E, Int]] end # Builders abstract class TypeLayoutBuilder - type LAYOUT: TypeLayout + type LAYOUT: TypingLayout[MType] private var mmodule: MModule init(mmodule: MModule) do self.mmodule = mmodule @@ -79,8 +64,8 @@ class BMTypeLayoutBuilder init(mmodule: MModule) do super # Compute mtypes ids and position using BM - redef fun build_layout(mtypes: Set[MType]): TypeLayout do - var result = new TypeLayout + redef fun build_layout(mtypes) do + var result = new TypingLayout[MType] result.ids = self.compute_ids(mtypes) result.pos = result.ids return result @@ -100,7 +85,7 @@ class CLTypeLayoutBuilder # Compute mtypes ids and position using BM redef fun build_layout(mtypes) do - var result = new TypeLayout + var result = new TypingLayout[MType] result.ids = self.compute_ids(mtypes) result.pos = self.colorer.colorize(mtypes) return result @@ -111,7 +96,7 @@ end class PHTypeLayoutBuilder super TypeLayoutBuilder - redef type LAYOUT: PHTypeLayout + redef type LAYOUT: PHTypingLayout[MType] private var hasher: MTypeHasher @@ -122,7 +107,7 @@ class PHTypeLayoutBuilder # Compute mtypes ids and position using BM redef fun build_layout(mtypes) do - var result = new PHTypeLayout + var result = new PHTypingLayout[MType] result.ids = self.compute_ids(mtypes) result.masks = self.hasher.compute_masks(mtypes, result.ids) result.hashes = self.hasher.compute_hashes(mtypes, result.ids, result.masks) @@ -142,7 +127,7 @@ end abstract class ClassLayoutBuilder - type LAYOUT: ClassLayout + type LAYOUT: TypingLayout[MClass] private var mmodule: MModule init(mmodule: MModule) do self.mmodule = mmodule @@ -168,8 +153,8 @@ class BMClassLayoutBuilder init(mmodule: MModule) do super # Compute mclasses ids and position using BM - redef fun build_layout(mclasses: Set[MClass]): LAYOUT do - var result = new ClassLayout + redef fun build_layout(mclasses) do + var result = new TypingLayout[MClass] result.ids = self.compute_ids(mclasses) result.pos = result.ids return result @@ -189,7 +174,7 @@ class CLClassLayoutBuilder # Compute mclasses ids and position using BM redef fun build_layout(mclasses) do - var result = new ClassLayout + var result = new TypingLayout[MClass] result.ids = self.compute_ids(mclasses) result.pos = self.colorer.colorize(mclasses) return result @@ -200,7 +185,7 @@ end class PHClassLayoutBuilder super ClassLayoutBuilder - redef type LAYOUT: PHClassLayout + redef type LAYOUT: PHTypingLayout[MClass] private var hasher: MClassHasher @@ -211,7 +196,7 @@ class PHClassLayoutBuilder # Compute mclasses ids and position using BM redef fun build_layout(mclasses) do - var result = new PHClassLayout + var result = new PHTypingLayout[MClass] result.ids = self.compute_ids(mclasses) result.masks = self.hasher.compute_masks(mclasses, result.ids) result.hashes = self.hasher.compute_hashes(mclasses, result.ids, result.masks) diff --git a/src/separate_compiler.nit b/src/separate_compiler.nit index 8f160ef..435066e 100644 --- a/src/separate_compiler.nit +++ b/src/separate_compiler.nit @@ -108,7 +108,7 @@ class SeparateCompiler private var partial_types: Set[MType] = new HashSet[MType] private var type_layout_builder: TypeLayoutBuilder - private var type_layout: nullable TypeLayout + private var type_layout: nullable TypingLayout[MType] private var type_tables: nullable Map[MType, Array[nullable MType]] = null private var live_unanchored_types: Map[MClassDef, Set[MType]] = new HashMap[MClassDef, HashSet[MType]] @@ -311,7 +311,7 @@ class SeparateCompiler supers.add(mtype) for sup in supers do var color: Int - if layout isa PHTypeLayout then + if layout isa PHTypingLayout[MType] then color = layout.hashes[mtype][sup] else color = layout.pos[sup] @@ -463,7 +463,7 @@ class SeparateCompiler v.add_decl("{self.type_layout.ids[mtype]},") v.add_decl("\"{mtype}\", /* class_name_string */") var layout = self.type_layout - if layout isa PHTypeLayout then + if layout isa PHTypingLayout[MType] then v.add_decl("{layout.masks[mtype]},") else v.add_decl("{layout.pos[mtype]},") diff --git a/src/separate_erasure_compiler.nit b/src/separate_erasure_compiler.nit index 82846af..5c2ed4d 100644 --- a/src/separate_erasure_compiler.nit +++ b/src/separate_erasure_compiler.nit @@ -67,7 +67,7 @@ end class SeparateErasureCompiler super SeparateCompiler - private var class_layout: nullable ClassLayout + private var class_layout: nullable TypingLayout[MClass] private var class_tables: Map[MClass, Array[nullable MClass]] init(mainmodule: MModule, mmbuilder: ModelBuilder, runtime_type_analysis: RapidTypeAnalysis) do @@ -102,7 +102,7 @@ class SeparateErasureCompiler supers.add(mclass) for sup in supers do var color: Int - if layout isa PHClassLayout then + if layout isa PHTypingLayout[MClass] then color = layout.hashes[mclass][sup] else color = layout.pos[sup] @@ -168,7 +168,7 @@ class SeparateErasureCompiler v.add_decl("\"{mclass.name}\", /* class_name_string */") v.add_decl("{self.box_kind_of(mclass)}, /* box_kind */") var layout = self.class_layout - if layout isa PHClassLayout then + if layout isa PHTypingLayout[MClass] then v.add_decl("{layout.masks[mclass]},") else v.add_decl("{layout.pos[mclass]},")