original_string: protected static function getVariableValue(Schema $schema, VariableDefinition $definition, $input)
      {
          $type = TypeInfo::typeFromAST($schema, $definition->get('type'));
          if (!$type) {
              return NULL;
          }
  
          if (self::isValidValue($type, $input)) {
              if (!isset($input)) {
                  $default = $definition->get('defaultValue');
  
                  if ($default) {
                      return self::coerceValueAST($type, $default);
                  }
              }
  
              return self::coerceValue($type, $input);
          }
  
          // @todo Fix exception message once printer is ported.
          throw new \Exception(sprintf('Variable $%s expected value of different type.', $definition->get('variable')->get('name')->get('value')));
      }
code: protected static function getVariableValue(Schema $schema, VariableDefinition $definition, $input)
      {
          $type = TypeInfo::typeFromAST($schema, $definition->get('type'));
          if (!$type) {
              return NULL;
          }
  
          if (self::isValidValue($type, $input)) {
              if (!isset($input)) {
                  $default = $definition->get('defaultValue');
  
                  if ($default) {
                      return self::coerceValueAST($type, $default);
                  }
              }
  
              return self::coerceValue($type, $input);
          }
  
          // @todo Fix exception message once printer is ported.
          throw new \Exception(sprintf('Variable $%s expected value of different type.', $definition->get('variable')->get('name')->get('value')));
      }
code_tokens: protected static function getVariableValue ( Schema $ schema , VariableDefinition $ definition , $ input ) { $ type = TypeInfo :: typeFromAST ( $ schema , $ definition -> get ( 'type' ) ) ; if ( ! $ type ) { return NULL ; } if ( self :: isValidValue ( $ type , $ input ) ) { if ( ! isset ( $ input ) ) { $ default = $ definition -> get ( 'defaultValue' ) ; if ( $ default ) { return self :: coerceValueAST ( $ type , $ default ) ; } } return self :: coerceValue ( $ type , $ input ) ; } // @todo Fix exception message once printer is ported. throw new \ Exception ( sprintf ( 'Variable $%s expected value of different type.' , $ definition -> get ( 'variable' ) -> get ( 'name' ) -> get ( 'value' ) ) ) ; }
docstring: Given a variable definition, and any value of input, return a value which
  adheres to the variable definition, or throw an error.
  
  @param Schema $schema
  @param VariableDefinition $definition
  @param $input
  
  @return array|mixed|null|string
  
  @throws \Exception
docstring_tokens: Given a variable definition and any value of input return a value which adheres to the variable definition or throw an error .