Macro: ARRAY_PROPERTY_NAME_HELPER2

Module location: FMAC line 12806 (view source)

  // Check property for proper placement
  // 1. Must be in class or object
  // 2. Cannot be in a child object defined by a class
  // 3. If in class, must be in procedure (constructor)
  // 4. If in object, must not be in procedure.

  #IF ((!Zl & 1) = 0)
    #IF (!b & 3 ) // Within class or object? It should be
      #IF ((!b & 3)=3 ) // but not both....Error
        #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Property cannot be defined in an object within a class
      #ELSE
        #IF (!b & 2)        // in-class: Must be within a method (constructor)
          #IF ( (!b & 4)=0) // in-class and not in method...bad
            #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Class Property must be defined within a constructor procedure
          #ENDIF
        #ELSE // in-object: Cannot be in method
          #IF (!b & 4)  // if within object and within method...an error
            #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Object Property cannot be in a method
          #ENDIF
        #ENDIF
      #ENDIF
    #ELSE
      #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Property can only be defined within a class or object
    #ENDIF
  #ENDIF

  #IF (!b & 1 ) // if within object
    !A [] CLONE$CLASS     // Create a new class
  #ENDIF

  #IF ( (!Zl & 1)=0)
    #IFSAME FN$!2  __F__
      #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION !2 is an internal function name
    #ENDIF
  #ENDIF

  // Check for GET_ name conflicts as follows:
  //  1. If defined as an overloaded message - error
  //  2. If defined as object access - error
  //  3. If defined as global method - error

  #IFDEF GET_!2_OVERLOADED
    #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION This GET Method Was Previously Defined As Overloaded
  #ELSE
    #IFDEF GET_!2
      #IF (GET_!2>$40000000)
        #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION GET !2 is already defined as an object name
      #ELSE
        #IF (GET_!2<0)
          #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION GET !2 is already defined as a global function
        #ENDIF // note else condition...defined as proeprty or class function...this is ok
      #ENDIF
    #ELSE
      MESSAGE$ADDRESS GET_!2
    #ENDIF
  #ENDIF

  #DPUSH GET_!2       // Push the get property id

  #FREG GET_!2 RETURNS !1 |GB[] //Make it array type by appending [], the number of dimensions are not used here

  // Make sure Set message not defined as overloaded or global
  #IFDEF SET_!2_OVERLOADED
    #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION This SET Method Was Previously Defined As Overloaded
  #ELSE
    #IFDEF SET_!2
      #IF (SET_!2<0)
        #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION SET !2 is already defined as a global message
      #ENDIF
    #ELSE
       MESSAGE$ADDRESS SET_!2
    #ENDIF
  #ENDIF

  #DPUSH SET_!2       // Push the set property id
  #PREG SET_!2 !1 |GB[] //Make it array type by appending [], the number of dimensions are not used here