code: def _common_type_names(csource):
      # Look in the source for what looks like usages of types from the
      # list of common types.  A "usage" is approximated here as the
      # appearance of the word, minus a "definition" of the type, which
      # is the last word in a "typedef" statement.  Approximative only
      # but should be fine for all the common types.
      look_for_words = set(COMMON_TYPES)
      look_for_words.add(";")
      look_for_words.add(",")
      look_for_words.add("(")
      look_for_words.add(")")
      look_for_words.add("typedef")
      words_used = set()
      is_typedef = False
      paren = 0
      previous_word = ""
      for word in _r_words.findall(csource):
          if word in look_for_words:
              if word == ";":
                  if is_typedef:
                      words_used.discard(previous_word)
                      look_for_words.discard(previous_word)
                      is_typedef = False
              elif word == "typedef":
                  is_typedef = True
                  paren = 0
              elif word == "(":
                  paren += 1
              elif word == ")":
                  paren -= 1
              elif word == ",":
                  if is_typedef and paren == 0:
                      words_used.discard(previous_word)
                      look_for_words.discard(previous_word)
              else:  # word in COMMON_TYPES
                  words_used.add(word)
          previous_word = word
      return words_used
  
imports: from .None import model
  from .commontypes import COMMON_TYPES, resolve_common_type
  from .error import FFIError, CDefError
  import weakref, re, sys
label_desc: Use image node_id 10 for calling a global function with example usage: _common_type_names(csource) and returns: words_used