demo/typescript.js
function getCombinedNodeFlags(node) {
        node = walkUpBindingElementsAndPatterns(node);
        var flags = node.flags;
        if (node.kind === 211 /* VariableDeclaration */) {
            node = node.parent;
        }
        if (node && node.kind === 212 /* VariableDeclarationList */) {
            flags |= node.flags;
            node = node.parent;
        }
        if (node && node.kind === 193 /* VariableStatement */) {
            flags |= node.flags;
        }
        return flags;
    }
function getCombinedNodeFlags(node) {
        node = walkUpBindingElementsAndPatterns(node);
        var flags = node.flags;
        if (node.kind === 211 /* VariableDeclaration */) {
            node = node.parent;
        }
        if (node && node.kind === 212 /* VariableDeclarationList */) {
            flags |= node.flags;
            node = node.parent;
        }
        if (node && node.kind === 193 /* VariableStatement */) {
            flags |= node.flags;
        }
        return flags;
    }
Returns the node flags for this node and all relevant parent nodes.  This is done so that nodes like variable declarations and binding elements can returned a view of their flags that includes the modifiers from their container.  i.e. flags like export/declare aren't stored on the variable declaration directly, but on the containing variable statement (if it has one).  Similarly, flags for let/const are store on the variable declaration list.  By calling this function, all those flags are combined so that the client can treat the node as if it actually had those flags.