Ejemplo n.º 1
0
// todo
func initConstantStaticFields(class *rtc.Class) {
	cp := class.ConstantPool()

	for _, field := range class.Fields() {
		if field.IsStatic() && field.IsFinal() {
			kValIndex := uint(field.ConstValueIndex())
			if kValIndex > 0 {
				slotId := field.SlotId()
				staticSlots := class.StaticFieldSlots()
				switch field.Descriptor() {
				case "Z", "B", "C", "S", "I":
					staticSlots[slotId] = cp.GetConstant(kValIndex).(int32)
				case "J":
					staticSlots[slotId] = cp.GetConstant(kValIndex).(int64)
				case "F":
					staticSlots[slotId] = cp.GetConstant(kValIndex).(float32)
				case "D":
					staticSlots[slotId] = cp.GetConstant(kValIndex).(float64)
				case "Ljava/lang/String;":
					staticSlots[slotId] = JString(cp.GetConstant(kValIndex).(string))
				}
			}
		}
	}
}