Skip to content
This repository has been archived by the owner on Nov 14, 2023. It is now read-only.

Commit

Permalink
Add message field assignment statement
Browse files Browse the repository at this point in the history
  • Loading branch information
treiher committed Jun 8, 2022
1 parent d583bf3 commit 4c65b5c
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 2 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
VERBOSE ?= @

VERSION = 0.10.0
VERSION = 0.11.0
BUILDDIR = $(PWD)/build

ifneq ($(MAKECMDGOALS),clean)
Expand Down
13 changes: 12 additions & 1 deletion language/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,13 @@
assignment_statement=ast.Assignment(
grammar.unqualified_identifier, ":=", grammar.extended_expression
),
message_field_assignment_statement=ast.MessageFieldAssignment(
grammar.unqualified_identifier,
".",
grammar.unqualified_identifier,
":=",
grammar.extended_expression,
),
list_attribute=ast.AttributeStatement(
grammar.unqualified_identifier,
"'",
Expand All @@ -522,7 +529,11 @@
Opt("(", List(grammar.message_aggregate_association, sep=","), ")"),
),
attribute_statement=Or(grammar.list_attribute, grammar.reset),
action=Or(grammar.assignment_statement, grammar.attribute_statement),
action=Or(
grammar.assignment_statement,
grammar.message_field_assignment_statement,
grammar.attribute_statement,
),
conditional_transition=ast.ConditionalTransition(
"goto",
grammar.unqualified_identifier,
Expand Down
8 changes: 8 additions & 0 deletions language/rflx_ast.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,14 @@ class Assignment(Statement):
expression = Field(type=Expr)


class MessageFieldAssignment(Statement):
"""Assignment of expression to message field."""

message = Field(type=UnqualifiedID)
field = Field(type=UnqualifiedID)
expression = Field(type=Expr)


class AttrStmt(RFLXNode):
"""Attribute statement kind."""

Expand Down
26 changes: 26 additions & 0 deletions tests/grammar_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2848,6 +2848,32 @@ def test_assignment_statement(string: str, expected: Dict[str, str]) -> None:
assert actual == expected


@pytest.mark.parametrize(
"string,expected",
[
(
"A.B := C",
{
"_kind": "MessageFieldAssignment",
"expression": {
"_kind": "Variable",
"identifier": {
"_kind": "ID",
"name": {"_kind": "UnqualifiedID", "_value": "C"},
"package": None,
},
},
"message": {"_kind": "UnqualifiedID", "_value": "A"},
"field": {"_kind": "UnqualifiedID", "_value": "B"},
},
)
],
)
def test_message_field_assignment_statement(string: str, expected: Dict[str, str]) -> None:
actual = parse(string, GrammarRule.message_field_assignment_statement_rule)
assert actual == expected


@pytest.mark.parametrize(
"string,expected",
[
Expand Down

0 comments on commit 4c65b5c

Please sign in to comment.