From 7ccadf068749f7e8d660fa8796093dd70d94d48f Mon Sep 17 00:00:00 2001 From: dcode Date: Sun, 22 Jan 2023 16:27:07 +0100 Subject: [PATCH] fix: Diagnose not yet implemented 'in' operator (#2629) --- src/compiler.ts | 8 ++++++++ src/parser.ts | 3 ++- src/resolver.ts | 6 ++++++ tests/compiler/in.json | 6 ++++++ tests/compiler/in.ts | 3 +++ 5 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/compiler/in.json create mode 100644 tests/compiler/in.ts diff --git a/src/compiler.ts b/src/compiler.ts index 07e199b194..1723726773 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -4662,6 +4662,14 @@ export class Compiler extends DiagnosticEmitter { } break; } + case Token.In: { + this.error( + DiagnosticCode.Not_implemented_0, + expression.range, "'in' operator" + ); + this.currentType = Type.bool; + return module.unreachable(); + } default: { assert(false); expr = this.module.unreachable(); diff --git a/src/parser.ts b/src/parser.ts index f20d20f568..a50351448e 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -4311,7 +4311,8 @@ export class Parser extends DiagnosticEmitter { case Token.Bar: case Token.Caret: case Token.Ampersand_Ampersand: - case Token.Bar_Bar: { + case Token.Bar_Bar: + case Token.In: { let next = this.parseExpression(tn, nextPrecedence + 1); if (!next) return null; expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos)); diff --git a/src/resolver.ts b/src/resolver.ts index ba7b904bfc..243041c75f 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -2054,6 +2054,12 @@ export class Resolver extends DiagnosticEmitter { return Type.bool; } + // in operator + + case Token.In: { + return Type.bool; + } + // arithmetics: result is common type of LHS and RHS, preferring overloads case Token.Plus: diff --git a/tests/compiler/in.json b/tests/compiler/in.json new file mode 100644 index 0000000000..286e739637 --- /dev/null +++ b/tests/compiler/in.json @@ -0,0 +1,6 @@ +{ + "stderr": [ + "AS100: Not implemented: 'in' operator", "\"log\" in console", + "EOF" + ] +} \ No newline at end of file diff --git a/tests/compiler/in.ts b/tests/compiler/in.ts new file mode 100644 index 0000000000..797148ed28 --- /dev/null +++ b/tests/compiler/in.ts @@ -0,0 +1,3 @@ +"log" in console; + +ERROR("EOF");