You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1034 lines
22 KiB

using XLua;
using System;
#if !XLUA_GENERAL
using UnityEngine;
#endif
public enum LuaTestTypeReflect
{
ABC = 0,
DEF,
GHI,
JKL
};
public enum FirstPushEnumReflect
{
E1
};
[CSharpCallLua]
public delegate int TestDelegateReflect(int x);
[CSharpCallLua]
public delegate int TestEvtHandler1Reflect(float y);
[CSharpCallLua]
public delegate int TestEvtHandler2Reflect(byte y, float z);
public class LuaTestObjReflect
{
public static LuaEnv luaEnv = LuaEnvSingletonForTest.Instance;
public int testVar { get; set; }
public int[] testArr = new int[3];
public static LuaTestObjReflect operator + (LuaTestObjReflect a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar + b.testVar;
return ret;
}
public static LuaTestObjReflect operator +(LuaTestObjReflect a, int b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar + b;
return ret;
}
public static LuaTestObjReflect operator +(int a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a + b.testVar;
return ret;
}
public static LuaTestObjReflect operator - (LuaTestObjReflect a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar - b.testVar;
return ret;
}
public static LuaTestObjReflect operator -(LuaTestObjReflect a, int b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar - b;
return ret;
}
public static LuaTestObjReflect operator -(int a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a - b.testVar;
return ret;
}
public static LuaTestObjReflect operator * (LuaTestObjReflect a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar * b.testVar;
return ret;
}
public static LuaTestObjReflect operator *(LuaTestObjReflect a, int b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar * b;
return ret;
}
public static LuaTestObjReflect operator *(int a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a * b.testVar;
return ret;
}
public static LuaTestObjReflect operator /(LuaTestObjReflect a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar / b.testVar;
return ret;
}
public static LuaTestObjReflect operator /(LuaTestObjReflect a, int b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar / b;
return ret;
}
public static LuaTestObjReflect operator /(int a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a / b.testVar;
return ret;
}
public static LuaTestObjReflect operator % (LuaTestObjReflect a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar % b.testVar;
return ret;
}
public static LuaTestObjReflect operator %(int a, LuaTestObjReflect b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a % b.testVar;
return ret;
}
public static LuaTestObjReflect operator %(LuaTestObjReflect a, int b)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar % b;
return ret;
}
public static LuaTestObjReflect operator - (LuaTestObjReflect a)
{
LuaTestObjReflect ret = new LuaTestObjReflect();
ret.testVar = a.testVar * (-1);
return ret;
}
public static bool operator < (LuaTestObjReflect a, LuaTestObjReflect b)
{
return (a.testVar < b.testVar);
}
public static bool operator <= (LuaTestObjReflect a, LuaTestObjReflect b)
{
return (a.testVar <= b.testVar);
}
public static bool operator > (LuaTestObjReflect a, LuaTestObjReflect b)
{
return (a.testVar > b.testVar);
}
public static bool operator >=(LuaTestObjReflect a, LuaTestObjReflect b)
{
return (a.testVar >= b.testVar);
}
public int this[int i]
{
get
{
return testArr[i];
}
set
{
testArr[i] = value;
}
}
public event TestEvtHandler1Reflect TestEvent1;
public event TestEvtHandler2Reflect TestEvent2;
public int CallEvent(float y)
{
return TestEvent1(y);
}
public static event TestEvtHandler1Reflect TestStaticEvent1;
public static int CallStaticEvent(float y)
{
return TestStaticEvent1(y);
}
public static int DefaultParaFuncSingle(int i, string str = "abc")
{
return i;
}
public static int DefaultParaFuncMulti(int i, string str = "abc", double d = 0, byte c = 97)
{
return (i + 1);
}
public static int VariableParamFunc(int i, params string[] strs)
{
return 0;
}
public static int TestEnumFunc(LuaTestTypeReflect x)
{
return (int)x;
}
public static string TestGetType(Type x)
{
return x.ToString ();
}
public static ulong ulX1 = 1;
public static ulong ulX2 = 1;
public static long lY1 = 1;
public static long lY2 = 1;
public static Int64 i64Z1 = 1;
public static Int64 i64Z2 = 1;
public static long lY3 = 1;
public static long lY4 = 123;
public static long lY5 = 12345;
public static long lY6 = 54321;
public static void Gen64BitInt()
{
ulX1 = ulX2 = 1;
lY1 = lY2 = lY3 = 1;
i64Z1 = i64Z2 = 1;
ulX1 = ulX1 << 62;
ulX2 = ulX2 << 61;
lY1 = lY1 << 62;
lY2 = lY2 << 61;
i64Z1 = i64Z1 << 62;
i64Z2 = i64Z2 << 61;
lY3 = lY3 << 50;
}
public static ITestLuaClassReflect CreateTestLuaObj()
{
return new TestLuaClassReflect ();
}
public static TestDelegateReflect csDelegate;
public static TestDelegateReflect csDelegate1;
public static TestDelegateReflect csDelegate2;
public static TestDelegateReflect csDelegate3;
public static TestDelegateReflect csDelegate4;
public static TestDelegateReflect csDelegate11;
public static TestDelegateReflect csDelegate12;
public static TestDelegateReflect csDelegate13;
public static int initNumber = 5;
public static int CalcAdd(int x)
{
initNumber += x;
return initNumber;
}
public static int calcadd(int x)
{
initNumber += x;
return initNumber;
}
public static int CalcDel(int x)
{
initNumber -= x;
return initNumber;
}
public static int CalcMul(int x)
{
initNumber *= x;
return initNumber;
}
public static void GenDelegate()
{
csDelegate1 = new TestDelegateReflect(CalcAdd);
csDelegate2 = new TestDelegateReflect(CalcDel);
csDelegate3 = new TestDelegateReflect(CalcMul);
}
public static int OverLoad1(int x, int y)
{
return 1;
}
public static int OverLoad1(int x)
{
return 2;
}
public static int OverLoad1(params int[] vars)
{
int ret = 0;
foreach (int var in vars)
{
ret += var;
}
return ret;
}
public static int OverLoad2(int x, float y)
{
return 3;
}
public static int OverLoad2(string x, string y)
{
return 4;
}
public static int OverLoad3(int x)
{
return 5;
}
public static int OverLoad3(short y)
{
return 6;
}
public static void OutRefFunc1(int x, out int y, ref int z)
{
y = 100;
}
public static void OutRefFunc2(ref int x, int y, out int z)
{
z = 200;
}
public static void OutRefFunc3(int x, out int y, ref int z)
{
y = 300;
}
public static int OutRefFunc4(int x, out int y, ref int z)
{
y = 400;
return y;
}
public static int OutRefFunc5(ref int x, int y, out int z)
{
z = 500;
return z;
}
public static int OutRefFunc6(int x, int y)
{
return 600;
}
public static void OutRefFunc11(ITestLuaClassReflect x, out ITestLuaClassReflect y, ref ITestLuaClassReflect z)
{
y = CreateTestLuaObj();
y.cmpTarget = 100;
}
public static void OutRefFunc12(ref ITestLuaClassReflect x, ITestLuaClassReflect y, out ITestLuaClassReflect z)
{
z = CreateTestLuaObj();
z.cmpTarget = 200;
}
public static void OutRefFunc13(ITestLuaClassReflect x, out ITestLuaClassReflect y, ref ITestLuaClassReflect z)
{
y = CreateTestLuaObj();
y.cmpTarget = 300;
}
public static int OutRefFunc14(ITestLuaClassReflect x, out ITestLuaClassReflect y, ref ITestLuaClassReflect z)
{
y = CreateTestLuaObj();
y.cmpTarget = 400;
return y.cmpTarget;
}
public static int OutRefFunc15(ref ITestLuaClassReflect x, ITestLuaClassReflect y, out ITestLuaClassReflect z)
{
z = CreateTestLuaObj();
z.cmpTarget = 500;
return z.cmpTarget;
}
public static int OutRefFunc16(ITestLuaClassReflect x, ITestLuaClassReflect y)
{
return 600;
}
public static void OutRefFunc21(TestDelegateReflect x, out TestDelegateReflect y, ref TestDelegateReflect z)
{
y = new TestDelegateReflect(CalcAdd);
}
public static void OutRefFunc22(ref TestDelegateReflect x, TestDelegateReflect y, out TestDelegateReflect z)
{
z = new TestDelegateReflect(CalcAdd);
}
public static void OutRefFunc23(TestDelegateReflect x, out TestDelegateReflect y, ref TestDelegateReflect z)
{
y = new TestDelegateReflect(CalcAdd);
}
public static int OutRefFunc24(TestDelegateReflect x, out TestDelegateReflect y, ref TestDelegateReflect z)
{
y = new TestDelegateReflect(CalcAdd);
return y(1);
}
public static int OutRefFunc25(ref TestDelegateReflect x, TestDelegateReflect y, out TestDelegateReflect z)
{
z = new TestDelegateReflect(CalcAdd);
return z(1);
}
public static int OutRefFunc26(TestDelegateReflect x, TestDelegateReflect y)
{
return 600;
}
public int Sum(int a, int b, int c)
{
return a + b + c;
}
public static int Sum(int a, int b)
{
return a + b;
}
public void GenericMethod<T>()
{
LuaTestCommon.Log("GenericMethod<" + typeof(T) +">");
}
public IntPtr ptr = System.Runtime.InteropServices.Marshal.AllocHGlobal(100);
public IntPtr GetPtr()
{
byte[] abc = new byte[] { 97, 98, 99 };
System.Runtime.InteropServices.Marshal.Copy(abc, 0, ptr, abc.Length);
return ptr;
}
public byte PrintPtr(IntPtr p)
{
LuaTestCommon.Log("p == ptr?" + (p == ptr));
byte[] abc = new byte[] { 0, 0, 0 };
System.Runtime.InteropServices.Marshal.Copy(p, abc, 0, abc.Length);
LuaTestCommon.Log(string.Format("{0},{1},{2}", abc[0], abc[1], abc[2]));
return abc[0];
}
public int VariableParamFuncDefault(int d, int i = 1, params string[] strs)
{
return i + d;
}
public static double StaticVariableParamFuncDefault(double d, double i = 1.0, params string[] strs)
{
return i + d;
}
public static byte[] FuncReturnByteArray()
{
byte[] abc = new byte[] { 97, 98, 99 };
return abc;
}
public static byte FuncReturnByte()
{
byte abc = 97;
return abc;
}
public static int[] FuncReturnIntArray()
{
int[] abc = new int[] { 97, 98, 99 };
return abc;
}
public static int FuncReturnInt()
{
int abc = 97;
return abc;
}
#if !XLUA_GENERAL
public static LayerMask TestImplicit()
{
return new LayerMask();
}
#endif
public static int VariableParamFunc(int i, params int[] strs)
{
return 0;
}
public static int VariableParamFunc2(params int[] strs)
{
return strs.Length;
}
public static string FirstPushEnumFunc(int i)
{
string luaScript = @"
function first_push_reflect(t,obj)
if t==1 then
if obj == CS.FirstPushEnumReflect.E1 then
return 1
else
return 2
end
elseif t==2 then
if obj == CS.FirstPushEnumReflect.self then
return 3
else
return 4
end
else
return 5
end
end";
luaEnv.DoString(luaScript);
LuaFunction f1 = luaEnv.Global.Get<LuaFunction>("first_push_reflect");
LuaTestCommon.Log("LuaFunction<" + f1);
object[] ret = f1.Call(i, FirstPushEnumReflect.E1);
return ret[0].ToString();
}
}
public class TestCastClassReflect
{
public bool TestFunc1()
{
return true;
}
}
public interface ITestLuaClassReflect
{
bool TestFunc1();
int cmpTarget{ set; get; }
}
internal class TestLuaClassReflect : ITestLuaClassReflect
{
public bool TestFunc1()
{
return true;
}
public int cmpTarget { set; get; }
}
public class TestChineseStringReflect
{
public string GetShortChinString()
{
return short_simple_string;
}
public string GetLongChineString()
{
return long_simple_string;
}
public string GetCombineString()
{
return combine_string;
}
public string GetComplexString()
{
return complex_string;
}
public string GetHuoxingString()
{
return huoxing_string;
}
public string short_simple_string = "中文字符串";
public string long_simple_string = "为Unity3D增加Lua脚本编程的能力,进而提供代码逻辑增量更新的可能,支持lua的所有基本类型,哈哈哈哈";
public string combine_string = "中文字符串.* ? [ ] ^ $~`!@#$%^&()_-+=[];',““〈〉〖【℃ $ ¤№ ☆ ★■ⅷ②㈣12345abc";
public string complex_string = "繁體國陸";
public string huoxing_string = "吙煋呅僦媞這樣孒";
}
public class TestUlongAndLongTypeReflect
{
public ulong UlongMax
{
get { return ulong_max; }
set { ulong_max=value; }
}
public ulong UlongMin
{
get { return ulong_min; }
set { ulong_min=value; }
}
public ulong UlongMid
{
get { return ulong_mid; }
set { ulong_mid=value; }
}
public ulong UlongAdd()
{
return ulong_max - 1000 + 1;
}
public long LongMax
{
get { return long_max; }
set { long_max=value; }
}
public long LongMin
{
get { return long_min; }
set { long_min=value; }
}
public long LongMid
{
get { return long_mid; }
set { long_mid=value; }
}
public long LongAdd()
{
return long_max - 1000 + 1;
}
ulong ulong_max = System.UInt64.MaxValue;
ulong ulong_min = System.UInt64.MinValue;
ulong ulong_mid = 9223372036854775808;
long long_max = System.Int64.MaxValue;
long long_min = System.Int64.MinValue;
long long_mid = 4611686018427387904;
}
public struct EmployeestructReflect
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private int age;
public int Age
{
get { return age; }
set { age = value; }
}
private int salary;
private int annual_bonus;
public int Salary
{
get { return salary; }
set { salary = value; }
}
public int AnnualBonus
{
get { return annual_bonus; }
set { annual_bonus = value; }
}
}
public struct HasConstructStructReflect{
public int x;
public int y;
public string z;
public HasConstructStructReflect(int x, int y, string z)
{
this.x = x;
this.y = y;
this.z = z;
}
}
public class CClassReflect
{
public CClassReflect(int x, int y, string z)
{
c_struct = new HasConstructStructReflect(x, y, z);
}
public HasConstructStructReflect CConStruct
{
get { return c_struct; }
set { c_struct = value; }
}
public void Add(HasConstructStructReflect invar, ref HasConstructStructReflect refvar, out HasConstructStructReflect outvar)
{
outvar = invar;
outvar.x = invar.x + refvar.x;
refvar.x = invar.x;
}
public int VariableParamFunc(params HasConstructStructReflect[] structs)
{
int ret = 0;
foreach (HasConstructStructReflect var in structs)
{
ret += var.x;
}
return ret;
}
private HasConstructStructReflect c_struct;
}
public class BClassReflect:CClassReflect
{
public BClassReflect(int x, int y, string z):base(x, y, z)
{
b_struct = new HasConstructStructReflect(x, y, z);
}
public HasConstructStructReflect BConStruct
{
get { return b_struct; }
set { b_struct = value; }
}
public void Sub(HasConstructStructReflect invar, ref HasConstructStructReflect refvar, out HasConstructStructReflect outvar)
{
outvar = invar;
outvar.x = invar.x - refvar.x;
refvar.x = invar.x;
LuaTestCommon.Log ("refvar.x:" + refvar.x + ",refvar.y:" + refvar.y + ", refvar.z:" + refvar.z);
}
private HasConstructStructReflect b_struct;
}
public class AClassReflect:BClassReflect
{
public AClassReflect(int x, int y , string z):base(x, y, z)
{
LuaTestCommon.Log ("AClass Constructor");
}
public int Div(int x, int y)
{
if (y == 0) {
return 0;
}
else
{
return x / y;
}
}
}
namespace TestExtensionMethodReflect
{
[ReflectionUse]
public static class TestExtensionMethodForStructReflect
{
public static void PrintSalary(this EmployeestructReflect i)
{
LuaTestCommon.Log("Salary:" + i.Salary);
}
public static int GetIncomeForOneYear(this EmployeestructReflect i)
{
return i.Salary * 12 + i.AnnualBonus;
}
public static int Add(this EmployeestructReflect i, EmployeestructReflect d)
{
return i.Salary * 12 + i.AnnualBonus + d.Salary * 12 + d.AnnualBonus;
}
public static void Sub(this EmployeestructReflect i, EmployeestructReflect d, out EmployeestructReflect e, ref EmployeestructReflect a)
{
e = d;
e.Salary = 10000;
a.Salary = i.Salary - d.Salary;
LuaTestCommon.Log ("e.name:" + e.Name +", e.salary:"+ e.Salary);
LuaTestCommon.Log ("a.name:" + a.Name +", a.salary:"+ a.Salary);
}
}
[ReflectionUse]
public static class TestExtensionMethodForClassReflect
{
public static void PrintAllString(this TestChineseStringReflect i)
{
LuaTestCommon.Log("GetLongChineString:" + i.GetLongChineString());
}
public static int GetLongStringLength(this TestChineseStringReflect i)
{
return i.GetLongChineString ().Length;
}
public static int Add(this TestChineseStringReflect i, TestChineseStringReflect d)
{
return i.GetLongChineString ().Length + d.GetLongChineString ().Length;
}
public static void Replace(this TestChineseStringReflect i , TestChineseStringReflect d, out TestChineseStringReflect e, ref TestChineseStringReflect a)
{
e = i;
a.combine_string = i.short_simple_string;
a.short_simple_string = i.short_simple_string + d.short_simple_string;
}
}
}
public abstract class EmployeeTemplateReflect
{
public void GetSalary()
{
GetBasicSalary();
AddBonus();
}
public abstract int GetBasicSalary();
public abstract int AddBonus();
}
public class ManagerReflect : EmployeeTemplateReflect
{
public override int GetBasicSalary()
{
//Console.WriteLine("Get Manager Basic Salary");
return 1;
}
public override int AddBonus()
{
//Console.WriteLine("Add Manager Bonus");
return 2;
}
}
public class TableAutoTransSimpleClassReflect
{
public TableAutoTransSimpleClassReflect()
{
}
public TableAutoTransSimpleClassReflect(int x, string y, long z)
{
IntVar = x;
StringVar = y;
LongVar = z;
}
public int IntVar
{
get { return x; }
set { x = value; }
}
public string StringVar
{
get { return y; }
set { y = value; }
}
public long LongVar
{
get { return z; }
set { z = value; }
}
public int x;
public string y;
public long z;
}
public class TableAutoTransComplexClassReflect
{
public TableAutoTransComplexClassReflect()
{
}
public TableAutoTransComplexClassReflect(int A, TableAutoTransSimpleClassReflect B)
{
IntVar = A;
ClassVar = B;
}
public int IntVar
{
get { return A; }
set { A = value; }
}
public TableAutoTransSimpleClassReflect ClassVar
{
get { return B; }
set { B = value; }
}
public int A;
public TableAutoTransSimpleClassReflect B;
}
public struct TableAutoTransSimpleStructReflect
{
public byte a;
}
public struct TableAutoTransComplexStructReflect
{
public int a;
public int b;
public decimal c;
public TableAutoTransSimpleStructReflect d;
}
public class TestTableAutoTransClassReflect
{
public TableAutoTransSimpleClassReflect SimpleClassMethod(TableAutoTransSimpleClassReflect p)
{
return p;
}
public TableAutoTransComplexClassReflect ComplexClassMethod(TableAutoTransComplexClassReflect p)
{
return p;
}
public TableAutoTransSimpleStructReflect SimpleStructMethod(TableAutoTransSimpleStructReflect p)
{
return p;
}
public TableAutoTransComplexStructReflect ComplexStructMethod(TableAutoTransComplexStructReflect p)
{
return p;
}
public int OneListMethod(int[] args)
{
int value = 0;
for (int i = 0; i < args.Length; i++)
{
value += args[i];
}
return value;
}
public int TwoDimensionListMethod(int[][] args)
{
int value = 0;
for (int i = 0; i < args.Length; i++)
{
foreach (int j in args[i])
{
value += j;
}
}
return value;
}
}
//验证构造函数支持refer,out修饰符,add@2017.05.09 for v2.1.7
public class ReferTestClassReflect
{
public ReferTestClassReflect(int x, ref int y, out string z)
{
var_x = x;
var_y = y;
y = y - 1;
z = "test1";
var_z = z;
}
public ReferTestClassReflect(int x, out string z)
{
var_x = x;
var_y = 10;
z = "test3";
var_z = z;
}
public int Get_X_Y_ADD()
{
return var_x + var_y;
}
private int var_x;
private int var_y;
private string var_z;
}