From e3014f21ee17ad23fbee57e1879669bb5822b07d Mon Sep 17 00:00:00 2001 From: Sharivan Date: Wed, 18 Sep 2024 15:20:49 -0300 Subject: [PATCH] =?UTF-8?q?-=20Adicionadas=20novas=20fun=C3=A7=C3=B5es=20p?= =?UTF-8?q?ara=20convers=C3=A3o=20entre=20texto=20e=20n=C3=BAmeros=20?= =?UTF-8?q?=C3=A0=20=C3=BAnidade=20System.=20J=C3=A1=20existiam=20fun?= =?UTF-8?q?=C3=A7=C3=B5s=20deste=20tipo,=20mas=20somente=20para=20strings?= =?UTF-8?q?=20nativas,=20agora=20foi=20dado=20o=20devido=20suporte=20para?= =?UTF-8?q?=20as=20strings=20contatas=20por=20refer=C3=AAncia.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adicionada a função UltimoErro à unidade System que retorna o código do último erro ocorrido em uma chamada, ou 0 caso não tenha ocorrido erro. O código de erro é atribuido automaticamente pelas funções esternas que podem gerar alguma exceção, por exemplo, a função TextoParaInt. Enquanto ainda não é adicionado suporte nativo a manipulação de exceções à linguagem, essa será a abordagem para lidar com erros. - Adicionado suporte a zoom para o painel de assembly. - Adicionada persistência do fator de zoom do console. Desta forma o zoom dado no console será salvo com o fechamento do programa e restaurado quando aberto novamente. - Adicionados atalhos para os comandos de depuração. - Adicionados mais exemplos, sugestões dos seguidores dadas no em minha live do Dia do Programador ocorrido em 13/09/2024. - Painel de depuração de variáveis agora mostra os endereços relativos e absolutos de ambas. - Painel de stack mostra o deslocamento a partir do ponteiro base para cada linha. - Corrigida a geração de código envolvendo a concatenação de strings com números. - Corrigido um bug na geração de código da instrução "quebra". - Corrigido alguns bugs relacionado a alocação e liberação de variaveis de tipos contados por referência. - Refatorações menores. --- .editorconfig | 4 + Asm/Assembler.cs | 18 +- Comp/CompilationUnity.cs | 6 +- Comp/Compiler.cs | 59 ++++-- Comp/CompilerParser.cs | 5 +- Comp/Context.cs | 22 +- Comp/Expr/CompilerBinaryExpression.cs | 124 +++++++++-- Comp/Expression.cs | 22 +- Comp/Function.cs | 53 +++-- Comp/Lex/Literal.cs | 5 +- Comp/Lex/NumericLiteral.cs | 6 +- Comp/Lex/Token.cs | 9 +- Comp/LocalVariable.cs | 8 +- Comp/Statement.cs | 19 +- Comp/Types/AbstractType.cs | 5 +- Comp/Types/ArrayType.cs | 5 +- Comp/Types/ClassType.cs | 5 +- Comp/Types/NamedType.cs | 15 +- Comp/Types/PointerType.cs | 5 +- Comp/Types/PrimitiveType.cs | 5 +- Comp/Types/StringType.cs | 5 +- Comp/Types/TypeEntry.cs | 17 ++ Comp/Variable.cs | 22 +- Examples/ExercicioMatheus.sl | 28 +++ Examples/ExercicioMatheus2.sl | 49 +++++ Examples/ExercicioMatheus3.sl | 35 +++ Examples/ExercidioDoRevista.sl | 22 ++ GUI/BreakPointMargin.cs | 8 +- GUI/ErrorRenderer.cs | 5 +- GUI/FrmSimpleCompiler.Designer.cs | 57 +++-- GUI/FrmSimpleCompiler.cs | 115 ++++++++-- GUI/FrmSimpleCompiler.resx | 9 +- GUI/ProgramConfiguratinSection.cs | 23 ++ GUI/SourceTab.cs | 34 +-- GUI/SteppingRenderer.cs | 5 +- Program.cs | 5 +- SimpleCompiler.csproj | 3 + VM/Error.cs | 11 + VM/LocalVariableNode.cs | 5 +- VM/VirtualMachine.cs | 48 +++-- examples/NumerosPerfeitos.sl | 4 +- examples/System.sl | 28 ++- examples/TesteString.sl | 30 +-- units/UnitySystem.cs | 293 +++++++++++++++++++++++++- 44 files changed, 972 insertions(+), 289 deletions(-) create mode 100644 .editorconfig create mode 100644 Comp/Types/TypeEntry.cs create mode 100644 Examples/ExercicioMatheus.sl create mode 100644 Examples/ExercicioMatheus2.sl create mode 100644 Examples/ExercicioMatheus3.sl create mode 100644 Examples/ExercidioDoRevista.sl create mode 100644 VM/Error.cs diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9768497 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +[*.cs] + +# IDE0008: Usar o tipo explícito +csharp_style_var_elsewhere = true diff --git a/Asm/Assembler.cs b/Asm/Assembler.cs index b2dc609..cf46fc5 100644 --- a/Asm/Assembler.cs +++ b/Asm/Assembler.cs @@ -1,9 +1,7 @@ -using System; +using Comp; +using System; using System.Collections.Generic; using System.IO; - -using Comp; - using VM; namespace Asm; @@ -141,7 +139,7 @@ public void CopyCode(byte[] output) public void CopyCode(byte[] output, int off, int len) { - var position = this.output.Position; + long position = this.output.Position; this.output.Position = 0; this.output.Read(output, off, len); this.output.Position = position; @@ -149,7 +147,7 @@ public void CopyCode(byte[] output, int off, int len) public void CopyCode(Stream output) { - var position = this.output.Position; + long position = this.output.Position; this.output.Position = 0; this.output.WriteTo(output); this.output.Position = position; @@ -162,7 +160,7 @@ public void CopyConstantBuffer(byte[] output) public void CopyConstantBuffer(byte[] output, int off, int len) { - var position = constantOut.Position; + long position = constantOut.Position; constantOut.Position = 0; constantOut.Read(output, off, len); constantOut.Position = position; @@ -433,11 +431,7 @@ public void EmitLoadConst(double number) public void EmitLoadConst(IntPtr ptr) { writer.Write((byte) Opcode.LC64); - - if (IntPtr.Size == sizeof(int)) - writer.Write((int) ptr); - else - writer.Write((long) ptr); + writer.Write((long) ptr); } public void EmitLoadIP() diff --git a/Comp/CompilationUnity.cs b/Comp/CompilationUnity.cs index 1185571..19c3a2f 100644 --- a/Comp/CompilationUnity.cs +++ b/Comp/CompilationUnity.cs @@ -1,8 +1,6 @@ -using System.Collections.Generic; - -using Asm; - +using Asm; using Comp.Types; +using System.Collections.Generic; namespace Comp; diff --git a/Comp/Compiler.cs b/Comp/Compiler.cs index 51c9445..b765556 100644 --- a/Comp/Compiler.cs +++ b/Comp/Compiler.cs @@ -1,11 +1,9 @@ -using System; -using System.Collections.Generic; -using System.IO; - -using Asm; - +using Asm; using Comp.Lex; using Comp.Types; +using System; +using System.Collections.Generic; +using System.IO; namespace Comp; @@ -17,7 +15,8 @@ public static int GetAlignedSize(int sizeInBytes, int alignSize = sizeof(int)) return r != 0 ? sizeInBytes + alignSize - r : sizeInBytes; } - public delegate void CompileError(SourceInterval interval, string message); + public delegate void InternalErrorEvent(Exception e); + public delegate void CompileErrorEvent(SourceInterval interval, string message); private Lexer lexer; private readonly List