private void AddInitFiled(LuaIdentifierNameSyntax name, LuaExpressionSyntax value) { LuaMemberAccessExpressionSyntax memberAccess = new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, name); LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(memberAccess, value); initStatements_.Add(new LuaExpressionStatementSyntax(assignment)); }
internal void AddBaseTypes(IEnumerable <LuaExpressionSyntax> baseTypes, LuaSpeaicalGenericType genericArgument = null) { bool hasLazyGenericArgument = false; if (genericArgument != null) { if (genericArgument.IsLazy) { hasLazyGenericArgument = true; } else { AddResultTable(genericArgument.Name, genericArgument.Value); } } LuaTableInitializerExpression table = new LuaTableInitializerExpression(); table.Items.AddRange(baseTypes.Select(i => new LuaSingleTableItemSyntax(i))); LuaFunctionExpressionSyntax functionExpression = new LuaFunctionExpressionSyntax(); functionExpression.AddParameter(LuaIdentifierNameSyntax.Global); if (hasLazyGenericArgument) { functionExpression.AddParameter(LuaIdentifierNameSyntax.This); var assignment = new LuaAssignmentExpressionSyntax(new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, genericArgument.Name), genericArgument.Value); functionExpression.AddStatement(assignment); } functionExpression.AddStatement(new LuaReturnStatementSyntax(table)); AddResultTable(LuaIdentifierNameSyntax.Inherits, functionExpression); }
public void AddMethod(LuaIdentifierNameSyntax name, LuaFunctionExpressionSyntax method, bool isPrivate, bool isStaticLazy = false, List <LuaStatementSyntax> documentationComments = null) { local_.Variables.Add(name); LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(name, method); if (documentationComments != null && documentationComments.Count > 0) { LuaStatementListSyntax statementList = new LuaStatementListSyntax(); statementList.Statements.AddRange(documentationComments); methodList_.Statements.Add(statementList); } methodList_.Statements.Add(new LuaExpressionStatementSyntax(assignment)); if (!isPrivate) { if (isStaticLazy) { var thisAssignment = new LuaAssignmentExpressionSyntax(new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, name), name); staticLazyStatements_.Add(new LuaExpressionStatementSyntax(thisAssignment)); } else { AddResultTable(name); } } }
public void AddField(LuaIdentifierNameSyntax name, LuaExpressionSyntax value, bool isImmutable, bool isStatic, bool isPrivate, bool isReadOnly) { if (isStatic) { if (isPrivate) { local_.Variables.Add(name); if (value != null) { LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(name, value); if (isImmutable) { methodList_.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } else { staticInitStatements_.Add(new LuaExpressionStatementSyntax(assignment)); } } } else { if (isReadOnly) { local_.Variables.Add(name); if (value != null) { LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(name, value); staticInitStatements_.Add(new LuaExpressionStatementSyntax(assignment)); staticAssignmentNames_.Add(name); } } else { if (value != null) { LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, name), value); staticInitStatements_.Add(new LuaExpressionStatementSyntax(assignment)); } } } } else { if (value != null) { if (isImmutable) { AddResultTable(name, value); } else { AddInitFiled(name, value); } } } }
internal void AddBaseTypes(IEnumerable <LuaExpressionSyntax> baseTypes, LuaSpeaicalGenericType genericArgument, List <LuaIdentifierNameSyntax> baseCopyFields) { bool hasLazyGenericArgument = false; if (genericArgument != null) { if (genericArgument.IsLazy) { hasLazyGenericArgument = true; } else { AddResultTable(genericArgument.Name, genericArgument.Value); } } bool hasBaseCopyField = baseCopyFields != null && baseCopyFields.Count > 0; LuaFunctionExpressionSyntax functionExpression = new LuaFunctionExpressionSyntax(); functionExpression.AddParameter(LuaIdentifierNameSyntax.Global); if (hasLazyGenericArgument || hasBaseCopyField) { functionExpression.AddParameter(LuaIdentifierNameSyntax.This); } if (hasLazyGenericArgument) { var assignment = new LuaAssignmentExpressionSyntax(new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, genericArgument.Name), genericArgument.Value); functionExpression.AddStatement(assignment); } LuaTableExpression table = new LuaTableExpression(); if (hasBaseCopyField) { var baseIdentifier = LuaIdentifierNameSyntax.Base; functionExpression.AddStatement(new LuaLocalVariableDeclaratorSyntax(baseIdentifier, baseTypes.First())); foreach (var field in baseCopyFields) { var left = new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, field); var right = new LuaMemberAccessExpressionSyntax(baseIdentifier, field); functionExpression.AddStatement(new LuaAssignmentExpressionSyntax(left, right)); table.Items.Add(new LuaSingleTableItemSyntax(baseIdentifier)); table.Items.AddRange(baseTypes.Skip(1).Select(i => new LuaSingleTableItemSyntax(i))); } } else { table.Items.AddRange(baseTypes.Select(i => new LuaSingleTableItemSyntax(i))); } functionExpression.AddStatement(new LuaReturnStatementSyntax(table)); AddResultTable(LuaIdentifierNameSyntax.Inherits, functionExpression); }
public LuaGotoCaseAdapterStatement(LuaIdentifierNameSyntax identifier) { if (identifier == null) { throw new ArgumentNullException(nameof(identifier)); } LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(identifier, LuaIdentifierNameSyntax.True); Assignment = new LuaExpressionStatementSyntax(assignment); GotoStatement = new LuaGotoStatement(identifier); }
private void CheckUsingDeclares() { var imports = usingDeclares_.Where(i => !i.IsFromCode).ToList(); if (imports.Count > 0) { imports.Sort((x, y) => x.Prefix.CompareTo(y.Prefix)); foreach (var import in imports) { AddImport(new LuaIdentifierNameSyntax(import.NewPrefix), new LuaIdentifierNameSyntax(import.Prefix)); } } var usingDeclares = usingDeclares_.Where(i => i.IsFromCode).ToList(); if (usingDeclares.Count > 0) { usingDeclares.Sort((x, y) => x.Prefix.CompareTo(y.Prefix)); foreach (var usingDeclare in usingDeclares) { AddImport(new LuaIdentifierNameSyntax(usingDeclare.NewPrefix), null); } var global = LuaIdentifierNameSyntax.Global; LuaFunctionExpressionSyntax functionExpression = new LuaFunctionExpressionSyntax(); functionExpression.AddParameter(global); foreach (var usingDeclare in usingDeclares) { if (usingDeclare.Prefix != usingDeclare.NewPrefix) { LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(new LuaIdentifierNameSyntax(usingDeclare.NewPrefix), new LuaIdentifierNameSyntax(usingDeclare.Prefix)); functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } else { LuaMemberAccessExpressionSyntax right = new LuaMemberAccessExpressionSyntax(global, new LuaIdentifierNameSyntax(usingDeclare.Prefix)); LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(new LuaIdentifierNameSyntax(usingDeclare.NewPrefix), right); functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } } LuaInvocationExpressionSyntax invocationExpression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.UsingDeclare, functionExpression); importAreaStatements.Statements.Add(new LuaExpressionStatementSyntax(invocationExpression)); } int index = Statements.FindIndex(i => i is LuaNamespaceDeclarationSyntax); if (index != -1) { Statements.Insert(index, importAreaStatements); } }
public void AddMethod(LuaIdentifierNameSyntax name, LuaFunctionExpressionSyntax method, bool isPrivate, LuaDocumentStatement document = null) { if (document != null && document.HasIgnoreAttribute) { return; } local_.Variables.Add(name); LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(name, method); if (document != null && !document.IsEmpty) { methodList_.Statements.Add(document); } methodList_.Statements.Add(new LuaExpressionStatementSyntax(assignment)); if (!isPrivate) { AddResultTable(name); } }
private void AddPropertyOrEvent(bool isProperty, LuaIdentifierNameSyntax name, LuaIdentifierNameSyntax innerName, LuaExpressionSyntax value, bool isImmutable, bool isStatic, bool isPrivate) { LuaIdentifierNameSyntax initMethodIdentifier; LuaPropertyOrEventIdentifierNameSyntax get, set; if (isProperty) { initMethodIdentifier = LuaIdentifierNameSyntax.Property; get = new LuaPropertyOrEventIdentifierNameSyntax(true, true, name); set = new LuaPropertyOrEventIdentifierNameSyntax(true, false, name); } else { initMethodIdentifier = LuaIdentifierNameSyntax.Event; get = new LuaPropertyOrEventIdentifierNameSyntax(false, true, name); set = new LuaPropertyOrEventIdentifierNameSyntax(false, false, name); } local_.Variables.Add(get); local_.Variables.Add(set); LuaMultipleAssignmentExpressionSyntax assignment = new LuaMultipleAssignmentExpressionSyntax(); assignment.Lefts.Add(get); assignment.Lefts.Add(set); LuaInvocationExpressionSyntax invocation = new LuaInvocationExpressionSyntax(initMethodIdentifier); invocation.AddArgument(new LuaStringLiteralExpressionSyntax(innerName)); assignment.Rights.Add(invocation); methodList_.Statements.Add(new LuaExpressionStatementSyntax(assignment)); if (value != null) { if (isStatic) { if (isImmutable) { AddResultTable(name, value); } else { LuaAssignmentExpressionSyntax thisAssignment = new LuaAssignmentExpressionSyntax(name, value); staticLazyStatements_.Add(new LuaExpressionStatementSyntax(thisAssignment)); } } else { if (isImmutable) { AddResultTable(name, value); } else { AddInitFiled(name, value); } } } if (!isPrivate) { AddResultTable(get); AddResultTable(set); } }
private (LuaPropertyOrEventIdentifierNameSyntax, LuaPropertyOrEventIdentifierNameSyntax) AddPropertyOrEvent(bool isProperty, LuaIdentifierNameSyntax name, LuaIdentifierNameSyntax innerName, LuaExpressionSyntax value, bool isImmutable, bool isStatic, bool isPrivate, LuaExpressionSyntax typeExpression, List <LuaStatementSyntax> statements) { LuaPropertyOrEventIdentifierNameSyntax get, set; if (isProperty) { get = new LuaPropertyOrEventIdentifierNameSyntax(true, true, name); set = new LuaPropertyOrEventIdentifierNameSyntax(true, false, name); } else { get = new LuaPropertyOrEventIdentifierNameSyntax(false, true, name); set = new LuaPropertyOrEventIdentifierNameSyntax(false, false, name); } local_.Variables.Add(get); local_.Variables.Add(set); if (!isStatic) { LuaIdentifierNameSyntax initMethodIdentifier = isProperty ? LuaIdentifierNameSyntax.Property : LuaIdentifierNameSyntax.Event; LuaMultipleAssignmentExpressionSyntax assignment = new LuaMultipleAssignmentExpressionSyntax(); assignment.Lefts.Add(get); assignment.Lefts.Add(set); LuaInvocationExpressionSyntax invocation = new LuaInvocationExpressionSyntax(initMethodIdentifier); invocation.AddArgument(new LuaStringLiteralExpressionSyntax(innerName)); assignment.Rights.Add(invocation); methodList_.Statements.Add(assignment); } else { var memberAccess = new LuaMemberAccessExpressionSyntax(typeExpression, innerName); var getFunction = new LuaFunctionExpressionSyntax(); var setFunction = new LuaFunctionExpressionSyntax(); if (isProperty) { getFunction.AddStatement(new LuaReturnStatementSyntax(memberAccess)); setFunction.AddParameter(LuaIdentifierNameSyntax.Value); var assignment = new LuaAssignmentExpressionSyntax(memberAccess, LuaIdentifierNameSyntax.Value); setFunction.AddStatement(assignment); } else { getFunction.AddParameter(LuaIdentifierNameSyntax.Value); var getAssignment = new LuaAssignmentExpressionSyntax(memberAccess, new LuaBinaryExpressionSyntax(memberAccess, Tokens.Plus, LuaIdentifierNameSyntax.Value)); getFunction.AddStatement(getAssignment); setFunction.AddParameter(LuaIdentifierNameSyntax.Value); var setAssignment = new LuaAssignmentExpressionSyntax(memberAccess, new LuaBinaryExpressionSyntax(memberAccess, Tokens.Sub, LuaIdentifierNameSyntax.Value)); setFunction.AddStatement(setAssignment); } methodList_.Statements.Add(new LuaAssignmentExpressionSyntax(get, getFunction)); methodList_.Statements.Add(new LuaAssignmentExpressionSyntax(set, setFunction)); } if (value != null) { if (isStatic) { if (isImmutable) { AddResultTable(innerName, value); } else { if (statements != null) { staticInitStatements_.AddRange(statements); } LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax(new LuaMemberAccessExpressionSyntax(LuaIdentifierNameSyntax.This, innerName), value); staticInitStatements_.Add(new LuaExpressionStatementSyntax(assignment)); } } else { if (isImmutable) { AddResultTable(innerName, value); } else { if (statements != null) { initStatements_.AddRange(statements); } AddInitFiled(innerName, value); } } } if (!isPrivate) { AddResultTable(get); AddResultTable(set); } return(get, set); }
private void CheckUsingDeclares() { var imports = UsingDeclares.Where(i => !i.IsFromCode).ToList(); if (imports.Count > 0) { imports.Sort(); foreach (var import in imports) { AddImport(import.NewPrefix, import.Prefix); } } var genericImports = GenericUsingDeclares.Where(i => !i.IsFromCode).ToList(); if (genericImports.Count > 0) { genericImports.Sort(); foreach (var import in genericImports) { AddImport(import.NewName, import.InvocationExpression); } } var usingDeclares = UsingDeclares.Where(i => i.IsFromCode).ToList(); var genericDeclares = GenericUsingDeclares.Where(i => i.IsFromCode).ToList(); if (usingDeclares.Count > 0 || genericDeclares.Count > 0 || genericImports.Count > 0) { usingDeclares.Sort(); genericDeclares.Sort(); genericImports.Sort(); foreach (var usingDeclare in usingDeclares) { AddImport(usingDeclare.NewPrefix, null); } foreach (var usingDeclare in genericDeclares) { AddImport(usingDeclare.NewName, null); } foreach (var import in genericImports) { AddImport(import.NewName, null); } var global = LuaIdentifierNameSyntax.Global; var functionExpression = new LuaFunctionExpressionSyntax(); functionExpression.AddParameter(global); foreach (var usingDeclare in usingDeclares) { if (usingDeclare.Prefix != usingDeclare.NewPrefix) { var assignment = new LuaAssignmentExpressionSyntax(usingDeclare.NewPrefix, usingDeclare.Prefix); functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } else { var right = new LuaMemberAccessExpressionSyntax(global, usingDeclare.Prefix); var assignment = new LuaAssignmentExpressionSyntax(usingDeclare.NewPrefix, right); functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } } foreach (var usingDeclare in genericDeclares) { var assignment = new LuaAssignmentExpressionSyntax(usingDeclare.NewName, usingDeclare.InvocationExpression); functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } foreach (var genericImport in genericImports) { var assignment = new LuaAssignmentExpressionSyntax(genericImport.NewName, genericImport.InvocationExpression); functionExpression.Body.Statements.Add(new LuaExpressionStatementSyntax(assignment)); } var invocationExpression = new LuaInvocationExpressionSyntax(LuaIdentifierNameSyntax.Import, functionExpression); importAreaStatements.Statements.Add(new LuaExpressionStatementSyntax(invocationExpression)); } int index = Statements.FindIndex(i => i is LuaNamespaceDeclarationSyntax); if (index != -1) { Statements.Insert(index, importAreaStatements); } }