code: public synchronized void putSymbol( String strName, Class type, Object value )
    {
      if( value != null )
      {
        Class typeValue = value.getClass();
        if( !type.isAssignableFrom( typeValue ) && !typeValue.isAssignableFrom( type ) )
        {
          throw new IllegalArgumentException( type.getName() + " is not compatible with " + typeValue.getName() );
        }
      }
  
      Symbol root = new Symbol( strName,
                                TypeSystem.get( type ),
                                value );
      getThreadLocalSymbolTable().putSymbol( root );
    }
docs: ## TODO MD: this method needs to take an IType instead of a Class