Category:LSL Operators
| LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Page recreated to house the future revision of the LSL_Operators page into categorized Content. Please do not delete.
if you're looking for the current version, it may be found at LSL_Operators.
Operator Precedence (Order of Operations)
current rough draft of precedence
| Operator | Description | Associativity |
|---|---|---|
| () [] |
Parenthesis List Constructor |
Inner to Outer then Right to Left |
| , | Comma | Left to Right[1] |
| ++ -- | Increment/Decrement | Right to Left |
| (type) ~ ! - |
Typecast Bitwise NOT Logical NOT Negation |
Right to Left |
| / % * | ^ |
Division Modulus Multiplication Bitwise OR Bitwise eXclusive OR |
Right to Left |
| + - |
Addition/Concatenation Subtraction |
Right to Left |
| << >> | Bitwise Shift Left/Right | Right to Left |
| < > <= >= |
Less/Greater Than Less/Greater Than or Equal |
Right to Left |
| == != | Equivalent/NOT Equivalent | Right to Left |
| & | Bitwise AND | Right to Left |
| ^ | Bitwise eXclusive OR | Right to Left |
| | | Bitwise OR | Right to Left |
| && || | Logical AND / OR | Right to Left |
| = += -= /= %= *= |
Assignment Additive/Subtractive/Divisive/Modulo/Multiplicative Assignment |
Right to Left[1] |
- ^ Both the Comma and the Assignment Operators are special cases. Commas promote all Operators to the left. However within parenthesis and brackets obey those respective precedences.
<lsl>//-- example: float a; float b; float c;
string uExample( float x, float y ){
return (string)x + " " + (string)y;
}
default{
state_entry(){
string vStrReport = "\n" + (string)(++a) + " " + (string)(++a); //-- first line reports "2.000000 1.000000"
vStrReport += "\n" + (string)[++b, " ", ++b]; //-- second line reports "1.000000 2.000000"
vStrReport += "\n" + uExample( ++c, ++c ); //-- third line reports "1.000000 2.000000"
llOwnerSay( vStrReport );
}
}</lsl> Assigment operators Demote all precedences to the Left of them (but obey all precedences below above increment/decrement. <lsl>//-- example: integer a;
default{
state_entry(){
llOwnerSay( (string)(++a + a *= ++a) ); //-- yields "3" instead of "4"
}
}</lsl>
Right To Left =
- Placeholder for commentary about the LSL compiler and LSO R2L implications.