Skip to content
Snippets Groups Projects
Commit 8ebbb941 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Fix value type of affectation expression

pugs do not allow (willingly) chaining affectation expressions such
as (a=b=c). Thus the return type of affectations must be `void` (since
these expressions have no values) and not the type of the lhs.
parent 34d6a933
Branches
Tags
1 merge request!70Feature/language reduce static
...@@ -282,7 +282,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const ...@@ -282,7 +282,7 @@ ASTNodeDataTypeBuilder::_buildNodeDataTypes(ASTNode& n) const
} else if (n.is_type<language::eq_op>() or n.is_type<language::multiplyeq_op>() or } else if (n.is_type<language::eq_op>() or n.is_type<language::multiplyeq_op>() or
n.is_type<language::divideeq_op>() or n.is_type<language::pluseq_op>() or n.is_type<language::divideeq_op>() or n.is_type<language::pluseq_op>() or
n.is_type<language::minuseq_op>()) { n.is_type<language::minuseq_op>()) {
n.m_data_type = n.children[0]->m_data_type; n.m_data_type = ASTNodeDataType::build<ASTNodeDataType::void_t>();
} else if (n.is_type<language::tuple_expression>()) { } else if (n.is_type<language::tuple_expression>()) {
std::vector<std::shared_ptr<const ASTNodeDataType>> sub_data_type_list; std::vector<std::shared_ptr<const ASTNodeDataType>> sub_data_type_list;
......
...@@ -894,7 +894,7 @@ x = f(x); ...@@ -894,7 +894,7 @@ x = f(x);
| `-(language::expression_list:list(Z*Z)) | `-(language::expression_list:list(Z*Z))
| +-(language::integer:1:Z) | +-(language::integer:1:Z)
| `-(language::integer:2:Z) | `-(language::integer:2:Z)
`-(language::eq_op:R^2) `-(language::eq_op:void)
+-(language::name:x:R^2) +-(language::name:x:R^2)
`-(language::function_evaluation:R^2) `-(language::function_evaluation:R^2)
+-(language::name:f:function) +-(language::name:f:function)
...@@ -1285,7 +1285,7 @@ a = 1; ...@@ -1285,7 +1285,7 @@ a = 1;
+-(language::var_declaration:void) +-(language::var_declaration:void)
| +-(language::name:a:N) | +-(language::name:a:N)
| `-(language::N_set:typename(N)) | `-(language::N_set:typename(N))
`-(language::eq_op:N) `-(language::eq_op:void)
+-(language::name:a:N) +-(language::name:a:N)
`-(language::integer:1:Z) `-(language::integer:1:Z)
)"; )";
...@@ -1307,7 +1307,7 @@ a *= 1.2; ...@@ -1307,7 +1307,7 @@ a *= 1.2;
| +-(language::N_set:typename(N)) | +-(language::N_set:typename(N))
| +-(language::name:a:N) | +-(language::name:a:N)
| `-(language::integer:1:Z) | `-(language::integer:1:Z)
`-(language::multiplyeq_op:N) `-(language::multiplyeq_op:void)
+-(language::name:a:N) +-(language::name:a:N)
`-(language::real:1.2:R) `-(language::real:1.2:R)
)"; )";
...@@ -1329,7 +1329,7 @@ a /= 2; ...@@ -1329,7 +1329,7 @@ a /= 2;
| +-(language::R_set:typename(R)) | +-(language::R_set:typename(R))
| +-(language::name:a:R) | +-(language::name:a:R)
| `-(language::integer:3:Z) | `-(language::integer:3:Z)
`-(language::divideeq_op:R) `-(language::divideeq_op:void)
+-(language::name:a:R) +-(language::name:a:R)
`-(language::integer:2:Z) `-(language::integer:2:Z)
)"; )";
...@@ -1351,7 +1351,7 @@ a += 2; ...@@ -1351,7 +1351,7 @@ a += 2;
| +-(language::Z_set:typename(Z)) | +-(language::Z_set:typename(Z))
| +-(language::name:a:Z) | +-(language::name:a:Z)
| `-(language::integer:3:Z) | `-(language::integer:3:Z)
`-(language::pluseq_op:Z) `-(language::pluseq_op:void)
+-(language::name:a:Z) +-(language::name:a:Z)
`-(language::integer:2:Z) `-(language::integer:2:Z)
)"; )";
...@@ -1373,7 +1373,7 @@ a -= 2; ...@@ -1373,7 +1373,7 @@ a -= 2;
| +-(language::Z_set:typename(Z)) | +-(language::Z_set:typename(Z))
| +-(language::name:a:Z) | +-(language::name:a:Z)
| `-(language::integer:1:Z) | `-(language::integer:1:Z)
`-(language::minuseq_op:Z) `-(language::minuseq_op:void)
+-(language::name:a:Z) +-(language::name:a:Z)
`-(language::integer:2:Z) `-(language::integer:2:Z)
)"; )";
...@@ -1416,10 +1416,10 @@ for (let i:Z, i=0; i<3; i += 1) { i += 2; } ...@@ -1416,10 +1416,10 @@ for (let i:Z, i=0; i<3; i += 1) { i += 2; }
+-(language::lesser_op:B) +-(language::lesser_op:B)
| +-(language::name:i:Z) | +-(language::name:i:Z)
| `-(language::integer:3:Z) | `-(language::integer:3:Z)
+-(language::pluseq_op:Z) +-(language::pluseq_op:void)
| +-(language::name:i:Z) | +-(language::name:i:Z)
| `-(language::integer:1:Z) | `-(language::integer:1:Z)
`-(language::pluseq_op:Z) `-(language::pluseq_op:void)
+-(language::name:i:Z) +-(language::name:i:Z)
`-(language::integer:2:Z) `-(language::integer:2:Z)
)"; )";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment