docstr: >>> p = Program()
  >>> bool(p)
  False
  >>> bc = array.array("B", [0])
  >>> p.fromBytecode(bc)
  >>> bool(p)
  True
  >>> p.bytecode.pop()
  0
  >>> bool(p)
  False
  
  >>> p = Program()
  >>> asm = ['SVTCA[0]']
  >>> p.fromAssembly(asm)
  >>> bool(p)
  True
  >>> p.assembly.pop()
  'SVTCA[0]'
  >>> bool(p)
  False
docstr_tok: [">",">",">","p","=","Program","(",")",">",">",">","bool","(","p",")","False",">",">",">","bc","=","array.array","(","``","B","''",",","[","0","]",")",">",">",">","p.fromBytecode","(","bc",")",">",">",">","bool","(","p",")","True",">",">",">","p.bytecode.pop","(",")","0",">",">",">","bool","(","p",")","False",">",">",">","p","=","Program","(",")",">",">",">","asm","=","[","'SVTCA","[","0","]","'","]",">",">",">","p.fromAssembly","(","asm",")",">",">",">","bool","(","p",")","True",">",">",">","p.assembly.pop","(",")","'SVTCA","[","0","]","'",">",">",">","bool","(","p",")","False"]
code: def __bool__(self) -> bool:
      """
      >>> p = Program()
      >>> bool(p)
      False
      >>> bc = array.array("B", [0])
      >>> p.fromBytecode(bc)
      >>> bool(p)
      True
      >>> p.bytecode.pop()
      0
      >>> bool(p)
      False
  
      >>> p = Program()
      >>> asm = ['SVTCA[0]']
      >>> p.fromAssembly(asm)
      >>> bool(p)
      True
      >>> p.assembly.pop()
      'SVTCA[0]'
      >>> bool(p)
      False
      """
      return (hasattr(self, "assembly") and len(self.assembly) > 0) or (
          hasattr(self, "bytecode") and len(self.bytecode) > 0
      )
  
imports: from __future__ import annotations
  from fontTools.misc.textTools import num2binary, binary2num, readHex, strjoin
  import array
  from io import StringIO
  from typing import List
  import re
  import logging
label_desc: Use image node_id 10 for calling the Program obj's underlying member method code with example usage: obj.__bool__() and returns: unknown