new built-in getCurrentScriptDirectory; new cli option syntax; added -p option to profile programs and -H to set heap size; fixed a bug in string.cat

This commit is contained in:
Francesco Cozzuto
2023-01-19 20:14:23 +01:00
parent 37420cdea2
commit 9cc7121cd9
21 changed files with 631 additions and 255 deletions
+4 -2
View File
@@ -5,6 +5,8 @@ Router = {table: Map, plug: Callable, solve: Callable};
fun loadFile(path: String) {
print("path=", path, "\n");
stream, error = files.openFile(path, files.READ);
if error != none:
return none, error;
@@ -83,8 +85,8 @@ fun new() {
if isCallable(method_item):
res = method_item(req);
else {
cwd = getCurrentWorkingDirectory();
file = path.join(cwd, method_item);
csd = getCurrentScriptDirectory();
file = path.join(csd, method_item);
data, error = loadFile(file);
if error == none:
res = respond(200, data);
+38 -1
View File
@@ -251,6 +251,43 @@ fun parse(src: String) {
return val, err;
}
fun readFile(name: String) {
stream, error = files.openFile(name, files.READ);
if error != none:
return error;
text = "";
size = 256;
do {
size = size * 2;
buff = buffer.new(size);
read_bytes, error = files.read(stream, buff);
if error != none:
return error;
text2, error = buffer.toString(buff);
if error != none:
return none, error;
assert(text2 != none);
text = string.cat(text, text2);
} while count(buff) == read_bytes;
return text;
}
fun parseFile(name: String) {
text, error = readFile(name);
if error != none:
return none, error;
assert(text != none);
result, error = parse(text);
return result, error;
}
fun test() {
compareAny = import("compare.noja").compareAny;
@@ -330,4 +367,4 @@ fun test() {
print(" total: ", total, "\n");
}
return {parse: parse, test: test};
return {parse: parse, parseFile: parseFile, test: test};
+5 -5
View File
@@ -8,13 +8,13 @@ Scanner = {
consumeSpaces: Callable
};
fun isSpace(c: String)
return c == ' '
or c == '\t'
or c == '\n';
fun newScanner(src: String) {
fun isSpace(c: String)
return c == ' '
or c == '\t'
or c == '\n';
scan = {
src: src,
i: 0,