 # Utility functions for inspecting the MSON AST tree
+
+
+# Listing of all primitive types as defined in MSON AST spec.
+primitiveTypes = ['boolean', 'string', 'number']
 
 
 # Turns top-level *Named Type* into an *Element* carrying a *Value Member*.

  else
    filter = (val) -> true
  (elementNode.content.valueDefinition?.values or []).filter filter


# Takes *Element* node and lists its attributes, such as `required`, `fixed`, etc.

  listNestedElements arrayElementNode, ['value']


# Convenience function.
hasVariableValues = (elementNode) ->
  !!listVariableValues(elementNode).length


# Convenience function.
haveVariableValues = (elementNodes) ->
  for elementNode in elementNodes
    if hasVariableValues elementNode
      return true
  false


# Takes type node and finds out whether it has more than one value
# in value definition.
hasMultipleValues = (elementNode) ->
