@@ -104,29 +104,30 @@ CoerceVariableValues(schema, operation, variableValues):
104104  -  Let {variableName} be the name of {variableDefinition}.
105105  -  Let {variableType} be the expected type of {variableDefinition}.
106106  -  Assert: {IsInputType(variableType)} must be {true}.
107-   -  Let {defaultValue} be the default value for {variableDefinition}.
108-   -  Let {hasValue} be {true} if {variableValues} provides a value for the name
109-     {variableName}.
110-   -  Let {value} be the value provided in {variableValues} for the name
111-     {variableName}.
112-   -  If {hasValue} is not {true} and {defaultValue} exists (including {null}):
113-     -  Let {coercedDefaultValue} be the result of coercing {defaultValue}
114-       according to the input coercion rules of {variableType}.
115-     -  Add an entry to {coercedValues} named {variableName} with the value
116-       {coercedDefaultValue}.
117-   -  Otherwise if {variableType} is a Non-Nullable type, and either {hasValue} is
118-     not {true} or {value} is {null}, raise a _ request error_ .
119-   -  Otherwise if {hasValue} is {true}:
107+   -  If {variableValues} has an entry named {variableName}, let {value} be its
108+     value:
120109    -  If {value} is {null}:
110+       -  If {variableType} is a Non-Nullable type, raise a _ request error_ .
121111      -  Add an entry to {coercedValues} named {variableName} with the value
122112        {null}.
123113    -  Otherwise:
124-       -  If {value} cannot be coerced according to the input coercion rules of
125-         {variableType}, raise a _ request error_ .
126114      -  Let {coercedValue} be the result of coercing {value} according to the
127-         input coercion rules of {variableType}.
115+         input coercion rules of {variableType}, or raise a  _ request error _ .
128116      -  Add an entry to {coercedValues} named {variableName} with the value
129117        {coercedValue}.
118+   -  Otherwise if {variableDefinition} has a default value, let it be
119+     {defaultValue}:
120+     -  If {defaultValue} is {null}:
121+       -  Assert: {variableType} is not a Non-Nullable type.
122+       -  Add an entry to {coercedValues} named {variableName} with the value
123+         {null}.
124+     -  Otherwise:
125+       -  Let {coercedDefaultValue} be the result of coercing {defaultValue}
126+         according to the input coercion rules of {variableType}, or raise a
127+         _ request error_ .
128+       -  Add an entry to {coercedValues} named {variableName} with the value
129+         {coercedDefaultValue}.
130+   -  Otherwise if {variableType} is a Non-Nullable type, raise a _ request error_ .
130131-  Return {coercedValues}.
131132
132133Note: This algorithm is very similar to {CoerceArgumentValues()}.
@@ -742,46 +743,50 @@ At each argument position in an operation may be a literal {Value}, or a
742743CoerceArgumentValues(objectType, field, variableValues):
743744
744745-  Let {coercedValues} be an empty unordered Map.
745- -  Let {argumentValues } be the argument values  provided in {field}.
746+ -  Let {arguments } be the {Arguments}  provided in {field}.
746747-  Let {fieldName} be the name of {field}.
747748-  Let {argumentDefinitions} be the arguments defined by {objectType} for the
748749  field named {fieldName}.
749750-  For each {argumentDefinition} in {argumentDefinitions}:
750751  -  Let {argumentName} be the name of {argumentDefinition}.
751752  -  Let {argumentType} be the expected type of {argumentDefinition}.
752-   -  Let {defaultValue} be the default value for {argumentDefinition}.
753-   -  Let {hasValue} be {true} if {argumentValues} provides a value for the name
754-     {argumentName}.
755-   -  Let {argumentValue} be the value provided in {argumentValues} for the name
756-     {argumentName}.
757-   -  If {argumentValue} is a {Variable}:
758-     -  Let {variableName} be the name of {argumentValue}.
759-     -  Let {hasValue} be {true} if {variableValues} provides a value for the name
760-       {variableName}.
761-     -  Let {value} be the value provided in {variableValues} for the name
762-       {variableName}.
763-   -  Otherwise, let {value} be {argumentValue}.
764-   -  If {hasValue} is not {true} and {defaultValue} exists (including {null}):
765-     -  Let {coercedDefaultValue} be the result of coercing {defaultValue}
766-       according to the input coercion rules of {argumentType}.
767-     -  Add an entry to {coercedValues} named {argumentName} with the value
768-       {coercedDefaultValue}.
769-   -  Otherwise if {argumentType} is a Non-Nullable type, and either {hasValue} is
770-     not {true} or {value} is {null}, raise an _ execution error_ .
771-   -  Otherwise if {hasValue} is {true}:
772-     -  If {value} is {null}:
753+   -  Assert: {IsInputType(argumentType)} must be {true}.
754+   -  If {arguments} has an {Argument} with name {argumentName}, let
755+     {argumentValue} be its {Value}:
756+     -  If {argumentValue} is a {Variable}, let {variableName} be its name:
757+       -  If {variableValues} has an entry named {variableName}, let
758+         {variableValue} be its value:
759+         -  If {argumentType} is a Non-Nullable type and {variableValue} is
760+           {null}, raise an _ execution error_  (see [ note] ( #note-0aed8 ) ).
761+         -  Add an entry to {coercedValues} named {argumentName} with the value
762+           {variableValue}.
763+       -  Otherwise if {argumentType} is a Non-Nullable type, raise an _ execution
764+         error_ .
765+     -  Otherwise:
766+       -  If {argumentValue} is {null} type:
767+         -  If {argumentType} is a Non-Nullable type, raise an _ execution error_ .
768+         -  Add an entry to {coercedValues} named {variableName} with the value
769+           {null}.
770+       -  Otherwise:
771+         -  Let {coercedValue} be the result of coercing {argumentValue} according
772+           to the input coercion rules of {argumentType}, or raise an _ execution
773+           error_ .
774+         -  Add an entry to {coercedValues} named {argumentName} with the value
775+           {coercedValue}.
776+   -  Otherwise if {argumentDefinition} has a default value, let it be
777+     {defaultValue}:
778+     -  If {defaultValue} is {null}:
779+       -  Assert: {argumentType} is not a Non-Nullable type.
773780      -  Add an entry to {coercedValues} named {argumentName} with the value
774781        {null}.
775-     -  Otherwise, if {argumentValue} is a {Variable}:
776-       -  Add an entry to {coercedValues} named {argumentName} with the value
777-         {value}.
778782    -  Otherwise:
779-       -  If {value} cannot be coerced according to the input coercion rules of
780-         {argumentType}, raise an _ execution error_ .
781-       -  Let {coercedValue} be the result of coercing {value} according to the
782-         input coercion rules of {argumentType}.
783+       -  Let {coercedDefaultValue} be the result of coercing {defaultValue}
784+         according to the input coercion rules of {argumentType}, or raise an
785+         _ execution error_ .
783786      -  Add an entry to {coercedValues} named {argumentName} with the value
784-         {coercedValue}.
787+         {coercedDefaultValue}.
788+   -  Otherwise if {argumentType} is a Non-Nullable type, raise an _ execution
789+     error_ .
785790-  Return {coercedValues}.
786791
787792Any _ request error_  raised as a result of input coercion during
0 commit comments