public OperandElement Clone(Block parentBlock, Macrocall writtenMacro) { var res = new OperandElement() { AssemblePosition = this.AssemblePosition, Immediate = this.Immediate.Clone(parentBlock), WrittenMacrocall = writtenMacro }; return(res); }
private StringBuilder constructFilterString() { Stack <OperandElement> operandStack = new Stack <OperandElement>(); StringBuilder builder = new StringBuilder(); foreach (var component in component_stack) { OperandElement currentOperand; if (component == "&" || component == "|") { if (operandStack.Count == 0 || operandStack.Peek().Operand != component) { currentOperand = new OperandElement { Operand = component, Count = 0 }; operandStack.Push(currentOperand); } else { currentOperand = operandStack.Peek(); currentOperand.Count++; } if (currentOperand.Count == 0) { builder.Append("(" + currentOperand.Operand); } } else if (component == "-&" || component == "-|") { currentOperand = operandStack.Peek(); if (currentOperand.Count > 0) { currentOperand.Count--; } else { builder.Append(")"); operandStack.Pop(); } } else { //string filter = "(" + component + ")"; string filter = component; builder.Append(filter); } } return(builder); }
public OperandElement Clone(Block parentBlock, Instruction writtenInstr) { var res = new OperandElement() { AssemblePosition = this.AssemblePosition, Immediate = this.Immediate.Clone(parentBlock), WrittenInstruction = writtenInstr }; res.Labels = new List <Label>(); for (int lblIdx = 0; lblIdx < this.Labels.Count; lblIdx++) { Label clonedLbl = this.Labels[lblIdx].Clone(parentBlock); res.Labels.Add(clonedLbl); clonedLbl.SetLabelPlacedInfo(res.PlacedInfo); if (res.PlacedInfo == null) { } } return(res); }