Fix handling of functions/tasks without top-level begin-end block, fixes #1231
authorClifford Wolf <clifford@clifford.at>
Tue, 6 Aug 2019 16:06:14 +0000 (18:06 +0200)
committerClifford Wolf <clifford@clifford.at>
Tue, 6 Aug 2019 16:06:14 +0000 (18:06 +0200)
Signed-off-by: Clifford Wolf <clifford@clifford.at>
frontends/ast/simplify.cc

index e947125bfd4712f61916b2261604dadd842193ec..6fb94d80b1ceeb5520281042193b49055d0d82aa 100644 (file)
@@ -3439,19 +3439,11 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
 {
        std::map<std::string, AstNode*> backup_scope;
        std::map<std::string, AstNode::varinfo_t> variables;
-       bool delete_temp_block = false;
-       AstNode *block = NULL;
+       AstNode *block = new AstNode(AST_BLOCK);
 
        size_t argidx = 0;
        for (auto child : children)
        {
-               if (child->type == AST_BLOCK)
-               {
-                       log_assert(block == NULL);
-                       block = child;
-                       continue;
-               }
-
                if (child->type == AST_WIRE)
                {
                        while (child->simplify(true, false, false, 1, -1, false, true)) { }
@@ -3468,13 +3460,9 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
                        continue;
                }
 
-               log_assert(block == NULL);
-               delete_temp_block = true;
-               block = new AstNode(AST_BLOCK);
                block->children.push_back(child->clone());
        }
 
-       log_assert(block != NULL);
        log_assert(variables.count(str) != 0);
 
        while (!block->children.empty())
@@ -3642,8 +3630,7 @@ AstNode *AstNode::eval_const_function(AstNode *fcall)
                log_abort();
        }
 
-       if (delete_temp_block)
-               delete block;
+       delete block;
 
        for (auto &it : backup_scope)
                if (it.second == NULL)