Example #1
0
        public JasminField BuildJasminStaticVariable(VariableDeclaration variableDeclaration)
        {
            if (!variableDeclaration.IsStatic)
            {
                throw new Exception($"{variableDeclaration} is not static!");
            }

            JasminModifier modifier = JasminModifier.Public;

            if (variableDeclaration.IsStatic)
            {
                modifier |= JasminModifier.Static;
            }

            var fieldInitializationInstructions = variableDeclaration.Value.GetInstructions().ToList();

            fieldInitializationInstructions.Add(Instructions.PutStaticInstruction
                                                .WithFieldName(variableDeclaration.FullName)
                                                .WithSignature(variableDeclaration.ReturnType.ConvertToFullRepresentation()));

            JasminField jasminField = new JasminField()
                                      .WithName(variableDeclaration.Name)
                                      .WithSignature(variableDeclaration.ReturnType.ConvertToFullRepresentation())
                                      .WithModifier(modifier)
                                      .WithValue(fieldInitializationInstructions);

            return(jasminField);
        }
Example #2
0
        private void GenerateClassCode(ClassDeclaration classDeclaration)
        {
            if (classDeclaration.IsExtern || !classDeclaration.CodeGeneration)
            {
                return;
            }

            JasminModifier classModifier = JasminModifier.Public;

            if (classDeclaration.IsStatic)
            {
                classModifier |= JasminModifier.Final;
            }

            JasminClassModule jasminClass = new JasminClassModule(classDeclaration.Name)
                                            .WithModifier(classModifier);

            classDeclaration.VarDeclarationNodes.ForEach(declaration =>
            {
                if (declaration.Initialized)
                {
                    jasminClass.WithField(BuildJasminStaticVariable(declaration));
                }
            });

            classDeclaration.FunctionDeclarationNodes.ForEach(function =>
            {
                if (!function.IsExternal)
                {
                    jasminClass.WithFunction(BuildJasminFunction(function));
                }
            });

            _classListings.Add(jasminClass.Name, string.Empty);

            jasminClass.GenerateListing()
            .ForEach(classListing =>
            {
                _classListings[jasminClass.Name] += classListing + Environment.NewLine;
                //_classListings.Add(jasminClass.Name, classListing + Environment.NewLine);
            });
            //PushLine($"{Class} {Public} "
            //         + $"{(classDeclaration.IsStatic ? Final + " " : string.Empty)}"
            //         + $"{classDeclaration.Name}");
            //PushLine($"{Super} {JasminReferenceConstants.JavaObject}");
            //classDeclaration.FunctionDeclarationNodes.ForEach(GenerateFunctionCode);
        }
Example #3
0
 public JasminField WithModifier(JasminModifier modifier)
 {
     Modifier = modifier;
     return(this);
 }
Example #4
0
 public JasminClassModule WithModifier(JasminModifier modifier)
 {
     Modifier = modifier;
     return(this);
 }