def extract_qstrs(source_files): def read_qstrs(f): with open(f) as f: vals = set() objs = set() for line in f: while line: m = re.search( r"MP_OBJ_NEW_QSTR\((MP_QSTR_[A-Za-z0-9_]*)\)", line) if m: objs.add(m.group(1)) else: m = re.search(r"MP_QSTR_[A-Za-z0-9_]*", line) if m: vals.add(m.group()) if m: s = m.span() line = line[:s[0]] + line[s[1]:] else: line = "" return vals, objs static_qstrs = [ "MP_QSTR_" + qstrutil.qstr_escape(q) for q in qstrutil.static_qstr_list ] qstr_vals = set() qstr_objs = set() for f in source_files: vals, objs = read_qstrs(f) qstr_vals.update(vals) qstr_objs.update(objs) qstr_vals.difference_update(static_qstrs) return static_qstrs, qstr_vals, qstr_objs
def read_qstr(f): ln = read_uint(f) data = str_cons(f.read(ln), 'utf8') qstr_esc = qstrutil.qstr_escape(data) global_qstrs.append(qstr_type(data, qstr_esc, 'MP_QSTR_' + qstr_esc)) return len(global_qstrs) - 1
def __init__(self, str): self.str = str self.qstr_esc = qstrutil.qstr_escape(self.str) self.qstr_id = 'MP_QSTR_' + self.qstr_esc