| TRN0001 |
Syntax error - {details} |
The source contains tokens Triton RPG cannot interpret. |
Fix the syntax at the indicated line/column. Check for mismatched parentheses, missing semicolons (free-format), or incorrect column placement (fixed-format). |
| TRN0002 |
Compiler directive '{directive}' is not supported. |
A /-directive that is not /COPY, /INCLUDE, or a conditional-compilation directive. Those families are fully supported; this code is only for genuinely unrecognized directives. |
Remove or correct the directive. |
| TRN0004 |
Maximum /COPY nesting depth ({n}) exceeded - possible circular inclusion |
A /COPY or /INCLUDE chain nests deeper than the limit (matching IBM i COPYNEST). |
Reduce the nesting depth, or look for a circular include the depth check caught first. |
| TRN0005 |
(conditional-compilation errors only - see rows below) |
(see below) |
(see below) |
| TRN0008 |
Copy member not found: '{path}' |
The member named by /COPY or /INCLUDE could not be located. |
Check the path or member name, and ensure it exists in the source directory, the working directory, or an --include-path directory. |
| TRN0008 |
Cannot read copy member '{path}': {reason} |
The member resolved but could not be read - typically a permissions problem. |
Fix the file's permissions or ownership. |
| TRN0005 |
Unclosed /IF block - missing /ENDIF ({n} unclosed block(s)) |
The source ends with one or more /IF blocks still open. |
Add the missing /ENDIF. |
| TRN0005 |
/ELSEIF without matching /IF · /ELSE without matching /IF · /ENDIF without matching /IF |
A conditional-compilation directive appears with no open /IF. |
Add the missing /IF, or delete the stray directive. |
| TRN0005 |
Invalid /IF condition: '{text}'. Expected DEFINED(name) or NOT DEFINED(name). |
The condition on /IF or /ELSEIF is not one of the two supported forms. |
Write the condition as DEFINED(SYMBOL) or NOT DEFINED(SYMBOL). |
| TRN0006 |
Circular /COPY detected: '{file}' is already in the include chain |
A /COPY names a member already on the include stack. |
Break the cycle by restructuring the copy members. |
| TRN0007 |
Cannot convert free-format type '{type}' on field '{name}' to fixed-format for /COPY inclusion |
A free-format copy member included into fixed-format source declares a type with no fixed-format equivalent. Triton RPG rejects it rather than silently substituting character. |
Give the field a type the fixed-format target supports, or keep the copy member in the same format as the including source. |
| TRN0010 |
Cannot convert free-format statement '{statement}' to fixed-format for /COPY inclusion |
A free-format copy member included into fixed-format source contains a statement Triton RPG does not render as a fixed-format spec. DCL-S, DCL-C, DCL-DS, DCL-PR, DCL-PI, DCL-PROC, DCL-F, CTL-OPT, EXEC SQL, and calculation statements are rendered; a statement outside that set is rejected. See also TRN0011 for constructs that are genuinely free-format-only. |
Restate the member using supported declaration forms, or keep it in the same format as the including source. |
| TRN0011 |
Free-format statement '{statement}' has no fixed-format equivalent |
A free-format copy member included into fixed-format source contains a construct for which no fixed-format spec exists. Examples: ON-EXIT, FOR-EACH, SND-MSG, DATA-INTO, DATA-GEN, WHEN-IS, WHEN-IN, DCL-ENUM. Unlike TRN0010, this is permanent: there is no fixed-format opcode for these constructs. |
Rewrite the /COPY member to avoid the free-format-only constructs, or convert the including source to free-format (**FREE). |
| TRN0012 |
/SET {keyword} is not a supported default attribute (expected CCSID, DATFMT, or TIMFMT). · /SET CCSID({class}:…) names no CCSID class - expected *CHAR, *GRAPH, or *UCS2. · /SET CCSID(class:…) requires a CCSID value. |
A /SET directive naming something that is not a default attribute at all. /SET takes exactly CCSID, DATFMT and TIMFMT, and the CCSID form must name one of the three classes (*CHAR, *GRAPH, *UCS2) together with a value. All three classes and both format directives are honored - each keeps its own /SET//RESTORE stack and changes the default of every following declaration that omits the keyword. The diagnostic fires only for a keyword, CCSID class, or value the directive cannot mean. |
Correct the keyword, name one of the three CCSID classes, or supply the missing CCSID value. |
| TRN0013 |
End of free-format statement is not blank - **FREE source allows only one statement per line; text after a statement's ';' must be blank or a // comment. |
A fully-free (**FREE) source line places a second statement after the first statement's closing ;. IBM diagnoses this as RNF5508 at severity 30. A ; inside a character literal is not a terminator, and a trailing // comment after the ; is legal. |
Put each statement on its own line. |
| TRN0014 |
Unrecognized control option '{keyword}'; it is ignored |
A CTL-OPT / fixed-format H-spec names a keyword the compiler does not recognize - a typo, or a keyword newer than this compiler. It is accepted and ignored, but warned so it never changes the compile-time contract silently. (Warning, not an error, so a program using a newer keyword still compiles.) |
Correct the spelling, or remove the keyword if it is not needed. The warning is the signal that it has no effect. |
| TRN0015 |
'{keyword}' is not supported by this compiler |
A recognized, semantics-bearing keyword or option the compiler does not support. The compile is rejected because ignoring the keyword's effect would silently change program behavior. CCSID, CCSIDCVT, and CHARCOUNT (including *NATURAL) are accepted - the module-wide CCSID default is honored, CCSIDCVT(*EXCP) is a no-op on the JVM (all character data is Unicode, so no conversion ever loses data), CHARCOUNT(*NATURAL) is accepted because for the supported SBCS code pages the two counting modes produce identical results, THREAD is accepted - *SERIALIZE serializes calls into the module, and *CONCURRENT runs under the per-activation-group isolation; QUALIFIED on DCL-F is accepted - file.format notation is resolved in I/O operations; INZ(*LIKEDS) is accepted - subfield initialization values are copied from the template DS; and SRTSEQ/ALTSEQ are accepted - ALTSEQ(*EXT) with SRTSEQ(*LANGIDSHR) or SRTSEQ(*LANGIDUNQ) applies the ENU sort weight table to all character comparisons. |
Remove the keyword, or set the equivalent attribute explicitly where it is supported. |
| TRN0016 |
{file} is not valid UTF-8 (invalid byte 0x{nn} at offset {n}). If the file is EBCDIC, compile with --ebcdic (and --codepage if it is not IBM037); otherwise convert it to UTF-8. |
The source file is read as UTF-8 by default but contains a byte sequence that is not valid UTF-8 - most often a legacy Latin-1 / Windows-1252 file with an accented character (é, ñ, £, …) in a comment or literal. The offending byte and its position are named. The file is not silently re-interpreted (that would corrupt the accented characters), so it is rejected with this located error. |
Convert the file to UTF-8 (e.g. iconv -f ISO-8859-1 -t UTF-8), or if it is an EBCDIC source member compile it with --ebcdic and, when its codepage is not IBM037, --codepage. |
| TRN0017 |
Control option '{keyword}' is specified more than once; this occurrence is ignored and the first value is kept |
The same control-option keyword is written twice - within one CTL-OPT statement, across several CTL-OPT statements, or across several fixed-format H-spec lines. The first value wins and every later one is discarded (IBM reports RNF1302 at severity 20). The warning is reported against the discarded occurrence, so the line it names is the one that had no effect. Compilation continues. |
Delete the repeated occurrence, or move the value you meant to keep to the first one. |
| TRN0018 |
The parameter for the /CHARCOUNT directive must be NATURAL or STDCHARSIZE, not '{word}' / NATURAL character counting is selected but CHARCOUNTTYPES names no data type |
The character-counting mode is selected incorrectly. Two cases share the code. Bad directive operand: /CHARCOUNT takes NATURAL or STDCHARSIZE written without a leading asterisk - the asterisk belongs to the BIF argument (%SUBST(s : 2 : 3 : *NATURAL)), not to the directive. IBM reports RNF0766 at severity 20. No data types listed: NATURAL mode is selected - by /CHARCOUNT NATURAL or by CTL-OPT CHARCOUNT(*NATURAL) - while CHARCOUNTTYPES() names no type, so the mode would apply to nothing. Mirrors IBM i RNF1027, also severity 20. |
Write NATURAL or STDCHARSIZE with no asterisk on the directive, and list at least one type, for example CTL-OPT CHARCOUNTTYPES(*UTF8);. |