imported>PhilmASTErpLus |
imported>Icon315 |
Line 1: |
Line 1: |
− | {{TOCright}}
| + | Is this like were things like <font color="red">Script parsing error (X.ash, line Y)</font> are listed?--[[User:Icon315|Icon315]] 22:33, 14 April 2010 (UTC) |
− | Errors happen. When they do, it helps to have some idea of what what wrong.
| |
− | | |
− | ===Abort===
| |
− | | |
− | Whenever a script runs the [[abort|abort()]] function, this error is generated.
| |
− | | |
− | {{CodeSample|
| |
− | description=The zero-parameter form:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | abort();
| |
− | </syntaxhighlight>}}
| |
− | will stop the execution and print: <span style="color:red">KoLmafia declares world peace.</span> Note that this message may also appear as a result of pressing Esc in the Main Interface or hitting "stop now" in the Adventure tab.
| |
− | | |
− | {{CodeSample|
| |
− | description=The one-parameter form:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | abort("Aborting script...");
| |
− | </syntaxhighlight>}}
| |
− | will stop the execution and print: <span style="color:red">Aborting script...</span>
| |
− | | |
− | ===Cannot initialize parameter [parameter]====
| |
− | | |
− | This error is created when an assignment is attempted inside a function declaration.
| |
− | The following code results in an error.
| |
− | | |
− | {{CodeSample|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | /* test.ash */
| |
− | | |
− | void my_function( string myvar = "value" )
| |
− | {
| |
− | /* Do something */
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | | |
− | will halt the script and print: <span style="color: red;">Cannot initialize parameter myvar (test.ash, line X)</span>
| |
− | | |
− | ===Cannot return [datatype] from [datatype] function===
| |
− | | |
− | This indicates that the return value does not match the function's type.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int stuff(){
| |
− | return "4";
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Cannot return string value from int function (test.ash, line 2)</span>
| |
− | | |
− | {{CodeSample|
| |
− | description=Similarly, for void functions:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | void stuff(){
| |
− | return 4;
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Cannot return a value from a void function (test.ash, line 2)</span>
| |
− | | |
− | ===Encountered '[break|continue]' outside loop===
| |
− | | |
− | This indicates that the control structure in question was not in a loop.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | continue;
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Encountered 'continue' outside of loop (test.ash, line 1)</span>
| |
− | | |
− | ===Expected===
| |
− | | |
− | This generally indicates a syntax problem (missing ending semi-colon, unmatched braces, unmatched parenthesis etc...).
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int a = 1
| |
− | print(a);
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Expected ;, found print (test.ash, line 2)</span>
| |
− | | |
− | ===Function defined multiple times===
| |
− | | |
− | This indicates that the function in question has already been defined.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int abs(int a){
| |
− | return a*((a>0).to_int()*2 - 1);
| |
− | }
| |
− | int abs(int a){
| |
− | if(a<0) a = -a;
| |
− | return a;
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Function <nowiki>'abs( int )'</nowiki> defined multiple times (test.ash, line 4)</span>
| |
− | | |
− | ==="if" requires a boolean conditional expression ===
| |
− | | |
− | This indicates that the condition inside an if statement is not a boolean.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | if(42) {
| |
− | print("Don't panic.");
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">"if" requires a boolean conditional expression (test.ash, line 1)</span>
| |
− | | |
− | ===Index type is not a primitive type===
| |
− | | |
− | This indicates that the map's index is not a standard datatype (float, int, string, etc.).
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | record alpha{
| |
− | int a;
| |
− | int b;
| |
− | };
| |
− | int[alpha] map;
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Index type 'alpha' is not a primitive type (test.ash, line 5)</span>
| |
− | | |
− | ===Invalid field name===
| |
− | | |
− | This indicates that the record does not contain the field in question.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | record my_record {
| |
− | string a;
| |
− | string b;
| |
− | };
| |
− | | |
− | my_record [int] my_map;
| |
− | my_map[1].c = "hello";
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Invalid field name 'c' (test.ash, line 7)</span>
| |
− | | |
− | Note that this error may also be encountered when neglecting to name a field.
| |
− | {{CodeSample|
| |
− | description= For instance:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | record my_record {
| |
− | string;
| |
− | };
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Invalid field name ';' (test.ash, line 2)</span>
| |
− | | |
− | ===Invalid type name===
| |
− | | |
− | This indicates that the specified type is not recognized by Mafia.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int[fruit] map;
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Invalid type name 'fruit' (test.ash, line 1)</span>
| |
− | | |
− | ===Main method must appear at top level===
| |
− | | |
− | This indicates that the script's main method is inside another method, for some reason. This is usually caused by a missing brace.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | void stuff() {
| |
− | // stuff happens here
| |
− | | |
− | void main() {
| |
− | stuff();
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">main method must appear at top level (test.ash, line 6)</span>
| |
− | | |
− | ===Missing return value===
| |
− | | |
− | The last line of a user-defined function has to be "return <value>;" (although the [[Control_Structures#return|return]] command can be used before too).
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int my_function( int a, int b ) {
| |
− | if ( a > b ) return a ;
| |
− | else return b ;
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Missing return value (test.ash, line 4)</span>
| |
− | | |
− | | |
− | ===No closing found===
| |
− | | |
− | This can be caused by forgetting to put a '''"''' or a ''']''' at the end of an argument
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | buy(1000 , $item[disco ball, 225);
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">No closing ] found (testing.ash, line 1)</span>
| |
− | | |
− | ===Record expected===
| |
− | | |
− | This indicates that an unrecognized record was found. This often appears when you forget to append "()" to a function name.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | print(4.to_string);
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Record expected (test.ash, line 2)</span>
| |
− | | |
− | ===Record name is already defined===
| |
− | | |
− | This indicates that the record name has already been defined, and so cannot be reused. The solution is to change the record name.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | record str {
| |
− | string a;
| |
− | string b;
| |
− | };
| |
− | record str {
| |
− | int a;
| |
− | int b;
| |
− | };
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Record name 'str' is already defined (test.ash, line 5)</span>
| |
− | | |
− | ===Return needs [datatype] value===
| |
− | | |
− | This indicates that the return value is void when the function is not.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int stuff() {
| |
− | return;
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Return needs int value (test.ash, line 2)</span>
| |
− | | |
− | ===Reserved word cannot be a [function|record|variable] name===
| |
− | | |
− | This indicates that the desired name has been [[Reserved Words|reserved]], and so cannot be used. The solution is to use a different name.
| |
− | | |
− | {{CodeSample|
| |
− | description=An invalid name:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int float(float a) {
| |
− | return round(a);
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Reserved word 'float' cannot be used as a function name (test.ash, line 1)</span>
| |
− | | |
− | An interesting point to note is that ASH functions take precedent over identically named custom functions rather than throw an exception.
| |
− | | |
− | {{CodeSample|
| |
− | description=An invalid record name:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | record string {
| |
− | string a;
| |
− | string b;
| |
− | };
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Reserved word 'string' cannot be a record name (test.ash, line 1)</span>
| |
− | | |
− | {{CodeSample|
| |
− | description=An invalid variable name:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | string item = "bottle of gin";
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Reserved word 'item' cannot be a variable name (test.ash, line 1)</span>
| |
− | | |
− | ===Script parsing error===
| |
− | | |
− | This generally indicates a syntax problem, as in having an excess amount of braces or a variable/function/record name that starts with an invalid character.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | put_shop(0 ,0 ,$item[wolf mask]);
| |
− | put_shop(0 ,0 ,$item[rave whistle]);
| |
− | put_shop(0 ,0 ,$item[giant needle]);
| |
− | cli_execute ("undercut");
| |
− | }
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Script parsing error (test.ash, line 5)</span>
| |
− | | |
− | ===Variable is already defined===
| |
− | | |
− | This indicates that the same variable has been declared twice.
| |
− | | |
− | {{CodeSample|
| |
− | description=Example:|
| |
− | code=
| |
− | <syntaxhighlight>
| |
− | int Drops ;
| |
− | int Meat ;
| |
− | int Drops = numeric_modifier("Item Drop");
| |
− | </syntaxhighlight>}}
| |
− | will cause this error: <span style="color:red">Variable Drops is already defined (test.ash, line 3)</span>
| |
− | | |
− | | |
− | {{RFI|Obviously, a lot more info is needed here.}}
| |
− | | |
− | [[Category:Scripting]]
| |