Exemple #1
0
 def checkItemIterator(self, elemType, context):
     child = context.newChildContext()
     itemName = self.v1 if self.v2 == None else self.v2
     child.registerValue(TransientVariable(itemName, elemType))
     if self.v2 is not None:
         child.registerValue(
             TransientVariable(self.v1, IntegerType.instance))
     return self.statements.check(child, None)
Exemple #2
0
 def checkValue(self, context, value):
     child = context.newChildContext()
     child.registerValue(TransientVariable("value", AnyType.instance))
     child.setValue("value", value)
     test = self.expression.interpret(child)
     if not BooleanValue.TRUE == test:
         raise InvalidValueError(str(value) + " does not match:" + str(self.expression))
Exemple #3
0
 def interpretItemIteratorWithIndex(self, elemType, context):
     src = self.source.interpret(context)
     iterable = self.getIterable(context, src)
     i = 0
     for item in iterable:
         child = context.newChildContext()
         child.registerValue(TransientVariable(self.v2, elemType))
         child.setValue(self.v2, item)
         child.registerValue(
             TransientVariable(self.v1, IntegerType.instance))
         i += 1
         child.setValue(self.v1, IntegerValue(i))
         value = self.statements.interpret(child)
         if value is BreakResult.instance:
             break
         if value is not None:
             return value
     return None
Exemple #4
0
 def interpretItemIteratorNoIndex(self, elemType, context):
     src = self.source.interpret(context)
     iterable = self.getIterable(context, src)
     for item in iterable:
         child = context.newChildContext()
         child.registerValue(TransientVariable(self.v1, elemType))
         child.setValue(self.v1, item)
         value = self.statements.interpret(child)
         if value is BreakResult.instance:
             break
         if value != None:
             return value
     return None
 def check(self, context):
     listType = self.source.check(context)
     if not isinstance(listType, IterableType):
         raise SyntaxError("Expecting an iterable type as data source!")
     itemType = listType.itemType
     if self.itemName is not None:
         child = context.newChildContext()
         child.registerValue(TransientVariable(self.itemName, itemType))
         filterType = self.predicate.check(child)
         if filterType is not BooleanType.instance:
             raise SyntaxError("Filtering expression must return a boolean!")
     elif isinstance(self.predicate, ArrowExpression):
         pass # TODO
     else:
         raise SyntaxError("Expecting an arrow expression!")
     return listType