From 507cdb3134f4f493607160d4360e16ca617f869a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Per=20=C3=96stlund?= Date: Tue, 24 Jan 2017 12:25:31 +0100 Subject: [PATCH] NFInst improvements. - Simplify builtin type handling by storing the actual type in Class.PARTIAL_BUILTIN/INSTANCED_BUILTIN instead of the name. --- Compiler/NFFrontEnd/NFClass.mo | 5 +++-- Compiler/NFFrontEnd/NFFlatten.mo | 2 -- Compiler/NFFrontEnd/NFInst.mo | 7 ++++--- Compiler/NFFrontEnd/NFLookup.mo | 10 +++++----- Compiler/NFFrontEnd/NFTyping.mo | 28 ++-------------------------- 5 files changed, 14 insertions(+), 38 deletions(-) diff --git a/Compiler/NFFrontEnd/NFClass.mo b/Compiler/NFFrontEnd/NFClass.mo index b1c4240635f..e90700f158e 100644 --- a/Compiler/NFFrontEnd/NFClass.mo +++ b/Compiler/NFFrontEnd/NFClass.mo @@ -37,6 +37,7 @@ import NFInstNode.InstNode; import NFMod.Modifier; import NFStatement.Statement; import SCode.Element; +import Type = NFType; import Array; import Error; @@ -109,12 +110,12 @@ uniontype Class end INSTANCED_CLASS; record PARTIAL_BUILTIN - String name; + Type ty; Modifier modifier; end PARTIAL_BUILTIN; record INSTANCED_BUILTIN - String name; + Type ty; list attributes; end INSTANCED_BUILTIN; diff --git a/Compiler/NFFrontEnd/NFFlatten.mo b/Compiler/NFFrontEnd/NFFlatten.mo index 0a6e22f4da8..7b2ea7438c4 100644 --- a/Compiler/NFFrontEnd/NFFlatten.mo +++ b/Compiler/NFFrontEnd/NFFlatten.mo @@ -546,8 +546,6 @@ algorithm end flattenWhenEquation; - - function flattenStatement input Statement alg; input output list stmts = {}; diff --git a/Compiler/NFFrontEnd/NFInst.mo b/Compiler/NFFrontEnd/NFInst.mo index ad5a21295a2..80b57858738 100644 --- a/Compiler/NFFrontEnd/NFInst.mo +++ b/Compiler/NFFrontEnd/NFInst.mo @@ -52,6 +52,7 @@ import NFMod.Modifier; import NFMod.ModifierScope; import NFEquation.Equation; import NFStatement.Statement; +import Type = NFType; protected import Array; @@ -717,7 +718,7 @@ protected list type_mods, inst_type_mods; Binding binding; InstNode n, cur_scope, par; - String name; + Type ty; algorithm () := match InstNode.getClass(node) // A normal class. @@ -752,7 +753,7 @@ algorithm // Clone the node, since each component needs a unique type. node := InstNode.clone(node); c := InstNode.getClass(node); - Class.PARTIAL_BUILTIN(name = name, modifier = mod) := c; + Class.PARTIAL_BUILTIN(ty = ty, modifier = mod) := c; // Merge any outer modifiers on the class with the class' own modifier. type_mod := Modifier.merge(modifier, mod); @@ -780,7 +781,7 @@ algorithm end for; end if; - c := Class.INSTANCED_BUILTIN(name, inst_type_mods); + c := Class.INSTANCED_BUILTIN(ty, inst_type_mods); node := InstNode.updateClass(c, node); then (); diff --git a/Compiler/NFFrontEnd/NFLookup.mo b/Compiler/NFFrontEnd/NFLookup.mo index 1135a99a360..769a2cda3c8 100644 --- a/Compiler/NFFrontEnd/NFLookup.mo +++ b/Compiler/NFFrontEnd/NFLookup.mo @@ -47,23 +47,23 @@ import NFInstNode.InstNode; import NFLookupState.LookupState; import NFMod.Modifier; import NFPrefix.Prefix; -import NFType; +import Type = NFType; constant NFInst.InstNode REAL_TYPE = NFInstNode.CLASS_NODE("Real", NFBuiltin.BUILTIN_REAL, - listArray({NFClass.PARTIAL_BUILTIN("Real", Modifier.NOMOD())}), + listArray({NFClass.PARTIAL_BUILTIN(Type.REAL(), Modifier.NOMOD())}), NFInstNode.EMPTY_NODE(), NFInstNode.NORMAL_CLASS()); constant NFInst.InstNode INT_TYPE = NFInstNode.CLASS_NODE("Integer", NFBuiltin.BUILTIN_INTEGER, - listArray({NFClass.PARTIAL_BUILTIN("Integer", Modifier.NOMOD())}), + listArray({NFClass.PARTIAL_BUILTIN(Type.INTEGER(), Modifier.NOMOD())}), NFInstNode.EMPTY_NODE(), NFInstNode.NORMAL_CLASS()); constant NFInst.InstNode BOOL_TYPE = NFInstNode.CLASS_NODE("Boolean", NFBuiltin.BUILTIN_BOOLEAN, - listArray({NFClass.PARTIAL_BUILTIN("Boolean", Modifier.NOMOD())}), + listArray({NFClass.PARTIAL_BUILTIN(Type.BOOLEAN(), Modifier.NOMOD())}), NFInstNode.EMPTY_NODE(), NFInstNode.NORMAL_CLASS()); constant NFInst.InstNode STRING_TYPE = NFInstNode.CLASS_NODE("String", NFBuiltin.BUILTIN_STRING, - listArray({NFClass.PARTIAL_BUILTIN("String", Modifier.NOMOD())}), + listArray({NFClass.PARTIAL_BUILTIN(Type.STRING(), Modifier.NOMOD())}), NFInstNode.EMPTY_NODE(), NFInstNode.NORMAL_CLASS()); constant NFInstNode.InstNode BUILTIN_TIME = diff --git a/Compiler/NFFrontEnd/NFTyping.mo b/Compiler/NFFrontEnd/NFTyping.mo index 283c6ce640d..a64f93afb2e 100644 --- a/Compiler/NFFrontEnd/NFTyping.mo +++ b/Compiler/NFFrontEnd/NFTyping.mo @@ -100,11 +100,10 @@ algorithm case Class.INSTANCED_BUILTIN() algorithm - ty := makeBuiltinType(cls, scope); - cls.attributes := typeTypeAttributes(cls.attributes, ty, scope); + cls.attributes := typeTypeAttributes(cls.attributes, cls.ty, scope); classNode := InstNode.updateClass(cls, classNode); then - ty; + cls.ty; else algorithm @@ -612,29 +611,6 @@ end typeStatement; // ty := Type.COMPLEX(); //end makeComplexType; -function makeBuiltinType - input Class classInst; - input InstNode scope; - output Type ty; -algorithm - ty := match classInst - local - String name; - - case Class.INSTANCED_BUILTIN(name = name) - then - match name - case "Real" then Type.REAL(); - case "Integer" then Type.INTEGER(); - case "Boolean" then Type.BOOLEAN(); - case "String" then Type.STRING(); - else Type.UNKNOWN(); - end match; - - else Type.UNKNOWN(); - end match; -end makeBuiltinType; - function typeTypeAttributes input output list attributes; input Type ty;