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:
Sei Lisa 2017-10-27 18:49:58 +02:00
parent 3bb5102f06
commit 14b13dc4e5
2 changed files with 69 additions and 22 deletions

View file

@ -34,13 +34,23 @@
# it's posible to simplify two identical calls into one. Example: # it's posible to simplify two identical calls into one. Example:
# llGetPermissions(). Counterexample: llFrand(). This is the default; # llGetPermissions(). Counterexample: llFrand(). This is the default;
# unstable functions must be marked as such. Does not apply to void # unstable functions must be marked as such. Does not apply to void
# functions. # functions. This flag is not implemented; 'unstable' is.
# #
# unstable: # unstable:
# Not stable. # Not stable. This flag IS implemented.
# #
# variable: # strlen:
# Not stable. Alias for unstable. # 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>: # delay <value>:
# Function has a delay. # Function has a delay.
@ -231,76 +241,93 @@ string llDeleteSubString( string src, integer start, integer end )
void llDetachFromAvatar( ) void llDetachFromAvatar( )
vector llDetectedGrab( integer number ) vector llDetectedGrab( integer number )
- detect
- SEF - SEF
# llDetectedGrab() only works for touch(), not for touch_start() etc. # llDetectedGrab() only works for touch(), not for touch_start() etc.
- return <0,0,0> if event != "" && event != "touch" || number < 0 || number > 15 - return <0,0,0> if event != "" && event != "touch" || number < 0 || number > 15
integer llDetectedGroup( integer number ) integer llDetectedGroup( integer number )
- detect
- SEF - SEF
- min 0 - min 0
- max 1 - 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 - 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 ) key llDetectedKey( integer number )
- detect
- SEF - 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 - 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 ) integer llDetectedLinkNumber( integer number )
- detect
- SEF - SEF
- min 0 - min 0
- max 256 - 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 - 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 ) string llDetectedName( integer number )
- detect
- SEF - 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 - 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 ) key llDetectedOwner( integer number )
- detect
- SEF - 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 - 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 ) vector llDetectedPos( integer number )
- detect
- SEF - 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 <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 ) rotation llDetectedRot( integer number )
- detect
- SEF - 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 - 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 ) vector llDetectedTouchBinormal( integer number )
- detect
- SEF - SEF
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15 - return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
integer llDetectedTouchFace( integer number ) integer llDetectedTouchFace( integer number )
- detect
- SEF - SEF
- min -1 - min -1
- max 8 - max 8
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15 - return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
vector llDetectedTouchNormal( integer number ) vector llDetectedTouchNormal( integer number )
- detect
- SEF - SEF
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15 - return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
vector llDetectedTouchPos( integer number ) vector llDetectedTouchPos( integer number )
- detect
- SEF - SEF
- return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15 - return <0,0,0> if event != "" && event != "touch" && event != "touch_start" && event != "touch_end" || number < 0 || number > 15
vector llDetectedTouchST( integer number ) vector llDetectedTouchST( integer number )
- detect
- SEF - 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 <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 - return <-1,-1,0> if (event == "collision" || event == "collision_start" || event == "collision_end" || event == "sensor") && number == 0
vector llDetectedTouchUV( integer number ) vector llDetectedTouchUV( integer number )
- detect
- SEF - 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 <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 - return <-1,-1,0> if (event == "collision" || event == "collision_start" || event == "collision_end" || event == "sensor") && number == 0
integer llDetectedType( integer number ) integer llDetectedType( integer number )
- detect
- SEF - SEF
- min 0 - min 0
- max 15 - 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 - 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 ) vector llDetectedVel( integer number )
- detect
- SEF - 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 <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 ) integer llStringLength( string str )
- SEF - SEF
- min 0 - min 0
- strlen
string llStringToBase64( string str ) string llStringToBase64( string str )
- SEF - SEF
@ -1483,14 +1511,17 @@ event changed( integer change )
- SEF - SEF
event collision( integer num_detected ) event collision( integer num_detected )
- detect
# Prevents events in the parent from triggering, depending on llPassCollisions, # Prevents events in the parent from triggering, depending on llPassCollisions,
# therefore not SEF. # therefore not SEF.
event collision_end( integer num_detected ) event collision_end( integer num_detected )
# Same as with collision(). - detect
# Not SEF; see collision().
event collision_start( integer num_detected ) event collision_start( integer num_detected )
# Same as with collision(). - detect
# Not SEF; see collision().
event control( key id, integer level, integer edge ) event control( key id, integer level, integer edge )
- SEF - SEF
@ -1563,8 +1594,9 @@ event run_time_permissions( integer perm )
- SEF - SEF
event sensor( integer num_detected ) event sensor( integer num_detected )
- detect
# There was a time when this was necessary for no_sensor() to trigger, but # 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 - SEF
event state_entry( ) event state_entry( )
@ -1577,13 +1609,20 @@ event timer( )
- SEF - SEF
event touch( integer num_detected ) 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 ) event touch_end( integer num_detected )
# Adds hand cursor. - touch
- detect
# Not SEF; see touch().
event touch_start( integer num_detected ) event touch_start( integer num_detected )
# Adds hand cursor. - touch
- detect
# Not SEF; see touch().
event transaction_result( key id, integer success, string data ) event transaction_result( key id, integer success, string data )
- SEF - SEF

View file

@ -234,7 +234,8 @@ def LoadLibrary(builtins = None, fndata = None):
r'("(?:\\.|[^"])*"|<[^>]+>|[-+0-9x.e]+' # strings, vectors, numbers r'("(?:\\.|[^"])*"|<[^>]+>|[-+0-9x.e]+' # strings, vectors, numbers
r'|\[(?:[^]"]|"(?:\\.|[^"])*")*\]))' # lists r'|\[(?:[^]"]|"(?:\\.|[^"])*")*\]))' # lists
r'(?:\s+if\s+(.*\S))?' 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 # TODO: "quaternion" doesn't compare equal to "rotation" even if they are
# equivalent. Canonicalize it before comparison, to avoid false # 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) # that is conditionally SEF is taken as not SEF)
if curr_ty == 'event' and match_flag.group(3): if curr_ty == 'event' and match_flag.group(3):
warning(u"Events do not support conditions" warning(u"Events do not support conditions"
u" in SEF flags, in line %d, event %s" u" in SEF flags, in line %d, event %s."
% (ufndata, linenum, ucurr_fn)) u" Omitting: %s"
% (linenum, ucurr_fn, uline))
continue continue
elif curr_ty == 'event': elif curr_ty == 'event':
events[curr_fn]['SEF'] = True events[curr_fn]['SEF'] = True
@ -362,18 +364,24 @@ def LoadLibrary(builtins = None, fndata = None):
functions[curr_fn]['SEF'] = True functions[curr_fn]['SEF'] = True
elif curr_ty == 'event': elif curr_ty == 'event':
warning(u"Events only support bare SEF flags" if match_flag.group(4):
u", in line %d, event %s. Omitting %s." flag = match_flag.group(4).lower()
% (ufndata, linenum, ucurr_fn, uline)) 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 continue
elif match_flag.group(2): elif match_flag.group(2):
pass # return not handled yet pass # return not handled yet
elif (match_flag.group(4) elif match_flag.group(4):
and match_flag.group(4).lower() == 'unstable' flag = match_flag.group(4).lower()
): if flag == 'unstable':
functions[curr_fn]['uns'] = True functions[curr_fn]['uns'] = True
elif match_flag.group(4): # must be stop else:
functions[curr_fn]['stop'] = True functions[curr_fn][flag] = True
elif match_flag.group(5).lower() in ('min', 'max'): elif match_flag.group(5).lower() in ('min', 'max'):
minmax = match_flag.group(5).lower() minmax = match_flag.group(5).lower()
value = match_flag.group(6) value = match_flag.group(6)