@@ -559,6 +559,25 @@ static void elaborate_scope_events_(Design*des, NetScope*scope,
559
559
}
560
560
}
561
561
562
+ static void elaborate_scope_task (Design*des, NetScope*scope, PTask*task)
563
+ {
564
+ hname_t use_name ( task->pscope_name () );
565
+
566
+ NetScope*task_scope = new NetScope (scope, use_name, NetScope::TASK);
567
+ task_scope->is_auto (task->is_auto ());
568
+ task_scope->set_line (task);
569
+
570
+ if (scope==0 )
571
+ des->add_root_task (task_scope, task);
572
+
573
+ if (debug_scopes) {
574
+ cerr << task->get_fileline () << " : elaborate_scope_task: "
575
+ << " Elaborate task scope " << scope_path (task_scope) << endl;
576
+ }
577
+
578
+ task->elaborate_scope (des, task_scope);
579
+ }
580
+
562
581
static void elaborate_scope_tasks (Design*des, NetScope*scope,
563
582
const map<perm_string,PTask*>&tasks)
564
583
{
@@ -600,17 +619,28 @@ static void elaborate_scope_tasks(Design*des, NetScope*scope,
600
619
des->errors += 1 ;
601
620
}
602
621
603
- NetScope*task_scope = new NetScope (scope, use_name,
604
- NetScope::TASK);
605
- task_scope->is_auto ((*cur).second ->is_auto ());
606
- task_scope->set_line ((*cur).second );
622
+ elaborate_scope_task (des, scope, cur->second );
623
+ }
607
624
608
- if (debug_scopes)
609
- cerr << cur->second ->get_fileline () << " : debug: "
610
- << " Elaborate task scope " << scope_path (task_scope) << endl;
611
- (*cur).second ->elaborate_scope (des, task_scope);
625
+ }
626
+
627
+ static void elaborate_scope_func (Design*des, NetScope*scope, PFunction*task)
628
+ {
629
+ hname_t use_name ( task->pscope_name () );
630
+
631
+ NetScope*task_scope = new NetScope (scope, use_name, NetScope::FUNC);
632
+ task_scope->is_auto (task->is_auto ());
633
+ task_scope->set_line (task);
634
+
635
+ if (scope==0 )
636
+ des->add_root_task (task_scope, task);
637
+
638
+ if (debug_scopes) {
639
+ cerr << task->get_fileline () << " : elaborate_scope_func: "
640
+ << " Elaborate task scope " << scope_path (task_scope) << endl;
612
641
}
613
642
643
+ task->elaborate_scope (des, task_scope);
614
644
}
615
645
616
646
static void elaborate_scope_funcs (Design*des, NetScope*scope,
@@ -655,19 +685,33 @@ static void elaborate_scope_funcs(Design*des, NetScope*scope,
655
685
des->errors += 1 ;
656
686
}
657
687
658
- NetScope*func_scope = new NetScope (scope, use_name,
659
- NetScope::FUNC);
660
- func_scope->is_auto ((*cur).second ->is_auto ());
661
- func_scope->set_line ((*cur).second );
662
-
663
- if (debug_scopes)
664
- cerr << cur->second ->get_fileline () << " : debug: "
665
- << " Elaborate function scope " << scope_path (func_scope) << endl;
666
- (*cur).second ->elaborate_scope (des, func_scope);
688
+ elaborate_scope_func (des, scope, cur->second );
667
689
}
668
690
669
691
}
670
692
693
+ void elaborate_rootscope_tasks (Design*des)
694
+ {
695
+ for (map<perm_string,PTaskFunc*>::iterator cur = pform_tasks.begin ()
696
+ ; cur != pform_tasks.end () ; ++ cur) {
697
+
698
+ if (PTask*task = dynamic_cast <PTask*> (cur->second )) {
699
+ elaborate_scope_task (des, 0 , task);
700
+ continue ;
701
+ }
702
+
703
+ if (PFunction*func = dynamic_cast <PFunction*>(cur->second )) {
704
+ elaborate_scope_func (des, 0 , func);
705
+ continue ;
706
+ }
707
+
708
+ cerr << cur->second ->get_fileline () << " : internal error: "
709
+ << " elabortae_rootscope_tasks does not understand "
710
+ << " this object," << endl;
711
+ des->errors += 1 ;
712
+ }
713
+ }
714
+
671
715
class generate_schemes_work_item_t : public elaborator_work_item_t {
672
716
public:
673
717
generate_schemes_work_item_t (Design*des__, NetScope*scope, Module*mod)
0 commit comments