Class VirtualSpecification


public final class VirtualSpecification extends Declaration

Virtual Quantities.

Simula Standard: 5.5.3 Virtual quantities

   virtual-part  =  VIRTUAL  :  virtual-spec  ;  {  virtual-spec  ;  }
   
   virtual-spec  =  virtual-specifier  identifier-list
                 |  PROCEDURE  procedure-identifier  procedure-specification
                 
     procedure-specification =  IS  procedure-declaration
       
  	virtual-specifier = LABEL | SWITCH |  [ type ] PROCEDURE
  
   	identifier-list  =  identifier  { , identifier }

Link to GitHub: Source File.

Author:
SIMULA Standards Group, Øystein Myhre Andersen
  • Field Details

    • kind

      public int kind
      Virtual kind.
    • prefixLevel

      public int prefixLevel
      The prefix level of the class with this virtual specification.
    • procedureSpec

      public ProcedureSpecification procedureSpec
      The procedure specification if present.
    • hasDefaultMatch

      boolean hasDefaultMatch

      Indicates if this virtual has a default match.

      Set during doChecking.

  • Constructor Details

    • VirtualSpecification

      VirtualSpecification(String identifier, Type type, int kind, int prefixLevel, ProcedureSpecification procedureSpec)
      VirtualSpecification.
      Parameters:
      identifier - virtual identifier
      type - the virtual's type
      kind - the vitual Kind
      prefixLevel - the prefix level of the class with this virtual specification
      procedureSpec - the ProcedureSpecification or null if not present
    • VirtualSpecification

      private VirtualSpecification()
      Default constructor used by Attribute File I/O
  • Method Details

    • expectVirtualPart

      static void expectVirtualPart(ClassDeclaration cls)

      Parse a virtual-part and put it into the given class.

      Syntax:
      
           virtual-part = VIRTUAL: virtual-spec ; { virtual-spec ; }
              virtual-spec
                  = virtual-specifier identifier-list
                  | PROCEDURE procedure-identifier  procedure-specification
                  
                     virtual-Specifier = [ type ] PROCEDURE | LABEL | SWITCH
                     
                     identifier-list = identifier { , identifier }
                     
                     procedure-specification = IS procedure-declaration
      

      Precondition: VIRTUAL is already read.

      Parameters:
      cls - the ClassDeclaration
    • expectIdentifierList

      private static void expectIdentifierList(ClassDeclaration cls, Type type, int kind)

      Parse a virtual identifier list.

      Syntax:
      
             identifier-list = identifier { , identifier
      
      Parameters:
      cls - the ClassDeclaration
      type - the specifiers type
      kind - the specifiers kind
    • doChecking

      public void doChecking()
      Description copied from class: SyntaxClass

      Perform semantic checking.

      This must be redefined in every subclass.

      Overrides:
      doChecking in class SyntaxClass
    • getVirtualIdentifier

      public String getVirtualIdentifier()
      Returns the virtual identifier used i Java code.
      Returns:
      the virtual identifier used i Java code
    • getSimpleVirtualIdentifier

      public String getSimpleVirtualIdentifier()
      Returns the virtual identifier used in JVM code.
      Returns:
      the virtual identifier used in JVM code
    • getVirtualSpecification

      public static VirtualSpecification getVirtualSpecification(Declaration decl)
      Get virtual specification.
      Parameters:
      decl - the declaration to search for
      Returns:
      a VirtualSpecification or null
    • doJavaCoding

      public void doJavaCoding()
      Description copied from class: SyntaxClass
      Output Java code.
      Overrides:
      doJavaCoding in class SyntaxClass
    • buildMethod

      public void buildMethod(ClassBuilder classBuilder)
      Build the default virtual match method RTS_LABEL or RTS_PRCQNT.
      Parameters:
      classBuilder - the classBuilder to use.
    • buildCallMethod

      public void buildCallMethod(ClassDesc owner, CodeBuilder codeBuilder)
      Build call virtual method.
      Parameters:
      owner - the class owning the virtual.
      codeBuilder - the codeBuilder to use.
    • printTree

      public void printTree(int indent, Object head)
      Description copied from class: SyntaxClass
      Utility print syntax tree method.
      Overrides:
      printTree in class SyntaxClass
      Parameters:
      indent - number of spaces leading the lines
      head - the head of the tree.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • writeObject

      public void writeObject(AttributeOutputStream oupt) throws IOException
      Description copied from class: SyntaxClass
      Write a SyntaxClass object to a AttributeOutputStream.
      Overrides:
      writeObject in class SyntaxClass
      Parameters:
      oupt - the AttributeOutputStream to write to.
      Throws:
      IOException - if something went wrong.
    • readObject

      public static SyntaxClass readObject(AttributeInputStream inpt) throws IOException
      Read and return an object.
      Parameters:
      inpt - the AttributeInputStream to read from
      Returns:
      the object read from the stream.
      Throws:
      IOException - if something went wrong.