diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-09-24 11:04:56 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2021-09-24 13:13:51 +0200 |
commit | bb951a86b11071dfda60fddbe6ae643db31bf4cd (patch) | |
tree | f9396ac52d5abd731c196adda3b360987be0cd6b | |
parent | spec: Generalize semaphore release (diff) | |
download | rtems-central-bb951a86b11071dfda60fddbe6ae643db31bf4cd.tar.bz2 |
spec: Add "function-implementation" link role
-rw-r--r-- | spec/newlib/req/futex-wait.yml | 2 | ||||
-rw-r--r-- | spec/newlib/req/futex-wake.yml | 4 | ||||
-rw-r--r-- | spec/rtems/message/req/receive.yml | 4 | ||||
-rw-r--r-- | spec/rtems/sem/req/flush.yml | 6 | ||||
-rw-r--r-- | spec/rtems/sem/req/obtain.yml | 8 | ||||
-rw-r--r-- | spec/rtems/sem/req/release.yml | 4 | ||||
-rw-r--r-- | spec/rtems/sem/req/timeout.yml | 4 | ||||
-rw-r--r-- | spec/score/mtx/req/seize-wait.yml | 10 | ||||
-rw-r--r-- | spec/score/mtx/req/surrender.yml | 4 | ||||
-rw-r--r-- | spec/score/sem/req/seize-wait.yml | 4 | ||||
-rw-r--r-- | spec/spec/function-implementation-role.yml | 24 | ||||
-rwxr-xr-x | 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 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): |