Exemple #1
0
        public JasminFunctionParameter BuildJasminFunctionParameter(
            FunctionVariableDeclarationParameter functionVariableParameter)
        {
            JasminFunctionParameter jasminFunctionParameter =
                new JasminFunctionParameter()
                .WithName(functionVariableParameter.Name)
                .WithType(ReturnTypeToJavaConverter.ConvertToFullRepresentation(
                              functionVariableParameter.ReturnType));

            return(jasminFunctionParameter);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }