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.
@@ -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 === "=>") && !(bodyStart != null && IMPLICIT_FUNC.has(this.tokens[bodyStart]?.[0]) && this.tokens[bodyStart]?.spaced && (IMPLICIT_CALL.has(this.tokens[bodyStart + 1]?.[0]) || this.tokens[bodyStart + 1]?.[0] === "..." && IMPLICIT_CALL.has(this.tokens[bodyStart + 2]?.[0]))) || CALL_CLOSERS.has(token[0]) && (this.tokens[i - 1]?.newLine || this.tokens[i - 1]?.[0] === "OUTDENT");
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.1";
5428
- var BUILD_DATE = "2026-02-07@15:19:02GMT";
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));