rip-lang 3.0.1 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/dist/rip.browser.js +30 -5
- package/docs/dist/rip.browser.min.js +120 -120
- package/docs/dist/rip.browser.min.js.br +0 -0
- package/package.json +1 -1
- package/src/grammar/grammar.rip +1 -1
- package/src/grammar/solar.rip +1 -1
- package/src/lexer.js +24 -6
package/docs/dist/rip.browser.js
CHANGED
|
@@ -926,6 +926,8 @@ class Lexer {
|
|
|
926
926
|
tag = "SHIFT";
|
|
927
927
|
else if (val === "?" && prev?.spaced)
|
|
928
928
|
tag = "SPACE?";
|
|
929
|
+
else if (val === "?" && (this.chunk[1] === "[" || this.chunk[1] === "("))
|
|
930
|
+
tag = "?.";
|
|
929
931
|
else if (prev) {
|
|
930
932
|
if (val === "(" && !prev.spaced && CALLABLE.has(prev[0])) {
|
|
931
933
|
if (prev[0] === "?.")
|
|
@@ -1019,9 +1021,8 @@ class Lexer {
|
|
|
1019
1021
|
let starter = null;
|
|
1020
1022
|
let indent = null;
|
|
1021
1023
|
let outdent = null;
|
|
1022
|
-
let bodyStart = null;
|
|
1023
1024
|
let condition = (token, i) => {
|
|
1024
|
-
return token[1] !== ";" && SINGLE_CLOSERS.has(token[0]) && !(token[0] === "TERMINATOR" && EXPRESSION_CLOSE.has(this.tokens[i + 1]?.[0])) && !(token[0] === "ELSE" && starter !== "THEN") || token[0] === "," && (starter === "->" || starter === "=>") && !
|
|
1025
|
+
return token[1] !== ";" && SINGLE_CLOSERS.has(token[0]) && !(token[0] === "TERMINATOR" && EXPRESSION_CLOSE.has(this.tokens[i + 1]?.[0])) && !(token[0] === "ELSE" && starter !== "THEN") || token[0] === "," && (starter === "->" || starter === "=>") && !this.commaInImplicitCall(i) || CALL_CLOSERS.has(token[0]) && (this.tokens[i - 1]?.newLine || this.tokens[i - 1]?.[0] === "OUTDENT");
|
|
1025
1026
|
};
|
|
1026
1027
|
let action = (token, i) => {
|
|
1027
1028
|
let idx = this.tokens[i - 1]?.[0] === "," ? i - 1 : i;
|
|
@@ -1055,7 +1056,6 @@ class Lexer {
|
|
|
1055
1056
|
}
|
|
1056
1057
|
if (SINGLE_LINERS.has(tag) && this.tokens[i + 1]?.[0] !== "INDENT" && !(tag === "ELSE" && this.tokens[i + 1]?.[0] === "IF")) {
|
|
1057
1058
|
starter = tag;
|
|
1058
|
-
bodyStart = i + 2;
|
|
1059
1059
|
[indent, outdent] = this.makeIndentation();
|
|
1060
1060
|
if (tag === "THEN")
|
|
1061
1061
|
indent.fromThen = true;
|
|
@@ -1279,6 +1279,31 @@ class Lexer {
|
|
|
1279
1279
|
i++;
|
|
1280
1280
|
}
|
|
1281
1281
|
}
|
|
1282
|
+
commaInImplicitCall(i) {
|
|
1283
|
+
let levels = 0;
|
|
1284
|
+
for (let j = i - 1;j >= 0; j--) {
|
|
1285
|
+
let tag = this.tokens[j][0];
|
|
1286
|
+
if (EXPRESSION_END.has(tag)) {
|
|
1287
|
+
levels++;
|
|
1288
|
+
continue;
|
|
1289
|
+
}
|
|
1290
|
+
if (EXPRESSION_START.has(tag)) {
|
|
1291
|
+
if (tag === "INDENT")
|
|
1292
|
+
return false;
|
|
1293
|
+
levels--;
|
|
1294
|
+
if (levels < 0)
|
|
1295
|
+
return false;
|
|
1296
|
+
continue;
|
|
1297
|
+
}
|
|
1298
|
+
if (levels > 0)
|
|
1299
|
+
continue;
|
|
1300
|
+
if (IMPLICIT_FUNC.has(tag) && this.tokens[j].spaced) {
|
|
1301
|
+
let nt = this.tokens[j + 1]?.[0];
|
|
1302
|
+
return IMPLICIT_CALL.has(nt) || nt === "..." && IMPLICIT_CALL.has(this.tokens[j + 2]?.[0]);
|
|
1303
|
+
}
|
|
1304
|
+
}
|
|
1305
|
+
return false;
|
|
1306
|
+
}
|
|
1282
1307
|
looksObjectish(j) {
|
|
1283
1308
|
if (!this.tokens[j])
|
|
1284
1309
|
return false;
|
|
@@ -5424,8 +5449,8 @@ function compileToJS(source, options = {}) {
|
|
|
5424
5449
|
return new Compiler(options).compileToJS(source);
|
|
5425
5450
|
}
|
|
5426
5451
|
// src/browser.js
|
|
5427
|
-
var VERSION = "3.0.
|
|
5428
|
-
var BUILD_DATE = "2026-02-07@15:
|
|
5452
|
+
var VERSION = "3.0.2";
|
|
5453
|
+
var BUILD_DATE = "2026-02-07@15:36:01GMT";
|
|
5429
5454
|
var dedent = (s) => {
|
|
5430
5455
|
const m = s.match(/^[ \t]*(?=\S)/gm);
|
|
5431
5456
|
const i = Math.min(...(m || []).map((x) => x.length));
|