Ejemplo n.º 1
0
 def getSortKeyReader(self, context, key):
     if key is None:
         key = UnresolvedIdentifier("key", Dialect.M)
     decl = self.getDeclaration(context)
     if decl.hasAttribute(context, str(key)):
         return self.getAttributeSortKeyReader(context, str(key))
     elif decl.hasMethod(context, str(key)):
         return self.getMemberMethodSortKeyReader(context, str(key))
     elif self.globalMethodExists(context, str(key)):
         return self.getGlobalMethodSortKeyReader(context, str(key))
     elif isinstance(key, ArrowExpression):
         return key.getSortKeyReader(context, self)
     else:
         return self.getExpressionSortKeyReader(context, key)
Ejemplo n.º 2
0
 def check(self, context):
     expression = self.expression
     if isinstance(expression, UnresolvedSelector):
         parent = expression.parent
         if parent is not None:
             typ = parent.check(context)
             if isinstance(typ, CategoryType):
                 expression = UnresolvedIdentifier(expression.name, Dialect.O)
                 context = context.newInstanceContext(None, typ, True)
             else:
                 raise SyntaxError("Not a method: " + str(self.expression))
     if isinstance(expression, UnresolvedIdentifier):
         name = expression.name
         named = context.getRegistered(name)
         if isinstance(named, MethodDeclarationMap):
             method = named.getFirst()
             return MethodType(method)
         else:
             raise SyntaxError("No method with name:" + name)
     else:
         return SyntaxError("Not implemented !")
Ejemplo n.º 3
0
 def interpret(self, context):
     expression = self.expression
     if isinstance(expression, UnresolvedSelector):
         parent = expression.parent
         if parent is not None:
             value = parent.interpret(context)
             if isinstance(value, IInstance):
                 expression = UnresolvedIdentifier(expression.name, Dialect.O)
                 context = context.newInstanceContext(value, None, True)
             else:
                 return NullValue.instance
     if isinstance(expression, UnresolvedIdentifier):
         name = expression.name
         if context.hasValue(name):
             return context.getValue(name)
         else:
             named = context.getRegistered(name)
             if isinstance(named, MethodDeclarationMap):
                 decl = named.getFirst()
                 return ClosureValue(context, MethodType(decl))
             else:
                 raise SyntaxError("No method with name:" + name)
Ejemplo n.º 4
0
 def toInstanceExpression(self):
     if self.parent is None:
         from prompto.expression.UnresolvedIdentifier import UnresolvedIdentifier
         return UnresolvedIdentifier(self.name)
     else:
         return MemberSelector(self.parent, self.name)