yanghuan / CSharp.lua

The C# to Lua compiler
Other
1.21k stars 200 forks source link

Compiler has a bug,旧版本没有问题,但用apple芯片必须升级,使用2.0的release后,原来编译通过的,现在也不行了 #513

Open uncleciba opened 4 days ago

uncleciba commented 4 days ago

CSharpLua.BugErrorException: SourceLocation(/Users/yz/workspace/Work/U3D/SpacePro/Assets/Code2Lua/Logic/Game/Mine/MineSystem.cs@10:1)"public class MineSystem : MonoBehaviour { public static MineSystem instance;

public const string gameType = "Mine";
public static Action onRefresh;
public static Action onUpdate;
public static Action onRefreshComplete;
public bool isOpen = false;
public bool firstLoad = false;
public bool localLoad = false;
public bool zoneLoad = false;
public bool stateLoad { get { return localLoad && zoneLoad; } }
public DateTime closeTime;
public MinePointList mineList;
public MineState localState;
public MineState zoneState;

//战报列表
static List<MineRecordBrief> recordLocalList = new List<MineRecordBrief>();
static List<MineRecordBrief> recordZoneList = new List<MineRecordBrief>();

//被动
public const string MessageName_DUH_MinePointRewardAdd = "mine.pointRewardAdd";
public const string MessageName_DUH_MinePointOwnerChange = "mine.pointOwnerChange";
public const string MessageName_DUH_MinePointBattleChange = "mine.pointBattleChange";
public const string MessageName_DUH_MineGamePlayStateChange = "mine.gameStateChange";

public const string MessageName_DUH_ZMinePointRewardAdd = "zmine.pointRewardAdd";
public const string MessageName_DUH_ZMinePointOwnerChange = "zmine.pointOwnerChange";
public const string MessageName_DUH_ZMinePointBattleChange = "zmine.pointBattleChange";
public const string MessageName_DUH_ZMineGamePlayStateChange = "zmine.gameStateChange";
//主动
public const string MessageName_DataRefresh_MyFleetStateChange = "mineSystem.DataRefresh.MyFleetStateChange";
public const string MessageName_DataRefresh_AttackFailed = "mineSystem.DataRefresh.AttackFailed";

public static bool qualified { get; private set; }
public static bool IsVaild(bool localOrZone)
{
    if (localOrZone)
    {
        if (!instance.localLoad)
            return false;
        return instance.localState.isVaild;
    }
    else
    {
        if (!instance.zoneLoad)
            return false;
        return instance.zoneState.isVaild;
    }
}

private void Awake()
{
    instance = this;
}

public void Init()
{
    GameClient.IOClient.RegisterEvent(NetEventName.MineGameStateChange, OnMessageMineGameStateChange);
    GameClient.IOClient.RegisterEvent(NetEventName.MinePointBattleChange, OnMessageMinePointBattleChange);
    GameClient.IOClient.RegisterEvent(NetEventName.MinePointOwnerChange, OnMessageMinePointOwnerChange);
    GameClient.IOClient.RegisterEvent(NetEventName.MinePointRewardAdd, OnMessageMinePointRewardAdd);

    GameClient.IOClient.RegisterEvent(NetEventName.ZMineGameStateChange, OnMessageZMineGameStateChange);
    GameClient.IOClient.RegisterEvent(NetEventName.ZMinePointBattleChange, OnMessageZMinePointBattleChange);
    GameClient.IOClient.RegisterEvent(NetEventName.ZMinePointOwnerChange, OnMessageZMinePointOwnerChange);
    GameClient.IOClient.RegisterEvent(NetEventName.ZMinePointRewardAdd, OnMessageZMinePointRewardAdd);
}

public void Clear()
{

}

// 这个应该可以放在Init里,先不动
public void OnSystemLoaded()
{
    if (mineList == null)
        mineList = new MinePointList();
    onRefresh += RefreshLocal;
    onRefresh += RefreshZone;
    onRefreshComplete += () => firstLoad = true;
}
public void Refresh()
{
    if (onRefresh != null)
        onRefresh();
}

public void RefreshLocal()
{
    mineList.LoadLocal();
}

public void RefreshZone()
{
    mineList.LoadZone();
}

public void OnRefreshComplete()
{
    if (onRefreshComplete != null)
        onRefreshComplete();
}

public void GetGameState()
{
    if (!localLoad)
    {
        MineAPI.MineGame_GetGameState().AddRspSucc(r =>
        {
            if (r.rspCode == RspCode.Succ)
            {
                localState = new MineState(r.dataRsp);
                localLoad = true;
            }
        });
    }
    if (!zoneLoad)
    {
        MineAPI.ZMineGame_GetGameState().AddRspSucc(r =>
            {
                if (r.rspCode == RspCode.Succ)
                {
                    zoneState = new MineState(r.dataRsp);
                    zoneLoad = true;
                }
            });
    }
}
public void UpdateGameState(bool localOrZone)
{
    if (localOrZone)
        MineAPI.MineGame_GetGameState().AddRspSucc(r =>
        {
            if (r.rspCode == RspCode.Succ)
            {
                if (localState != null)
                    localState.FillData(r.dataRsp);
                else
                    localState = new MineState(r.dataRsp);
                instance.mineList.RefreshMinePoints(true);
            }
        });
    else
    {
        MineAPI.ZMineGame_GetGameState().AddRspSucc(r =>
        {
            if (r.rspCode == RspCode.Succ)
            {
                if (zoneState != null)
                    zoneState.FillData(r.dataRsp);
                else
                    zoneState = new MineState(r.dataRsp);
                instance.mineList.RefreshMinePoints(false);
            }
        });
        GetUserQualified();
    }
    VSWorldData2.mineFleet.DataSync_RefreshState();
}

float second = 0;
private void Update()
{
    if (onUpdate != null)
    {
        if (second >= 1)
        {
            onUpdate();
            second = 0;
        }
        second += Time.deltaTime;
    }
}

public static List<MineRecordBrief> GetBattleRecords(bool localOrZone)
{
    if (localOrZone)
        return recordLocalList;
    else
        return recordZoneList;
}

void OnMessageMineGameStateChange(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMineGameStateChange: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && ioEvent.data != null)
    {
        if (ioEvent.data.HasField("mineGameState"))
        {
            var state = ioEvent.data["mineGameState"]["playState"].n;
            if (state == MineState.Closed)
                UpdateGameState(true);
            else if (state == MineState.InPlaying)
            {
                UpdateGameState(true);
                RefreshLocal();
            }
        }
        //CibaFacade.instance.SendMessageCommand(MessageName_DUH_GamePlayStateChange);
    }
}
void OnMessageZMineGameStateChange(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageZMineGameStateChange: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && ioEvent.data != null)
    {
        if (ioEvent.data.HasField("zmineGameState"))
        {
            var state = ioEvent.data["zmineGameState"]["playState"].n;
            if (state == MineState.Closed)
                UpdateGameState(false);
            else if (state == MineState.InPlaying)
            {
                UpdateGameState(false);
                RefreshZone();
            }
        }
        //CibaFacade.instance.SendMessageCommand(MessageName_DUH_GamePlayStateChange);
    }
}
void OnMessageMinePointBattleChange(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMinePointBattleChange: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && VSMinePage.instance.gameObject.activeInHierarchy && ioEvent.data != null)
    {
        RefreshLocal();
        //CibaFacade.instance.SendMessageCommand(MessageName_DUH_PointBattleChange);
    }
}
void OnMessageZMinePointBattleChange(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMinePointBattleChange: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && VSMinePage.instance.gameObject.activeInHierarchy && ioEvent.data != null)
    {
        RefreshZone();
        //CibaFacade.instance.SendMessageCommand(MessageName_DUH_PointBattleChange);
    }
}
void OnMessageMinePointOwnerChange(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMinePointOwnerChange: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && VSMinePage.instance.gameObject.activeInHierarchy && ioEvent != null)
    {
        RefreshLocal();
        VSWorldData2.mineFleet.DataSync_RefreshState();
        //CibaFacade.instance.SendMessageCommand(MessageName_DUH_PointOwnerChange, ioEvent.data);
    }
}
void OnMessageZMinePointOwnerChange(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMinePointOwnerChange: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && VSMinePage.instance.gameObject.activeInHierarchy && ioEvent != null)
    {
        RefreshZone();
        VSWorldData2.mineFleet.DataSync_RefreshState();
        //CibaFacade.instance.SendMessageCommand(MessageName_DUH_PointOwnerChange, ioEvent.data);
    }
}
void OnMessageMinePointRewardAdd(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMinePointRewardAdd: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && VSMinePage.instance.gameObject.activeInHierarchy && ioEvent != null)
    {
        bool localOrZone = VSWorldData2.mineFleet.localOrZone;
        if (localOrZone)
        {
            MineAPI.MineGame_GetProducts().AddRspSucc(r =>
            {
                mineList.FillMinePointReward(r.dataRsp, localOrZone);
                CibaFacade.instance.SendMessageCommand(MessageName_DUH_MinePointRewardAdd);
            });
        }
    }
}
void OnMessageZMinePointRewardAdd(SocketIOEvent ioEvent)
{
    CibaLog.Info2("mineSystem.OnMessageMinePointRewardAdd: " + ioEvent.name + ":" + ioEvent.data.ToString());
    if (firstLoad && VSMinePage.instance.gameObject.activeInHierarchy && ioEvent != null)
    {
        MineAPI.ZMineGame_GetProducts().AddRspSucc(r =>
        {
            mineList.FillMinePointReward(r.dataRsp, false);
            CibaFacade.instance.SendMessageCommand(MessageName_DUH_ZMinePointRewardAdd);
        });

    }
}

public static CibaRequest GetAllLocalPoints()
{
    return MineAPI.MineGame_GetPoints();
}

public static CibaRequest GetAllZonePoints()
{
    return MineAPI.ZMineGame_GetPoints();
}

public static ICibaRequest GetMineRewardCount()
{
    return MineAPI.MineGame_GetProducts();
}

public static ICibaRequest GetUserQualified()
{
    return MineAPI.ZMineGame_GetUserQualified().AddRspSucc(r =>
    {
        if (r.dataRsp.HasField("qualified"))
            qualified = r.dataRsp["qualified"].b;
    });
}

public static ICibaRequest GetZMineRewardCount()
{
    return MineAPI.ZMineGame_GetProducts();
}

public static ICibaRequest GetMineAttackCDs()
{
    return MineAPI.MineGame_GetAttackCDs();
}

public static ICibaRequest GetZMineAttackCDs()
{
    return MineAPI.ZMineGame_GetAttackCDs();
}

public static ICibaRequest GetMineBattleRecordNew()
{
    return MineAPI.MineGame_GetBattleRecordNew();
}
public static ICibaRequest GetZMineBattleRecordNew()
{
    return MineAPI.ZMineGame_GetBattleRecordNew();
}

public static ICibaRequest GetMineBattleRecordBriefs(int cursor = 0)
{
    return MineAPI.MineGame_GetBattleRecordBriefs(cursor).AddRspSucc(r =>
    {
        if (r.rspCode == RspCode.Succ && r.dataRsp.HasField("recordBriefs"))
        {
            recordLocalList.Clear();
            var json = new CibaLuaJson(r.dataRsp);
            var data = json.Read("recordBriefs");
            for (int i = 0; i < data.ArrayLength(); i++)
            {
                var record = new MineRecordBrief(data.Read(i), true);
                record.cursor = json.Read("cursor");
                recordLocalList.Add(record);
            }
            recordLocalList.Sort((x, y) => -x.endTS.CompareTo(y.endTS));
        }
    });
}

public static ICibaRequest GetZMineBattleRecordBriefs(int cursor = 0)
{
    return MineAPI.ZMineGame_GetBattleRecordBriefs(cursor).AddRspSucc(r =>
    {
        if (r.rspCode == RspCode.Succ && r.dataRsp.HasField("recordBriefs"))
        {
            recordZoneList.Clear();
            var json = new CibaLuaJson(r.dataRsp);
            var data = json.Read("recordBriefs");
            for (int i = 0; i < data.ArrayLength(); i++)
            {
                var record = new MineRecordBrief(data.Read(i), false);
                record.cursor = json.Read("cursor");
                recordZoneList.Add(record);
            }
            recordZoneList.Sort((x, y) => -x.endTS.CompareTo(y.endTS));
        }
    });
}

public static ICibaRequest AckBattleRecordNew(string[] recordIds)
{
    return MineAPI.MineGame_NewBattleRecordAck(recordIds);
}

public static ICibaRequest Claim(MinePoint minePoint)
{
    if (minePoint.localOrZone)
        return MineAPI.MineGame_ClaimProducts(minePoint).AddRspSucc(r =>
        {
            if (r.rspCode == RspCode.Succ)
                instance.Refresh();
        });
    else
        return MineAPI.ZMineGame_ClaimResource(minePoint).AddRspSucc(r =>
        {
            if (r.rspCode == RspCode.Succ)
                instance.Refresh();
        });
}

public static void ClaimAllProducts()
{
    var localList = instance.mineList.canClaimMinePointList;
    for (int i = 0; i < localList.Count; i++)
        localList[i].Claim();

    var zoneList = instance.mineList.canClaimZMinePointList;
    for (int i = 0; i < zoneList.Count; i++)
        zoneList[i].Claim();
}

public static ICibaRequest UseRandomDropItem(MinePoint minePoint)
{
    if (minePoint.localOrZone)
        return MineAPI.MineGame_UseRandomDrop(minePoint);
    else
        return MineAPI.ZMineGame_UseRandomDrop(minePoint);
}
public static ICibaRequest BuyRandomDropItem(MinePoint minePoint)
{
    if (minePoint.localOrZone)
        return MineAPI.MineGame_BuyRandomDropItem(minePoint);
    else
        return MineAPI.ZMineGame_BuyRandomDropItem(minePoint);
}
public static ICibaRequest GiveUpRandomDropItem(MinePoint minePoint)
{
    if (minePoint.localOrZone)
        return MineAPI.MineGame_GiveUpRandomDropItem(minePoint);
    else
        return MineAPI.ZMineGame_GiveUpRandomDropItem(minePoint);
}

public static ICibaRequest BuyMainDropItem(MinePoint minePoint)
{
    if (minePoint.localOrZone)
        return MineAPI.MineGame_BuyMainDropItem(minePoint);
    else
        return MineAPI.ZMineGame_BuyMainDropItem(minePoint);
}
public static ICibaRequest GiveUpMainDropItem(MinePoint minePoint)
{
    if (minePoint.localOrZone)
        return MineAPI.MineGame_GiveUpMainDropItem(minePoint);
    else
        return MineAPI.ZMineGame_GiveUpMainDropItem(minePoint);
}

public static ICibaRequest BattleWin(bool localOrZone)
{
    if (localOrZone)
        return MineAPI.MineGame_BattleWin(VSWorldData2.mineFleet.pointId, VSWorldData2.mineFleet.fleetId);
    else
        return MineAPI.ZMineGame_BattleWin(VSWorldData2.mineFleet.pointId, VSWorldData2.mineFleet.fleetId);
}
public static ICibaRequest BattleLose(bool localOrZone)
{
    if (localOrZone)
        return MineAPI.MineGame_BattleLose(VSWorldData2.mineFleet.fleetId, false);
    else
        return MineAPI.ZMineGame_BattleLose(VSWorldData2.mineFleet.fleetId, VSWorldData2.mineFleet.pointId, false);
}

}" Compiler has a bug, thanks to commit issue at https://github.com/yanghuan/CSharp.lua/issue ---> System.Diagnostics.Contracts.ContractException ---> System.ApplicationException at CSharpLua.LuaSyntaxGenerator.<>c.<.cctor>b290(Object , ContractFailedEventArgs e) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 139 at System.Runtime.CompilerServices.ContractHelper.RaiseContractFailedEvent(ContractFailureKind failureKind, String userMessage, String conditionText, Exception innerException) --- End of inner exception stack trace --- at System.Runtime.CompilerServices.ContractHelper.RaiseContractFailedEvent(ContractFailureKind failureKind, String userMessage, String conditionText, Exception innerException) at System.Diagnostics.Contracts.Contract.Assert(Boolean condition) at CSharpLua.LuaSyntaxGenerator.IsStaticCtorField(ISymbol symbol) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 1756 at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext() at CSharpLua.LuaSyntaxGenerator.GetStaticCtorFieldNeedUpValueCount(IMethodSymbol methodSymbol) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 1773 at CSharpLua.LuaSyntaxGenerator.GetMethodMaxUpValueCount(IMethodSymbol methodSymbol) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 1792 at CSharpLua.LuaSyntaxGenerator.b153_0(INamedTypeSymbol definitionType) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 1745 at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) at CSharpLua.LuaSyntaxGenerator.IsMorenThanUpValueStaticCtorField(ISymbol symbol) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 1741 at CSharpLua.LuaSyntaxNodeTransform.IsMoreThanUpValueStaticInitField(ISymbol symbol) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.Helper.cs:line 437 at CSharpLua.LuaSyntaxNodeTransform.VisitBaseFieldDeclarationSyntax(BaseFieldDeclarationSyntax node) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 931 at CSharpLua.LuaSyntaxNodeTransform.VisitFieldDeclaration(FieldDeclarationSyntax node) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 963 at Microsoft.CodeAnalysis.CSharp.Syntax.FieldDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor1 visitor) at CSharpLua.LuaSyntaxNodeTransform.BuildTypeMembers(LuaTypeDeclarationSyntax typeDeclaration, TypeDeclarationSyntax node) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 298 at CSharpLua.LuaSyntaxNodeTransform.BuildTypeDeclaration(INamedTypeSymbol typeSymbol, TypeDeclarationSyntax node, LuaTypeDeclarationSyntax typeDeclaration) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 404 at CSharpLua.LuaSyntaxNodeTransform.VisitTypeDeclaration(INamedTypeSymbol typeSymbol, TypeDeclarationSyntax node, LuaTypeDeclarationSyntax typeDeclaration) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 506 at CSharpLua.LuaSyntaxNodeTransform.VisitClassDeclaration(ClassDeclarationSyntax node) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 573 at Microsoft.CodeAnalysis.CSharp.Syntax.ClassDeclarationSyntax.Accept[TResult](CSharpSyntaxVisitor1 visitor) at CSharpLua.LuaSyntaxNodeTransform.BlockCommonNode.Visit(LuaSyntaxNodeTransform transfor) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxNodeTransform.cs:line 1350 --- End of inner exception stack trace --- at CSharpLua.LuaSyntaxGenerator.Create(Boolean isSingleFile) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 240 at CSharpLua.LuaSyntaxGenerator.Generate(String outFolder) in C:\Person\Project\code\CSharp.lua\CSharp.lua\LuaSyntaxGenerator.cs:line 267 at CSharpLua.Compiler.Compile() in C:\Person\Project\code\CSharp.lua\CSharp.lua\Compiler.cs:line 124 at CSharpLua.Program.Main(String[] args) in C:\Person\Project\code\CSharp.lua\CSharp.lua.Launcher\Program.cs:line 90

yanghuan commented 2 days ago

堆栈对应不上,是目前最新的代码吗?

yanghuan commented 2 days ago

2.0 是去年发布了,用工程最新的代码编译试试