[Bug 18581] New: pre-insert and replace both check type of 'node' in too many places

https://www.w3.org/Bugs/Public/show_bug.cgi?id=18581

           Summary: pre-insert and replace both check type of 'node' in
                    too many places
           Product: WebAppsWG
           Version: unspecified
          Platform: PC
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DOM
        AssignedTo: annevk@annevk.nl
        ReportedBy: zackw@panix.com
         QAContact: public-webapps-bugzilla@w3.org
                CC: mike@w3.org, www-dom@w3.org


The pre-insert and replace algorithms
(http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#mutation-algorithms)
have this structure:

  if (parent is not a Document, DocumentFragment, or Element)
    throw HierarchyRequestError;

  if (parent is a Document) {
    if (node is not a DocumentFragment, DocumentType, Element,
        ProcessingInstruction, or Comment)
      throw HierarchyRequestError;

    more checks;
  }
  else if (node is not a DocumentFragment, Element, Text,
           ProcessingInstruction, or Comment)
    throw HierarchyRequestError;

  more operations;

It would be clearer if they had this structure instead:

  if (parent is not a Document, DocumentFragment, or Element)
    throw HierarchyRequestError;

  if (node is not a DocumentFragment, DocumentType, Element, Text,
      ProcessingInstruction, or Comment)
    throw HierarchyRequestError;

  if ((node is a Text and parent is a Document) or
      (node is a DocumentType and parent is not a Document))
    throw HierarchyRequestError;

  if (parent is a Document)
    more checks;

  more operations;

Specifically, it would be clearer that most of the node type constraints apply
regardless of the type of 'parent', and there are just a couple of special
cases.

I would also recommend moving step 3 ("If child is not null...") of the
pre-insert algorithm to be step 1 (and pushing the current steps 1 and 2 down);
this would provide more parallel structure with the replace algorithm, and
would reduce the chance of confusing the reader about which of 'child' and
'node' is the new node.

I am happy to provide a proper patch to the prose if that would be helpful.

-- 
Configure bugmail: https://www.w3.org/Bugs/Public/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

Received on Wednesday, 15 August 2012 18:09:37 UTC