a few fixes and improvements to shell script parsing

This commit is contained in:
Lisa Milne 2023-12-15 16:58:34 +10:00
parent c56fe770b9
commit c52058dacb
2 changed files with 17 additions and 9 deletions

View file

@ -86,7 +86,9 @@ return Object.create({
case ' ':
if (!q && !c) {
if (!wasq && s[s.length-1] == ';') {
parts.push(s.substring(0,s.length-1));
var ss = s.substring(0,s.length-1);
if (ss.length > 0)
parts.push(ss);
parts.push(';');
}else{
parts.push(s);
@ -104,7 +106,9 @@ return Object.create({
}
if (s.length > 0) {
if (!wasq && s[s.length-1] == ';') {
parts.push(s.substring(0,s.length-1));
var ss = s.substring(0,s.length-1);
if (ss.length > 0)
parts.push(ss);
parts.push(';');
}else{
parts.push(s);

View file

@ -149,6 +149,7 @@ clite.commands.load('sh',function(args,env,io) {
},
internal:{
lines:[],
scrpt:null,
parseFile:function(f) {
var fn = clite.resolvePath(f);
if (fn == null) {
@ -172,6 +173,7 @@ clite.commands.load('sh',function(args,env,io) {
parser.run();
return;
}
parser.internal.script = '';
parser.internal.lines = data.split('\n');
if (parser.internal.lines.length < 1) {
parser.run();
@ -182,15 +184,16 @@ clite.commands.load('sh',function(args,env,io) {
parseLine:function() {
var l = parser.internal.lines.shift();
if (l == null) {
parser.run();
parser.internal.exec();
return;
}
if (l[0] == '#') {
parser.internal.parseLine();
return;
}
exec.setCommand(l);
exec.run(parser.internal.parseLine);
if (l[0] != '#')
parser.internal.script += l+'; ';
parser.internal.parseLine();
},
exec:function() {
exec.setCommand(parser.internal.script);
exec.run(parser.run);
}
},
exit:function() {
@ -617,6 +620,7 @@ clite.commands.load('sh',function(args,env,io) {
fault = true;
return;
}
c.args[0] = c.args[0].trim();
c.path = resolvePATH(c.args[0]);
});
if (fault) {