Problems reported:

parser/no-triple-shift/simple_attempted_usage_of_triple_shift:4:14: This requires the 'triple-shift' language feature to be enabled.
  var x = 10 >>> 2;
             ^^^

beginCompilationUnit(void)
  beginMetadataStar(void)
  endMetadataStar(0)
  beginTopLevelMember(void)
    beginTopLevelMethod(, null)
      handleVoidKeyword(void)
      handleIdentifier(main, topLevelFunctionDeclaration)
      handleNoTypeVariables(()
      beginFormalParameters((, MemberKind.TopLevelMethod)
        beginMetadataStar(List)
        endMetadataStar(0)
        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
          handleIdentifier(List, typeReference)
          beginTypeArguments(<)
            handleIdentifier(String, typeReference)
            handleNoTypeArguments(>)
            handleType(String, null)
          endTypeArguments(1, <, >)
          handleType(List, null)
          handleIdentifier(arguments, formalParameterDeclaration)
          handleFormalParameterWithoutValue())
        endFormalParameter(null, null, arguments, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
      endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      beginBlockFunctionBody({)
        beginMetadataStar(var)
        endMetadataStar(0)
        handleNoType(var)
        beginVariablesDeclaration(x, null, var)
          handleIdentifier(x, localVariableDeclaration)
          beginInitializedIdentifier(x)
            beginVariableInitializer(=)
              handleLiteralInt(10)
              handleRecoverableError(Message[ExperimentNotEnabled, This requires the 'triple-shift' language feature to be enabled., Try updating your pubspec.yaml to set the minimum SDK constraint to 2.14 or higher, and running 'pub get'., {string: triple-shift, string2: 2.14}], >>, >)
              beginBinaryExpression(>>>)
                handleLiteralInt(2)
              endBinaryExpression(>>>)
            endVariableInitializer(=)
          endInitializedIdentifier(x)
        endVariablesDeclaration(1, ;)
        handleIdentifier(print, expression)
        handleNoTypeArguments(()
        beginArguments(()
          beginLiteralString('x: )
            handleIdentifier(x, expression)
            handleNoTypeArguments(')
            handleNoArguments(')
            handleSend(x, ')
            handleInterpolationExpression($, null)
            handleStringPart(')
          endLiteralString(1, ))
        endArguments(1, (, ))
        handleSend(print, ;)
        handleExpressionStatement(;)
      endBlockFunctionBody(2, {, })
    endTopLevelMethod(void, null, })
  endTopLevelDeclaration()
endCompilationUnit(1, )
