Changes: Check for Global error (used to check !1) Check for Object access name error Check that the name is not a global name
#IFDEF UI.EXISTS #ELSE USE UI #ENDIF #IF ( (!Zl & 1)=0) #IFSAME FN$!1 __F__ #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is an internal function name #ENDIF #ENDIF #IFSAME RETURNS !2 !3 !4 !5 !6 !7 !8 !9 #ELSE #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING KEYWORD RETURNS ON FUNCTION DECLARATION #ENDIF #IFSAME !2 GLOBAL #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION GLOBAL FUNCTIONS CANNOT BE REGISTERED #ELSE // Check if non-mangled symbol is already defined. // If it is, it might be an object name...error // also make sure new function is not an overload..error #IFDEF GET_!1 #IF (GET_!1<0) #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as a global function #ENDIF #IF (GET_!1>$40000000) #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as an object #ENDIF #IFDEF MANGLE_NAMES #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Non-Overloaded #ENDIF #ENDIF // Validate the argument list. CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9 // We will get more chance of matching fixups (and creating fewer errors) if we just register the function anyway. // The parameter list could generate the right name and if it does later fixups will resolve correctly without error. // It's possible that the list changes the mangled name. If it does, when the function is fixed, fixup errors may // appear. They can be fixed then. MESSAGE$ADDRESS GET_!1 // Generate the constant for message identifier. Message$Address checks if it already exists. #ELSE // Verify that the argument list is syntactically correct. CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9 // Create the constant identifier for the message if it's not already defined. #IFNDEF MANGLE_NAMES MESSAGE$ADDRESS GET_!1 #ELSE #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9 // we don't support Byref with overloading #IFSAME BYREF !2 !3 !4 !5 !6 !7 !8 !9 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "BYREF not allowed in overloaded methods" #ENDIF #MARG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9 // Genearte the mangled symbol. MESSAGE$ADDRESS !? // Generate the message identifer. // if this is the first time we've defined this, create overloaded symbol #IFNDEF GET_!1_OVERLOADED #REPLACE GET_!1_OVERLOADED |CI1 #ENDIF #ELSE // We are defining a non-overload function. Make sure we have not already // defined it as overloaded #IFDEF GET_!1_OVERLOADED #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as an overloaded function #ELSE MESSAGE$ADDRESS GET_!1 #ENDIF #ENDIF #ENDIF #ENDIF // Register the function here. #IFNDEF MANGLE_NAMES #IFSAME !2 FOR #FREG GET_!1 !4 !5 !6 !7 !8 !9 #ELSE #FREG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9 #ENDIF #ELSE #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9 #IFSAME !2 FOR #FREG !? !4 !5 !6 !7 !8 !9 #ELSE #FREG !? !2 !3 !4 !5 !6 !7 !8 !9 #ENDIF #ELSE #IFSAME !2 FOR #FREG GET_!1 !4 !5 !6 !7 !8 !9 #ELSE #FREG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9 #ENDIF #ENDIF #ENDIF #ENDIF // Not a global