Category:LSL Operators
Revision as of 16:50, 10 January 2010 by Strife Onizuka (talk | contribs) (→Operator Precedence (Order of Operations))
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 = 0;
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.