From 0101ea73199452d0dfdb2930fd49211e6eff28d4 Mon Sep 17 00:00:00 2001 From: Pelle Johnsen Date: Mon, 2 Nov 2020 07:48:04 +0000 Subject: [PATCH] [glsl-in] Handle assign ops: +=, *=, etc --- src/front/glsl/parser.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/front/glsl/parser.rs b/src/front/glsl/parser.rs index 2914c5de5a..b32b711f0d 100644 --- a/src/front/glsl/parser.rs +++ b/src/front/glsl/parser.rs @@ -435,17 +435,29 @@ pomelo! { assignment_expression ::= conditional_expression; assignment_expression ::= unary_expression(mut pointer) assignment_operator(op) assignment_expression(value) { + pointer.statements.extend(value.statements); match op { BinaryOperator::Equal => { - pointer.statements.extend(value.statements); pointer.statements.push(Statement::Store{ pointer: pointer.expression, value: value.expression }); pointer }, - //TODO: op != Equal - _ => {return Err(ErrorKind::NotImplemented("assign op"))} + _ => { + let h = extra.context.expressions.append( + Expression::Binary{ + op, + left: pointer.expression, + right: value.expression, + } + ); + pointer.statements.push(Statement::Store{ + pointer: pointer.expression, + value: h, + }); + pointer + } } }