OSDN Git Service

composition と phrase の名前の重複をチェックするように変更
authorstarg <starg@users.osdn.me>
Wed, 31 Aug 2016 01:56:11 +0000 (10:56 +0900)
committerstarg <starg@users.osdn.me>
Wed, 31 Aug 2016 01:56:11 +0000 (10:56 +0900)
include/message/id.hpp
src/ast2ir/module2ir.cpp
src/driver/msgcallback.cpp

index d7dede3..7a9627f 100644 (file)
@@ -15,6 +15,7 @@ enum class MessageID : int
     UnknownInIRProcessor,
     UnknownInIR2MIDI,
     UnprocessedAttribute,
+    DuplicatedName,
     DuplicatedCompositionName,
     DuplicatedPhraseName,
     NoSuchPhraseName,
index 99a89b8..f561031 100644 (file)
@@ -67,6 +67,23 @@ boost::optional<IR::Module> Module2IRCompiler::Compile(const AST::Module& ast)
             return {};
         }
 
+        auto itPhraseName = ir.BlockNameMap.find(i.Name);
+
+        if (itPhraseName != ir.BlockNameMap.end())
+        {
+            AddMessage(
+                Message::MessageItem{
+                    Message::MessageKind::Error,
+                    Message::MessageID::DuplicatedName,
+                    ir.Name,
+                    i.Location,
+                    {i.Name}
+                }
+            );
+
+            return {};
+        }
+
         auto newIndex = IR::TrackBlockReference{ir.TrackBlocks.size()};
         ir.TrackBlockNameMap[i.Name] = newIndex;
         ir.TrackBlocks.emplace_back();
index ad678fd..6e80c6f 100644 (file)
@@ -36,6 +36,7 @@ MessagePrinter::MessagePrinter(IStdErrWriter* pStdErrWriter)
         {Message::MessageID::UnknownInIRProcessor, ICEMessage + " (IRProcessor: Message = '{0}')"},
         {Message::MessageID::UnknownInIR2MIDI, ICEMessage + " (IR2MIDI: Message = '{0}')"},
         {Message::MessageID::UnprocessedAttribute, ICEMessage + " (Unprocessed attribute: '{0}')"},
+        {Message::MessageID::DuplicatedName, "composition or phrase named '{0}' is already defined"},
         {Message::MessageID::DuplicatedCompositionName, "composition named '{0}' is already defined"},
         {Message::MessageID::DuplicatedPhraseName, "phrase named '{0}' is already defined"},
         {Message::MessageID::NoSuchPhraseName, "cannot find a phrase named '{0}'"},