Browse Source

Fix await propagation against primitive value (#1450)

Marko Lahma 2 years ago
parent
commit
3c299875a6

+ 4 - 3
Jint.Tests.PublicInterface/ConstructorTests.cs

@@ -1,3 +1,4 @@
+using System.Globalization;
 using Jint.Native;
 using Jint.Native;
 using Jint.Native.Object;
 using Jint.Native.Object;
 using Jint.Runtime;
 using Jint.Runtime;
@@ -78,17 +79,17 @@ file sealed class DateOnlyConstructor : Constructor
             var day = arguments.Length == 2 ? 0 : TypeConverter.ToNumber(arguments[2]) - 1;
             var day = arguments.Length == 2 ? 0 : TypeConverter.ToNumber(arguments[2]) - 1;
             if (double.IsNaN(year))
             if (double.IsNaN(year))
             {
             {
-                throw new JavaScriptException(_engine.Realm.Intrinsics.TypeError, "Invalid year " + year);
+                throw new JavaScriptException(_engine.Realm.Intrinsics.TypeError, $"Invalid year {year.ToString(CultureInfo.InvariantCulture)}");
             }
             }
 
 
             if (double.IsNaN(month))
             if (double.IsNaN(month))
             {
             {
-                throw new JavaScriptException(_engine.Realm.Intrinsics.TypeError, "Invalid month " + month);
+                throw new JavaScriptException(_engine.Realm.Intrinsics.TypeError, $"Invalid month {month.ToString(CultureInfo.InvariantCulture)}");
             }
             }
 
 
             if (double.IsNaN(day))
             if (double.IsNaN(day))
             {
             {
-                throw new JavaScriptException(_engine.Realm.Intrinsics.TypeError, "Invalid day " + day);
+                throw new JavaScriptException(_engine.Realm.Intrinsics.TypeError, $"Invalid day {day.ToString(CultureInfo.InvariantCulture)}");
             }
             }
 
 
             var dt = new DateTime((int) year, 1, 1);
             var dt = new DateTime((int) year, 1, 1);

+ 13 - 0
Jint.Tests/Runtime/AwaitTests.cs

@@ -0,0 +1,13 @@
+namespace Jint.Tests.Runtime;
+
+public class AsyncTests
+{
+    [Fact]
+    public void AwaitPropagationAgainstPrimitiveValue()
+    {
+        var engine = new Engine();
+        var result = engine.Evaluate("(async ()=>await '1')()");
+        result = result.UnwrapIfPromise();
+        Assert.Equal("1", result);
+    }
+}

+ 1 - 1
Jint/Runtime/Interpreter/JintFunctionDefinition.cs

@@ -48,7 +48,7 @@ internal sealed class JintFunctionDefinition
                 AsyncFunctionStart(context, promiseCapability, context =>
                 AsyncFunctionStart(context, promiseCapability, context =>
                 {
                 {
                     context.Engine.FunctionDeclarationInstantiation(functionObject, argumentsList);
                     context.Engine.FunctionDeclarationInstantiation(functionObject, argumentsList);
-                    return new Completion(CompletionType.Normal, _bodyExpression.GetValue(context), _bodyExpression._expression);
+                    return new Completion(CompletionType.Return, _bodyExpression.GetValue(context), _bodyExpression._expression);
                 });
                 });
                 result = new Completion(CompletionType.Return, promiseCapability.PromiseInstance, Function.Body);
                 result = new Completion(CompletionType.Return, promiseCapability.PromiseInstance, Function.Body);
             }
             }