add key: val syntax to tables, update tests to match replacement of -> with :

This commit is contained in:
prod2 2022-12-03 13:16:47 +01:00
parent c812d33a77
commit 3a73ed75ec
2 changed files with 8 additions and 6 deletions

View File

@ -151,7 +151,7 @@ proc parseTable(parser: Parser): Node =
result.keys.add(Node(kind: nkConst, constant: parser.previous.get().text.fromNimString(), line: parser.line))
else:
parser.errorAtCurrent("Key expected (have you forgotten to put the key in brackets?).")
discard parser.consume(tkEqual, "'=' expected after key.")
discard parser.consume({tkEqual, tkColon}, "'=' expected after key.")
result.values.add(parser.exprNonAssign())
if parser.peek().tokenType != tkRightBrace and not parser.consume(tkComma, "',' expected after table key value pair."):
@ -230,7 +230,8 @@ proc primary(parser: Parser): Node =
discard parser.consume(tkLeftParen, "'(' expected after 'proc'.")
return parser.parseProcDeclaration()
parser.errorAtCurrent("Primary expected, but something else found.")
parser.errorAtCurrent(&"Primary expected, but found: {parser.current.tokenType}.")
parser.advance() # to always go forward if a completely unknown symbol is found
proc parseArgList(parser: Parser): seq[Node] =
# once ( has been consumed, consume args and the ) or just a )

View File

@ -53,14 +53,15 @@ var mix = @{
print(mix.ident, mix["ident2"], mix[3], mix.ident4);
//expect:5.0 6.0 7.0 8.0
// -> method call syntax
// : method call syntax
// formerly ->
var class = @{
method = proc(self) print ("i was called")
};
// no args needed then no parentheses needed
class->method;
class:method;
//expect:i was called
var multiplier = @{
@ -68,7 +69,7 @@ var multiplier = @{
do = proc(self, arg) self.multiple * arg,
};
multiplier->do(7) :: print;
multiplier:do(7) :: print;
//expect:35.0
// -> method call syntax with :: - check for precedence
@ -77,7 +78,7 @@ var returner = @{
method = proc(self) proc(n) n * 2
};
1.7 :: returner->method :: print;
1.7 :: returner:method :: print;
//expect:3.4
print("finish");