public JasminFunctionParameter BuildJasminFunctionParameter( FunctionVariableDeclarationParameter functionVariableParameter) { JasminFunctionParameter jasminFunctionParameter = new JasminFunctionParameter() .WithName(functionVariableParameter.Name) .WithType(ReturnTypeToJavaConverter.ConvertToFullRepresentation( functionVariableParameter.ReturnType)); return(jasminFunctionParameter); }
public static IEnumerable <IInstruction> GetFunctionCallInstructions(this FunctionCall functionCall) { List <IInstruction> instructions = new List <IInstruction>(); //Add parameters to stack functionCall.FunctionCallParameters.ForEach(expression => { instructions.AddRange(expression.GetInstructions()); }); var scope = functionCall.Scope; FunctionDeclaration functionDeclaration = scope.GlobalFunctionSearch(functionCall.ExtendedId.Name); var javaRefAtrribute = functionDeclaration.AttributeUsages.Find(usage => usage.Name.Name == "JavaRef"); if (javaRefAtrribute != null) { string externName = javaRefAtrribute.FunctionCallParameters .First() .CastTo <StringExpression>() .Value .RemoveFirstAndLastCharacters(); invokestaticInstruction invokestaticInstruction = InvokestaticInstruction .WithMethodFullName(externName) .WithReturnType( ReturnTypeToJavaConverter.ConvertToFullRepresentation(functionDeclaration.ReturnType)); functionDeclaration .ParameterNodes .Select(parameter => ReturnTypeToJavaConverter.ConvertToFullRepresentation(parameter.ReturnType)) .ForEach(typeName => invokestaticInstruction.WithParameterType(typeName)); instructions.Add(invokestaticInstruction); } else { //var splittedName = functionCall.FunctionDeclaration.FullName.Split('.'); //string correctedName; //if (splittedName.Length == 1) // correctedName = splittedName[0].ToCamelCase(); //else // correctedName = $"{splittedName[0]}/{splittedName[1].ToCamelCase()}"; invokestaticInstruction invokestaticInstruction = InvokestaticInstruction .WithMethodFullName(/*correctedName*/ functionCall.FunctionDeclaration.FullNameCamelCased) .WithReturnType(ReturnTypeToJavaConverter.ConvertToFullRepresentation(functionCall.ReturnType)); functionDeclaration .ParameterNodes .Select(parameter => ReturnTypeToJavaConverter.ConvertToFullRepresentation(parameter.ReturnType)) .ForEach(typeName => invokestaticInstruction.WithParameterType(typeName)); instructions.Add(invokestaticInstruction); } return(instructions); }
public JasminFunctionModule BuildJasminFunction(FunctionDeclaration function) { JasminFunctionModule jasminFunction = new JasminFunctionModule() .WithName(function.NameCamelCased /*.ToCamelCase()*/) .WithModifiers(JasminModifier.Public, JasminModifier.Static) .WithReturnType(ReturnTypeToJavaConverter.ConvertToFullRepresentation(function.ReturnType)); function.ParameterNodes.ForEach(functionParameter => jasminFunction.WithParameter(BuildJasminFunctionParameter(functionParameter))); function.StatementBlock.Statements.ForEach(statement => { jasminFunction.WithInstructions(statement.GetInstructions()); }); if (function.ReturnType == ReturnType.Void) { jasminFunction.WithInstructions(Instructions.ReturnInstruction); } return(jasminFunction); }