diff options
author | Jan Kotas <jkotas@microsoft.com> | 2017-08-09 19:43:48 +0300 |
---|---|---|
committer | Jan Kotas <jkotas@microsoft.com> | 2017-08-09 20:38:58 +0300 |
commit | 7b15c199fd1644d8510b6bf91a35a0ee4f48eb7b (patch) | |
tree | 8b98ee98c57e3051fe9f0e41f5d0342e6aa48009 /src/ILCompiler.CppCodeGen | |
parent | 3390e457df151e8481b63197b91f0f0b147c70ab (diff) |
Expand ByReference intrinsics in CppCodeGen
Diffstat (limited to 'src/ILCompiler.CppCodeGen')
-rw-r--r-- | src/ILCompiler.CppCodeGen/src/CppCodeGen/ILToCppImporter.cs | 31 |
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; } |