From b69a4c8aa426f025a86257092e5837db442d0880 Mon Sep 17 00:00:00 2001 From: Mitchel Humpherys <mitchelh@codeaurora.org> Date: Mon, 7 Apr 2014 16:03:22 -0700 Subject: [PATCH] lrdp-v2: register: handle None values more gracefully If a Register is created with a None value, it currently blows up. Fix this. Change-Id: Ic652620e367c64e0a8444ef4b3e5ea7d77edcd82 --- linux-ramdump-parser-v2/register.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/linux-ramdump-parser-v2/register.py b/linux-ramdump-parser-v2/register.py index 5acd9f9..33fcbd4 100644 --- a/linux-ramdump-parser-v2/register.py +++ b/linux-ramdump-parser-v2/register.py @@ -1,4 +1,4 @@ -# Copyright (c) 2013, The Linux Foundation. All rights reserved. +# Copyright (c) 2013-2014, The Linux Foundation. All rights reserved. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 and @@ -47,6 +47,16 @@ class Register(object): >>> hex(abc.value) '0x5' + We also handle `None' values: + + >>> r = Register(None, h=(3,0)) + >>> r + value: None + >>> r.h + >>> r.h = 3 + >>> r + value: 0x3 {h[3:0]=>0x3} + """ def __init__(self, value=0, **kwargs): @@ -80,12 +90,16 @@ class Register(object): def __getattr__(self, name): if name not in self._regs: raise AttributeError + if self.value is None: + return None msb, lsb = self._regs[name] return bitops.bvalsel(msb, lsb, self.value) def __setattr__(self, name, newvalue): if name not in self._regs: raise AttributeError + if self.value is None: + object.__setattr__(self, 'value', 0) msb, lsb = self._regs[name] val = self.value & (~bitops.bm(msb, lsb)) val |= newvalue << lsb @@ -94,6 +108,8 @@ class Register(object): object.__setattr__(self, 'value', val) def __repr__(self): + if self.value is None: + return 'value: None' ret = [] for r in sorted(self._regs, key=self._regs.get, reverse=True): msb, lsb = self._regs[r] -- GitLab