示例#1
0
class FunctionDefinition(SinglePartCompilable):
    def __init__(self, name, args=[], source=[]):
        SinglePartCompilable.__init__(self)

        self._source = DuckTypedList(['compile'], source)
        self.name = name
        self.args = args
        self.return_statement = None

    def add_statement(self, st):
        self._source.append(st)

    def insert_statement(self, pos, st):
        self._source.insert(pos, st)

    def set_return_statement(self, st):
        self.return_statement = Return(st)

    def compile(self, dialect):
        retval = js.primitive.FunctionDefinition(self.name, self.args)
        for st in self._source:
            retval.add_statement(st.compile(dialect))

        if self.return_statement != None:
            retval.add_statement(self.return_statement.compile(dialect))

        return retval
示例#2
0
class FunctionDefinition(Base):
    def __init__(self, function_name, arguments=[], source=[]):
        self.__function_name = function_name
        self.__arguments = arguments
        self.__source=DuckTypedList(['to_stream'], source)

    def add_argument(self, argument):
        self.__arguments.append(argument)

    def add_statement(self, statement):
        self.__source.append(statement)

    def to_stream(self, os):
        os.write("function")
        if len(self.__function_name) > 0:
            os.write(" ")
            os.write(self.__function_name)
            
        os.write("(")
        for i in range(len(self.__arguments)):
            os.write(self.__arguments[i])
            if i != len(self.__arguments) -1:
                os.write(",")
        os.write(")")

        os.write("{")
        for st in self.__source:
            st.to_stream(os)
            if not isinstance(st, Comment):
                os.write(';')
        os.write("}")
示例#3
0
class FunctionDefinition(Base):
    def __init__(self, function_name, arguments=[], source=[]):
        self.__function_name = function_name
        self.__arguments = arguments
        self.__source = DuckTypedList(['to_stream'], source)

    def add_argument(self, argument):
        self.__arguments.append(argument)

    def add_statement(self, statement):
        self.__source.append(statement)

    def to_stream(self, os):
        os.write("function")
        if len(self.__function_name) > 0:
            os.write(" ")
            os.write(self.__function_name)

        os.write("(")
        for i in range(len(self.__arguments)):
            os.write(self.__arguments[i])
            if i != len(self.__arguments) - 1:
                os.write(",")
        os.write(")")

        os.write("{")
        for st in self.__source:
            st.to_stream(os)
            if not isinstance(st, Comment):
                os.write(';')
        os.write("}")
示例#4
0
    def __init__(self, name, args=[], source=[]):
        SinglePartCompilable.__init__(self)

        self._source = DuckTypedList(['compile'], source)
        self.name = name
        self.args = args
        self.return_statement = None
示例#5
0
class FunctionDefinition(SinglePartCompilable):
    def __init__(self, name, args=[], source=[]):
        SinglePartCompilable.__init__(self)

        self._source = DuckTypedList(['compile'], source)
        self.name = name
        self.args = args
        self.return_statement = None

    def add_statement(self, st):
        self._source.append(st)

    def insert_statement(self, pos, st):
        self._source.insert(pos, st)

    def set_return_statement(self, st):
        self.return_statement = Return(st)

    def compile(self, dialect):
        retval = js.primitive.FunctionDefinition(self.name,self.args)
        for st in self._source:
            retval.add_statement(st.compile(dialect))

        if self.return_statement != None:
            retval.add_statement(self.return_statement.compile(dialect))

        return retval
示例#6
0
    def __init__(self, name):
        SinglePartCompilable.__init__(self)

        self.__name = name
        self.members = DuckTypedDict(['compile'])
        self.statics = DuckTypedDict(['compile'])
        self.ctor = ConstructorDefinition(self.name)
        self.dtor = DestructorDefinition(self.name)
        self.preamble = DuckTypedList(['compile'])
        self.mixins = DuckTypedList(['compile'])
        self.mixins.append(ObjectReference("qx.locale.MTranslation"))
        self.base_class = None
        self.assets = set()
示例#7
0
    def __init__(self,name):
        SinglePartCompilable.__init__(self)

        self.__name = name
        self.members = DuckTypedDict(['compile'])
        self.statics = DuckTypedDict(['compile'])
        self.ctor = ConstructorDefinition(self.name)
        self.dtor = DestructorDefinition(self.name)
        self.preamble = DuckTypedList(['compile'])
        self.mixins = DuckTypedList(['compile'])
        self.mixins.append(ObjectReference("qx.locale.MTranslation"))
        self.base_class = None
        self.assets = set()
示例#8
0
    def __init__(self, class_name, init_arguments=[]):
        SinglePartCompilable.__init__(self)

        if len(class_name) == 0:
            raise Exception("Empty class name not allowed")
        self.__class_name = class_name
        self.args = DuckTypedList(['compile'], init_arguments)
示例#9
0
    def __init__(self, name, args=[], source=[]):
        SinglePartCompilable.__init__(self)

        self._source = DuckTypedList(['compile'], source)
        self.name = name
        self.args = args
        self.return_statement = None
示例#10
0
class FunctionCall(Base):
    def __init__(self, function_name, arguments=[]):
        self.__function_name = function_name
        self.__arguments = DuckTypedList(['to_stream'],arguments)

    def add_argument(self, argument):
        self.__arguments.append(argument)

    def to_stream(self, os):
        os.write(self.__function_name)
        os.write("(")
        for i in range(len(self.__arguments)):
            self.__arguments[i].to_stream(os)
            if i != len(self.__arguments) -1:
                os.write(",")

        os.write(")")
示例#11
0
 def __init__(self, cai):
     SinglePartCompilable.__init__(self)
     self.__cai = DuckTypedList(['compile'])
     for v in cai.items():
         if isinstance(v, SinglePartCompilable):
             self.__aai.append(v)
         else:
             self.__aai.append(self.type_map[type(v)](v))
示例#12
0
class FunctionCall(Base):
    def __init__(self, function_name, arguments=[]):
        self.__function_name = function_name
        self.__arguments = DuckTypedList(['to_stream'], arguments)

    def add_argument(self, argument):
        self.__arguments.append(argument)

    def to_stream(self, os):
        os.write(self.__function_name)
        os.write("(")
        for i in range(len(self.__arguments)):
            self.__arguments[i].to_stream(os)
            if i != len(self.__arguments) - 1:
                os.write(",")

        os.write(")")
示例#13
0
class FunctionCall(object):
    def __init__(self, function_name, arguments=[]):
        SinglePartCompilable.__init__(self)

        self.__function_name = function_name
        self.__arguments = DuckTypedList(['compile'],arguments)

    def add_argument(self, argument):
        self.__arguments.append(argument)

    def __repr__(self):
        return '<il.FunctionCall("%s", %s)>' %(self.__function_name,
                                                               self.__arguments)

    def compile(self, dialect):
        return js.primitive.FunctionCall(self.__function_name,
                                 [a.compile(dialect) for a in self.__arguments])
示例#14
0
class FunctionCall(object):
    def __init__(self, function_name, arguments=[]):
        SinglePartCompilable.__init__(self)

        self.__function_name = function_name
        self.__arguments = DuckTypedList(['compile'], arguments)

    def add_argument(self, argument):
        self.__arguments.append(argument)

    def __repr__(self):
        return '<il.FunctionCall("%s", %s)>' % (self.__function_name,
                                                self.__arguments)

    def compile(self, dialect):
        return js.primitive.FunctionCall(
            self.__function_name,
            [a.compile(dialect) for a in self.__arguments])
示例#15
0
class Array(Base):
    def __init__(self):
        self.__members = DuckTypedList(['to_stream'])

    def append(self, value):
        self.__members.append(value)

    def del_member(self,key):
        del self.__members[key]

    def to_stream(self, os):
        os.write("[")
        i=0
        for v in self.__members:
            v.to_stream(os)
            if i != len(self.__members) -1:
                os.write(",")
            i+=1

        os.write("]")
示例#16
0
class Array(Base):
    def __init__(self):
        self.__members = DuckTypedList(['to_stream'])

    def append(self, value):
        self.__members.append(value)

    def del_member(self, key):
        del self.__members[key]

    def to_stream(self, os):
        os.write("[")
        i = 0
        for v in self.__members:
            v.to_stream(os)
            if i != len(self.__members) - 1:
                os.write(",")
            i += 1

        os.write("]")
示例#17
0
 def __init__(self):
     self.__members = DuckTypedList(['to_stream'])
示例#18
0
 def __init__(self):
     self.__members = DuckTypedList(['to_stream'])
示例#19
0
class ClassDefinition(SinglePartCompilable):
    def __init__(self, name):
        SinglePartCompilable.__init__(self)

        self.__name = name
        self.members = DuckTypedDict(['compile'])
        self.statics = DuckTypedDict(['compile'])
        self.ctor = ConstructorDefinition(self.name)
        self.dtor = DestructorDefinition(self.name)
        self.preamble = DuckTypedList(['compile'])
        self.mixins = DuckTypedList(['compile'])
        self.mixins.append(ObjectReference("qx.locale.MTranslation"))
        self.base_class = None
        self.assets = set()

    def set_name(self, name):
        self.__name = name
        self.ctor.name = name
        self.dtor.name = name

    def get_name(self):
        return self.__name

    name = property(get_name, set_name)

    def set_member(self, key, val):
        self.members[key] = val
        val.set_parent(self)

    def get_member(self, key, val, default=None):
        return self.__elts['members'].get(key, default)

    def compile(self, dialect):
        lang = js.primitive.FunctionCall("qx.Class.define")
        lang.add_argument(js.primitive.String(self.name))

        if self.base_class == None:
            base_class = js.primitive.ObjectReference('qx.core.Object')
        else:
            base_class = js.primitive.ObjectReference(self.base_class)

        class_members = js.primitive.Object()

        # MPC gets compiled first because they can make changes
        # anywhere, including members dict.
        for k, v in self.members.items():
            if isinstance(v, MultiPartCompilable):  # FIXME!
                v.compile(dialect, self)

        for k, v in self.members.items():
            if isinstance(v, SinglePartCompilable):  # FIXME!
                class_members.set_member(k, v.compile(dialect))

        st = FunctionCall('this.base')
        st.add_argument(ObjectReference('arguments'))
        self.ctor.insert_statement(0, st)

        properties = js.primitive.Object()
        widget_property = js.primitive.Object()
        widget_property.set_member("check",
                                   js.primitive.String('qx.ui.core.Widget'))
        properties.set_member("widget", widget_property)

        mixins = js.primitive.Array()
        for m in self.mixins:
            mixins.append(m.compile(dialect))

        class_dict = js.primitive.Object()
        class_dict.set_member("members", class_members)
        class_dict.set_member("extend", base_class)
        class_dict.set_member("construct", self.ctor.compile(dialect))
        class_dict.set_member("destruct", self.dtor.compile(dialect))
        class_dict.set_member("properties", properties)
        class_dict.set_member("include", mixins)

        lang.add_argument(class_dict)
        if len(self.assets) > 0:
            self.preamble.insert(
                0,
                Comment(
                    "".join(["\n#asset(%s)" % a
                             for a in sorted(self.assets)]) + "\n"))

        return lang
示例#20
0
 def __init__(self, function_name, arguments=[], source=[]):
     self.__function_name = function_name
     self.__arguments = arguments
     self.__source = DuckTypedList(['to_stream'], source)
示例#21
0
    def __init__(self, function_name, arguments=[]):
        SinglePartCompilable.__init__(self)

        self.__function_name = function_name
        self.__arguments = DuckTypedList(['compile'], arguments)
示例#22
0
class ClassDefinition(SinglePartCompilable):
    def __init__(self,name):
        SinglePartCompilable.__init__(self)

        self.__name = name
        self.members = DuckTypedDict(['compile'])
        self.statics = DuckTypedDict(['compile'])
        self.ctor = ConstructorDefinition(self.name)
        self.dtor = DestructorDefinition(self.name)
        self.preamble = DuckTypedList(['compile'])
        self.mixins = DuckTypedList(['compile'])
        self.mixins.append(ObjectReference("qx.locale.MTranslation"))
        self.base_class = None
        self.assets = set()

    def set_name(self, name):
        self.__name = name
        self.ctor.name = name
        self.dtor.name = name

    def get_name(self):
        return self.__name

    name = property(get_name,set_name)

    def set_member(self, key, val):
        self.members[key]=val
        val.set_parent(self)

    def get_member(self, key, val, default=None):
        return self.__elts['members'].get(key, default)

    def compile(self, dialect):
        lang = js.primitive.FunctionCall("qx.Class.define")
        lang.add_argument(js.primitive.String(self.name))

        if self.base_class == None:
            base_class = js.primitive.ObjectReference('qx.core.Object')
        else:
            base_class = js.primitive.ObjectReference(self.base_class)

        class_members = js.primitive.Object()

        # MPC gets compiled first because they can make changes 
        # anywhere, including members dict.
        for k,v in self.members.items():
            if isinstance(v, MultiPartCompilable): # FIXME!
                v.compile(dialect, self)

        for k,v in self.members.items():
            if isinstance(v, SinglePartCompilable): # FIXME!
                class_members.set_member(k, v.compile(dialect))

        st = FunctionCall('this.base')
        st.add_argument(ObjectReference('arguments'))
        self.ctor.insert_statement(0,st)

        properties = js.primitive.Object()
        widget_property = js.primitive.Object()
        widget_property.set_member("check",
                               js.primitive.String('qx.ui.core.Widget'))
        properties.set_member("widget", widget_property)

        mixins = js.primitive.Array()
        for m in self.mixins:
            mixins.append(m.compile(dialect))

        class_dict = js.primitive.Object()
        class_dict.set_member("members", class_members)
        class_dict.set_member("extend", base_class)
        class_dict.set_member("construct", self.ctor.compile(dialect))
        class_dict.set_member("destruct", self.dtor.compile(dialect))
        class_dict.set_member("properties", properties)
        class_dict.set_member("include", mixins)

        lang.add_argument(class_dict)
        if len(self.assets) > 0:
            self.preamble.insert(0, Comment("".join(
                    ["\n#asset(%s)" % a for a in sorted(self.assets)]) + "\n"))

        return lang
示例#23
0
    def __init__(self, function_name, arguments=[]):
        SinglePartCompilable.__init__(self)

        self.__function_name = function_name
        self.__arguments = DuckTypedList(['compile'],arguments)
示例#24
0
 def __init__(self, function_name, arguments=[], source=[]):
     self.__function_name = function_name
     self.__arguments = arguments
     self.__source=DuckTypedList(['to_stream'], source)
示例#25
0
 def __init__(self):
     DuckTypedList.__init__(self,['to_stream'])