[rtems-central commit] spec: Add "function-implementation" link role

Sebastian Huber sebh at rtems.org
Fri Sep 24 11:32:07 UTC 2021


Module:    rtems-central
Branch:    master
Commit:    bb951a86b11071dfda60fddbe6ae643db31bf4cd
Changeset: http://git.rtems.org/rtems-central/commit/?id=bb951a86b11071dfda60fddbe6ae643db31bf4cd

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Fri Sep 24 11:04:56 2021 +0200

spec: Add "function-implementation" link role

---

 spec/newlib/req/futex-wait.yml             |  2 ++
 spec/newlib/req/futex-wake.yml             |  4 ++++
 spec/rtems/message/req/receive.yml         |  4 ++++
 spec/rtems/sem/req/flush.yml               |  6 ++++++
 spec/rtems/sem/req/obtain.yml              |  8 ++++++++
 spec/rtems/sem/req/release.yml             |  4 ++++
 spec/rtems/sem/req/timeout.yml             |  4 ++++
 spec/score/mtx/req/seize-wait.yml          | 10 ++++++++++
 spec/score/mtx/req/surrender.yml           |  4 ++++
 spec/score/sem/req/seize-wait.yml          |  4 ++++
 spec/spec/function-implementation-role.yml | 24 ++++++++++++++++++++++++
 specview.py                                | 24 +++++++++++++++++++-----
 12 files changed, 93 insertions(+), 5 deletions(-)

diff --git a/spec/newlib/req/futex-wait.yml b/spec/newlib/req/futex-wait.yml
index 2c11c57..c3083dc 100644
--- a/spec/newlib/req/futex-wait.yml
+++ b/spec/newlib/req/futex-wait.yml
@@ -6,6 +6,8 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/futex-wait
+- role: function-implementation
+  uid: /score/tq/req/enqueue-fifo
 - role: requirement-refinement
   uid: futex
 post-conditions:
diff --git a/spec/newlib/req/futex-wake.yml b/spec/newlib/req/futex-wake.yml
index fef7a30..e13c7c2 100644
--- a/spec/newlib/req/futex-wake.yml
+++ b/spec/newlib/req/futex-wake.yml
@@ -6,6 +6,10 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/futex-wake
+- role: function-implementation
+  uid: /score/tq/req/flush-fifo
+- role: function-implementation
+  uid: /score/tq/req/flush-filter-stop
 - role: requirement-refinement
   uid: futex
 - role: validation
diff --git a/spec/rtems/message/req/receive.yml b/spec/rtems/message/req/receive.yml
index 6cbf78b..4a85358 100644
--- a/spec/rtems/message/req/receive.yml
+++ b/spec/rtems/message/req/receive.yml
@@ -6,6 +6,10 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/receive
+- role: function-implementation
+  uid: /score/tq/req/enqueue-fifo
+- role: function-implementation
+  uid: /score/tq/req/enqueue-priority
 post-conditions:
 - name: Status
   states:
diff --git a/spec/rtems/sem/req/flush.yml b/spec/rtems/sem/req/flush.yml
index 1c6a396..b2f4943 100644
--- a/spec/rtems/sem/req/flush.yml
+++ b/spec/rtems/sem/req/flush.yml
@@ -6,6 +6,12 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/flush
+- role: function-implementation
+  uid: /score/tq/req/flush-fifo
+- role: function-implementation
+  uid: /score/tq/req/flush-priority
+- role: function-implementation
+  uid: /score/tq/req/flush-priority-inherit
 post-conditions:
 - name: Action
   states:
diff --git a/spec/rtems/sem/req/obtain.yml b/spec/rtems/sem/req/obtain.yml
index b40cf1f..c01ae3c 100644
--- a/spec/rtems/sem/req/obtain.yml
+++ b/spec/rtems/sem/req/obtain.yml
@@ -6,6 +6,14 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/obtain
+- role: function-implementation
+  uid: /score/mtx/req/seize-try
+- role: function-implementation
+  uid: /score/mtx/req/seize-wait
+- role: function-implementation
+  uid: /score/sem/req/seize-try
+- role: function-implementation
+  uid: /score/sem/req/seize-wait
 post-conditions:
 - name: Action
   states:
diff --git a/spec/rtems/sem/req/release.yml b/spec/rtems/sem/req/release.yml
index 09ad3df..2f30836 100644
--- a/spec/rtems/sem/req/release.yml
+++ b/spec/rtems/sem/req/release.yml
@@ -6,6 +6,10 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/release
+- role: function-implementation
+  uid: /score/mtx/req/surrender
+- role: function-implementation
+  uid: /score/sem/req/surrender
 post-conditions:
 - name: Action
   states:
diff --git a/spec/rtems/sem/req/timeout.yml b/spec/rtems/sem/req/timeout.yml
index 5a31fa6..bf4ca66 100644
--- a/spec/rtems/sem/req/timeout.yml
+++ b/spec/rtems/sem/req/timeout.yml
@@ -6,6 +6,10 @@ functional-type: action
 links:
 - role: interface-function
   uid: ../if/obtain
+- role: function-implementation
+  uid: /score/tq/req/timeout
+- role: function-implementation
+  uid: /score/tq/req/timeout-priority-inherit
 post-conditions:
 - name: Action
   states:
diff --git a/spec/score/mtx/req/seize-wait.yml b/spec/score/mtx/req/seize-wait.yml
index 1174a35..3cf6a7e 100644
--- a/spec/score/mtx/req/seize-wait.yml
+++ b/spec/score/mtx/req/seize-wait.yml
@@ -4,6 +4,16 @@ copyrights:
 enabled-by: true
 functional-type: action
 links:
+- role: function-implementation
+  uid: /score/tq/req/enqueue-ceiling
+- role: function-implementation
+  uid: /score/tq/req/enqueue-deadlock
+- role: function-implementation
+  uid: /score/tq/req/enqueue-fifo
+- role: function-implementation
+  uid: /score/tq/req/enqueue-mrsp
+- role: function-implementation
+  uid: /score/tq/req/enqueue-priority
 - role: requirement-refinement
   uid: ../if/group
 post-conditions:
diff --git a/spec/score/mtx/req/surrender.yml b/spec/score/mtx/req/surrender.yml
index 94f6e4f..5d1749e 100644
--- a/spec/score/mtx/req/surrender.yml
+++ b/spec/score/mtx/req/surrender.yml
@@ -4,6 +4,10 @@ copyrights:
 enabled-by: true
 functional-type: action
 links:
+- role: function-implementation
+  uid: /score/tq/req/surrender
+- role: function-implementation
+  uid: /score/tq/req/surrender-priority-inherit
 - role: requirement-refinement
   uid: ../if/group
 post-conditions:
diff --git a/spec/score/sem/req/seize-wait.yml b/spec/score/sem/req/seize-wait.yml
index 8df71d9..93531ed 100644
--- a/spec/score/sem/req/seize-wait.yml
+++ b/spec/score/sem/req/seize-wait.yml
@@ -4,6 +4,10 @@ copyrights:
 enabled-by: true
 functional-type: action
 links:
+- role: function-implementation
+  uid: /score/tq/req/enqueue-fifo
+- role: function-implementation
+  uid: /score/tq/req/enqueue-priority
 - role: requirement-refinement
   uid: ../if/group
 post-conditions:
diff --git a/spec/spec/function-implementation-role.yml b/spec/spec/function-implementation-role.yml
new file mode 100644
index 0000000..ffeff4d
--- /dev/null
+++ b/spec/spec/function-implementation-role.yml
@@ -0,0 +1,24 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2021 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+- role: spec-refinement
+  spec-key: role
+  spec-value: function-implementation
+  uid: link
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      It defines the function implementation role of links.  It is used to
+      indicate that a ${requirement-functional:/spec-name} item specifies parts
+      of the function.
+    mandatory-attributes: all
+spec-name: Function Implementation Link Role
+spec-type: function-implementation-role
+type: spec
diff --git a/specview.py b/specview.py
index 3ec6860..0cc127f 100755
--- a/specview.py
+++ b/specview.py
@@ -38,11 +38,10 @@ from rtemsspec.transitionmap import Transition, TransitionMap
 
 _CHILD_ROLES = [
     "requirement-refinement", "interface-ingroup", "interface-ingroup-hidden",
-    "interface-function", "validation", "appl-config-group-member",
-    "glossary-member"
+    "interface-function", "appl-config-group-member", "glossary-member"
 ]
 
-_PARENT_ROLES = ["interface-enumerator"]
+_PARENT_ROLES = ["function-implementation", "interface-enumerator"]
 
 
 def _get_value_dummy(_ctx: ItemGetValueContext) -> Any:
@@ -122,17 +121,24 @@ def _view(item: Item, level: int, role: Optional[str],
           validated_filter: str) -> None:
     if not _visit_item(item, level, role, validated_filter):
         return
+    for child in item.children("validation"):
+        _visit_item(child, level + 1, "validation", validated_filter)
     _view_interface_placment(item, level + 1, validated_filter)
     for link in item.links_to_children(_CHILD_ROLES):
         _view(link.item, level + 1, link.role, validated_filter)
+    for link in item.links_to_parents(_PARENT_ROLES):
+        _view(link.item, level + 1, link.role, validated_filter)
 
 
 def _validate(item: Item) -> bool:
-    count = 0
+    count = len(list(item.children("validation")))
     validated = True
     for child in item.children(_CHILD_ROLES):
         validated = _validate(child) and validated
         count += 1
+    for parent in item.parents(_PARENT_ROLES):
+        validated = _validate(parent) and validated
+        count += 1
     if count == 0:
         validated = item.type in [
             "constraint",
@@ -151,6 +157,7 @@ def _validate(item: Item) -> bool:
             "runtime-measurement-test",
             "test-case",
             "test-suite",
+            "validation",
         ]
         if not validated:
             item["_validated"] = False
@@ -172,11 +179,16 @@ _VALIDATION_LEAF = [
 
 
 def _no_validation(item: Item, path: List[str]) -> List[str]:
-    leaf = True
     path_2 = path + [item.uid]
+    leaf = len(list(item.children("validation"))) == 0
+    if not leaf:
+        return path_2[:-1]
     for child in item.children(_CHILD_ROLES):
         path_2 = _no_validation(child, path_2)
         leaf = False
+    for parent in item.parents(_PARENT_ROLES):
+        path_2 = _no_validation(parent, path_2)
+        leaf = False
     if leaf and item.type not in _VALIDATION_LEAF:
         for index, component in enumerate(path_2):
             if component:
@@ -194,6 +206,8 @@ def _gather_interface_placement(item: Item, spec: Set) -> None:
 def _gather(item: Item, spec: Set) -> None:
     spec.add(item)
     _gather_interface_placement(item, spec)
+    for child in item.children("validation"):
+        spec.add(child)
     for child in item.children(_CHILD_ROLES):
         _gather(child, spec)
     for parent in item.parents(_PARENT_ROLES):



More information about the vc mailing list