meilleur gestion des erreur dans sheebr et dans chibrax/kernel.js

This commit is contained in:
Marc
2021-12-14 14:45:15 +01:00
parent 4aee41a5d6
commit 5e116fb3ac
2 changed files with 24 additions and 14 deletions
+20 -8
View File
@@ -4,7 +4,21 @@ const { getline } = require('../lib/sheebr/utils')
const fs = require('fs')
let environment = require('../lib/sheebr/environment')
let aliases = require("../lib/sheebr/aliases")
let execSync = require('child_process').execSync
let { spawn } = require('child_process')
//utiliser ce code au lieuxc de execSync permet d'afficher le stdout au fur et a mesure ce qui fait qu'on a les logs quand une application throw une erreur
async function spawnAndWait(cmd, option) {
const child = spawn(cmd, option)
child.stdout.pipe(process.stdout)
process.stdin.pipe(child.stdin)
await new Promise((res, rej) => {
child.on('exit', () => {
res()
})
})
}
let current_dir = process.cwd()
@@ -16,11 +30,11 @@ async function start(){
const input = await getline("sheebr> ");
if(input == "exit") break;
if(input == "") continue;
else evaluate(input);
else await evaluate(input);
}
}
function evaluate(input){
async function evaluate(input){
let lexer = new Lexer(input)
let args = lexer.scanTokens()
args = evaluateAliases(args)
@@ -49,14 +63,14 @@ function evaluate(input){
console.clear();
break;
default:
evaluateProgram(args)
await evaluateProgram(args)
}
}
function evaluateProgram(args){
async function evaluateProgram(args){
let found = false;
for(let path of environment.path){
@@ -65,9 +79,7 @@ function evaluateProgram(args){
if(files.includes(`${args[0]}.js`)){
found = true;
try {
//@ts-expect-error
const script = execSync(`${environment.node} ${path + '/' + args[0]}.js ${args.map(arg => {return arg.includes(' ') ? `"${arg}"` : arg}).join(' ')}`, {cwd: current_dir, env: environment, shell: true});
process.stdout.write(script)
await spawnAndWait(`${environment.node} ${path + '/' + args[0]}.js ${args.map(arg => {return arg.includes(' ') ? `"${arg}"` : arg}).join(' ')}`, {cwd: current_dir, env: environment, shell: true});
tobreak = true;
} catch(e) {
console.log("Program crashed")