@@ -118,9 +118,12 @@ func parseType(source: Source, noLocation: Bool = false) throws -> Type {
118118 */
119119func parseName( lexer: Lexer ) throws -> Name {
120120 let token = try expect ( lexer: lexer, kind: . name)
121+ guard let value = token. value else {
122+ throw GraphQLError ( message: " Expected name token to have value: \( token) " )
123+ }
121124 return Name (
122125 loc: loc ( lexer: lexer, startToken: token) ,
123- value: token . value!
126+ value: value
124127 )
125128}
126129
@@ -172,8 +175,10 @@ func parseDefinition(lexer: Lexer) throws -> Definition {
172175 }
173176
174177 if peek ( lexer: lexer, kind: . name) {
175- switch lexer. token. value! {
176- // Note: subscription is an experimental non-spec addition.
178+ guard let value = lexer. token. value else {
179+ throw GraphQLError ( message: " Expected name token to have value: \( lexer. token) " )
180+ }
181+ switch value {
177182 case " query " , " mutation " , " subscription " :
178183 return try parseOperationDefinition ( lexer: lexer) ;
179184 case " fragment " :
@@ -236,11 +241,13 @@ func parseOperationDefinition(lexer: Lexer) throws -> OperationDefinition {
236241 */
237242func parseOperationType( lexer: Lexer ) throws -> OperationType {
238243 let operationToken = try expect ( lexer: lexer, kind: . name)
244+ guard let value = operationToken. value else {
245+ throw GraphQLError ( message: " Expected name token to have value: \( operationToken) " )
246+ }
239247
240- switch operationToken . value! {
248+ switch value {
241249 case " query " : return . query
242250 case " mutation " : return . mutation
243- // Note: subscription is an experimental non-spec addition.
244251 case " subscription " : return . subscription
245252 default : throw unexpected ( lexer: lexer, atToken: operationToken)
246253 }
@@ -458,26 +465,35 @@ func parseValueLiteral(lexer: Lexer, isConst: Bool) throws -> Value {
458465 return try parseObject ( lexer: lexer, isConst: isConst)
459466 case . int:
460467 try lexer. advance ( )
468+ guard let value = token. value else {
469+ throw GraphQLError ( message: " Expected int token to have value: \( token) " )
470+ }
461471 return IntValue (
462472 loc: loc ( lexer: lexer, startToken: token) ,
463- value: token . value!
473+ value: value
464474 )
465475 case . float:
466476 try lexer. advance ( )
477+ guard let value = token. value else {
478+ throw GraphQLError ( message: " Expected float token to have value: \( token) " )
479+ }
467480 return FloatValue (
468481 loc: loc ( lexer: lexer, startToken: token) ,
469- value: token . value!
482+ value: value
470483 )
471484 case . string, . blockstring:
472485 return try parseStringLiteral ( lexer: lexer, startToken: token)
473486 case . name:
474- if ( token. value == " true " || token. value == " false " ) {
487+ guard let value = token. value else {
488+ throw GraphQLError ( message: " Expected name token to have value: \( token) " )
489+ }
490+ if ( value == " true " || value == " false " ) {
475491 try lexer. advance ( )
476492 return BooleanValue (
477493 loc: loc ( lexer: lexer, startToken: token) ,
478- value: token . value == " true "
494+ value: value == " true "
479495 )
480- } else if token . value == " null " {
496+ } else if value == " null " {
481497 try lexer. advance ( )
482498 return NullValue (
483499 loc: loc ( lexer: lexer, startToken: token)
@@ -486,7 +502,7 @@ func parseValueLiteral(lexer: Lexer, isConst: Bool) throws -> Value {
486502 try lexer. advance ( )
487503 return EnumValue (
488504 loc: loc ( lexer: lexer, startToken: token) ,
489- value: token . value!
505+ value: value
490506 )
491507 }
492508 case . dollar:
@@ -564,10 +580,13 @@ func parseObjectField(lexer: Lexer, isConst: Bool) throws -> ObjectField {
564580 */
565581
566582func parseStringLiteral( lexer: Lexer , startToken: Token ) throws -> StringValue {
567- try lexer. advance ( ) ;
583+ try lexer. advance ( )
584+ guard let value = startToken. value else {
585+ throw GraphQLError ( message: " Expected string literal token to have value: \( startToken) " )
586+ }
568587 return StringValue (
569588 loc: loc ( lexer: lexer, startToken: startToken) ,
570- value: startToken . value! ,
589+ value: value,
571590 block: startToken. kind == . blockstring
572591 )
573592}
@@ -668,7 +687,10 @@ func parseTypeSystemDefinition(lexer: Lexer) throws -> TypeSystemDefinition {
668687 : lexer. token
669688
670689 if keywordToken. kind == . name {
671- switch keywordToken. value! {
690+ guard let value = keywordToken. value else {
691+ throw GraphQLError ( message: " Expected keyword token to have value: \( keywordToken) " )
692+ }
693+ switch value {
672694 case " schema " : return try parseSchemaDefinition ( lexer: lexer) ;
673695 case " scalar " : return try parseScalarTypeDefinition ( lexer: lexer) ;
674696 case " type " : return try parseObjectTypeDefinition ( lexer: lexer) ;
0 commit comments