public Object VisitAssigmentNode(IAssigmentASTNode assigment) { IASTNode rightOp = assigment.Expression; // if right operator is just an identifier or a value, then assign it immediately if (rightOp.Type == E_NODE_TYPE.NT_VALUE) { int[] assignedValue = (rightOp as IValueASTNode).Value; mEnvironment.Assign(assigment.Id.Name, assignedValue); return(assignedValue); } if (rightOp.Type == E_NODE_TYPE.NT_IDENTIFIER) { string id = (rightOp as IIdentifierASTNode).Name; int[] assignedValue = mEnvironment.Get(id); mEnvironment.Assign(assigment.Id.Name, assignedValue); return(assignedValue); } // common case Object value = assigment.Expression.Accept(this); mEnvironment.Assign(assigment.Id.Name, (int[])value); return(value); }