/// <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();
}
}