Skip to content

Commit

Permalink
Tornar o worker mais resiliente a erros de compilação
Browse files Browse the repository at this point in the history
  • Loading branch information
dgadelha committed Jul 27, 2024
1 parent 37df072 commit deec5b9
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 38 deletions.
2 changes: 1 addition & 1 deletion packages/ide/src/app/tab-start/tab-start.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,12 @@

<section class="info">
<h4><svg-icon src="assets/mdi/newspaper.svg" svgAriaLabel="Ícone de jornal para notícias" />Novidades</h4>
<p><strong>26/07/2024:</strong> Melhorias na exibição de erros de compilação</p>
<p>
<strong>24/07/2024:</strong> Correção nas funções <code>maior_numero</code> e <code>menor_numero</code> da
biblioteca <code>Matematica</code>
</p>
<p><strong>02/05/2024:</strong> Portugol Webstudio como PWA: funcionamento offline</p>
<p><strong>01/05/2024:</strong> Correção de retorno em função vazia</p>
</section>

<footer>
Expand Down
4 changes: 1 addition & 3 deletions packages/runner/src/PortugolExecutor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,7 @@ export class PortugolExecutor {
});
}

#printTimes(times: { parse: number; check: number; transpile: number; execution?: number }) {
console.debug(times);
}
#printTimes(_times: { parse: number; check: number; transpile: number; execution?: number }) {}

runTranspiled({
code,
Expand Down
106 changes: 72 additions & 34 deletions packages/worker/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ import { PortugolJs } from "@portugol-webstudio/runtime";
import { CharStream, CommonTokenStream } from "antlr4ng";

function mapError(error) {
if (typeof error !== "object" || error === null) {
return {
message: String(error),
};
}

return {
message: error.message,
startLine: error.startLine,
Expand All @@ -17,18 +23,27 @@ function mapError(error) {
* @param {string} code
*/
function checkCode(code) {
const inputStream = CharStream.fromString(code);
const lexer = new PortugolLexer(inputStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new PortugolParser(tokenStream);
const errorListener = new PortugolErrorListener();
let errors = [];
let parseErrors = [];

try {
const inputStream = CharStream.fromString(code);
const lexer = new PortugolLexer(inputStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new PortugolParser(tokenStream);
const errorListener = new PortugolErrorListener();

parser.removeErrorListeners();
parser.addErrorListener(errorListener);

parser.removeErrorListeners();
parser.addErrorListener(errorListener);
parseErrors = errorListener.getErrors();

const tree = parser.arquivo();
const errors = PortugolErrorChecker.checkTree(tree);
const parseErrors = errorListener.getErrors();
const tree = parser.arquivo();
errors = PortugolErrorChecker.checkTree(tree);
parseErrors = errorListener.getErrors();
} catch (error) {
parseErrors.push(error);
}

return {
errors: errors.map(error => mapError(error)),
Expand All @@ -40,36 +55,59 @@ function checkCode(code) {
* @param {string} code
*/
function transpileCode(code) {
const parseStart = performance.now();
const inputStream = CharStream.fromString(code);
const lexer = new PortugolLexer(inputStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new PortugolParser(tokenStream);
const errorListener = new PortugolErrorListener();

errorListener.reset();

parser.removeErrorListeners();
parser.addErrorListener(errorListener);

const tree = parser.arquivo();
const parseEnd = performance.now();
const checkStart = performance.now();
const errors = PortugolErrorChecker.checkTree(tree);
const checkEnd = performance.now();
const parseErrors = errorListener.getErrors();
const transpileStart = performance.now();
const js = new PortugolJs().visit(tree);
const transpileEnd = performance.now();
/**
* @type {string | null}
*/
let js = "";
let errors = [];
let parseErrors = [];
let parseTime = 0;
let checkTime = 0;
let transpileTime = 0;

try {
const parseStart = performance.now();
const inputStream = CharStream.fromString(code);
const lexer = new PortugolLexer(inputStream);
const tokenStream = new CommonTokenStream(lexer);
const parser = new PortugolParser(tokenStream);
const errorListener = new PortugolErrorListener();

errorListener.reset();

parser.removeErrorListeners();
parser.addErrorListener(errorListener);

const tree = parser.arquivo();
const parseEnd = performance.now();

parseTime = parseEnd - parseStart;
parseErrors = errorListener.getErrors();

const checkStart = performance.now();
errors = PortugolErrorChecker.checkTree(tree);
const checkEnd = performance.now();

checkTime = checkEnd - checkStart;

parseErrors = errorListener.getErrors();
const transpileStart = performance.now();
js = new PortugolJs().visit(tree);
const transpileEnd = performance.now();

transpileTime = transpileEnd - transpileStart;
} catch (error) {
parseErrors.push(error);
}

return {
js,
errors: errors.map(error => mapError(error)),
parseErrors: parseErrors.map(error => mapError(error)),
times: {
parse: parseEnd - parseStart,
check: checkEnd - checkStart,
transpile: transpileEnd - transpileStart,
parse: parseTime,
check: checkTime,
transpile: transpileTime,
},
};
}
Expand Down

0 comments on commit deec5b9

Please sign in to comment.