summary refs log blame commit diff stats
path: root/tests/parser/tprecedence.nim
blob: 9be79543b7c1d9d45a5eac470b35ccbe5ca576c5 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
           
                  
    

        

   


                                          




                                           
                       
 




                                                        




                                  














                                                 








                                     




                   






                                           
discard """
  output: '''holla
true
defabc 4
0'''
"""

# Test top level semicolon works properly:
import os; echo "holla"

# Test the new predence rules

proc `\+` (x, y: int): int = result = x + y
proc `\*` (x, y: int): int = result = x * y

echo 5 \+ 1 \* 9 == 6*9

proc foo[S, T](x: S, y: T): T = x & y

proc bar[T](x: T): T = x

echo "def".foo[:string, string]("abc"), " ", 4.bar[:int]

# bug #9574
proc isFalse(a: int): bool = false

assert not isFalse(3)

# bug #9633

type
  MyField = object
    b: seq[string]

  MyObject = object
    f: MyField

proc getX(x: MyObject): lent MyField {.inline.} =
  x.f

let a = MyObject()
echo a.getX.b.len


# bug  #10458
template t(x: untyped): untyped = "x"

let
  aaa = t 2 + 4
  ccc = t (1, 1) + 6
  ddd = t [0, 1, 2] + 5

# bug #10896
const
  test =
    proc(): int = 1

# bug #8759
block:
  template `=>`(a, b): untyped = (a, b)
  template `+=`(a, b): untyped = a * b

  doAssert ("abc" => 3 += 5) == ("abc", 15)