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("}")
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
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
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("}")
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(")")
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])
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(")")
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])
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("]")
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("]")
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
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