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

github.com/mono/corert.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kotas <jkotas@microsoft.com>2017-08-09 19:43:48 +0300
committerJan Kotas <jkotas@microsoft.com>2017-08-09 20:38:58 +0300
commit7b15c199fd1644d8510b6bf91a35a0ee4f48eb7b (patch)
tree8b98ee98c57e3051fe9f0e41f5d0342e6aa48009 /src/ILCompiler.CppCodeGen
parent3390e457df151e8481b63197b91f0f0b147c70ab (diff)
Expand ByReference intrinsics in CppCodeGen
Diffstat (limited to 'src/ILCompiler.CppCodeGen')
-rw-r--r--src/ILCompiler.CppCodeGen/src/CppCodeGen/ILToCppImporter.cs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/ILCompiler.CppCodeGen/src/CppCodeGen/ILToCppImporter.cs b/src/ILCompiler.CppCodeGen/src/CppCodeGen/ILToCppImporter.cs
index 20e811b1a..990ec5cc0 100644
--- a/src/ILCompiler.CppCodeGen/src/CppCodeGen/ILToCppImporter.cs
+++ b/src/ILCompiler.CppCodeGen/src/CppCodeGen/ILToCppImporter.cs
@@ -819,6 +819,37 @@ namespace Internal.IL
return true;
}
break;
+ case ".ctor":
+ if (IsTypeName(method, "System", "ByReference`1"))
+ {
+ var value = _stack.Pop();
+ var byReferenceType = method.OwningType;
+
+ string tempName = NewTempName();
+
+ Append(GetStackValueKindCPPTypeName(StackValueKind.ValueType, byReferenceType));
+ Append(" ");
+ Append(tempName);
+ AppendSemicolon();
+
+ Append(tempName);
+ Append("._value = (intptr_t)");
+ Append(value);
+ AppendSemicolon();
+
+ PushExpression(StackValueKind.ValueType, tempName, byReferenceType);
+ return true;
+ }
+ break;
+ case "get_Value":
+ if (IsTypeName(method, "System", "ByReference`1"))
+ {
+ var thisRef = _stack.Pop();
+
+ PushExpression(StackValueKind.ValueType, ((ExpressionEntry)thisRef).Name + "->_value", method.Signature.ReturnType);
+ return true;
+ }
+ break;
default:
break;
}