Example #1
0
 def resolve_FuncDef(self, func):
     # self.logger.debug('resolve_FuncDef', func.name, func.resolved, func.cls, func)
     assert func.owner, (func, func.owner)
     owner = func.owner
     assert isinstance(owner, ast.ClassDef) or isinstance(
         owner, ast.CodeUnit) or isinstance(
             owner, ast.ExtensionDef
         ), 'resolve_ClassDef owner is invalid: %s %s' % (owner, func)
     #assert isinstance(owner, ast.ClassDef) or isinstance(owner, ast.CodeUnit), 'resolve_FuncDef owner=%s' % owner
     if func.resolved:
         # assert func.spec.returnType, (func.name, func.spec.returnType, func)
         return
     func.resolved = True
     # self.logger.debug('resolve_FuncDef start', func, func.name)
     for param in func.spec.params:
         param.visit(self)
     if func.cls is None and isinstance(owner, ast.ClassDef):
         func.cls = owner
     func.spec.visit(self)
     func.body.visit(self)
     if func.spec.returnType is None:
         if len(func.body.statements) == 0:
             func.spec.returnType = ast.makePrimitiveType('void')
         else:
             lastStmt = func.body.statements[-1]
             # self.logger.debug('resolve_FuncDef rettype', func.name, func, lastStmt)
             if isinstance(lastStmt, ast.Return) and lastStmt.value:
                 assert func.spec.returnType is None, (func, func.spec)
                 func.spec.returnType = lastStmt.value.getType().clone()
                 # self.logger.debug('resolve_FuncDef rettype with return', lastStmt, lastStmt.value.getType(), func, func.spec)
             else:
                 func.spec.returnType = ast.makePrimitiveType('void')
         self.setupNewItem(func.spec.returnType, func.spec, True)
     if func.spec.returnType is None:
         assert False, (func, func.spec)
Example #2
0
 def __init__(self, genericArgs):
     super(GenericSetClassImpl, self).__init__(GenericSetClassImpl.genericParams, genericArgs)
     self.addDef(SimpleTypeFunc(self, 'size() => int'))
     self.addDef(SimpleTypeFunc(self, 'clear()'))
     self.addDef(CustomTypeFunc(self, makeFuncProto('add', ast.makePrimitiveType('void'), [self.createElementType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('remove', ast.makePrimitiveType('void'), [self.createElementType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('contains', ast.makePrimitiveType('bool'), [self.createElementType()])))
     self.addDef(GenericSetEachFunc(self))
Example #3
0
 def __init__(self, genericArgs):
     super(GenericDictClassImpl, self).__init__(GenericDictClassImpl.genericParams, genericArgs)
     self.addDef(SimpleTypeFunc(self, 'size() => int', evaluator=len))
     self.addDef(SimpleTypeFunc(self, 'clear()', evaluator=lambda d:d.clear()))
     self.addDef(CustomTypeFunc(self, makeFuncProto('get', self.createValueType(), [self.createKeyType(), self.createValueType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('set', ast.makePrimitiveType('void'), [self.createKeyType(), self.createValueType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('add', ast.makePrimitiveType('void'), [self.createKeyType(), self.createValueType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('remove', ast.makePrimitiveType('void'), [self.createKeyType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('contains', ast.makePrimitiveType('bool'), [self.createKeyType()])))
     self.addDef(GenericDictEachFunc(self))
Example #4
0
 def insertToString(self, cls, basecls, visitor):
     # visitor.logger.debug('insertToString', cls, basecls)
     name = 'toString'
     if name not in cls.symbols:
         # visitor.logger.debug('insertToString do', cls, basecls)
         clsname = ast.Call(ast.Identifier('getClassName'), [])
         thisptr = ast.Call(ast.Identifier('formatId'), [])
         expr = None
         if 'name' in cls.symbols:
             # visitor.logger.debug('insertToString with name', cls, basecls, clsname, thisptr)
             expr = ast.BinaryOp(
                 '%', ast.makeLiteral('%s(name=%s,id=%s)'),
                 ast.TupleLiteral(
                     [clsname, ast.Identifier('name'), thisptr]))
         else:
             # visitor.logger.debug('insertToString without name', cls, basecls, clsname, thisptr)
             expr = ast.BinaryOp('%', ast.makeLiteral('%s(id=%s)'),
                                 ast.TupleLiteral([clsname, thisptr]))
         func = ast.FuncDef([], name,
                            ast.FuncSpec([],
                                         ast.makePrimitiveType('string')),
                            ast.StatementBody([ast.Return(expr)]))
         # visitor.logger.debug('insertFunc ok', name, cls, basecls, cls.primaryVars, func)
         cls.definitions.append(func)
         func.setOwner(cls)
         visitor.visitNewItem(func)
Example #5
0
    class ScriptClass_Logging(object):
        loggerLevel = logging.WARNING

        def ScriptFunc_initLogging(visitor, level):
            'initLogging(int)'
            ScriptUnit_sys.ScriptClass_Logging.loggerLevel = level
            # logging.basicConfig(level=level)
            logging.basicConfig(level=level, format='[%(name)s] %(message)s')

        def ScriptFunc_getLogger(visitor, name):
            'getLogger(string) => Logger'
            # return createScriptObject(visitor, 'Logger', ScriptUnit_sys.ScriptClass_Logger, [logging.getLogger(name)])
            return ScriptUnit_sys.ScriptClass_Logger(logging.getLogger(name))

        ScriptDefinitions = [
            LibLiteral('DEBUG', ast.makePrimitiveType('int'), logging.DEBUG),
            LibLiteral('INFO', ast.makePrimitiveType('int'), logging.INFO),
            LibLiteral('WARNING', ast.makePrimitiveType('int'),
                       logging.WARNING),
            LibLiteral('EVENT', ast.makePrimitiveType('int'), logging.WARNING),
            LibLiteral('ERROR', ast.makePrimitiveType('int'), logging.ERROR),
            LibLiteral('CRITICAL', ast.makePrimitiveType('int'),
                       logging.CRITICAL),
            LibLiteral('FATAL', ast.makePrimitiveType('int'), logging.CRITICAL)
        ]
Example #6
0
 def cacheName_FuncProto(self, func):
     # self.logger.debug('cacheName_FuncProto', func, func.name, func.owner)
     assert not isinstance(func.owner, ast.FuncDef), (func)
     if func.spec.returnType is None:
         func.spec.returnType = ast.makePrimitiveType('void')
         func.spec.returnType.setOwner(func.spec)
     func.visitChildren(self)
     func.owner.functions.append(func)
     func.owner.addSymbol(func)
     assert func.name != 'StringTypeClass' or isinstance(func.owner, ast.ClassDef)
Example #7
0
class ScriptUnit_sys_lang(object):
    ScriptDefinitions = [
        LibLiteral('true', ast.makePrimitiveType('bool'), True),
        LibLiteral('false', ast.makePrimitiveType('bool'), False),
        builtins.StringClass(),
        builtins.CharClass(),
        builtins.BoolClass(),
        builtins.VoidClass(),
        builtins.GenericClass('Dict', builtins.GenericDictClassImpl),
        builtins.GenericClass('Set', builtins.GenericSetClassImpl),
        builtins.GenericClass('List', builtins.GenericListClassImpl),
        builtins.GenericClass('Array', builtins.GenericArrayClassImpl),
        builtins.GenericClass('Tuple', builtins.GenericTupleClassImpl),
        builtins.FloatingClass('float'),
        builtins.FloatingClass('double'),
        builtins.LogClass()
    ] + [builtins.IntegerClass(typename) for typename in builtinIntegerNames]

    class ScriptClass_builtins(object):
        ScriptDefinitions = [
            ast.builtinCharType, ast.builtinBoolType, ast.builtinStringType,
            ast.builtinIntType, ast.builtinLongType, ast.builtinFloatType
        ]
Example #8
0
 def __init__(self, genericArgs):
     super(GenericListClassImpl, self).__init__(GenericListClassImpl.genericParams, genericArgs)
     self.addDef(SimpleTypeFunc(self, 'size() => int', evaluator=len))
     self.addDef(SimpleTypeFunc(self, 'empty() => bool', evaluator=lambda left:len(left)==0))
     self.addDef(SimpleTypeFunc(self, 'clear()', evaluator=del_list))
     self.addDef(CustomTypeFunc(self, makeFuncProto('set', ast.makePrimitiveType('void'), [ast.makePrimitiveType('int'), self.createElementType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('flatten', self.createElementType(), [self.createCollectionType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('swap', ast.makePrimitiveType('void'), [self.createCollectionType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('append', ast.makePrimitiveType('void'), [self.createElementType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('extend', ast.makePrimitiveType('void'), [self.createCollectionType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('insert', ast.makePrimitiveType('void'), [ast.makePrimitiveType('int'), self.createElementType()])))
     self.addDef(CustomTypeFunc(self, makeFuncProto('remove', ast.makePrimitiveType('void'), [self.createElementType()])))
     self.addDef(CustomTypeFunc(self, 'removeAt(int)'))
     self.addDef(CustomTypeFunc(self, makeFuncProto('contains', ast.makePrimitiveType('bool'), [self.createElementType()])))
     self.addDef(GenericListEachFunc(self))
     self.ops = {'==' : operator.eq, '!=':operator.ne,
     '+':operator.add,'*':operator.mul}
Example #9
0
 def __init__(self, cls):
     argtype = makeFuncSpec(ast.makePrimitiveType('void'), [cls.createType()])
     super(IntegerTimesFunc, self).__init__(cls, makeFuncProto('times', ast.makePrimitiveType('void'), [argtype]))
Example #10
0
 def createType(self):
     return ast.makePrimitiveType(self.name)
Example #11
0
 def __init__(self, cls):
     argtype = makeFuncSpec(ast.makePrimitiveType('void'), [cls.createElementType(), ast.makePrimitiveType('int')])
     super(GenericArrayEachFunc, self).__init__(cls, makeFuncProto('each', ast.makePrimitiveType('void'), [argtype]))
Example #12
0
 def __init__(self, cls):
     argtype = makeFuncSpec(ast.makePrimitiveType('void'), [cls.createKeyType(), cls.createValueType()])
     super(GenericDictEachFunc, self).__init__(cls, makeFuncProto('each', ast.makePrimitiveType('void'), [argtype]))
Example #13
0
 def __init__(self):
     ast.ScriptFunction.__init__(self)
     self.name = 'getClassName'
     self.type = ast.makePrimitiveType('string')
     self.target = None