Annotation of researchv10dc/man/mana/mint.1, revision 1.1.1.1

1.1       root        1: .TH MINT 1  "02 June 1987" "University of Waterloo"
                      2: .ds ]W "Symbolic Comp. Group
                      3: .SH NAME
                      4: mint \- produce usage report from a maple program
                      5: .SH SYNOPSIS
                      6: .B mint
                      7: [
                      8: .B \-i
                      9: info_level
                     10: ]
                     11: [
                     12: .B \-l
                     13: ]
                     14: [
                     15: .B \-d
                     16: library_database
                     17: ]
                     18: [
                     19: .B \-a
                     20: database_file
                     21: ]
                     22: [
                     23: .B \-q
                     24: ]
                     25: [ file ]
                     26: .SH DESCRIPTION
                     27: \fIMint\fP produces a report about possible errors in a Maple source file
                     28: and also reports about how variables are used in the file.
                     29: If \fIfile\fP is not given, then the standard input file is used to
                     30: read Maple source statements.
                     31: Unlike \fImaple\fP, \fImint\fP is not terminated when it reads a
                     32: quit statement.
                     33: It is terminated when it reaches the end of file.
                     34: When started, \fImint\fP normally produces a mint leaf logo.
                     35: This can be suppressed by the use of the \fB\-q\fP (quiet) option.
                     36: 
                     37: The amount of information to be produced by \fImint\fP is specified by the
                     38: \fIinfo_level\fP argument.
                     39: The values allowed for this argument are:
                     40: .nf
                     41: 
                     42:         0 \- Display no information.
                     43:         1 \- Display only severe errors
                     44:         2 \- Display severe and serious errors
                     45:         3 \- Display warnings as well as severe and serious errors
                     46:         4 \- \kxGive a full report on variable usage as well as
                     47:              \h'|\nxu'displaying errors and warnings
                     48: 
                     49: .fi
                     50: A report for each procedure in the file is displayed
                     51: separately followed by a global report for statements not contained
                     52: within any procedure.
                     53: If the severity of errors found within a procedure is less than
                     54: what \fIinfo_level\fP specifies, then no report is produced for
                     55: that procedure.
                     56: In all cases, the most severe error found in the file will be used
                     57: to set the exit status for \fImint\fP.
                     58: Thus, by using an \fIinfo_level\fP of 0, \fImint\fP can be used to
                     59: determine the severity of errors in a file without actually producing
                     60: any output at all.
                     61: If no value is given for \fIinfo_level\fP on the command line, a default
                     62: value of 2 (severe and serious errors) is used.
                     63: 
                     64: The types of errors and warnings found are classified as severe,
                     65: serious, and warning.  A severe error is an undisputable error.
                     66: A serious error
                     67: is almost certainly an error.  However, persons defining procedures
                     68: for addition to the Maple library may choose to ignore these ``errors''.
                     69: Warnings are possible errors.
                     70: They point to constructs that may be correct in some contexts, but
                     71: probable errors in other contexts.
                     72: The types of errors and warnings produced are:
                     73: .in +0.8i
                     74: .ti -0.8i
                     75: 
                     76: \fBSEVERE\fP
                     77: 
                     78: .ti -0.4i
                     79: Syntax errors
                     80: .br
                     81: A caret symbol will point to the token
                     82: that is being read when the error occurred.
                     83: 
                     84: .ti -0.4i
                     85: Duplicated parameter
                     86: .br
                     87: A name appears more than once in a parameter list for a
                     88: procedure.
                     89: 
                     90: .ti -0.4i
                     91: Duplicated local
                     92: .br
                     93: A name is declared more than once in the list of local
                     94: variables for a procedure.
                     95: 
                     96: .ti -0.4i
                     97: Local variable and parameter conflict
                     98: .br
                     99: A name is used both as a parameter and a local
                    100: variable within a procedure.  In further analysis,
                    101: the name is treated as a parameter.
                    102: 
                    103: .ti -0.4i
                    104: Local variable and system-defined name conflict
                    105: .br
                    106: The name of a local variable is also used by Maple as a
                    107: system-defined name.
                    108: 
                    109: .ti -0.4i
                    110: Parameter and system-defined name conflict
                    111: .br
                    112: The name of a parameter is also used by Maple as a
                    113: system-defined name.
                    114: 
                    115: .ti -0.4i
                    116: Duplicated loop name
                    117: .br
                    118: A loop nested within another loop uses as its loop
                    119: control variable the same name that the outer loop uses.
                    120: 
                    121: .ti -0.4i
                    122: Break or next statement outside of a loop
                    123: .br
                    124: A break or a next statement occurs outside of any loop.
                    125: (Break or next may still be used as names within an
                    126: expression outside of a loop.)
                    127: 
                    128: .ti -0.4i
                    129: RETURN or ERROR function call outside of a procedure
                    130: .br
                    131: A function call to RETURN or ERROR occurs outside of
                    132: a procedure body.  (RETURN or ERROR may still be used
                    133: as names if they are not invoked as functions.)
                    134: 
                    135: .ti -0.4i
                    136: Unreachable code
                    137: .br
                    138: There are statements which follow directly after a goto type
                    139: of statement.  These statements are unreachable and will never
                    140: be executed.  A goto statement is a next statement, a break
                    141: statement, a quit, stop, or done statement, a RETURN() call,
                    142: an ERROR() call.
                    143: An if statement all branches of which end in a goto statement
                    144: is also considered a goto statement.
                    145: 
                    146: .ti -0.8i
                    147: \fBSERIOUS\fP
                    148: 
                    149: .ti -0.4i
                    150: Overly long name
                    151: .br
                    152: A name whose length is too long is used.  The length of
                    153: the name is truncated to the maximum allowed.
                    154: 
                    155: .ti -0.4i
                    156: Unused local variable
                    157: .br
                    158: A local variable is declared for a procedure but never
                    159: used within the procedure body.
                    160: 
                    161: .ti -0.4i
                    162: Local variable assigned a value but not used otherwise
                    163: .br
                    164: A local variable is assigned a value within a procedure but
                    165: is not otherwise used.
                    166: 
                    167: .ti -0.4i
                    168: Local variable never assigned a value but used as a value
                    169: .br
                    170: A local variable was never assigned a value in a procedure but
                    171: within the procedure its value is used in an expression.
                    172: Such an expression would contain a pointer to a non-existent
                    173: local variable if the expression were returned or assigned to
                    174: a global variable.
                    175: 
                    176: .ti -0.4i
                    177: System-defined name is overwritten
                    178: .br
                    179: A name which is treated as a system-defined name by Maple
                    180: is assigned a value.
                    181: The class of system-defined names includes names which are
                    182: special names for the Maple kernel, e.g., true and Digits,
                    183: names of built-in functions, e.g., anames and lprint,
                    184: names of functions which are automatically readlib-defined, e.g.,
                    185: cat or help.
                    186: Also included are names that are special to routines for evalf,
                    187: diff, expand, etc.
                    188: Examples of these are Pi and sinh.
                    189: These special names generally should not be assigned a value in order
                    190: for some library routines to work properly.
                    191: Included in the report is an indication of which parts of Maple use
                    192: the system-defined names.
                    193: 
                    194: .ti -0.4i
                    195: Dubious global name in a procedure
                    196: .br
                    197: A global name is used within a procedure.  A global name is
                    198: a name which is not a parameter, a local name, a system-defined name, or
                    199: a catenated name.
                    200: A quoted name used as an argument to the routines lprint, print, and
                    201: ERROR is probably used just for output and is not considered a name.
                    202: Global names used as procedure
                    203: names in a function call are not considered errors.
                    204: Also excluded are names of files in the Maple library, e.g.,
                    205: `convert/ratpoly`.
                    206: All remaining names are considered as global names.
                    207: By convention, global names used in a package of routines should
                    208: begin with the `_` (underscore) character.
                    209: Those that do not are considered dubious and are reported here.
                    210: 
                    211: .ti -0.4i
                    212: Library file name overwritten
                    213: .br
                    214: The name of a library file, e.g., `convert/ratpoly`, is assigned
                    215: a value.  It is usual for the name of a library file to also be
                    216: the name of a library function.  Hence, the library function
                    217: `convert/ratpoly` is no longer accessible.
                    218: (The \fB\-l\fP (library file) option will downgrade these messages
                    219: from a serious error to a report.)
                    220: 
                    221: .ti -0.4i
                    222: Unused parameter in a procedure
                    223: .br
                    224: A name specified in the parameter list of a procedure is
                    225: never used in the procedure.  This is considered a serious
                    226: error if `args' is  never used in the procedure either.
                    227: If args is used in the procedure, then it's possible that
                    228: the parameter may be accessed through a construct using `arg'
                    229: and this error is downgraded to a warning.
                    230: 
                    231: .ti -0.4i
                    232: Wrong argument count in a procedure call
                    233: .br
                    234: The number of arguments passed in a procedure call doesn't match the
                    235: number of formal arguments in the definition of a procedure of the
                    236: same name recorded in the library database file.
                    237: A library database file (cf. \fBDATABASE FILES\fP) contains information
                    238: about the minimum number of arguments expected for a procedure, the
                    239: maximum number of arguments, whether `nargs' is used in the procedure
                    240: body, and the name of the file in which the procedure is defined.
                    241: If the number of actual arguments passed is either less than the
                    242: minimum arguments expected or more than the maximum number expected
                    243: \fIand\fP `nargs' is not used in the procedure body, then a warning is
                    244: generated.
                    245: This warning is suppressed if one of the arguments passed is `args'.
                    246: It is a common practice for a procedure to take its argument list,
                    247: contained in the expression sequence `args', and pass that on to
                    248: other procedures.
                    249: What appears to \fImint\fP as one argument is in reality a sequence
                    250: of arguments.
                    251: .ti -0.8i
                    252: 
                    253: \fBWARNING\fP
                    254: 
                    255: .ti -0.4i
                    256: Equation used as a statement
                    257: .br
                    258: This may be intentional.  On the other hand, it's common
                    259: for many Fortran and C programmers to mistype '=' for
                    260: the assignment operator which is ':=' in Maple.
                    261: 
                    262: .ti -0.4i
                    263: Unused parameter in a procedure
                    264: .br
                    265: See similar entry under serious errors.
                    266: 
                    267: .ti -0.4i
                    268: Global name used
                    269: .br
                    270: A global name which may or may not start with '_' is used within
                    271: this procedure.
                    272: 
                    273: .ti -0.4i
                    274: Catenated name used
                    275: .br
                    276: A name is formed through the catenation operator.
                    277: 
                    278: .in -0.8i
                    279: \fBOTHER REPORTS\fP
                    280: .sp
                    281: If \fIinfo_level\fP is 4, then a usage report is given for each procedure
                    282: as well as global statements within the file.
                    283: Each usage report shows how parameters, local variables, global variables,
                    284: system-defined names and catenated names are used.
                    285: As well can easily be done, the following information about how a
                    286: variable is used may be provided:
                    287: .nf
                    288: 
                    289:     1.  Used as a value
                    290:     2.  Used as a table or list element
                    291:     3.  Used as a call-by-value parameter
                    292:     4.  Used as a call-by-name parameter (a quoted parameter)
                    293:     5.  Called as a function
                    294:     6.  Assigned a procedure
                    295:     7.  Assigned a list
                    296:     8.  Assigned a set
                    297:     9.  Assigned a range
                    298:     10. Assigned a value as a table or list element
                    299:     11. \kxAssigned a function value
                    300:         \h'|\nxu'(assigned a value to remember as a function value)
                    301: 
                    302: .fi
                    303: 
                    304: In addition, a list of all the error messages generated is given.
                    305: 
                    306: .SH COMMAND OPTIONS
                    307: The \fB\-i\fP (info level) and \fB\-q\fP (quiet) options are explained
                    308: above.
                    309: The \fB\-l\fP (library file) option will suppress the catenated name
                    310: warning and the global name warning if only one of each is used
                    311: outside of any procedure.
                    312: Typically, a Maple library source file will contain one of each for
                    313: use in loading the library file.
                    314: This option will also suppress error messages about library file names
                    315: being overwritten since one of the purposes of a library file is to
                    316: assign a procedure to a library file name.
                    317: Moreover, warnings about the assignment of values to the system-defined
                    318: names Digits and printlevel are suppressed since this often happens
                    319: in a library file.
                    320: 
                    321: .SH INITIALIZATION FILE
                    322: If there is a file named .mintrc in your home directory, \fImint\fP
                    323: will read this file for command line options.
                    324: This file may contain several lines containing command line options or
                    325: arguments as you would type them on a command line.
                    326: Since \fImint\fP reads this file and then scans the actual command line,
                    327: arguments on the actual command line can override arguments in the
                    328: initialization file.
                    329: A good use of the initialization file may be to enter the name of the
                    330: Maple library procedure database file when using the \fB\-d\fP option,
                    331: obviating the need to type this each time \fImint\fP is used.
                    332: 
                    333: .SH PROCEDURE DATABASE FILES
                    334: A procedure database file contains information about the definition of
                    335: procedures which is useful in ensuring that these procedures are
                    336: used correctly.
                    337: Each line in a database file contains the following:
                    338: 
                    339: .nf
                    340:         <name> <min\ args> <max\ args> <nargs\ used> <file\ name>
                    341: .fi
                    342: 
                    343: where <name> is a legal Maple name without any embedded blanks,
                    344: <min\ args> is the minimum number of arguments expected for
                    345: <name>, <max\ args> is the maximum number of arguments, <nargs\ used>
                    346: is 1 if `nargs' is used in the procedure body for <name> and
                    347: 0 otherwise, <file\ name> is the name of the file in which <name>
                    348: is defined.
                    349: The entries on each line are in free format but must be separated
                    350: from one another by at least one space character.
                    351: The values for <min\ args> and <max\ args> should be numbers in
                    352: the range 0 to 999.
                    353: If <max\ args> is 999 for an entry, that denotes that the procedure
                    354: has no upper limit on the number of arguments.
                    355: There may be multiple entries for a particular procedure.
                    356: Later entries supercede earlier ones.
                    357: 
                    358: A procedure database file for the entire Maple library is generated
                    359: or updated periodically.
                    360: This file is
                    361: /usr/maple/data/mint.db and contains close to 1200 entries and
                    362: it takes \fImint\fP about 7 seconds to read this file.
                    363: 
                    364: A private database file can be generated through the use of
                    365: the \fB\-a\fP command line option for \fImint\fP.
                    366: A file name must follow \fB\-a\fP on the command line and is taken
                    367: to be a procedure database file.
                    368: As \fImint\fP scans procedure definitions in the input file, it
                    369: will append procedure database entries into the database file.
                    370: For information gathered automatically by \fImint\fP about a
                    371: procedure, <min\ args> and <max\ args> will both be the number of
                    372: formal arguments used in the procedure definition.
                    373: You can edit the database file to adjust these values.
                    374: Remember that use of `nargs' in a procedure body sets the <nargs seen>
                    375: field to 1 in the database entry and that this will turn off
                    376: argument count checking for that procedure.
                    377: 
                    378: .SH EXAMPLES
                    379: 
                    380: .ft CW
                    381: .nf
                    382: mint -d /usr/maple/data/mint.db -a my.db -i 4  rat_poisson
                    383: mint -d /usr/maple/data/mint.db -d my.db       rat_trap
                    384: mint -i 1 -q                                   warfarin
                    385: .fi
                    386: .ft P
                    387: 
                    388: The first example gives a full report (info_level = 4) for the
                    389: Maple source file rat_poisson.
                    390: It reads the Maple library database file and uses this to check that
                    391: procedures defined in the Maple library are called with the correct
                    392: number of arguments.
                    393: Information about procedures defined in rat_poisson is \fIappended\fP
                    394: to my.db.
                    395: 
                    396: In the second example, both the Maple library database file and
                    397: the private database file my.db are used to check number of arguments
                    398: used in procedure calls in the file rat_trap.
                    399: Entries in my.db supercede entries in the library database file
                    400: if the name of a library procedure has been redefined in my.db.
                    401: 
                    402: In the third example, no argument count checking is done.
                    403: Since the info_level is set to 1, only severe errors are
                    404: reported.
                    405: Since the \fB\-q\fP  (quiet) option is used, the printing
                    406: of the \fImint\fP leaf logo is suppressed in the output.
                    407: 
                    408: .SH FILES USED
                    409: \&.mintrc               \- Mint initialization file
                    410: /usr/maple/data/mint.db \- \kxMaple library procedure database
                    411: \h'|\nxu'(The location of the database may be different for each site)
                    412: .SH SEE ALSO
                    413: maple
                    414: 
                    415: .SH STATUS
                    416: \fIMint\fP will return an exit status of 1, 2, or 3 if the
                    417: worst error it detects is a warning, serious error, or severe
                    418: error, respectively.  An exit status of 0 is returned if no
                    419: errors or warnings are found.
                    420: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.