public virtual void AddProperty(string name, JavaCodeIntermediate.Property prop)
 {
     mProps.Put(name, prop);
 }
Exemple #2
0
        /// <exception cref="Kirikiri.Tjs2.CompileException"></exception>
        /// <exception cref="Kirikiri.Tjs2.VariantException"></exception>
        /// <exception cref="Kirikiri.Tjs2.TJSException"></exception>
        public virtual void ToJavaCode(string text, bool isexpression, bool isresultneeded
            )
        {
            if (text == null)
            {
                return;
            }
            if (text.Length == 0)
            {
                return;
            }
            mScript = text;
            Parse(text, isexpression, isresultneeded);
            AList<JavaCodeIntermediate> clazz = new AList<JavaCodeIntermediate>();
            int count = mInterCodeGeneratorList.Count;
            for (int i = 0; i < count; i++)
            {
                InterCodeGenerator v = mInterCodeGeneratorList[i];
                if (v != null)
                {
                    int type = v.GetContextType();
                    AList<string> codes;
                    switch (type)
                    {
                        case ContextType.TOP_LEVEL:
                        {
                            break;
                        }

                        case ContextType.FUNCTION:
                        {
                            InterCodeGenerator parent = v.GetParent();
                            if (parent.GetContextType() == ContextType.CLASS)
                            {
                                string parentName = parent.GetName();
                                codes = v.ToJavaCode(0, 0);
                                int ccount = clazz.Count;
                                bool inserted = false;
                                for (int j = 0; j < ccount; j++)
                                {
                                    JavaCodeIntermediate ci = clazz[j];
                                    if (ci.GetName().Equals(parentName))
                                    {
                                        ci.AddMember(new JavaCodeIntermediate.ClosureCode(v.GetName(), type, codes));
                                        inserted = true;
                                        break;
                                    }
                                }
                                if (inserted == false)
                                {
                                    JavaCodeIntermediate ci = new JavaCodeIntermediate(parentName);
                                    ci.AddMember(new JavaCodeIntermediate.ClosureCode(v.GetName(), type, codes));
                                    clazz.AddItem(ci);
                                }
                            }
                            break;
                        }

                        case ContextType.EXPR_FUNCTION:
                        {
                            break;
                        }

                        case ContextType.PROPERTY:
                        {
                            InterCodeGenerator parent = v.GetParent();
                            if (parent.GetContextType() == ContextType.CLASS)
                            {
                                string parentName = parent.GetName();
                                int ccount = clazz.Count;
                                bool inserted = false;
                                for (int j = 0; j < ccount; j++)
                                {
                                    JavaCodeIntermediate ci = clazz[j];
                                    if (ci.GetName().Equals(parentName))
                                    {
                                        ci.AddProperty(v.GetName(), new JavaCodeIntermediate.Property(v.GetName()));
                                        inserted = true;
                                        break;
                                    }
                                }
                                if (inserted == false)
                                {
                                    JavaCodeIntermediate ci = new JavaCodeIntermediate(parentName);
                                    ci.AddProperty(v.GetName(), new JavaCodeIntermediate.Property(v.GetName()));
                                    clazz.AddItem(ci);
                                }
                            }
                            break;
                        }

                        case ContextType.PROPERTY_SETTER:
                        case ContextType.PROPERTY_GETTER:
                        {
                            InterCodeGenerator parent = v.GetParent();
                            if (parent.GetContextType() == ContextType.PROPERTY)
                            {
                                InterCodeGenerator parentparent = parent.GetParent();
                                if (parentparent.GetContextType() == ContextType.CLASS)
                                {
                                    string propName = parent.GetName();
                                    string className = parentparent.GetName();
                                    int ccount = clazz.Count;
                                    bool inserted = false;
                                    JavaCodeIntermediate target = null;
                                    for (int j = 0; j < ccount; j++)
                                    {
                                        JavaCodeIntermediate ci = clazz[j];
                                        if (ci.GetName().Equals(className))
                                        {
                                            target = ci;
                                            inserted = true;
                                            break;
                                        }
                                    }
                                    if (inserted == false)
                                    {
                                        JavaCodeIntermediate ci = new JavaCodeIntermediate(className);
                                        target = ci;
                                        clazz.AddItem(ci);
                                    }
                                    JavaCodeIntermediate.Property prop = target.GetProperty(propName);
                                    if (prop == null)
                                    {
                                        prop = new JavaCodeIntermediate.Property(propName);
                                        target.AddProperty(propName, prop);
                                    }
                                    codes = v.ToJavaCode(0, 0);
                                    if (type == ContextType.PROPERTY_SETTER)
                                    {
                                        prop.SetSetter(codes);
                                    }
                                    else
                                    {
                                        prop.SetGetter(codes);
                                    }
                                }
                            }
                            break;
                        }

                        case ContextType.CLASS:
                        {
                            JavaCodeIntermediate ci = new JavaCodeIntermediate(v.GetName());
                            codes = v.ToJavaCode(0, 0);
                            ci.SetInitializer(codes);
                            clazz.AddItem(ci);
                            break;
                        }

                        case ContextType.SUPER_CLASS_GETTER:
                        {
                            break;
                        }
                    }
                }
            }
            int ccount_1 = clazz.Count;
            for (int j_1 = 0; j_1 < ccount_1; j_1++)
            {
                JavaCodeIntermediate ci = clazz[j_1];
                ci.Write();
            }
        }
 public virtual void AddMember(JavaCodeIntermediate.ClosureCode code)
 {
     mMembers.AddItem(code);
 }