whole_func_string: function updateProps (domNode, oldVirtualNode, oldProps, newVirtualNode, newProps) {
    if (oldProps) {
      for (var name in oldProps) {
        if (name === 'ref' || name === 'on') continue
        if (name in EVENT_LISTENER_PROPS) continue
        if (!newProps || !(name in newProps)) {
          if (name === 'dataset') {
            updateProps(domNode.dataset, null, oldProps && oldProps.dataset, null, null)
          } else if (name !== 'innerHTML' && oldVirtualNode && SVG_TAGS.has(oldVirtualNode.tag)) {
            domNode.removeAttribute(SVG_ATTRIBUTE_TRANSLATIONS.get(name) || name)
          } else {
            // Clear property for objects that don't support deletion (e.g. style
            // or className). If we used null instead of an empty string, the DOM
            // could sometimes stringify the value and mistakenly assign 'null'.
            domNode[name] = EMPTY
            delete domNode[name]
          }
        }
      }
    }
  
    if (newProps) {
      for (var name in newProps) {
        if (name === 'ref' || name === 'on') continue
        if (name in EVENT_LISTENER_PROPS) continue
        var oldValue = oldProps && oldProps[name]
        var newValue = newProps[name]
        if (name === 'dataset') {
          updateNestedProps(domNode.dataset, oldValue, newValue, false)
        } else if (name === 'style' && typeof newValue !== 'string') {
          if (typeof oldValue === 'string') {
            domNode.style = ''
            oldValue = null
          }
          updateNestedProps(domNode.style, oldValue, newValue, true)
        } else if (name === 'attributes') {
          updateAttributes(domNode, oldValue, newValue)
        } else {
          if (newValue !== oldValue) {
            if (name !== 'innerHTML' && newVirtualNode && SVG_TAGS.has(newVirtualNode.tag)) {
              domNode.setAttribute(SVG_ATTRIBUTE_TRANSLATIONS.get(name) || name, newValue)
            } else if (newVirtualNode && newVirtualNode.tag === 'input'
              && name === 'value' && domNode[name] === newValue) {
              // Do not update `value` of an `input` unless it differs.
              // Every change will reset the cursor position.
            } else {
              domNode[name] = newValue
            }
          }
        }
      }
    }
  }
func_code_string: function updateProps (domNode, oldVirtualNode, oldProps, newVirtualNode, newProps) {
    if (oldProps) {
      for (var name in oldProps) {
        if (name === 'ref' || name === 'on') continue
        if (name in EVENT_LISTENER_PROPS) continue
        if (!newProps || !(name in newProps)) {
          if (name === 'dataset') {
            updateProps(domNode.dataset, null, oldProps && oldProps.dataset, null, null)
          } else if (name !== 'innerHTML' && oldVirtualNode && SVG_TAGS.has(oldVirtualNode.tag)) {
            domNode.removeAttribute(SVG_ATTRIBUTE_TRANSLATIONS.get(name) || name)
          } else {
            // Clear property for objects that don't support deletion (e.g. style
            // or className). If we used null instead of an empty string, the DOM
            // could sometimes stringify the value and mistakenly assign 'null'.
            domNode[name] = EMPTY
            delete domNode[name]
          }
        }
      }
    }
  
    if (newProps) {
      for (var name in newProps) {
        if (name === 'ref' || name === 'on') continue
        if (name in EVENT_LISTENER_PROPS) continue
        var oldValue = oldProps && oldProps[name]
        var newValue = newProps[name]
        if (name === 'dataset') {
          updateNestedProps(domNode.dataset, oldValue, newValue, false)
        } else if (name === 'style' && typeof newValue !== 'string') {
          if (typeof oldValue === 'string') {
            domNode.style = ''
            oldValue = null
          }
          updateNestedProps(domNode.style, oldValue, newValue, true)
        } else if (name === 'attributes') {
          updateAttributes(domNode, oldValue, newValue)
        } else {
          if (newValue !== oldValue) {
            if (name !== 'innerHTML' && newVirtualNode && SVG_TAGS.has(newVirtualNode.tag)) {
              domNode.setAttribute(SVG_ATTRIBUTE_TRANSLATIONS.get(name) || name, newValue)
            } else if (newVirtualNode && newVirtualNode.tag === 'input'
              && name === 'value' && domNode[name] === newValue) {
              // Do not update `value` of an `input` unless it differs.
              // Every change will reset the cursor position.
            } else {
              domNode[name] = newValue
            }
          }
        }
      }
    }
  }
func_documentation_string: Using var to avoid "Unsupported phi use of variable" deoptimization in Chrome 56