L.O.B.S.T.E.R.

Lightweight Open BMW Software Traceability Evidence Report

Overview

Coverage

Category Ratio Coverage OK Items Total Items
Specification 49.8% 49.76% 103 207
Code 56.2% 56.21% 172 306
Test 96.2% 96.25% 77 80

Tracing policy

LOBSTER Tracing Policy n_875b0e30e76428bc0706b781b36b31aa Specification n_ca0dbad92a874b2f69b549293387925e Code n_875b0e30e76428bc0706b781b36b31aa->n_ca0dbad92a874b2f69b549293387925e n_0cbc6611f5540bd0809a388dc95a615b Test n_875b0e30e76428bc0706b781b36b31aa->n_0cbc6611f5540bd0809a388dc95a615b

Issues

Detailed report

Requirements and Specification

Specification

language-reference-manual/lrm.trlc
TRLC Text LRM.Goals
text: It is important to have design goals for a language. The
design goals of TRLC are:

bullets: ['The intended domain is requirements writing in an industrial\nsafety-critical context, where requirements carry a\nlot of meta-data and linkage.', 'Future language releases should be backwards compatible, as\nwe anticipate that there will be a large body of\nrequirements.', 'Language design should be extensible and flexible for future\nchanges.', 'Requirement files (but not necessarily model and check\nfiles) should be human-readable with minimal\ntraining or understanding of the language.', 'No business logic should be encoded in the language design.']
Justifications:
  • Design goals are reflected in language design.
TRLC Text LRM.File_Encoding
text: All input files are encoded in UTF-8. Passing a file with a
different encoding to TRLC results in
undefined behaviour.
Traces to:
TRLC Recommendation LRM.File_Encoding_Fixed
text: It is recommended to try to detect this in an implementation
and raise a fatal error; but in the interest
of compatibility and sanity an
implementation shall not provide a way to
switch the encoding (at the command-line or
otherwise).
Traces to:
TRLC Text LRM.Whitespace
text: Whitespace is ignored.
Traces to:
TRLC Text LRM.Comments
text: Comments are C-Style `/* .. */` and C++ style `//`, and are
ignored. The matching for C-style comments
is non-greedy.
Traces to:
TRLC Terminal LRM.Identifier
text: Identifiers start with a letter and are followed by letters,
numbers, or underscores.
TRLC Keywords LRM.TRLC_Keywords
text: A keyword is an identifier that is one of the following
reserved words:

bullets: ['abs', 'abstract', 'and', 'checks', 'else', 'elsif', 'enum', 'error', 'exists', 'extends', 'false', 'fatal', 'final', 'forall', 'freeze', 'if', 'implies', 'import', 'in', 'not', 'null', 'optional', 'or', 'package', 'section', 'separator', 'then', 'true', 'tuple', 'type', 'warning', 'xor']
Traces to:
TRLC Punctuation LRM.Single_Delimiters
text: Single character delimiters:

bullets: ['Brackets: `(` `)` `[` `]` `{` `}`', 'Punctuation: `,` `.` `=`', 'Operators: `*` `/` `%` `+` `-`', 'Boolean operators: `<` `>`', 'Symbols: `@` `:` `;`']
TRLC Punctuation LRM.Double_Delimiters
text: Double character delimiters:

bullets: ['Operators: `**`', 'Boolean operators: `==` `<=` `>=` `!=`', 'Punctuation: `=>` `..`']
TRLC Text LRM.Lexing_Disambiguation
text: Preference is (obviously) given to longer delimiters if
there is ambiguity; i.e. `==` takes
precedence over two `=` tokens.
TRLC Terminal LRM.Integers
text: Integers are base 2 (prefixed by `0b`), 10, or 16 (prefixed
by `0x`), and leading zeros are effectively
ignored. It is possible to separate digit
groups with an underscore for
readability. It shall be a lexing error to
use digits that do not fit into the base.
TRLC Terminal LRM.Decimals
text: Decimals are base 10, and leading and trailing zeros are
effectively ignored.
TRLC Terminal LRM.Strings
text: There are three versions of a string, double quoted,
triple single quoted, and triple double quoted:
TRLC Static_semantics LRM.Simple_String_Value
text: The value of a double quoted string is precisely the
characters between the two double quotes,
with all instances of the `\"` escape
sequence being replaced with `"`.
Traces to:
TRLC Static_semantics LRM.Complex_String_Value
text: The value of a triple quoted string is the whitespace
trimmed string of characters between the triple quotes
(including the line breaks), The common whitespace at
the beginning of each line (ignoring blank lines) starting
at the second is removed. The trailing whitespace on
every line is removed. There is no escaping in a triple
quoted string.
TRLC Text LRM.Layout
text: There are three types of files:

bullets: ['`.rsl` They contains the user-defined type definitions and\noptionally user-defined warnings or checks', '(deprecated) `.check` They contain only user-defined warning\nor error messages for types declared in `.rsl`\nfiles', '`.trlc` They contain instances of the types (this is where\nyour requirements go)']
Traces to:
TRLC Dynamic_semantics LRM.File_Parsing_Order
text: First, all `.rsl` files are parsed. Then, if no errors are
raised, all `.check` files are parsed. Finally, if no errors
are raised, all `.trlc` files are parsed.
Traces to:
TRLC Dynamic_semantics LRM.File_Parsing_References
text: After all files are parsed, references are resolved and
user-defined checks are applied.
Traces to:
TRLC Recommendation LRM.Errors_In_TRLC_Files
text: It is unspecified how an implementation treats errors
in `.trlc` files, but it is recommended to not stop
processing after the first error.
Justifications:
  • This recommendation is not followed, as it would make the qualification of the tool more difficult.
TRLC Grammar LRM.Preamble
text: All files start with a package indication and an optional import list.

bnf: file_preamble ::= package_indication
{ import_clause }

package_indication ::= 'package' IDENTIFIER_name

import_clause ::= 'import' IDENTIFIER_name
TRLC Static_semantics LRM.Current_Package
text: The package indication defines the "current package".
Traces to:
TRLC Static_semantics LRM.Import_Visibility
text: A package may be imported, in which case its name may be
used as the prefix of a `qualified_name`.
Traces to:
TRLC Static_semantics LRM.Self_Imports
text: A package may not import itself.
Traces to:
TRLC Grammar LRM.RSL_File
text: A `.rsl` file starts with a package declaration and is
followed by type declarations.

bnf: rsl_file ::= file_preamble
{ type_declaration | check_block }
Traces to:
TRLC Static_semantics LRM.Package_Declaration
text: A package indication in an `.rsl` file declares a
package. Any given package name may only be
declared once globally.
Traces to:
TRLC Static_semantics LRM.Circular_Dependencies
text: In a `.rsl` file, a package may not import a package that
imports itself, directly or indirectly.
Traces to:
TRLC Static_semantics LRM.Builtin_Types
text: An implementation shall support the following builtin types,
that shall be made available for all packages:

bullets: ['Boolean', 'Integer', 'Decimal', 'String', 'Markup_String']
Traces to:
TRLC Static_semantics LRM.Boolean_Values
text: A `Boolean` has two values, `false` and `true`.
Traces to:
TRLC Static_semantics LRM.Integer_Values
text: An `Integer` is a signed integer, with an implementation
defined range. This range shall be at least
-1000 to 1000, and this can be infinite.
Traces to:
TRLC Static_semantics LRM.Decimal_Values
text: A `Decimal` is a signed rational with a power-of-ten
denominator, with an implementation defined
range. This range for the numerator shall be
at least -1000 to 1000, and denominator is
always a natural number with a range of at
least 1 to 1000. Any of these ranges can be
infinite (but the denominator is always
non-negative).
Traces to:
TRLC Static_semantics LRM.String_Values
text: A `String` is a sequence of implementation defined
characters. *(The decision to support Unicode
or not is left unspecified.)* The maximum
length of a String, if any, is implementation
defined, but shall be at least 1000.
Traces to:
TRLC Static_semantics LRM.Markup_String_Values
text: A `Markup_String` is identical to a `String`, except for a
few additional constraints on the string
contents. Any value of type `Markup_String` is
a valid instance of `String`, but not the
other way around.
Traces to:
TRLC Static_semantics LRM.Builtin_Functions
text: A package also includes a number of builtin functions that
are made available:

bullets: ['len', 'startswith', 'endswith', 'matches']
Traces to:
TRLC Static_semantics LRM.Builtin_Type_Conversion_Functions
text: A package also makes available a number of numeric type
conversion functions:

bullets: ['Integer', 'Decimal']
Traces to:
TRLC Grammar LRM.Described_Names
bnf: described_name ::= IDENTIFIER_name [ STRING_description ]
Traces to:
TRLC Static_semantics LRM.Described_Name_Description
text: A described name names an entity. The optional string
description has no static or dynamic
semantics.
Traces to:
TRLC Static_semantics LRM.Described_Name_Equality
text: Two described names are considered equal if their names are
equal.
Traces to:
TRLC Note LRM.Described_Name_Notes
text: The description has no bearing on equality. The string
description should be exported to the API, so
that downstream tools can make use of it. This
way we don't have to give some comments special meaning,
and we don't have to implement error-prone heuristics in
downstream tools for discovering these descriptions.
Justifications:
  • Non-normative text
TRLC Grammar LRM.Qualified_Name
bnf: qualified_name ::= [ IDENTIFIER_package_name '.' ] IDENTIFIER_name
Traces to:
TRLC Static_semantics LRM.Valid_Qualifier
text: The package name of a qualified name must be the current
package or an imported package.
Traces to:
TRLC Static_semantics LRM.Valid_Name
text: The name must be a valid symbol in the current scope (if no
package is provided) or a valid symbol of the
indicated package.
Traces to:
TRLC Grammar LRM.Type_Declarations
bnf: type_declaration ::= enumeration_declaration
| tuple_declaration
| record_declaration
Traces to:
TRLC Static_semantics LRM.Duplicate_Types
text: It is an error to create a type with a name that is already
visible. (Note: this especially includes
shadowing one of the builtin types, but also
means you cannot shadow packages.)
Traces to:
TRLC Grammar LRM.Enumeration_Declaration
bnf: enumeration_declaration ::= 'enum' described_name
'{' { enumeration_literal_specification } '}'

enumeration_literal_specification ::= described_name
Traces to:
TRLC Static_semantics LRM.Unique_Enumeration_Literals
text: Each described name declares an enumeration literal
specification, which shall have a unique name
in that enumeration.
Traces to:
TRLC Note LRM.Shared_Literals
text: It is not an error to have the same literal specification
for different enumerations.
Justifications:
  • Non-normative text
TRLC Note LRM.Literals_Shadowing_Permitted
text: It is not an error to have an enumeration literal with the
same name as a record or enumeration - as
there is no ambiguity - but it is recommended
that an implementation emits a warning in this
case.
Justifications:
  • Non-normative text
TRLC Static_semantics LRM.No_Empty_Enumerations
text: It is an error to specify an (empty) enumeration without any
literals.
Traces to:
TRLC Example LRM.Enumeration_Example
Justifications:
  • Non-normative example
TRLC Grammar LRM.Tuple_Declaration
bnf: tuple_declaration ::= 'tuple' described_name
'{' field_declaration
{ [ separator_declaration ]
field_declaration }
'}'

field_declaration ::=
described_name [ 'optional' ] qualified_name_FIELD_TYPE

separator_declaration ::=
'separator' separator_symbol

separator_symbol ::= IDENTIFIER
| '@'
| ':'
| ';'
Traces to:
TRLC Static_semantics LRM.Tuple_Field_Types
text: A field type names any valid visible and complete
type. *(Specifically you may not have a recursive
tuple reference.)*
Traces to:
TRLC Static_semantics LRM.Tuple_Separators_All_Or_None
text: A tuple type shall declare separators between all
fields, or none of them.
Traces to:
TRLC Static_semantics LRM.Restricted_Tuple_Nesting
text: A tuple type with separators may not contain fields
that have tuple types with separators. *(This is to
avoid parsing ambiguities for values such as `1; 2;
3`.)*
Traces to:
TRLC Static_semantics LRM.Tuple_Optional_Requires_Separators
text: Only tuples with separators may use optional fields. Tuples
without separators cannot have optional fields.
Traces to:
TRLC Static_semantics LRM.Tuple_Optional_Fields
text: After an optional field has been declared, all fields
following it must also be optional.
Traces to:
TRLC Static_semantics LRM.Tuple_Unique_Field_Names
text: It is an error to declare two fields with the same
name in the same tuple. *(Note that it is possible,
but a bad idea, to have a separator with the same
identifier as a field.)*
Traces to:
TRLC Recommendation LRM.Tuple_Based_Literal_Ambiguity
text: There is a potential source of ambiguity between
tuples with two or more integers separated by a `x`
or `b`. This is resolved by giving precedence to the
lexer. For example the string `0x123` should yield
the hex integer 291; but the string `0 x123` or `0 x
123` will generate the tuple. It is recommended to
warn when building tuples where a `b` or `x`
separator follows an integer.
Traces to:
TRLC Example LRM.Tuple_Example
Justifications:
  • Non-normative example
TRLC Grammar LRM.Record_Declaration
bnf: record_declaration ::= [ inheritance_qualifier ] 'type' described_name
[ 'extends' qualified_name_ROOT_TYPE ]
'{' { component_declaration |
component_freezing } '}'

inheritance_qualifier ::= 'abstract' | 'final'

component_declaration ::=
described_name [ 'optional' ]
qualified_name_COMPONENT_TYPE [ array_declaration ]

array_declaration ::= '[' INTEGER_lower '..' '*' ']'
| '[' INTEGER_lower '..' INTEGER_upper ']'

component_freezing ::= 'freeze' IDENTIFIER_component '=' value
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Root_Type
text: The root type for a record extension must be a valid record type.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Abstract_Types
text: A record may be marked `abstract`, in which case no objects of this
type may be declared. It must be extended *(even if that extension is
empty)* before instances of that type can be declared.
*(Note that it is possible to have components of an abstract type.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Final_Types
text: A record may be marked `final`, and the extension of a `final` type
is also considered to be final *(even if it is not explicitly marked
as such)*. An extension of a final type may not contain any
component declarations.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Unique_Record_Components
text: Each component declaration shall have a unique name in that
record declaration, or any of its root
types. *(Two separate record extensions may
defined the same component, and they may even
have different types. But you cannot re-define
a component from a parent type.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Component_Type
text: Each component type shall refer to a valid type, or to the
name of the record type itself. It is an error
to refer to a type that has not been declared
yet. *(As there are no forward declarations in
the language, this forces the user type
hierarchy to be a DAG, but permitting
self-references.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Anonymous_Arrays
text: A component with an array declaration introduces an
anonymous array type. This means the type of
the record component is not the type as
specified, but rather an array where the
element type is that type.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Upper_Bound_Greater_Than_Lower_Bound
text: It is an error to specify an upper bound that is less than
the lower bound. *(Note that it is permitted
for them to be equal.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Freezing_Components
text: Any valid previously declared record component may be
frozen, providing a value of the correct type
for the given field in all instances of the
record type. It is an error to freeze a
component that is already frozen.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Array_Indexing
text: Arrays are indexed by natural numbers and the first index is
0.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Array_Lower_Bound
text: An instance of an array shall not have fewer elements than
its lower bound.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Array_Upper_Bound
text: An array type has no upper bound if `*` is specified. An
array instance for an array type with an upper
bound shall not have more elements than its
upper bound.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Array_Implementation_Upper_Bound
text: An implementation may impose an arbitrary limit to the
actual upper bound of an array *(that is treat
the `*` as if it was that limit)*. This limit,
if it exists, shall be greater than or equal
to 1000.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Type_Extensions_Inherit_Everything
text: A record type that extends another inherits all components,
user defined checks, and component freezes
specified for its root type.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Type_Extensions_Polymorphism
text: Instances of an extension may be
provided as a reference where a root type is
required; but not the other way around. *(This
provide a limited form of polymorphism, but
with the Liskov substitution principle
guaranteed.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Recommendation LRM.Zero_Upper_Bound
text: It is recommended to emit a warning on array types with an
upper bound of zero.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Recommendation LRM.Arrays_Sized_One
text: It is recommended to emit a warning on array types with an
upper bound of one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Recommendation LRM.Freezing_In_Same_Record
text: It is recommended to emit a warning on freezing a component
declared in the same record.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Recommendation LRM.Tuple_Separator_Clashes
text: It is recommended that an implementation checks if a
record type contains a tuple with a identifier
separator that is the same as one of its
components. While this is not an error (parsing for
values is greedy) it is still highly confusing.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Example LRM.Record_Examples
Justifications:
  • Non-normative example
TRLC Grammar LRM.Check_File
text: A `.check` file is simply a set of check blocks.

bnf: check_file ::= file_preamble
{ check_block }
Traces to:
TRLC Static_semantics LRM.Cannot_Declare_In_Check_File
text: It is an error to indicate a package that has not been
declared in an `.rsl` file.
Traces to:
TRLC Static_semantics LRM.Import_In_Check
text: A check file may not import any packages.
Traces to:
TRLC Recommendation LRM.Deprecated_Check_Files
text: Check files are a deprecated feature that allows you to
specify checks separate from type
declarations. While this seems like a good
idea at first, in a large project this can
create confusion: consider a global definition
for your requirement type stored in a central
place which everyone is supposed to use. In
this example some random user can create in
their sub-project a check file that applies to
the global definitions, causing hassle for
everyone. It is recommended that an
implementation suggests moving any check from
a `.check` file into the package `.rsl` file.
Traces to:
TRLC Grammar LRM.Check_Block
bnf: check_block ::= 'checks' IDENTIFIER_record_or_tuple_name
'{' { check_declaration } '}'

check_declaration ::= expression ','
[ severity ] STRING_message
[ ',' STRING_details ]
[ ',' IDENTIFIER_component_name ]

severity ::= 'warning'
| 'error'
| 'fatal'
Traces to:
TRLC Static_semantics LRM.Applicable_Types
text: It is an error to refer to a type that does not exist in the
current package, or is not a record or tuple type.
Traces to:
TRLC Static_semantics LRM.Applicable_Components
text: In a check declaration or expression, it is an error to
refer to a component name (or field name) that does not belong
to the record (or tuple respectively) indicated.
Traces to:
TRLC Static_semantics LRM.No_Newlines_In_Message
text: It is an error to include a newline in the message.
Traces to:
TRLC Note LRM.Only_Current_Package
text: Note that it is never possible to add checks to a type from
a foreign package. In check files this is more
obvious as you cannot have an import clause,
but this is also true for checks declared in
`.rsl` files since it is not possible to
specify a qualified name.
Justifications:
  • Non-normative text
TRLC Dynamic_semantics LRM.Check_Evaluation_Order
text: Each check inside a check block is evaluated in the specified
order.
TRLC Note LRM.Check_Evaluation_Order_Across_Blocks
text: If multiple check blocks are declared for the same type,
then the order of evaluation of each check
block is unspecified.
Justifications:
  • Non-normative text
TRLC Dynamic_semantics LRM.Check_Evaluation_Order_For_Extensions
text: For record extensions, all checks for the base record must
be evaluated before any check of the record
extension is evaluated.
Traces to:
TRLC Dynamic_semantics LRM.Check_Messages
text: If the evaluated expression is true, no action is taken. If
it is false, then a diagnostic is emitted with
the specified message and details. It is
implementation defined if and how the details
are shown, for example in a "brief" mode they
could be omitted.
Traces to:
TRLC Dynamic_semantics LRM.Check_Severity
text: The severity, if provided, controls how future errors are
treated, and how the TRLC implementation
terminates.

bullets: ['A warning has no effect other than emitting the message.', 'An error (the default, in case severity is not specified)\ncauses an implementation to eventually\nreturn a non-zero error code, but further\nchecks will be evaluated (potentially\ncreating more messages).', 'A fatal message is like an error, except that no further\nchecks from this check block shall be\nevaluated for this object.']
Traces to:
TRLC Note LRM.Intended_Semantics_Of_Messages
text: The intended meaning of the message is a short description
of what is wrong. The intended meaning for the
optional details is a longer explanation,
including perhaps on what to fix.
Justifications:
  • Non-normative text
TRLC Note LRM.Anchoring
text: The component name (if specified) is a hint where the
message should be anchored. It is
implementation defined how or if this is taken
into account. A suitable anchoring for a
message without a component or field could be the
object declaration itself. If only a
single component or field is used in the expression
then the message could be anchored the same
way as if the component was indicated
explicitly in the check.
Justifications:
  • Non-normative text
TRLC Note LRM.Sane_Typing
text: It is an important design goal to keep the type system sane
and following LSP. I.e. each subtype may only
narrow the values permitted in a type. This
means for a record R and its extension RE; any
valid instance of RE is always a valid
instance of R if a new binding of R is created
considering only the components that are in R. It
will never be possible to delete, suppress,
widen, or omit checks in record extensions.
Justifications:
  • Non-normative text
TRLC Example LRM.Check_Examples
Justifications:
  • Non-normative example
TRLC Grammar LRM.Expression
bnf: expression ::= relation { 'and' relation }
| relation { 'or' relation }
| relation [ 'xor' relation ]
| relation [ 'implies' relation ]
Traces to:
TRLC Grammar LRM.Relation
bnf: relation ::= simple_expression [ comparison_operator simple_expression ]
| simple_expression [ 'not' ] 'in' membership_choice
| simple_expression [ 'not' ] 'in' simple_expression

membership_choice ::= simple_expression '..' simple_expression
Traces to:
TRLC Grammar LRM.Simple_Expression
bnf: simple_expression ::= [ adding_operator ]
term { adding_operator term }
Traces to:
TRLC Grammar LRM.Term
bnf: term ::= factor { multiplying_operator factor }
Traces to:
TRLC Grammar LRM.Factor
bnf: factor ::= primary [ '**' primary ]
| 'not' primary
| 'abs' primary
Traces to:
TRLC Grammar LRM.Primary
bnf: primary ::= INTEGER
| DECIMAL
| STRING
| 'true'
| 'false'
| 'null'
| name
| '(' expression ')'
| '(' quantified_expression ')'
| '(' conditional_expression ')'
Traces to:
TRLC Recommendation LRM.Unary_Minus_Parsing
text: The parsing of unary minus can be confusing: `-a % b` is
actually `- (a % b)`. The semantics of `%` are
carefully specified so that this does not
matter. It does also mean that `-a / -b` is
not legal and needs to be written as either
`-a / (-b)` or even better `(-a) / (-b)`. It
is recommended that a linter warns whenever a
unary minus is encountered that has a
non-trivial `term` or `factor` as its operand.
Traces to:
TRLC Example LRM.Expression_Examples
Justifications:
  • Non-normative example
TRLC Grammar LRM.Names
text: A name can be one of 5 things:

bullets: ['A qualified name referring to either some object, a component\n(in a record) or field (in a tuple), or an enumeration type.', 'A tuple field or enumeration literal.', 'An index into an array.', 'A (builtin) function call.']

bnf: name ::= qualified_name
| name '.' IDENTIFIER
| name '[' expression ']'
| name '(' parameter_list ')'

parameter_list ::= expression { ',' expression }
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Base_Names
text: The `qualified_name` must resolve to record component or
tuple field in scope, or a visible record
object, or a visible enumeration type.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Access_Prefixes
text: If the prefix of a dot (`.`) access resolves to an
enumeration type, then the identifier must be
a valid literal of that type. If the prefix of
a dot (`.`) access resolves to a tuple, then
the identifier must be a valid field of the
type of that tuple. Any other prefix is an
error.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Index_Prefixes
text: The type of the `name` in an array indexing prefix (i.e. `[`
.. `]`) must be an array type.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Function_Prefixes
text: The `name` in a function call must resolve to one of the
builtin functions.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Signature_Len
text: The builtin function `len` is of arity 1. Its parameter must
be of type `String` or an array type. Its
return type is `Integer`.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Signature_String_End_Functions
text: The builtin functions `startswith` and `endswith` are of
arity 2. All of their parameters must be of
type `String`. The return type of either
function is `Boolean`.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Signature_Matches
text: The builtin function `matches` is of arity 2. Its parameters
must be of type `String`. The return type is
`Boolean`. The second parameter must be a
valid regular expression. *(It is
implementation defined which regular
expression language is used, but it is highly,
_highly_ recommended to implement the standard
POSIX regular expressions.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Static_Regular_Expression
text: In addition, the second parameter to the `matches` function
must be a static compile-time constant,
i.e. it must not depend on the value of a
record field or the value of a quantified
variable.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Signature_Type_Conversion
text: The numeric type conversion functions are of arity 1 and
polymorphic (they are defined for both integer and
rationals). They return the type indicated by the function
name. *(They are polymorphic in case we want to introduce
a true rational type, or a floating point type.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Len_Semantics
text: The `len` function computes the length of the given string
or array.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Startswith_Semantics
text: The `startswith` function returns true iff the first
parameter fully contains the second parameter
at its start.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Endswith_Semantics
text: The `endswith` function returns true iff the first parameter
fully contains the second parameter at its
end.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Matches_Semantics
text: The `matches` function returns true iff the first parameter
is matched by the regular expression given in
the second parameter.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Integer_Conversion_Semantics
text: The `Integer` type conversion rounds to the nearest
integral, away from zero in the case of ties.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Decimal_Conversion_Semantics
text: The `Decimal` type conversion simply converts
the given integer to the exact same rational.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Name_resolution LRM.Case_Sensitive
text: Name resolution is case sensitive.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Example LRM.Name_Examples
Justifications:
  • Non-normative example
TRLC Grammar LRM.Operators
bnf: comparison_operator ::= '==' | '!=' | '<' | '<=' | '>' | '>='

adding_operator ::= '+' | '-'

multiplying_operator ::= '*' | '/' | '%'
Traces to:
Issues:
  • missing reference to Test
TRLC Static_semantics LRM.Association
text: For a chain of operators of the same category, the
association is left to right.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Range_Checks
text: It is implementation defined if type checks (range or
length) are performed for intermediate values;
if type checks are not performed then the
resulting expression must not be an error.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Note LRM.Range_Checks_Example
text: This means you either type check all the time, or you
guarantee that any intermediate will not
create an error in the implementation, as long
as the final value fits in the relevant
type. For example if A and B are maximum
length Strings, then `"potato" in A + B` may
either create an error when attempting to
concatenate the strings, OR it must work
correctly. What you cannot do is cause
undefined behaviour in the evaluation.
Justifications:
  • Non-normative text
TRLC Static_semantics LRM.Logical_Operators
text: There are five Boolean operators defined (not, and, or, xor,
implies) for expressions of Boolean type.
The type of the result is Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Shortcut_Logical_Operators
text: Operators with short-cut semantics are `and`, `or`, and
`implies`. They first evaluate their
left-hand side and proceed to evaluate the
right-hand side if it could influence the
final result. The semantics of these
operators are the usual ones.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Regular_Logical_Operators
text: Operators with standard semantics are `xor`, and `not`. They
do the usual thing.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Equality_Domain
text: The equality operators `==` and `!=` are defined for all
types, as long as the types are compatible,
i.e. they are the same types or one type is
a (transitive) record extension of the other. The
result is a Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Relational_Domain
text: The ordering relations `<`, `<=`, `>=`, and `>` are defined
for pairs of integers or pairs of rationals only. The result
is a Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Membership_Domain
text: Range membership tests `not in` and `in` are defined for
integers and rationals only. All operands
must have the same type, and the result is a
Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Substring_Domain
text: Substring tests `not in` and `in` are defined for
Strings only. The result is a Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Array_Membership_Domain
text: Array membership tests `not in` and `in` are defined for all
arrays. The type of the left-hand side must
match the element type of the array. The
result is a Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Equality_On_Null
text: Null is only equal to itself.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Equality_On_Tuples
text: Two tuple instances are equal if they both
contain the same values for all their components.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Equality_On_Record_References
text: Two record references are equal if they both
refer to the same record.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Equality_On_Arrays
text: Two arrays are equal if they both have the same length
and items (in the same order).
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Simple_Relational_Semantics
text: The meaning of the relationship operators are the usual.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Inclusive_Membership_Test_Semantics
text: An inclusive range membership test `x in a .. b` has the
same meaning as the Boolean expression `x >=
a and x <= b`. *(This means if a is less
than b, it is not an error. Instead the
result of such a test is always false.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Exclusive_Membership_Test_Semantics
text: An exclusive range membership test `x not in a .. b` has the
same meaning as the Boolean expression `x <
a or x > b`.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Simple_Substring_Semantics
text: The meaning of the substring test is the usual. Note that
the substring test is of course performed on
the value of the string, not the original
literal.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Array_Membership_Semantics
text: The array membership test `X in A` is equivalent to `(exists
item in A => item == X)`. The array
non-membership test `X not in A` is
equivalent to `(forall item in A => item !=
X)`.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Binary_Addition_Domain
text: The binary adding operator `+` is defined for integers,
rationals, and strings. The binary
subtraction operator `-` is defined for only
integers and rationals.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.String_Concatenation_Downgrade
text: When `+` is used to concatenate strings, the result is
always a `String`, even if one or both
operands if of type `Markup_String`. *(This
means the only way you can create a markup
string is when you construct it at record
object declaration.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Unary_Addition_Domain
text: The unary adding operator `+`, and the unary subtraction
operator `-` is defined only for integers
and rationals.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Adding_Types
text: For binary adding operators the types of the operands have
to match, and the result is the same type as
the two operands. For unary adding operators
the result is always the same as the
operand.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Adding_Semantics
text: The definition of `+` and `-` for integers and rationals is
the usual one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Concatenation_Semantics
text: The definition of `+` for strings is string concatenation.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Multiplying_Domain
text: The multiplying operators `*`, `/` are defined for integers
and rational types. The remainder operator
`%` is defined for integers only. For any of
these the result is always the same type as
the operands.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Multiplying_Semantics
text: The definition of `*` is the usual one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Integer_Division_Semantics
text: The definition of `/` for integers is floor division. *(For
example `5 / 2` is `2` and `-5 / 2` is
`-3`.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Rational_Division_Semantics
text: The definition of `/` for rationals is the usual one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Remainder_Semantics
text: The modulus division for `x % y` satisfies the relation `x =
y*N + (x % y)`, for some (signed) value of
`N`, with one of the following constraints
met:

bullets: ['`x % y` is `0`', '`x % y` has the same sign as `y` and an absolute\nvalue less than `y`']
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Division_By_Zero
text: Division by zero or modulo division by 0 is an error.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Power_Domain
text: The exponentiation operator `**` is defined for integers and
rational bases, and returns the same type as
its base. The exponent type is always an
Integer.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Power_Static_Exponent
text: The right-hand side parameter of `**` must be a static
compile-time constant, i.e. it must not
depend on the value of a record field or the
value of a quantified variable. It must not
be negative.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Absolute_Value_Domain
text: The absolute value prefix operator `abs` is defined for
integers and rationals, and returns a
(positive) integer or rational respectively.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Negation_Domain
text: The logical negation prefix operator `not` is defined for
Booleans only, and returns a Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Power_Semantics
text: The definition of exponentiation `**` is the usual one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Absolute_Value_Semantics
text: The definition of absolute value `abs` is the usual one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Negation_Semantics
text: The definition of logical negation `not` is the usual one.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Grammar LRM.Quantified_Expression
bnf: quantified_expression ::=
quantifier IDENTIFIER_name 'in' IDENTIFIER_component_name '=>'
expression_PREDICATE

quantifier ::= 'forall' | 'exists'
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Name_resolution LRM.Quantification_Object
text: The component name must be defined in the current record,
and must be an array type.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Quantification_Naming_Scope
text: A quantified expression introduces a new name, that is valid
only inside the predicate. This new name must
not shadow any other. *(This means two
separate quantified expressions may use the
same name, but you may not nest and shadow,
and you may not shadow a component name
either.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Quantification_Type
text: The type of the predicate must be Boolean. The result of a
quantified expression is Boolean.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Quantification_Evaluation
text: During evaluation of the quantified expression, each element
of the array is evaluated in sequence and its
value is bound to the declared name. The
predicated is then evaluated with this
binding.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Universal_Quantification_Semantics
text: For universal *(forall)* quantification the final value is
true iff all predicates evaluate to
true. *(This means universal quantification
over an empty array is vacuously true.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Existential_Quantification_Semantics
text: For existential *(exists)* quantification the final value is
true iff the predicate evaluate to true at
least once. *(This means existential
quantification over an empty array is
vacuously false.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Recommendation LRM.Quantification_Short_Circuit_Evaluation
text: In general Quantification is equivalent to a chain of `and`
or `or` expressions, however it is left
unspecified if quantification is using
short-circuit semantics or not. It is
recommended (for sanity) to do the following:

bullets: ['For actual evaluation, use short-circuit semantics, as speed\nis important.', 'For static analysis or linting, use non-short-circuit\nsemantics, as using a quantifier as a\ncomplex guard is not reasonable.']
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Grammar LRM.Conditional_Expression
bnf: conditional_expression ::=
'if' expression_CONDITION 'then' expression_DEPENDENT
{'elsif' expression_CONDITION 'then' expression_DEPENDENT }
'else' expression_DEPENDENT
TRLC Static_semantics LRM.Conditional_Expression_Types
text: The condition expressions must be of Boolean type. The
dependent expressions must all be of the same
type, and the type of the entire conditional
expression is also of that type.
Traces to:
TRLC Dynamic_semantics LRM.Conditional_Expression_Evaluation
text: Each condition is evaluated in sequence. Evaluation stops on
the first condition that evaluates to true;
after which the corresponding dependent
expression is evaluated and returned.
Traces to:
TRLC Dynamic_semantics LRM.Conditional_Expression_Else
text: If all conditions are evaluated to false, then the else
dependent expression is evaluated and
returned.
Traces to:
TRLC Grammar LRM.TRLC_File
text: A `.trlc` file is simply a set of record object declarations.

bnf: trlc_file ::= file_preamble
{ trlc_entry }

trlc_entry ::= section_declaration
| record_object_declaration
TRLC Static_semantics LRM.Late_Package_Declarations
text: It is permitted to indicate a package that has
not been declared in an `.rsl` file, in which
case it is declared by the
package_indication in the `.trlc` file. Such a package is
declared late. If two `.trlc` files declare the same
package, then it is unspecified which file actually
declares it.
Traces to:
TRLC Note LRM.TRLC_Parse_Issue
text: For TRLC files it is impossible fully parse a file
in isolation, since we must process at least the package
indication of every other trlc file to know which import
statements are valid.
Justifications:
  • Non-normative text
TRLC Grammar LRM.Section_Declaration
text: A section has no semantic impact, and no impact on name
resolution. Section names do not have to be
unique. It may be exposed in an API, for
example to section a HTML view of
requirements.

bnf: section_declaration ::= 'section' STRING_section_name
'{' { trlc_entry } '}'
Traces to:
TRLC Grammar LRM.Record_Object_Declaration
bnf: record_object_declaration ::=
qualified_name_RECORD_TYPE IDENTIFIER_object_name
'{' { component_association } '}'

component_association ::= IDENTIFIER_component_name '=' value

value ::= [ adding_operator ] INTEGER
| [ adding_operator ] DECIMAL
| STRING
| qualified_name_RECORD_OBJECT
| qualified_name_ENUM_TYPE '.' IDENTIFIER_enumeration_literal
| '[' [ value { ',' value } ] ']'
| tuple_aggregate

tuple_aggregate ::= '(' value { ',' value } ')'
| value { separator_symbol value }
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Record_Types
text: The type of the declaration must be a valid, non-abstract
record type. If no qualified name is given, the record type
must be in the indicated package. *(Note that it is not
legal to declare a tuple object.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Unique_Object_Names
text: The name of the declaration must be a unique name and
sufficiently distinct in the current
package. *(See name resolution for a
definition of sufficiently distinct.)* The
name of the declaration must not shadow a type
name or package.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Components
text: Each component name must be a valid, non-frozen component
of the record type. It is an error to attempt to assign to
a frozen component *(even if the value assigned would be the
same value as it's frozen value)*.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Valid_Enumeration_Literals
text: Each enumeration must be a valid enumeration type in the
indicated (or qualified) package. Each
enumeration literal must be a valid literal of
the indicated enumeration in the prefix.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Matching_Value_Types
text: The type of each value must match each component or array
element type. Records are specified through
references *(there is no way to specify an
inline anonymous instance)*.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Mandatory_Components
text: It is an error to not provide a value for a non-optional
component.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Tuple_Syntax_Correct_Form
text: The aggregate of a tuple must use the correct form. A
tuple without separators uses the bracket syntax
(e.g. `(1, 2, 3)`, and a tuple with separators must
use the separator syntax (e.g. `12345@42`).
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Tuple_Generic_Form
text: A tuple value for a tuple without separators must
contain one value, in order, for each of its fields.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Tuple_Separator_Form
text: A tuple value for a tuple with separators must
contain the separator symbols as indicated in the type,
in order. Optional fields and their preceding separator
may be omitted. Once an optional field has been omitted,
all following (optional) fields must also be omitted.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Evaluation_Of_Checks
text: A record object declaration creates a new binding for a
record. The value of any frozen components is the value
provided in the freezing declaration. After references
are resolved, all applicable checks on the object, including
any checks for tuples, are evaluated in the context
of this binding.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Late_Reference_Checking
text: It is an error to refer to a record by name that does not
exist. It is legal to refer to an record that
has not been encountered yet, as references
are resolved after parsing.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.References_To_Extensions
text: A record reference must match in type, i.e. be of the
correct type or any record extension of that
type. *(For example if RE extends R, then a
list of R may contain references to instances
of R and RE. A list of RE may not contain any
references to R.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Tuple_Checks
text: The checks for a tuple aggregate are immediately evaluated
after the last value is parsed.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Name_resolution LRM.Sufficiently_Distinct
text: When declaring record objects there are wider rules that
indicate name clashes. Specifically a record
may not be declared if its "simplified name"
clashes with any other "simplified name". A
"simplified name" is the name converted to
lowercase and all underscored removed.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Note LRM.Simplified_Name_Example
text: For example the simplified name of `Foo_Bar` is `foobar`
and therefore it clashes with `Foobar`,
`F_Oobar`, or `Foo_B_A_R`. But only at record
declaration; when referring to other object
you still have to use a precise match.
Justifications:
  • Non-normative text
TRLC Note LRM.Simplified_Name_Rationale
text: The purpose of this rule is to avoid requirements that
have hard to distinguish names.
Justifications:
  • Non-normative text
TRLC Recommendation LRM.Record_Object_API
text: When exposing record instances through the API, it is
required to make the type of the instance
available. There are some alternatives,
none of which are required:

bullets: ['Provide an implicit String record field named `type` that\ncarries this information (it is safe to do\nthat, as it is impossible to specify a\nrecord type with a field named `type`).', 'Provide a function or attribute that, when called, provides\nthe type information.', 'Provide the type information through the type system of the\nAPI language (e.g. the Python type system).']
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Example LRM.Record_Object_Examples
Justifications:
  • Non-normative example
TRLC Text LRM.Markup_String_Format
text: A `Markup_String` allows you to inline references to TRLC
record in a string. The format is limited and
simple: any name or comma-separated list of
names enclosed in double square brackets
(i.e. `[[` and `]]`) is considered a
reference.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Text LRM.Markup_String_Errors
text: Attempting to nest, or close a list that does not exist, or
not close an open list before the end of the
string is an error.
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Static_semantics LRM.Markup_String_Types
text: The fragment of BNF grammar applicable is
qualified_name. The type of each named object
must be a record type. *(This means you cannot
reference types or enumerations.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Dynamic_semantics LRM.Markup_String_Late_Reference_Resolution
text: The references are resolved late, just like an ordinary
record reference. *(This means you can
forward-reference objects, or reference
yourself.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Name_resolution LRM.Markup_String_Resolution
text: The name resolution rules for the qualified_name are exactly
the same as they are for any other
qualified_name. *(This means you need to
import all packages from which you reference
objects.)*
Issues:
  • missing reference to Code
  • missing reference to Test
TRLC Example LRM.Markup_String_Examples
Justifications:
  • Non-normative example
TRLC Static_semantics LRM.Restricted_Null
text: The literal null value is only permitted to appear in
an equality or inequality. Any other context (such as
`(if a then null else b)` is rejected statically.
Traces to:
TRLC Static_semantics LRM.Null_Equivalence
text: The expression `null == null` is statically true.
Traces to:
TRLC Dynamic_semantics LRM.Unspecified_Optional_Components
text: The value of an optional component or field that is
not specified is `null`.
Traces to:
TRLC Dynamic_semantics LRM.Null_Is_Invalid
text: For any other operator or operation, the null value is
considered out of bounds and raises an
error. *(This means you can check if something
is null or not, but any other use will cause
an error.)*

Implementation

Code

trlc/ast.py
Python Class ast.Value
Derived from:
Python Constructor ast.Node.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Node.set_ast_link
Issues:
  • missing up reference
Python Method ast.Node.write_indent
Justifications:
  • Debugging feature
Python Method ast.Node.dump
Justifications:
  • Debugging feature
Python Constructor ast.Check_Block.__init__
Derived from:
Python Method ast.Check_Block.add_check
Derived from:
Python Method ast.Check_Block.dump
Justifications:
  • Debugging feature
Python Constructor ast.Compilation_Unit.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Compilation_Unit.dump
Justifications:
  • Debugging feature
Python Method ast.Compilation_Unit.set_package
Derived from:
Python Method ast.Compilation_Unit.add_import
Derived from:
Python Method ast.Compilation_Unit.resolve_imports
Derived from:
Python Method ast.Compilation_Unit.is_visible
Derived from:
Python Method ast.Compilation_Unit.add_item
Derived from:
Python Constructor ast.Check.__init__
Derived from:
Python Method ast.Check.dump
Justifications:
  • Debugging feature
Python Method ast.Check.get_real_location
Justifications:
  • LRM.Anchoring
Python Method ast.Check.perform
Derived from:
Python Class ast.Unary_Operator
Justifications:
  • Utility enumeration for unary operators
Python Class ast.Binary_Operator
Justifications:
  • Utility enumeration for binary operators
Python Constructor ast.Expression.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Expression.evaluate
Issues:
  • missing up reference
Python Method ast.Expression.to_string
Issues:
  • missing up reference
Python Method ast.Expression.ensure_type
Derived from:
Python Method ast.Expression.resolve_references
Issues:
  • missing up reference
Python Method ast.Expression.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Implicit_Null.__init__
Derived from:
Python Method ast.Implicit_Null.to_string
Issues:
  • missing up reference
Python Method ast.Implicit_Null.evaluate
Derived from:
Python Method ast.Implicit_Null.to_python_object
Issues:
  • missing up reference
Python Method ast.Implicit_Null.dump
Justifications:
  • Debugging feature
Python Method ast.Implicit_Null.can_be_null
Issues:
  • missing up reference
Python Method ast.Literal.to_python_object
Issues:
  • missing up reference
Python Class ast.Null_Literal
Derived from:
Python Class ast.Integer_Literal
Derived from:
Python Class ast.Decimal_Literal
Derived from:
Python Class ast.String_Literal
Derived from:
Python Class ast.Boolean_Literal
Derived from:
Python Constructor ast.Enumeration_Literal.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Enumeration_Literal.dump
Justifications:
  • Debugging feature
Python Method ast.Enumeration_Literal.to_string
Issues:
  • missing up reference
Python Method ast.Enumeration_Literal.evaluate
Issues:
  • missing up reference
Python Method ast.Enumeration_Literal.to_python_object
Issues:
  • missing up reference
Python Method ast.Enumeration_Literal.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Array_Aggregate.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Array_Aggregate.dump
Justifications:
  • Debugging feature
Python Method ast.Array_Aggregate.append
Issues:
  • missing up reference
Python Method ast.Array_Aggregate.to_string
Issues:
  • missing up reference
Python Method ast.Array_Aggregate.evaluate
Issues:
  • missing up reference
Python Method ast.Array_Aggregate.resolve_references
Issues:
  • missing up reference
Python Method ast.Array_Aggregate.to_python_object
Issues:
  • missing up reference
Python Method ast.Array_Aggregate.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Tuple_Aggregate.__init__
Derived from:
Python Method ast.Tuple_Aggregate.assign
Issues:
  • missing up reference
Python Method ast.Tuple_Aggregate.dump
Justifications:
  • Debugging feature
Python Method ast.Tuple_Aggregate.to_string
Issues:
  • missing up reference
Python Method ast.Tuple_Aggregate.evaluate
Issues:
  • missing up reference
Python Method ast.Tuple_Aggregate.resolve_references
Issues:
  • missing up reference
Python Method ast.Tuple_Aggregate.to_python_object
Issues:
  • missing up reference
Python Method ast.Tuple_Aggregate.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Record_Reference.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Record_Reference.dump
Justifications:
  • Debugging feature
Python Method ast.Record_Reference.to_string
Issues:
  • missing up reference
Python Method ast.Record_Reference.evaluate
Issues:
  • missing up reference
Python Method ast.Record_Reference.resolve_references
Issues:
  • missing up reference
Python Method ast.Record_Reference.to_python_object
Issues:
  • missing up reference
Python Method ast.Record_Reference.can_be_null
Issues:
  • missing up reference
Python Class ast.Name_Reference
Derived from:
Python Constructor ast.Unary_Expression.__init__
Derived from:
Python Method ast.Unary_Expression.to_string
Issues:
  • missing up reference
Python Method ast.Unary_Expression.dump
Justifications:
  • Debugging feature
Python Method ast.Unary_Expression.evaluate
Derived from:
Python Method ast.Unary_Expression.to_python_object
Issues:
  • missing up reference
Python Method ast.Unary_Expression.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Binary_Expression.__init__
Derived from:
Python Method ast.Binary_Expression.dump
Justifications:
  • Debugging feature
Python Method ast.Binary_Expression.to_string
Issues:
  • missing up reference
Python Method ast.Binary_Expression.evaluate
Derived from:
Python Method ast.Binary_Expression.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Field_Access_Expression.__init__
Issues:
  • missing up reference
Python Method ast.Field_Access_Expression.dump
Justifications:
  • Debugging feature
Python Method ast.Field_Access_Expression.to_string
Issues:
  • missing up reference
Python Method ast.Field_Access_Expression.evaluate
Issues:
  • missing up reference
Python Method ast.Field_Access_Expression.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Range_Test.__init__
Derived from:
Python Method ast.Range_Test.to_string
Issues:
  • missing up reference
Python Method ast.Range_Test.dump
Justifications:
  • Debugging feature
Python Method ast.Range_Test.evaluate
Derived from:
Python Method ast.Range_Test.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Action.__init__
Derived from:
Python Method ast.Action.dump
Justifications:
  • Debugging feature
Python Method ast.Action.to_string
Issues:
  • missing up reference
Python Constructor ast.Conditional_Expression.__init__
Derived from:
Python Method ast.Conditional_Expression.add_elsif
Derived from:
Python Method ast.Conditional_Expression.set_else_part
Derived from:
Python Method ast.Conditional_Expression.dump
Justifications:
  • Debugging feature
Python Method ast.Conditional_Expression.to_string
Issues:
  • missing up reference
Python Method ast.Conditional_Expression.evaluate
Derived from:
Python Method ast.Conditional_Expression.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Quantified_Expression.__init__
Issues:
  • missing up reference
Python Method ast.Quantified_Expression.dump
Justifications:
  • Debugging feature
Python Method ast.Quantified_Expression.to_string
Issues:
  • missing up reference
Python Method ast.Quantified_Expression.evaluate
Derived from:
Python Method ast.Quantified_Expression.can_be_null
Issues:
  • missing up reference
Python Constructor ast.Entity.__init__
Derived from:
Python Constructor ast.Typed_Entity.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Quantified_Variable.dump
Justifications:
  • Debugging feature
Python Method ast.Type.perform_type_checks
Issues:
  • missing up reference
Python Method ast.Type.get_example_value
Justifications:
  • utility method
Python Class ast.Concrete_Type
Derived from:
Python Class ast.Builtin_Type
Derived from:
Python Class ast.Builtin_Numeric_Type
Derived from:
Python Class ast.Builtin_Function
Derived from:
Python Constructor ast.Array_Type.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Array_Type.dump
Justifications:
  • Debugging feature
Python Method ast.Array_Type.perform_type_checks
Issues:
  • missing up reference
Python Method ast.Array_Type.get_example_value
Justifications:
  • utility method
Python Class ast.Builtin_Integer
Derived from:
Python Class ast.Builtin_Decimal
Derived from:
Python Class ast.Builtin_Boolean
Derived from:
Python Class ast.Builtin_String
Derived from:
Python Class ast.Builtin_Markup_String
Derived from:
Python Constructor ast.Package.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Package.dump
Justifications:
  • Debugging feature
Python Method ast.Package.__repr__
Issues:
  • missing up reference
Python Constructor ast.Composite_Type.__init__
Derived from:
Python Method ast.Composite_Type.add_check
Derived from:
Python Method ast.Composite_Type.iter_checks
Derived from:
Python Method ast.Composite_Type.all_components
Justifications:
  • Convenience function
Python Constructor ast.Composite_Component.__init__
Derived from:
Python Method ast.Composite_Component.dump
Justifications:
  • Debugging feature
Python Method ast.Composite_Component.__repr__
Issues:
  • missing up reference
Python Constructor ast.Record_Type.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Record_Type.iter_checks
Derived from:
Python Method ast.Record_Type.dump
Justifications:
  • Debugging feature
Python Method ast.Record_Type.all_components
Issues:
  • missing up reference
Python Method ast.Record_Type.is_subclass_of
Issues:
  • missing up reference
Python Method ast.Record_Type.is_frozen
Issues:
  • missing up reference
Python Method ast.Record_Type.get_freezing_expression
Issues:
  • missing up reference
Python Method ast.Record_Type.get_example_value
Justifications:
  • utility method
Python Constructor ast.Tuple_Type.__init__
Derived from:
Python Method ast.Tuple_Type.add_separator
Justifications:
  • utility method
Python Method ast.Tuple_Type.iter_separators
Justifications:
  • utility method
Python Method ast.Tuple_Type.iter_sequence
Justifications:
  • utility method
Python Method ast.Tuple_Type.has_separators
Justifications:
  • utility method
Python Method ast.Tuple_Type.dump
Justifications:
  • Debugging feature
Python Method ast.Tuple_Type.perform_type_checks
Derived from:
Python Method ast.Tuple_Type.get_example_value
Justifications:
  • utility method
Python Class ast.Separator
Derived from:
Python Constructor ast.Enumeration_Type.__init__
Derived from:
Python Method ast.Enumeration_Type.dump
Justifications:
  • Debugging feature
Python Method ast.Enumeration_Type.get_example_value
Justifications:
  • utility method
Python Constructor ast.Enumeration_Literal_Spec.__init__
Derived from:
Python Method ast.Enumeration_Literal_Spec.dump
Justifications:
  • Debugging feature
Python Constructor ast.Record_Object.__init__
Derived from:
Python Method ast.Record_Object.fully_qualified_name
Issues:
  • missing up reference
Python Method ast.Record_Object.to_python_dict
Issues:
  • missing up reference
Python Method ast.Record_Object.assign
Issues:
  • missing up reference
Python Method ast.Record_Object.dump
Justifications:
  • Debugging feature
Python Method ast.Record_Object.resolve_references
Issues:
  • missing up reference
Python Method ast.Record_Object.perform_checks
Derived from:
Python Method ast.Record_Object.__repr__
Issues:
  • missing up reference
Python Class ast.Section
Derived from:
Python Constructor ast.Symbol_Table.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Symbol_Table.all_names
Issues:
  • missing up reference
Python Method ast.Symbol_Table.iter_record_objects
Issues:
  • missing up reference
Python Method ast.Symbol_Table.values
Issues:
  • missing up reference
Python Method ast.Symbol_Table.make_visible
Issues:
  • missing up reference
Python Method ast.Symbol_Table.register
Derived from:
Python Method ast.Symbol_Table.__contains__
Derived from:
Python Method ast.Symbol_Table.contains
Derived from:
Python Method ast.Symbol_Table.lookup_assuming
Derived from:
Python Method ast.Symbol_Table.lookup_direct
Derived from:
Python Method ast.Symbol_Table.lookup
Derived from:
Python Method ast.Symbol_Table.write_indent
Justifications:
  • Debugging feature
Python Method ast.Symbol_Table.dump
Justifications:
  • Debugging feature
Python Method ast.Symbol_Table.create_global_table
Derived from:
Python Constructor ast.Scope.__init__
Justifications:
  • Constructor only declares variables
Python Method ast.Scope.push
Issues:
  • missing up reference
Python Method ast.Scope.pop
Issues:
  • missing up reference
Python Method ast.Scope.contains
Issues:
  • missing up reference
Python Method ast.Scope.lookup
Issues:
  • missing up reference
Python Method ast.Scope.size
Issues:
  • missing up reference
trlc/errors.py
Python Constructor errors.Location.__init__
Issues:
  • missing up reference
Python Method errors.Location.to_string
Issues:
  • missing up reference
Python Method errors.Location.context_lines
Issues:
  • missing up reference
Python Method errors.Location.get_end_location
Issues:
  • missing up reference
Python Method errors.Kind.__str__
Issues:
  • missing up reference
Python Constructor errors.TRLC_Error.__init__
Issues:
  • missing up reference
Python Constructor errors.Message_Handler.__init__
Issues:
  • missing up reference
Python Method errors.Message_Handler.suppress
Issues:
  • missing up reference
Python Method errors.Message_Handler.cross_file_reference
Issues:
  • missing up reference
Python Method errors.Message_Handler.emit
Issues:
  • missing up reference
Python Method errors.Message_Handler.lex_error
Issues:
  • missing up reference
Python Method errors.Message_Handler.error
Issues:
  • missing up reference
Python Method errors.Message_Handler.warning
Issues:
  • missing up reference
Python Method errors.Message_Handler.check
Issues:
  • missing up reference
Python Method errors.Message_Handler.ice_loc
Issues:
  • missing up reference
trlc/lexer.py
Python Function lexer.triple_quoted_string_value
Derived from:
Python Constructor lexer.Source_Reference.__init__
Issues:
  • missing up reference
Python Method lexer.Source_Reference.text
Issues:
  • missing up reference
Python Method lexer.Source_Reference.context_lines
Issues:
  • missing up reference
Python Method lexer.Source_Reference.get_end_location
Issues:
  • missing up reference
Python Constructor lexer.Token_Base.__init__
Issues:
  • missing up reference
Python Constructor lexer.Token.__init__
Issues:
  • missing up reference
Python Method lexer.Token.__repr__
Issues:
  • missing up reference
Python Constructor lexer.Lexer_Base.__init__
Issues:
  • missing up reference
Python Method lexer.Lexer_Base.is_alpha
Derived from:
Python Method lexer.Lexer_Base.is_numeric
Derived from:
Python Method lexer.Lexer_Base.is_alnum
Derived from:
Python Method lexer.Lexer_Base.file_location
Issues:
  • missing up reference
Python Method lexer.Lexer_Base.token
Issues:
  • missing up reference
Python Method lexer.Lexer_Base.skip_whitespace
Derived from:
Python Method lexer.Lexer_Base.advance
Issues:
  • missing up reference
Python Constructor lexer.TRLC_Lexer.__init__
Derived from:
Python Method lexer.TRLC_Lexer.current_location
Justifications:
  • Utility function
Python Method lexer.TRLC_Lexer.file_location
Justifications:
  • Utility function
Python Method lexer.TRLC_Lexer.token
Derived from:
Python Method lexer.Token_Stream.token
Issues:
  • missing up reference
Python Function lexer.sanity_test
Justifications:
  • Developer test function
trlc/lint.py
Python Constructor lint.Linter.__init__
Justifications:
  • Not safety relevant
Python Method lint.Linter.verify
Justifications:
  • Not safety relevant
Python Method lint.Linter.verify_type
Justifications:
  • Not safety relevant
Python Method lint.Linter.verify_tuple_type
Derived from:
Python Method lint.Linter.verify_record_type
Justifications:
  • Not safety relevant
Python Method lint.Linter.verify_array_type
Justifications:
  • Not safety relevant
trlc/math.py
Python Function math.remainder
Issues:
  • missing up reference
Python Function math.round_nearest_away
Issues:
  • missing up reference
trlc/nested.py
Python Constructor nested.Nested_Lexer.__init__
Issues:
  • missing up reference
Python Method nested.Nested_Lexer.source_location
Issues:
  • missing up reference
Python Method nested.Nested_Lexer.file_location
Issues:
  • missing up reference
Python Method nested.Nested_Lexer.token
Issues:
  • missing up reference
trlc/parser.py
Python Constructor parser.Markup_Token.__init__
Issues:
  • missing up reference
Python Constructor parser.Markup_Lexer.__init__
Issues:
  • missing up reference
Python Method parser.Markup_Lexer.file_location
Issues:
  • missing up reference
Python Method parser.Markup_Lexer.token
Issues:
  • missing up reference
Python Constructor parser.Parser_Base.__init__
Issues:
  • missing up reference
Python Method parser.Parser_Base.advance
Derived from:
Python Method parser.Parser_Base.skip_until_newline
Issues:
  • missing up reference
Python Method parser.Parser_Base.peek
Issues:
  • missing up reference
Python Method parser.Parser_Base.peek_eof
Issues:
  • missing up reference
Python Method parser.Parser_Base.peek_kw
Issues:
  • missing up reference
Python Method parser.Parser_Base.match
Issues:
  • missing up reference
Python Method parser.Parser_Base.match_eof
Issues:
  • missing up reference
Python Method parser.Parser_Base.match_kw
Issues:
  • missing up reference
Python Constructor parser.Markup_Parser.__init__
Issues:
  • missing up reference
Python Method parser.Markup_Parser.parse_all_references
Issues:
  • missing up reference
Python Method parser.Markup_Parser.parse_ref_list
Issues:
  • missing up reference
Python Method parser.Markup_Parser.parse_qualified_name
Derived from:
Python Constructor parser.Parser.__init__
Issues:
  • missing up reference
Python Method parser.Parser.parse_described_name
Derived from:
Python Method parser.Parser.parse_qualified_name
Derived from:
Python Method parser.Parser.parse_type_declaration
Derived from:
Python Method parser.Parser.parse_enum_declaration
Derived from:
Python Method parser.Parser.parse_tuple_field
Derived from:
Python Method parser.Parser.parse_tuple_declaration
Derived from:
Python Method parser.Parser.parse_record_component
Issues:
  • missing up reference
Python Method parser.Parser.parse_record_declaration
Issues:
  • missing up reference
Python Method parser.Parser.parse_expression
Derived from:
Python Method parser.Parser.parse_relation
Derived from:
Python Method parser.Parser.parse_simple_expression
Derived from:
Python Method parser.Parser.parse_term
Derived from:
Python Method parser.Parser.parse_factor
Derived from:
Python Method parser.Parser.parse_primary
Derived from:
Python Method parser.Parser.parse_quantified_expression
Issues:
  • missing up reference
Python Method parser.Parser.parse_conditional_expression
Derived from:
Python Method parser.Parser.parse_builtin
Derived from:
Python Method parser.Parser.parse_name
Derived from:
Python Method parser.Parser.parse_check_block
Derived from:
Python Method parser.Parser.parse_section_declaration
Derived from:
Python Method parser.Parser.parse_boolean
Derived from:
Python Method parser.Parser.parse_value
Derived from:
Python Method parser.Parser.parse_markup_string
Derived from:
Python Method parser.Parser.parse_record_object_declaration
Derived from:
Python Method parser.Parser.parse_trlc_entry
Derived from:
Python Method parser.Parser.parse_preamble
Derived from:
Python Method parser.Parser.parse_rsl_file
Derived from:
Python Method parser.Parser.parse_check_file
Derived from:
Python Method parser.Parser.parse_trlc_file
Derived from:
trlc/trlc.py
Python Constructor trlc.Source_Manager.__init__
Issues:
  • missing up reference
Python Method trlc.Source_Manager.callback_parse_begin
Issues:
  • missing up reference
Python Method trlc.Source_Manager.callback_parse_progress
Issues:
  • missing up reference
Python Method trlc.Source_Manager.callback_parse_end
Issues:
  • missing up reference
Python Method trlc.Source_Manager.signal_progress
Issues:
  • missing up reference
Python Method trlc.Source_Manager.cross_file_reference
Issues:
  • missing up reference
Python Method trlc.Source_Manager.update_common_root
Issues:
  • missing up reference
Python Method trlc.Source_Manager.create_parser
Issues:
  • missing up reference
Python Method trlc.Source_Manager.register_include
Issues:
  • missing up reference
Python Method trlc.Source_Manager.register_file
Derived from:
Python Method trlc.Source_Manager.register_directory
Derived from:
Python Method trlc.Source_Manager.register_rsl_file
Derived from:
Python Method trlc.Source_Manager.register_check_file
Derived from:
Python Method trlc.Source_Manager.register_trlc_file
Derived from:
Python Method trlc.Source_Manager.build_graph
Derived from:
Python Method trlc.Source_Manager.parse_rsl_files
Derived from:
Python Method trlc.Source_Manager.parse_check_files
Derived from:
Python Method trlc.Source_Manager.parse_trlc_files
Derived from:
Python Method trlc.Source_Manager.resolve_record_references
Issues:
  • missing up reference
Python Method trlc.Source_Manager.perform_checks
Issues:
  • missing up reference
Python Method trlc.Source_Manager.perform_sanity_checks
Issues:
  • missing up reference
Python Method trlc.Source_Manager.process
Derived from:
Python Function trlc.main
Issues:
  • missing up reference
trlc/vcg.py
Python Class vcg.Unsupported
Justifications:
  • Not safety relevant
Python Class vcg.Feedback
Justifications:
  • Not safety relevant
Python Class vcg.VCG
Justifications:
  • Not safety relevant

Verification and Validation

Test

tests-system/checks-6
TRLCST Test directory checks-6
Derived from:
tests-system/comments-1
TRLCST Test directory comments-1
Derived from:
tests-system/cross-refs-in-errors
TRLCST Test directory cross-refs-in-errors
Derived from:
tests-system/cyclic-packages
TRLCST Test directory cyclic-packages
Derived from:
tests-system/decimal-1
TRLCST Test directory decimal-1
Derived from:
tests-system/decimal-5
TRLCST Test directory decimal-5
Derived from:
tests-system/delayed-references-1
TRLCST Test directory delayed-references-1
Derived from:
tests-system/enum
TRLCST Test directory enum
Derived from:
tests-system/enum-ok
TRLCST Test directory enum-ok
Derived from:
tests-system/file-encoding-not-utf8
TRLCST Test directory file-encoding-not-utf8
Derived from:
tests-system/lint-ambiguous-literals
TRLCST Test directory lint-ambiguous-literals
Derived from:
tests-system/lint-vcg-empty-enum
TRLCST Test directory lint-vcg-empty-enum
Derived from:
tests-system/multiple-models
TRLCST Test directory multiple-models
Derived from:
tests-system/preamble-1
TRLCST Test directory preamble-1
Derived from:
tests-system/rbt-applicable-components
TRLCST Test directory rbt-applicable-components
Derived from:
tests-system/rbt-applicable-types
TRLCST Test directory rbt-applicable-types
Derived from:
tests-system/rbt-boolean-values
TRLCST Test directory rbt-boolean-values
Derived from:
tests-system/rbt-builtin-functions
TRLCST Test directory rbt-builtin-functions
Derived from:
tests-system/rbt-builtin-types
TRLCST Test directory rbt-builtin-types
Derived from:
tests-system/rbt-cannot-declare-in-check-file
TRLCST Test directory rbt-cannot-declare-in-check-file
Derived from:
tests-system/rbt-check-evaluation-order
TRLCST Test directory rbt-check-evaluation-order
Derived from:
tests-system/rbt-check-evaluation-order-for-extensions
TRLCST Test directory rbt-check-evaluation-order-for-extensions
Derived from:
tests-system/rbt-check-severity-1
TRLCST Test directory rbt-check-severity-1
Derived from:
tests-system/rbt-check-severity-2
TRLCST Test directory rbt-check-severity-2
Derived from:
tests-system/rbt-check-severity-3
TRLCST Test directory rbt-check-severity-3
Derived from:
tests-system/rbt-conditional-expression
TRLCST Test directory rbt-conditional-expression
Derived from:
tests-system/rbt-conditional-expression-types
TRLCST Test directory rbt-conditional-expression-types
Derived from:
tests-system/rbt-decimal-values
TRLCST Test directory rbt-decimal-values
Derived from:
tests-system/rbt-described-name-equality
TRLCST Test directory rbt-described-name-equality
Derived from:
tests-system/rbt-described-names
TRLCST Test directory rbt-described-names
Derived from:
tests-system/rbt-duplicate-types
TRLCST Test directory rbt-duplicate-types
Derived from:
tests-system/rbt-expression
TRLCST Test directory rbt-expression
Derived from:
tests-system/rbt-import-in-check
TRLCST Test directory rbt-import-in-check
Derived from:
tests-system/rbt-integer-values
TRLCST Test directory rbt-integer-values
Derived from:
tests-system/rbt-late-package-declarations
TRLCST Test directory rbt-late-package-declarations
Derived from:
tests-system/rbt-markup-string-values
TRLCST Test directory rbt-markup-string-values
Derived from:
tests-system/rbt-qualified-name
TRLCST Test directory rbt-qualified-name
Derived from:
tests-system/rbt-restricted-null-1
TRLCST Test directory rbt-restricted-null-1
Derived from:
tests-system/rbt-restricted-null-2
TRLCST Test directory rbt-restricted-null-2
Derived from:
tests-system/rbt-restricted-tuple-nesting-1
TRLCST Test directory rbt-restricted-tuple-nesting-1
Derived from:
tests-system/rbt-restricted-tuple-nesting-2
TRLCST Test directory rbt-restricted-tuple-nesting-2
Derived from:
tests-system/rbt-section-declaration
TRLCST Test directory rbt-section-declaration
Derived from:
tests-system/rbt-string-values
TRLCST Test directory rbt-string-values
Derived from:
tests-system/rbt-tuple-declaration
TRLCST Test directory rbt-tuple-declaration
Derived from:
tests-system/rbt-tuple-field-types
TRLCST Test directory rbt-tuple-field-types
Derived from:
tests-system/rbt-tuple-optional-fields
TRLCST Test directory rbt-tuple-optional-fields
Derived from:
tests-system/rbt-tuple-optional-requires-separators
TRLCST Test directory rbt-tuple-optional-requires-separators
Derived from:
tests-system/rbt-tuple-separators-all-or-none
TRLCST Test directory rbt-tuple-separators-all-or-none
Derived from:
tests-system/rbt-tuple-unique-field-names
TRLCST Test directory rbt-tuple-unique-field-names
Derived from:
tests-system/rbt-unary-minus-parsing
TRLCST Test directory rbt-unary-minus-parsing
Derived from:
tests-system/rbt-unique-enumeration-literals
TRLCST Test directory rbt-unique-enumeration-literals
Derived from:
tests-system/simple
TRLCST Test directory simple
Derived from:
tests-system/visibility-1
TRLCST Test directory visibility-1
Derived from:
tests-system/whitespace
TRLCST Test directory whitespace
Derived from:
tests-unit/test_lexer.py
PyUnit Test test_lexer.Test_Lexer.testIdentifiers1
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIdentifiers2
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIdentifiers3
Derived from:
PyUnit Test test_lexer.Test_Lexer.testKeywords
Derived from:
PyUnit Test test_lexer.Test_Lexer.testPunctuationSingle
Derived from:
PyUnit Test test_lexer.Test_Lexer.testPunctuationDouble
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIncompleteNEQ
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIntegers1
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIntegers2
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIntegers3
Derived from:
PyUnit Test test_lexer.Test_Lexer.testIntegers4
Derived from:
PyUnit Test test_lexer.Test_Lexer.testDecimals1
Derived from:
PyUnit Test test_lexer.Test_Lexer.testDecimals2
Derived from:
PyUnit Test test_lexer.Test_Lexer.testDecimals3
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings1
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings2
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings3
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings4
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings5
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings6
Derived from:
PyUnit Test test_lexer.Test_Lexer.testStrings7
Derived from:
PyUnit Test test_lexer.Test_Lexer.testComment
Derived from:
PyUnit Test test_lexer.Test_Lexer.testLocation1
Justifications:
  • api functionality not used inside TRLC
tests-unit/test_lexer_base.py
PyUnit Test test_lexer_base.Test_Lexer_Base.testIsAlpha
Issues:
  • missing up reference
PyUnit Test test_lexer_base.Test_Lexer_Base.testIsDigit
Issues:
  • missing up reference
PyUnit Test test_lexer_base.Test_Lexer_Base.testIsAlnum
Issues:
  • missing up reference