inkle / inkle/ink

negating bool crashes parser

Open
#938 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C#
Stars
4.9k
Forks
540
PR merge metrics
No merged PRs in 30d

Description

I was writing some test cases for my Go Ink runtime engine, and testing some scenarios with numeric type coercions.

I noticed most unsupported operations produce an error like:
```
RUNTIME ERROR: (0.183): Cannot perform operation '-' on String
```

However, trying to negate a boolean literal results in a stack trace in the parser itself:
```
{-true}
```
```
Unhandled exception. System.Exception: Unexpected operation or number type
at Ink.Parsed.UnaryExpression.WithInner(Expression inner, String op)
at Ink.InkParser.ExpressionUnary()
at Ink.InkParser.Expression(Int32 minimumPrecedence)
at Ink.InkParser.Expression()
at Ink.StringParser.Parse[T](SpecificParseRule`1 rule)
at Ink.InkParser.ConditionExpression()
at Ink.InkParser.InnerLogic()
at Ink.StringParser.ParseObject(ParseRule rule)
at Ink.StringParser.Expect(ParseRule rule, String message, ParseRule recoveryRule)
at Ink.InkParser.InlineLogic()
at Ink.StringParser.ParseObject(ParseRule rule)
at Ink.StringParser.OneOf(ParseRule[] array)
at Ink.InkParser.InlineLogicOrGlueOrStartTag()
at Ink.StringParser.ParseObject(ParseRule rule)
at Ink.StringParser.<>c__DisplayClass58_0.b__0()
at Ink.StringParser.ParseObject(ParseRule rule)
at Ink.StringParser.Interleave[T](ParseRule ruleA, ParseRule ruleB, ParseRule untilTerminator, Boolean flatten)
at Ink.InkParser.MixedTextAndLogic()
at Ink.StringParser.Parse[T](SpecificParseRule`1 rule)
at Ink.InkParser.LineOfMixedTextAndLogic()
at Ink.StringParser.ParseObject(ParseRule rule)
at Ink.StringParser.OneOf(ParseRule[] array)
at Ink.InkParser.StatementAtLevel(StatementLevel level)
at Ink.InkParser.<>c__DisplayClass145_0.b__0()
at Ink.StringParser.ParseObject(ParseRule rule)
at Ink.StringParser.Interleave[T](ParseRule ruleA, ParseRule ruleB, ParseRule untilTerminator, Boolean flatten)
at Ink.InkParser.StatementsAtLevel(StatementLevel level)
at Ink.InkParser.Parse()
at Ink.Compiler.Parse()
at Ink.Compiler.Compile()
at Ink.CommandLineTool..ctor(String[] args)
at Ink.CommandLineTool.Main(String[] args)
Abort trap: 6
```

This seems unlikely to serve a practical purpose in a real story, but wanted to document it since this results in a big stack trace in the Inky UI if you write it there, and negating boolean values at runtime seems to be supported, e.g.:
```
{-(2 == 2)}
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.