Adds a marker (eg warning or error)

@param msgId {String} the marker message ID (@see qx.tool.compiler.Marker)
@param pos {Object||null} position map; may contain a Map containing
{line,column?}, or a Map {start:{line,column}, end: {line,column}}.
@param arguments? {Object...} variable argument list, specific to the msgId
function(msgId, pos) {
      msgId = "qx.tool.compiler." + msgId;
      
      // Give each marker a unique key based on msgId and the line; use this to suppress
      //  multiple markers
      let key = msgId + "#";
      if (pos) {
        if (pos.line) {
          key += pos.line; 
        } else if (pos.start && pos.start.line) {
          key += pos.start.line;
        }
      }
      if (this.__haveMarkersFor[key]) {
        return; 
      }
      this.__haveMarkersFor[key] = true;
      
      let marker = {
        msgId: msgId
      };
      
      // Extract position
      if (pos) {
        if (pos.line) {
          pos = { start: pos };
        }
        if (pos.start) {
          let tmp = { line: pos.start.line };
          if (pos.start.column) {
            tmp.column = pos.start.column;
          }
          marker.pos = { start: tmp };
          if (pos.end && pos.end.line) {
            let tmp = { line: pos.end.line };
            if (pos.end.column) {
              tmp.column = pos.end.column; 
            }
            marker.pos.end = tmp;
          }
        }
      }
      let args = qx.lang.Array.fromArguments(arguments, 2);
      if (args.length) {
        marker.args = args; 
      }
      this.__markers.push(marker);
    }