public ComplexBinaryOpDelegate FindComplexBinaryOpIntrinsic(BinaryOpKey key, bool checkDependencies = true) { var result = ComplexBinaryOpIntrinsics.GetValueOrDefault(key, null); if (result == null && mDependencies != null) { foreach (var dependency in mDependencies) { result = dependency.FindComplexBinaryOpIntrinsic(key, checkDependencies); if (result != null) { break; } } } return(result); }
//---------------------------------------------------------------BinaryOpIntrinsics public void CreateBinaryOpIntrinsic(BinaryOpKey key, BinaryOpDelegate intrinsic) { BinaryOpIntrinsics.TryAdd(key, intrinsic); }
//---------------------------------------------------------------ComplexBinaryOpIntrinsics // Very rarely a binary intrinsic needs to operate on on the underlying CSharp SyntaxNode. // This can't be the norm due to how assignment binary ops need to work (e.g. '+='). The only cases that // need to do this are binary ops that become more than a binary op, in particular this is any operator requiring short circuit evaluation. public void CreateComplexBinaryOpIntrinsic(BinaryOpKey key, ComplexBinaryOpDelegate intrinsic) { ComplexBinaryOpIntrinsics.TryAdd(key, intrinsic); }