コード例 #1
0
def convert_to_func_wrapper(pyf):
    import inspect

    if obj.compare_type(pyf, PY_FUNCTION_TYPE) or \
            obj.compare_type(pyf, FUNCTION_TYPE):
        return pyf

    if inspect.isfunction(pyf) or inspect.isbuiltin(pyf):
        return obj.ObjectCreater.new_object(PY_FUNCTION_TYPE, pyf)

    return obj.convert_to_ail_object(pyf)
コード例 #2
0
def func_show_struct(sobj):
    if not (objs.compare_type(sobj, struct.STRUCT_OBJ_TYPE) or
                objs.compare_type(sobj, struct.STRUCT_TYPE)):
        return AILRuntimeError('show_struct needs a struct type or object', 'TypeError')
    
    ln1 = str(sobj) + '\n'
    memb = sobj.members.items()
    meml = '\n'.join(['\t%s : %s' % (k, v) for k, v in memb 
                        if k[:2] != '__'])
    block = '{\n%s\n}' % meml

    return ln1 + block
コード例 #3
0
ファイル: utils.py プロジェクト: laomobk/AIL
def func_range(a, b, step=1):
    if not (compare_type(a, INTEGER_TYPE) and compare_type(b, INTEGER_TYPE)) \
            and compare_type(step, INTEGER_TYPE):

        return AILRuntimeError('a and b must be an integer!')

    va = unpack_ailobj(a)
    vb = unpack_ailobj(b)
    vs = unpack_ailobj(step)

    if va > vb:
        return convert_to_array([])
    return convert_to_array(list(range(va, vb, vs)))
コード例 #4
0
def float_init(self :obj.AILObject, value :obj.AILObject):
    if type(value) in (float, int):
        self['__value__'] = value
    elif obj.compare_type(value, FLOAT_TYPE):
        self['__value__'] = value['__value__']
    else:
        return AILRuntimeError('invalid number type \'%s\'' % type(value), 'TypeError')
コード例 #5
0
def _sys_exit(_, code):
    if not compare_type(code, INTEGER_TYPE):
        return AILRuntimeError('exit() needs an integer.')

    c = unpack_ailobj(code)

    import sys
    try:
        sys.exit(c)
    except Exception as e:
        return AILRuntimeError(str(e), 'PythonError')
コード例 #6
0
ファイル: integer.py プロジェクト: laomobk/AIL
def int_init(self: obj.AILObject, value: obj.AILObject):
    if isinstance(value, int):
        self['__value__'] = value
    elif isinstance(value, float):
        o = obj.ObjectCreater.new_object(afloat.FLOAT_TYPE, value)
        self.reference = o.reference
        self.properties = o.properties
    elif obj.compare_type(value, INTEGER_TYPE):
        self['__value__'] = value['__value__']
    else:
        return AILRuntimeError('invalid number type \'%s\'' % type(value),
                               'TypeError')
コード例 #7
0
def obj_setattr(aobj, name, value):
    from objects import string

    if obj.compare_type(name, string.STRING_TYPE):
        name = string.convert_to_string(name)

    if not _is_reserved_attr_name(name):
        return AILRuntimeError(
            '\'%s\' object has no attribute \'%s\'' %
            (aobj['__class__'].name, name), 'AttributeError')

    aobj.properties[name] = value
コード例 #8
0
def new_struct(struct_type, default_list=None):
    # return a struct object

    if default_list is not None and \
            not objs.compare_type(default_list, array.ARRAY_TYPE):
        return AILRuntimeError('member initialize need an array')
    elif default_list is not None:
        default_list = default_list['__value__']

    if objs.compare_type(struct_type, struct.STRUCT_OBJ_TYPE):
        return AILRuntimeError('new() needs a struct type, not a struct object', 
                               'TypeError')

    if not objs.compare_type(struct_type, struct.STRUCT_TYPE):
        return AILRuntimeError('new() need a struct type')

    m = struct_type.members.keys()

    if default_list is not None:
        if len(default_list) < len(m):
            return AILRuntimeError(
                'struct \'%s\' initialize missing %d required argument(s) : %s' %
                (struct_type['__name__'], len(m), '(%s)' % (', '.join(m))),
                'TypeError')
        elif len(default_list) > len(m):
            return AILRuntimeError(
                'struct \'%s\' initialize takes %d argument(s) but %d were given' %
                (struct_type['__name__'], len(m), len(default_list)),
                'TypeError')

    if default_list is not None:
        md = {k:v for k, v in zip(m, default_list)}
    else:
        md = {k:null.null for k in m}

    n = struct_type['__name__']
    pl = struct_type.protected

    return objs.ObjectCreater.new_object(
        struct.STRUCT_OBJ_TYPE, n, md, struct_type, pl)
コード例 #9
0
def func_make_type(name, default_attrs :objs.AILObject=None):
    if default_attrs is not None and \
            not objs.compare_type(default_attrs, array.ARRAY_TYPE):
        return AILRuntimeError('type() needs an array to set default attribute.')
    return objs.ObjectCreater.new_object(atype.TYPE_TYPE, name, default_attrs)
コード例 #10
0
def func_isinstance(o, stype):
    if objs.compare_type(o, struct.STRUCT_OBJ_TYPE) and \
            objs.compare_type(stype, struct.STRUCT_TYPE):
        return o['__type__'] == stype
    return False
コード例 #11
0
def func_array(size):
    if objs.compare_type(size, aint.INTEGER_TYPE):
        l = [null.null for _ in range(size['__value__'])]
        o = objs.ObjectCreater.new_object(array.ARRAY_TYPE, l)
        return o
    return AILRuntimeError('array() needs an integer.', 'TypeError')
コード例 #12
0
def convert_to_pyobj(struct_obj) -> _StructObjectWrapper:
    if not obj.compare_type(struct_obj, STRUCT_OBJ_TYPE):
        return None
    st = _StructObjectWrapper(struct_obj)

    return st