@@ -53,6 +53,10 @@ class Ref(Resolvable):
5353 def selector (self , where ):
5454 return ETagSelector (where )
5555
56+ @property
57+ def supports_where (self ):
58+ return True
59+
5660class Var (Ref ):
5761 def __init__ (self , nameref , * args ):
5862 self .name = nameref
@@ -69,13 +73,23 @@ def resolve(self, scope):
6973 return scope .memory (self .loc )
7074
7175class EntityLocal (Ref ):
72- def __init__ (self , name ):
76+ def __init__ (self , name , specific = None ):
7377 self .name = name
78+ self .specific = specific
7479
7580 def resolve (self , scope ):
7681 return scope .entity_local (self .name )
7782
83+ @property
84+ def supports_where (self ):
85+ return not self .specific
86+
7887 def selector (self , where ):
88+ if self .specific :
89+ assert where is None , "Cannot apply selector args to specific " \
90+ + "entity local (%s is specific to %s), tried selector: %s" % (
91+ self .name , self .specific , where )
92+ return SimpleResolve (self .specific )
7993 return Selector ('s' , where )
8094
8195class SimpleResolve (Resolvable ):
@@ -355,6 +369,8 @@ def __init__(self, varref, value, where=None):
355369 assert self .allows_negative or value >= 0
356370 self .var = varref
357371 self .value = value
372+ if where is not None and not varref .supports_where :
373+ assert False , "TODO"
358374 self .selector = varref .selector (where )
359375
360376 def resolve (self , scope ):
@@ -396,8 +412,16 @@ def __init__(self, left, right, where=None):
396412 assert isinstance (right , Ref )
397413 self .left = left
398414 self .right = right
399- self .left_sel = left .selector (where )
400- self .right_sel = right .selector (where )
415+ where_l = where_r = where
416+ if where is not None :
417+ if not left .supports_where :
418+ where_l = None
419+ if not right .supports_where :
420+ where_r = None
421+ if where_l is None and where_r is None :
422+ assert False , "TODO"
423+ self .left_sel = left .selector (where_l )
424+ self .right_sel = right .selector (where_r )
401425
402426 def resolve (self , scope ):
403427 return 'scoreboard players operation %s %s %s %s %s' % (
@@ -431,6 +455,7 @@ class SelRange(SelectorArgs):
431455 def __init__ (self , varref , min = None , max = None ):
432456 assert min is not None or max is not None
433457 assert isinstance (varref , Ref )
458+ assert varref .supports_where , "TODO"
434459 self .var = varref
435460 self .min = min
436461 self .max = max
0 commit comments