예제 #1
0
        public void StringTest()
        {
            var clr = "long.MaxValue / 2";

            var v = IshtarMarshal.ToIshtarObject(clr);
            var r = IshtarMarshal.ToDotnetString(v, null);

            Assert.AreEqual(clr, r);
        }
예제 #2
0
        public unsafe void LDSTR_Test()
        {
            var targetStr = "the string";

            using var ctx = CreateContext();
            var result = ctx.Execute((gen, _) =>
            {
                gen.Emit(OpCodes.LDC_STR, targetStr);
                gen.Emit(OpCodes.RET);
            });

            Validate();
            Assert.AreEqual(VeinTypeCode.TYPE_STRING, (*result.returnValue).type);

            var obj = (IshtarObject *)result.returnValue->data.p;

            Assert.AreEqual(targetStr, IshtarMarshal.ToDotnetString(obj, null));
        }
예제 #3
0
        public void StringFormatWithArray()
        {
            using var ctx = CreateContext();

            var result = ctx.Execute((x, _) =>
            {
                x.Emit(OpCodes.LDC_STR, "{0} and {1}");
                x.Emit(OpCodes.LDC_STR, "foo");
                x.Emit(OpCodes.LDC_STR, "bar");
                x.Emit(OpCodes.CALL, VeinCore.StringClass.FindMethod("format", new []
                {
                    VeinCore.StringClass, /* template */
                    VeinCore.ObjectClass, /* o1 */
                    VeinCore.ObjectClass  /* o2 */
                }));
                x.Emit(OpCodes.RET);
            });

            Assert.AreEqual(VeinTypeCode.TYPE_STRING, result.returnValue->type);
            var str = IshtarMarshal.ToDotnetString((IshtarObject *)result.returnValue->data.p, result);

            Assert.AreEqual("foo and bar", str);
        }