未验证 提交 14dac227 编写于 作者: A Ankit Jain 提交者: GitHub

[wasm] InterpToNativeGenerator: use invariant culture when generating C (#71460)

* [wasm] InterpToNativeGenerator: use invariant culture when generating C

.. functions.

Fixes https://github.com/dotnet/runtime/issues/71149

* Add missing file
上级 fae43479
......@@ -174,7 +174,7 @@ public string Emit(char c)
throw new InvalidSignatureCharException(c);
}
return $"mono_wasm_interp_method_args_get_{char.ToLower(c)}arg (margs, {argIndex})";
return $"mono_wasm_interp_method_args_get_{char.ToLower(c, CultureInfo.InvariantCulture)}arg (margs, {argIndex})";
}
}
}
......@@ -345,7 +345,14 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp
(int exitCode, string buildOutput) result;
try
{
result = AssertBuild(sb.ToString(), id, expectSuccess: options.ExpectSuccess, envVars: s_buildEnv.EnvVars);
var envVars = s_buildEnv.EnvVars;
if (options.ExtraBuildEnvironmentVariables is not null)
{
envVars = new Dictionary<string, string>(s_buildEnv.EnvVars);
foreach (var kvp in options.ExtraBuildEnvironmentVariables!)
envVars[kvp.Key] = kvp.Value;
}
result = AssertBuild(sb.ToString(), id, expectSuccess: options.ExpectSuccess, envVars: envVars);
//AssertRuntimePackPath(result.buildOutput);
......@@ -898,7 +905,8 @@ public record BuildProjectOptions
string? Verbosity = null,
string? Label = null,
string? TargetFramework = null,
string? MainJS = null
string? MainJS = null,
IDictionary<string, string>? ExtraBuildEnvironmentVariables = null
);
public record BlazorBuildOptions
......
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System;
using System.Collections.Generic;
using System.IO;
using Xunit;
using Xunit.Abstractions;
......@@ -115,6 +115,57 @@ public static int Main()
Assert.Contains("Main running", output);
}
[Theory]
[BuildAndRun(host: RunHost.V8, parameters: new object[] { "tr_TR.UTF-8" })]
public void BuildNativeInNonEnglishCulture(BuildArgs buildArgs, string culture, RunHost host, string id)
{
// Check that we can generate interp tables in non-english cultures
// Prompted by https://github.com/dotnet/runtime/issues/71149
string code = @"
using System;
using System.Runtime.InteropServices;
Console.WriteLine($""square: {square(5)}"");
return 42;
[DllImport(""simple"")] static extern int square(int x);
";
buildArgs = ExpandBuildArgs(buildArgs,
extraItems: @$"<NativeFileReference Include=""simple.c"" />",
extraProperties: buildArgs.AOT
? string.Empty
: "<WasmBuildNative>true</WasmBuildNative>");
var extraEnvVars = new Dictionary<string, string> {
{ "LANG", culture },
{ "LC_ALL", culture },
};
(_, string output) = BuildProject(buildArgs,
id: id,
new BuildProjectOptions(
InitProject: () =>
{
File.WriteAllText(Path.Combine(_projectDir!, "Program.cs"), code);
File.Copy(Path.Combine(BuildEnvironment.TestAssetsPath, "native-libs", "simple.c"),
Path.Combine(_projectDir!, "simple.c"));
},
Publish: buildArgs.AOT,
DotnetWasmFromRuntimePack: false,
ExtraBuildEnvironmentVariables: extraEnvVars
));
output = RunAndTestWasmApp(buildArgs,
buildDir: _projectDir,
expectedExitCode: 42,
host: host,
id: id,
envVars: extraEnvVars);
Assert.Contains("square: 25", output);
}
private (BuildArgs, string) BuildForVariadicFunctionTests(string programText, BuildArgs buildArgs, string id)
{
string filename = "variadic.o";
......
#include <stdarg.h>
int square(int x)
{
return x * x;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册