Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel de Icaza <miguel@gnome.org>2018-05-03 21:22:15 +0300
committerGitHub <noreply@github.com>2018-05-03 21:22:15 +0300
commit8a07116020f64268eacbee8622511387be43adbe (patch)
tree25ecb8963b1f12ade3191a472b6c467759630d15
parenta920e7cdb6c5608a0c92c59fd8212f5bfc91b473 (diff)
[ilasm] Add support for assembling vbbyrefstr, fixes https://github.com/mono/mono/issues/8447 (#8467)
-rw-r--r--mcs/ilasm/parser/ILParser.jay5
-rw-r--r--mcs/ilasm/scanner/ILTables.cs1
-rw-r--r--mcs/ilasm/tests/test-marshal.il5
3 files changed, 11 insertions, 0 deletions
diff --git a/mcs/ilasm/parser/ILParser.jay b/mcs/ilasm/parser/ILParser.jay
index b564427b568..bfaa1aa39a6 100644
--- a/mcs/ilasm/parser/ILParser.jay
+++ b/mcs/ilasm/parser/ILParser.jay
@@ -390,6 +390,7 @@ namespace Mono.ILASM {
%token K_LPSTR
%token K_LPWSTR
%token K_LPTSTR
+%token K_VBBYREFSTR
%token K_OBJECTREF
%token K_IUNKNOWN
%token K_IDISPATCH
@@ -1318,6 +1319,10 @@ native_type : /* EMPTY */
{
$$ = NativeType.LPTStr;
}
+ | K_VBBYREFSTR
+ {
+ $$ = NativeType.ByValStr;
+ }
| K_OBJECTREF
| K_IUNKNOWN
{
diff --git a/mcs/ilasm/scanner/ILTables.cs b/mcs/ilasm/scanner/ILTables.cs
index 9e62ebf638c..d9bc4a35b85 100644
--- a/mcs/ilasm/scanner/ILTables.cs
+++ b/mcs/ilasm/scanner/ILTables.cs
@@ -224,6 +224,7 @@ namespace Mono.ILASM {
keywords ["lpstr"] = new ILToken (Token.K_LPSTR, "lpstr");
keywords ["lpwstr"] = new ILToken (Token.K_LPWSTR, "lpwstr");
keywords ["lptstr"] = new ILToken (Token.K_LPTSTR, "lptstr");
+ keywords ["vbbyrefstr"] = new ILToken (Token.K_VBBYREFSTR, "vbbyrefstr");
keywords ["objectref"] = new ILToken (Token.K_OBJECTREF, "objectref");
keywords ["iunknown"] = new ILToken (Token.K_IUNKNOWN, "iunknown");
keywords ["idispatch"] = new ILToken (Token.K_IDISPATCH, "idispatch");
diff --git a/mcs/ilasm/tests/test-marshal.il b/mcs/ilasm/tests/test-marshal.il
index 2325c4b8fbf..c8ca283157d 100644
--- a/mcs/ilasm/tests/test-marshal.il
+++ b/mcs/ilasm/tests/test-marshal.il
@@ -33,5 +33,10 @@
IL_0000: ret
}
+ .method public static hidebysig pinvokeimpl ("foo" as "foo" winapi )
+ default void foo (string marshal (vbbyrefstr) s) cil managed preservesig
+ {
+ } // end of method C::foo
+
}