Beispiel #1
0
 def tokensToValue(self, tokens, scope):
     if not tokens or len(tokens) == 0:
         return None
     expression = SCSSExpression(tokens)
     expression.evaluate(scope)
     if not expression.tokens or len(expression.tokens) == 0:
         raise SCSSCompileError("Expression, expression, why did you eat my tokens?", tokens[0])
     elif len(expression.tokens) == 1:
         return scssvariables.SCSSVariable.fromToken(expression.tokens[0])
     else:
         return scssvariables.SCSSList.fromTokens(expression.tokens)
Beispiel #2
0
 def evaluate(self, callerScope, arguments = None):
     try:
         scope = self.scope.clone()
         if arguments:
             self.mapArguments(arguments, callerScope, scope)
 
         for token in self.body:
             if token.isAssignment():
                 SCSSExpression.processAssignment(token, scope)
             elif token.isAtRule() and token.getKeyWord() == "return":
                 expression = SCSSExpression(token.getSignature())
                 expression.evaluate(scope)
                 if len(expression.tokens) == 0:
                     raise SCSSRunTimeError("Could not evaluate return statement of function %s" % self.name)
                 elif len(expression.tokens) == 1:
                     return scssvariables.SCSSVariable.fromToken(expression.tokens[0])
                 else:
                     return scssvariables.SCSSList.fromTokens(expression.tokens)
             else:
                 raise SCSSRunTimeError("Unexpected token in function %s" % self.name, token)
 
         raise SCSSRunTimeError("Function %s does not return a value" % self.name)
     except Exception, exception:
         raise SCSSRunTimeError(str(exception) + "\n  In call to function " + self.name)