public override void Substitute(IRExpression template, IRExpression substitution, OnMatchFoundHandler callback) { }
public abstract void Substitute(IRExpression template, IRExpression substitution, OnMatchFoundHandler callback);
public void UnsubscribeFromMatchFoundEvent(OnMatchFoundHandler matchFoundHandler) { OnMatchFound -= matchFoundHandler; }
public override void Substitute(IRExpression template, IRExpression substitution, OnMatchFoundHandler callback) { Pointer.Substitute(template, substitution, callback); var mapping = new Dictionary <IRVariable, IRExpression>(); if (Pointer.Unify(template, mapping) && callback(mapping)) { if (substitution is IRVariable v) { Pointer = mapping[v].CloneComplete(); } else { var newExpr = substitution.CloneComplete(); foreach (var varMap in mapping) { newExpr.Substitute(varMap.Key, varMap.Value); } Pointer = newExpr; } } }
public void SubscribeToMatchFoundEvent(OnMatchFoundHandler matchFoundHandler) { OnMatchFound += matchFoundHandler; }