mirror of
https://github.com/Sei-Lisa/LSL-PyOptimizer
synced 2025-07-01 23:58:20 +00:00
Implement flags aimed at removing "magic names" in the code.
strlen for llStringLength, detect for llDetected* and touch*/collision*/sensor, touch for touch*, grab for touch().
This commit is contained in:
parent
3bb5102f06
commit
14b13dc4e5
2 changed files with 69 additions and 22 deletions
59
fndata.txt
59
fndata.txt
|
@ -34,13 +34,23 @@
|
|||
# it's posible to simplify two identical calls into one. Example:
|
||||
# llGetPermissions(). Counterexample: llFrand(). This is the default;
|
||||
# unstable functions must be marked as such. Does not apply to void
|
||||
# functions.
|
||||
# functions. This flag is not implemented; 'unstable' is.
|
||||
#
|
||||
# unstable:
|
||||
# Not stable.
|
||||
# Not stable. This flag IS implemented.
|
||||
#
|
||||
# variable:
|
||||
# Not stable. Alias for unstable.
|
||||
# strlen:
|
||||
# Marks the function as accepting one unique parameter of type string,
|
||||
# and returning 0 is equivalent to the parameter being an empty string.
|
||||
#
|
||||
# detect:
|
||||
# Marks the function/event as being a detection one.
|
||||
#
|
||||
# touch:
|
||||
# Marks the event as being a touch event.
|
||||
#
|
||||
# grab:
|
||||
# Marks the event as enabling grab detection.
|
||||
#
|
||||
# delay <value>:
|
||||
# Function has a delay.
|
||||
|
@ -231,76 +241,93 @@ string llDeleteSubString( string src, integer start, integer end )
|
|||
void llDetachFromAvatar( )
|
||||
|
||||
vector llDetectedGrab( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
# llDetectedGrab() only works for touch(), not for touch_start() etc.
|
||||
- return <0,0,0> if event != "" && event != "touch" || number < 0 || number > 15
|
||||
|
||||
integer llDetectedGroup( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- min 0
|
||||
- max 1
|
||||
- return 0 if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
key llDetectedKey( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return "00000000-0000-0000-0000-000000000000" if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
integer llDetectedLinkNumber( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- min 0
|
||||
- max 256
|
||||
- return 0 if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
string llDetectedName( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return "00000000-0000-0000-0000-000000000000" if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
key llDetectedOwner( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return "00000000-0000-0000-0000-000000000000" if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
vector llDetectedPos( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
rotation llDetectedRot( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0,1> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
vector llDetectedTouchBinormal( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
|
||||
|
||||
integer llDetectedTouchFace( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- min -1
|
||||
- max 8
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
|
||||
|
||||
vector llDetectedTouchNormal( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
|
||||
|
||||
vector llDetectedTouchPos( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
|
||||
|
||||
vector llDetectedTouchST( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
- return <-1,-1,0> if (event == "collision" || event == "collision_start" || event == "collision_end" || event == "sensor") && number == 0
|
||||
|
||||
vector llDetectedTouchUV( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
- return <-1,-1,0> if (event == "collision" || event == "collision_start" || event == "collision_end" || event == "sensor") && number == 0
|
||||
|
||||
integer llDetectedType( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- min 0
|
||||
- max 15
|
||||
- return 0 if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
vector llDetectedVel( integer number )
|
||||
- detect
|
||||
- SEF
|
||||
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" && event != "collision" && event != "collision_start" && event != "collision_end" && event != "sensor" || number < 0 || number > 15
|
||||
|
||||
|
@ -1372,6 +1399,7 @@ void llStopSound( )
|
|||
integer llStringLength( string str )
|
||||
- SEF
|
||||
- min 0
|
||||
- strlen
|
||||
|
||||
string llStringToBase64( string str )
|
||||
- SEF
|
||||
|
@ -1483,14 +1511,17 @@ event changed( integer change )
|
|||
- SEF
|
||||
|
||||
event collision( integer num_detected )
|
||||
- detect
|
||||
# Prevents events in the parent from triggering, depending on llPassCollisions,
|
||||
# therefore not SEF.
|
||||
|
||||
event collision_end( integer num_detected )
|
||||
# Same as with collision().
|
||||
- detect
|
||||
# Not SEF; see collision().
|
||||
|
||||
event collision_start( integer num_detected )
|
||||
# Same as with collision().
|
||||
- detect
|
||||
# Not SEF; see collision().
|
||||
|
||||
event control( key id, integer level, integer edge )
|
||||
- SEF
|
||||
|
@ -1563,8 +1594,9 @@ event run_time_permissions( integer perm )
|
|||
- SEF
|
||||
|
||||
event sensor( integer num_detected )
|
||||
- detect
|
||||
# There was a time when this was necessary for no_sensor() to trigger, but
|
||||
# that's no longer the case.
|
||||
# that's no longer the case and it is SEF now.
|
||||
- SEF
|
||||
|
||||
event state_entry( )
|
||||
|
@ -1577,13 +1609,20 @@ event timer( )
|
|||
- SEF
|
||||
|
||||
event touch( integer num_detected )
|
||||
# Adds hand cursor.
|
||||
- touch
|
||||
- detect
|
||||
- grab
|
||||
# Not SEF for the same reasons as collision(); also it adds a hand cursor.
|
||||
|
||||
event touch_end( integer num_detected )
|
||||
# Adds hand cursor.
|
||||
- touch
|
||||
- detect
|
||||
# Not SEF; see touch().
|
||||
|
||||
event touch_start( integer num_detected )
|
||||
# Adds hand cursor.
|
||||
- touch
|
||||
- detect
|
||||
# Not SEF; see touch().
|
||||
|
||||
event transaction_result( key id, integer success, string data )
|
||||
- SEF
|
||||
|
|
|
@ -234,7 +234,8 @@ def LoadLibrary(builtins = None, fndata = None):
|
|||
r'("(?:\\.|[^"])*"|<[^>]+>|[-+0-9x.e]+' # strings, vectors, numbers
|
||||
r'|\[(?:[^]"]|"(?:\\.|[^"])*")*\]))' # lists
|
||||
r'(?:\s+if\s+(.*\S))?'
|
||||
r'|(unstable|stop)|(min|max|delay)\s+([-0-9.]+))\s*$', re.I)
|
||||
r'|(unstable|stop|strlen|detect|touch|grab)'
|
||||
r'|(min|max|delay)\s+([-0-9.]+))\s*$', re.I)
|
||||
|
||||
# TODO: "quaternion" doesn't compare equal to "rotation" even if they are
|
||||
# equivalent. Canonicalize it before comparison, to avoid false
|
||||
|
@ -352,8 +353,9 @@ def LoadLibrary(builtins = None, fndata = None):
|
|||
# that is conditionally SEF is taken as not SEF)
|
||||
if curr_ty == 'event' and match_flag.group(3):
|
||||
warning(u"Events do not support conditions"
|
||||
u" in SEF flags, in line %d, event %s"
|
||||
% (ufndata, linenum, ucurr_fn))
|
||||
u" in SEF flags, in line %d, event %s."
|
||||
u" Omitting: %s"
|
||||
% (linenum, ucurr_fn, uline))
|
||||
continue
|
||||
elif curr_ty == 'event':
|
||||
events[curr_fn]['SEF'] = True
|
||||
|
@ -362,18 +364,24 @@ def LoadLibrary(builtins = None, fndata = None):
|
|||
functions[curr_fn]['SEF'] = True
|
||||
|
||||
elif curr_ty == 'event':
|
||||
warning(u"Events only support bare SEF flags"
|
||||
u", in line %d, event %s. Omitting %s."
|
||||
% (ufndata, linenum, ucurr_fn, uline))
|
||||
if match_flag.group(4):
|
||||
flag = match_flag.group(4).lower()
|
||||
if flag in ('detect','touch','grab'):
|
||||
events[curr_fn][flag] = True
|
||||
else:
|
||||
warning(u"Events only support a few flags"
|
||||
u", in line %d, event %s."
|
||||
u" Omitting: %s"
|
||||
% (linenum, ucurr_fn, uline))
|
||||
continue
|
||||
elif match_flag.group(2):
|
||||
pass # return not handled yet
|
||||
elif (match_flag.group(4)
|
||||
and match_flag.group(4).lower() == 'unstable'
|
||||
):
|
||||
elif match_flag.group(4):
|
||||
flag = match_flag.group(4).lower()
|
||||
if flag == 'unstable':
|
||||
functions[curr_fn]['uns'] = True
|
||||
elif match_flag.group(4): # must be stop
|
||||
functions[curr_fn]['stop'] = True
|
||||
else:
|
||||
functions[curr_fn][flag] = True
|
||||
elif match_flag.group(5).lower() in ('min', 'max'):
|
||||
minmax = match_flag.group(5).lower()
|
||||
value = match_flag.group(6)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue