public UnaryOperationNode(ExpressionOperationType opType, ExpressionNode operand) { if (!validOperators.Contains(opType)) throw new ArgumentException("Invalid unary operator given!", "opType"); OperationType = opType; Operand = operand; }
public BinaryOperationNode(ExpressionOperationType opType, ExpressionNode operandA, ExpressionNode operandB) { if (!validOperators.Contains(opType)) throw new ArgumentException("Invalid binary operator given!", "opType"); OperationType = opType; OperandA = operandA; OperandB = operandB; }
public UnaryOperationNode(ExpressionOperationType opType, ExpressionNode operand) { if (!validOperators.Contains(opType)) { throw new ArgumentException("Invalid unary operator given!", nameof(opType)); } OperationType = opType; Operand = operand; }
public BinaryOperationNode(ExpressionOperationType opType, ExpressionNode operandA, ExpressionNode operandB) { if (!validOperators.Contains(opType)) { throw new ArgumentException("Invalid binary operator given!", "opType"); } OperationType = opType; OperandA = operandA; OperandB = operandB; }
private int EmitOp(int a, int b, ExpressionOperationType opType) { // optimize away identity operations. if(opType == ExpressionOperationType.Add) { if((_parsingData.RegisterIsTemporary[a] == false) && (_parsingData.ShaderRegisters[a] == 0)) { return b; } else if((_parsingData.RegisterIsTemporary[b] == false) && (_parsingData.ShaderRegisters[b] == 0)) { return a; } else if((_parsingData.RegisterIsTemporary[a] == false) && (_parsingData.RegisterIsTemporary[b] == false)) { return GetExpressionConstant(_parsingData.ShaderRegisters[a] + _parsingData.ShaderRegisters[b]); } } else if(opType == ExpressionOperationType.Multiply) { if((_parsingData.RegisterIsTemporary[a] == false) && (_parsingData.ShaderRegisters[a] == 1)) { return b; } else if((_parsingData.RegisterIsTemporary[a] == false) && (_parsingData.ShaderRegisters[a] == 0)) { return a; } else if((_parsingData.RegisterIsTemporary[b] == false) && (_parsingData.ShaderRegisters[b] == 1)) { return a; } else if((_parsingData.RegisterIsTemporary[b] == false) && (_parsingData.ShaderRegisters[b] == 0)) { return b; } else if((_parsingData.RegisterIsTemporary[a] == false) && (_parsingData.RegisterIsTemporary[b] == false)) { return GetExpressionConstant(_parsingData.ShaderRegisters[a] * _parsingData.ShaderRegisters[b]); } } ExpressionOperation op = GetExpressionOperation(); op.OperationType = opType; op.A = a; op.B = b; op.C = GetExpressionTemporary(); return op.C; }
private int ParseEmitOp(idLexer lexer, int a, ExpressionOperationType opType, int priority) { int b = ParseExpressionPriority(lexer, priority); return EmitOp(a, b, opType); }