internal override void MethodGen() { Parent.Class.Fields.TryGetValue("Length", out Field lengthField); Parent.Class.Fields.TryGetValue("Data", out Field dataField); // 复制Length Constructor.AddLocal(Method.Params[1].Offset); // 传入的String Constructor.AddLoadT(Method.Params[1].Type); Constructor.AddLoadNonStatic(lengthField.ConstantPoolIndex); Constructor.AddLocal(Method.Params[0].Offset); // 构造对象 Constructor.AddLoadT(Method.Params[0].Type); Constructor.AddStoreNonStatic(lengthField.ConstantPoolIndex); Constructor.AddPop(lengthField.Type); // 复制Data Constructor.AddLocal(Method.Params[1].Offset); // 传入的String Constructor.AddLoadT(Method.Params[1].Type); Constructor.AddLoadNonStatic(dataField.ConstantPoolIndex); Constructor.AddLocal(Method.Params[0].Offset); // 构造对象 Constructor.AddLoadT(Method.Params[0].Type); Constructor.AddStoreNonStatic(dataField.ConstantPoolIndex); Constructor.AddPop(dataField.Type); Constructor.AddRet(); }
internal override void StaticInitializerGen() { Class.Fields.TryGetValue("Empty", out Field field); Constructor.AddNew(Class.ConstantPoolIndex); Constructor.AddDup(Class.ObjectType); Constructor.AddConst(Constructor.StringPool.TryAdd(string.Empty)); AbstractMethod abstractMethod = Methods.Find(m => m is StringInit); Constructor.AddCall(abstractMethod.Method.ConstantPoolIndex); Constructor.AddStoreStatic(field.ConstantPoolIndex); Constructor.AddPop(Class.ObjectType); Constructor.AddRet(); }