Search code examples
typesinstallscript

InstallScript Data-Type Casing


Bottom Line

I have inherited a sizeable InstallShield InstallScript installer, and in working through its InstallScript (*.rul) source files, I notice that variable and parameter data types' casing varies - for what appear to be the same data types. For example, I see variables and parameters of type number and NUMBER, string and STRING etcetera.

Changing between uppercase and lowercase in my experiments has not seemed to make a difference; the installer project compiles either way; but I am not sure whether there may be more to the story.

Does InstallScript data-type casing matter? If it does, when and how does it matter?

Further Context

Coming from .NET, C#, and C++/CLI, I understand that long and Int64 are comparable in C#, whereas long and Int32 are comparable in C++/CLI; but the latter in each pair is different even if only to the extent that it necessitates a using directive for the System namespace. I would like to similarly grok types in InstallScript.


Solution

  • The answers are sometimes and it depends.

    The InstallScript Language Reference's Data Types and Predefined Structures section outlines the rules for data-type casing and indicates "that some data types can be entered in either lowercase or uppercase letters".

    According to the Language Reference, over 2/3 (13 of 18) of the InstallScript data types are case-insensitive to the extent that they can be uppercase or lowercase.

    Interestingly these types cannot be mixed-case (i.e. a combination of uppercase and lowercase). For example, String (versus STRING or string) yields the following compile-time error:

    Description                                     Error Code
    ----------------------------------------        ----------
    'String': expected typedef (struct) name        C8017
    

    Also according to the Language Reference, here are the case-sensitive (just under 1/3 (5 of 18)) data types that can only be uppercase:

    • BOOL
    • HWND
    • LIST
    • LPSTR
    • LPWSTR

    Entering these data types in lowercase yields compile-time errors like the following:

    Description                                     Error Code
    ----------------------------------------        ----------
    'bool': expected typedef (struct) name          C8017
    

    Beyond this, whether to use uppercase or lowercase where permitted is a matter of preference.