Giter Club home page Giter Club logo

Comments (3)

DoctorVanGogh avatar DoctorVanGogh commented on May 12, 2024

Example transpiler showing the issue:
https://github.com/DoctorVanGogh/ExtendedStorage/blob/features/better-floatmenu-interop/Source/ExtendedStorage/Patches/%5BGUI%5D/FloatMenuMakerMap_AddHumanlikeOrders.cs

from harmony.

pardeike avatar pardeike commented on May 12, 2024

Sort of fixed. Due to complex flow logic, I cannot group all local variables at the top. So I added extra lines with // original starts here and // original ends here and all variables that are added by transpilers will appear after the // original starts here line. Latest master has the fix, please verify.

from harmony.

pardeike avatar pardeike commented on May 12, 2024

Working on improvements. Now all locals are listed at the top, even the ones used by Harmony internally and all the ones that any transpilers has ever generated. Strangely, I have not found a reliable way to reduce the total list of local variables to those actually used. But then again, a list with gaps in the numbers from 0..n would look weird. So this is the current output (testing 1.2.0.1 and 2.0 co-existance):

### Harmony id=net.pardeike.harmony.test1, version=2.0.0.0, location=D:\Program Files (x86)\Steam\steamapps\common\data-0000000014ADFA00
### Started from Debug1.Main1..cctor(), location D:\Program Files (x86)\Steam\steamapps\common\data-0000000014B00A60
### At 2019-01-28 10.30.58
### Patch RimWorld.Dialog_Options, Void DoWindowContents(Rect)
Debug2 transpiling 1062 instructions
Debug1 transpiling 1062 instructions
L_0000: Local var 0: UnityEngine.Rect
L_0000: Local var 1: Verse.Listing_Standard
L_0000: Local var 2: System.Collections.Generic.List`1[[Verse.FloatMenuOption, Assembly-CSharp, Version=1.0.6955.24033, Culture=neutral, PublicKeyToken=null]]
// <snip>...
L_0000: Local var 54: System.Type
L_0000: Local var 55: System.Int32
L_0000: ldarg.0
L_0001: ldarg 1
L_0007: call Void Prefix(RimWorld.Dialog_Options, Rect)
L_000c: ldarg.0
L_000d: ldarg 1
L_0013: call Void Prefix(RimWorld.Dialog_Options, Rect)
L_0018: // start original
L_0018: ldc.i4.1
L_0019: stloc 55 (System.Int32)
L_001b: ldarg.1
L_001c: call Rect AtZero(Rect)
L_0021: stloc.0
// <snip>...
L_0f2f: Label78
L_0f2f: ldloc.1
L_0f30: callvirt Void End()
L_0f35: // end original
L_0f35: ret
DONE

from harmony.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.