Beispiel #1
0
 def call(self, scope, args=[]):
     """Call mixin. Parses a copy of the mixins body
     in the current scope and returns it.
     args:
         scope (Scope): current scope
         args (list): arguments
     raises:
         SyntaxError
     returns:
         list or False
     """
     ret = False
     if args:
         args = [[a.parse(scope) 
                 if type(a) is Expression
                 else a for a in arg]
                 if arg else arg
                 for arg in args]
     try:
         self.parse_args(args, scope)
     except SyntaxError:
         pass
     else:
         if self.parse_guards(scope):
             body = self.body.copy()
             ret = body.tokens[1]
             if ret: utility.rename(ret, scope, Block)
     return ret
Beispiel #2
0
 def call(self, scope, args=[]):
     """Call mixin. Parses a copy of the mixins body
     in the current scope and returns it.
     args:
         scope (Scope): current scope
         args (list): arguments
     raises:
         SyntaxError
     returns:
         list or False
     """
     ret = False
     if args:
         args = [[
             a.parse(scope) if isinstance(a, Expression) else a for a in arg
         ] if arg else arg for arg in args]
     try:
         self.parse_args(args, scope)
     except SyntaxError:
         pass
     else:
         if self.parse_guards(scope):
             body = self.body.copy()
             ret = body.tokens[1]
             if ret:
                 utility.rename(ret, scope, Block)
     return ret
Beispiel #3
0
 def copy(self, scope):
     """Copy block contents (properties, inner blocks). 
     Renames inner block from current scope.
     Used for mixins.
     args: 
         scope (Scope): Current scope
     returns:
         list (block contents)
     """
     if self.tokens[1]:
         tokens = copy.deepcopy(self.tokens[1])
         out = [p for p in tokens if p]
         utility.rename(out, scope, Block)
         return out
     return None
Beispiel #4
0
 def copy_inner(self, scope):
     """Copy block contents (properties, inner blocks).
     Renames inner block from current scope.
     Used for mixins.
     args:
         scope (Scope): Current scope
     returns:
         list (block contents)
     """
     if self.tokens[1]:
         tokens = [u.copy() if u else u for u in self.tokens[1]]
         out = [p for p in tokens if p]
         utility.rename(out, scope, Block)
         return out
     return None