summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-09-24 11:04:56 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2021-09-24 13:13:51 +0200
commitbb951a86b11071dfda60fddbe6ae643db31bf4cd (patch)
treef9396ac52d5abd731c196adda3b360987be0cd6b
parentspec: Generalize semaphore release (diff)
downloadrtems-central-bb951a86b11071dfda60fddbe6ae643db31bf4cd.tar.bz2
spec: Add "function-implementation" link role
-rw-r--r--spec/newlib/req/futex-wait.yml2
-rw-r--r--spec/newlib/req/futex-wake.yml4
-rw-r--r--spec/rtems/message/req/receive.yml4
-rw-r--r--spec/rtems/sem/req/flush.yml6
-rw-r--r--spec/rtems/sem/req/obtain.yml8
-rw-r--r--spec/rtems/sem/req/release.yml4
-rw-r--r--spec/rtems/sem/req/timeout.yml4
-rw-r--r--spec/score/mtx/req/seize-wait.yml10
-rw-r--r--spec/score/mtx/req/surrender.yml4
-rw-r--r--spec/score/sem/req/seize-wait.yml4
-rw-r--r--spec/spec/function-implementation-role.yml24
-rwxr-xr-xspecview.py24
12 files changed, 93 insertions, 5 deletions
diff --git a/spec/newlib/req/futex-wait.yml b/spec/newlib/req/futex-wait.yml
index 2c11c57d..c3083dc0 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 fef7a30c..e13c7c23 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 6cbf78b6..4a853581 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 1c6a3968..b2f49433 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 b40cf1fa..c01ae3cc 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 09ad3df6..2f30836c 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 5a31fa6a..bf4ca66c 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 1174a35d..3cf6a7e2 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 94f6e4fb..5d1749e5 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 8df71d93..93531ed4 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 00000000..ffeff4d4
--- /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 3ec68604..0cc127f5 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):