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); }
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); }
public JasminField WithModifier(JasminModifier modifier) { Modifier = modifier; return(this); }
public JasminClassModule WithModifier(JasminModifier modifier) { Modifier = modifier; return(this); }