/*public override void InAMethodDecl(AMethodDecl node) * { * AABlock block = (AABlock) node.GetBlock(); * if (block != null) * { * if (!data.Locals.ContainsKey(block)) * data.Locals.Add(block, new List<AALocalDecl>()); * foreach (AALocalDecl formal in node.GetFormals()) * { * data.Locals[block].Add(formal); * } * } * } * * public override void InAConstructorDecl(AConstructorDecl node) * { * AABlock block = (AABlock)node.GetBlock(); * if (block != null) * { * if (!data.Locals.ContainsKey(block)) * data.Locals.Add(block, new List<AALocalDecl>()); * foreach (AALocalDecl formal in node.GetFormals()) * { * data.Locals[block].Add(formal); * } * } * }*/ public override void OutAMethodDecl(AMethodDecl node) { AStructDecl parentStruct = Util.GetAncestor <AStructDecl>(node); AEnrichmentDecl parentEnrichment = Util.GetAncestor <AEnrichmentDecl>(node); if (parentStruct != null) { //Struct method data.StructMethods[parentStruct].Add(node); } else if (parentEnrichment == null) {//Global method //Dont care about abstract methods - will add them later if (node.GetBlock() != null || node.GetNative() != null) { data.Methods.Add(new SharedData.DeclItem <AMethodDecl>(currentSourceFile, node)); data.UserMethods.Add(node); } else if (node.GetDelegate() != null) { data.Delegates.Add(new SharedData.DeclItem <AMethodDecl>(currentSourceFile, node)); } else { node.Parent().RemoveChild(node); return; } } base.OutAMethodDecl(node); }
public override void CaseAMethodDecl(AMethodDecl node) { Write("\n"); if (node.GetStatic() != null) { Write("static "); } if (node.GetNative() != null) { Write("native "); } node.GetReturnType().Apply(this); Write(" " + node.GetName().Text + "("); bool first = true; foreach (AALocalDecl formal in node.GetFormals()) { if (!first) { Write(", "); } formal.Apply(this); first = false; } if (node.GetBlock() != null) { Write(")\n"); node.GetBlock().Apply(this); } else { Write(");\n\n"); } }
public override void CaseAMethodDecl(AMethodDecl node) { if (node.GetNative() == null && node.GetBlock() == null) { return; } if (node.GetStatic() != null) { return; } string inputStr = "native " + TypeToString(node.GetReturnType()) + " " + node.GetName().Text + "("; bool first = true; foreach (AALocalDecl formal in node.GetFormals()) { if (!first) { inputStr += ", "; } inputStr += TypeToString(formal.GetType()) + " " + formal.GetName().Text; first = false; } inputStr += ");"; writer.WriteLine(inputStr); AStructDecl str = Util.GetAncestor <AStructDecl>(node); List <AMethodDecl> methodList; if (str != null) { methodList = StructMethods[str]; } else { methodList = Methods; } string sig = Util.GetMethodSignature(node); if (methodList.Any(otherMethod => Util.GetMethodSignature(otherMethod) == sig)) { return; } methodList.Add(node); node.SetBlock(null); node.Parent().RemoveChild(node); }