Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
        }