Creates a reference to the specified value.
(value, type)
| 12200 | } |
| 12201 | /** Creates a reference to the specified value. */ |
| 12202 | static to(value, type) { |
| 12203 | const handle = Memory.alloc(Process.pointerSize); |
| 12204 | switch (typeof value) { |
| 12205 | case "boolean": |
| 12206 | return new Il2Cpp.Reference(handle.writeS8(+value), Il2Cpp.Image.corlib.class("System.Boolean").type); |
| 12207 | case "number": |
| 12208 | switch (type?.typeEnum) { |
| 12209 | case 5 /* U1 */: |
| 12210 | return new Il2Cpp.Reference(handle.writeU8(value), type); |
| 12211 | case 4 /* I1 */: |
| 12212 | return new Il2Cpp.Reference(handle.writeS8(value), type); |
| 12213 | case 3 /* Char */: |
| 12214 | case 7 /* U2 */: |
| 12215 | return new Il2Cpp.Reference(handle.writeU16(value), type); |
| 12216 | case 6 /* I2 */: |
| 12217 | return new Il2Cpp.Reference(handle.writeS16(value), type); |
| 12218 | case 9 /* U4 */: |
| 12219 | return new Il2Cpp.Reference(handle.writeU32(value), type); |
| 12220 | case 8 /* I4 */: |
| 12221 | return new Il2Cpp.Reference(handle.writeS32(value), type); |
| 12222 | case 11 /* U8 */: |
| 12223 | return new Il2Cpp.Reference(handle.writeU64(value), type); |
| 12224 | case 10 /* I8 */: |
| 12225 | return new Il2Cpp.Reference(handle.writeS64(value), type); |
| 12226 | case 12 /* R4 */: |
| 12227 | return new Il2Cpp.Reference(handle.writeFloat(value), type); |
| 12228 | case 13 /* R8 */: |
| 12229 | return new Il2Cpp.Reference(handle.writeDouble(value), type); |
| 12230 | } |
| 12231 | case "object": |
| 12232 | if (value instanceof Il2Cpp.ValueType || value instanceof Il2Cpp.Pointer) { |
| 12233 | return new Il2Cpp.Reference(handle.writePointer(value), value.type); |
| 12234 | } |
| 12235 | else if (value instanceof Il2Cpp.Object) { |
| 12236 | return new Il2Cpp.Reference(handle.writePointer(value), value.class.type); |
| 12237 | } |
| 12238 | else if (value instanceof Il2Cpp.String || value instanceof Il2Cpp.Array) { |
| 12239 | return new Il2Cpp.Reference(handle.writePointer(value), value.object.class.type); |
| 12240 | } |
| 12241 | else if (value instanceof NativePointer) { |
| 12242 | switch (type?.typeEnum) { |
| 12243 | case 25 /* UnsignedNativeInteger */: |
| 12244 | case 24 /* NativeInteger */: |
| 12245 | return new Il2Cpp.Reference(handle.writePointer(value), type); |
| 12246 | } |
| 12247 | } |
| 12248 | else if (value instanceof Int64) { |
| 12249 | return new Il2Cpp.Reference(handle.writeS64(value), Il2Cpp.Image.corlib.class("System.Int64").type); |
| 12250 | } |
| 12251 | else if (value instanceof UInt64) { |
| 12252 | return new Il2Cpp.Reference(handle.writeU64(value), Il2Cpp.Image.corlib.class("System.UInt64").type); |
| 12253 | } |
| 12254 | default: |
| 12255 | (0, console_1.raise)(`don't know how to create a reference to ${value} using type ${type?.name}`); |
| 12256 | } |
| 12257 | } |
| 12258 | } |
| 12259 | Il2Cpp.Reference = Il2CppReference; |