============================================
Boolean
============================================

true
false

---

(source_file
  (expression_statement (true))
  (expression_statement (false)))

============================================
Numbers
============================================

04000
400
100n
0xffffffffn
0b00111n
0o1234n
0xa_b_c
0o1_1
0b1_000_000
1_2_3
12_3.4_5e6_7
0b1_000_000n
01
00000123
-3
-3.0
+3
+3.0
1L
1_2_3L
-1L
-1_2_3L
0b1_000_000L
0xffffffffL
0o1234L

---

(source_file
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number))
  (expression_statement (number)))

==========================================
Strings containing comment-like content
==========================================

"//ok\n//what"
"/*ok\n/*what"

---

(source_file
  (expression_statement
    (string (string_fragment) (escape_sequence) (string_fragment)))
  (expression_statement
    (string (string_fragment) (escape_sequence) (string_fragment))))

==========================================
Quote escaping
==========================================

""
"\""
"a\"b"
"it's a tiny tiny world"

---

(source_file
  (expression_statement (string))
  (expression_statement (string (escape_sequence)))
  (expression_statement
    (string (string_fragment) (escape_sequence) (string_fragment)))
  (expression_statement (string (string_fragment))))

============================================
Template strings
============================================

`one line`
`multi
  line`

j`Hello`

`multi
  ${2 + 2}
  hello
  ${1 + 1}
  line`

`The command \`git ${format(" ")}\` exited with an unexpected code: ${exitCode}.
The caller should either handle this error, or expect that exit code.`

`//`

`\\`

----

(source_file
  (expression_statement (template_string))
  (expression_statement (template_string))
  (expression_statement (template_string))
  (expression_statement (template_string
    (template_substitution
      (binary_expression (number) (number)))
    (template_substitution
      (binary_expression (number) (number)))))
  (expression_statement (template_string
    (escape_sequence)
    (template_substitution (call_expression
      (value_identifier)
      (arguments (string (string_fragment)))))
    (escape_sequence)
    (template_substitution (value_identifier))))
  (expression_statement (template_string))
  (expression_statement (template_string (escape_sequence))))

============================================
Tricky template strings
============================================

`$`
`$$`
`$$$`
`$-notAsubstitution`
`$NotAsubstitution`

---

(source_file
  (expression_statement (template_string))
  (expression_statement (template_string))
  (expression_statement (template_string))
  (expression_statement (template_string))
  (expression_statement (template_string)))

============================================
Characters
============================================
'a'
'\''
'\\'
'Ж'
'😬'

---

(source_file
  (expression_statement (character))
  (expression_statement (character (escape_sequence)))
  (expression_statement (character (escape_sequence)))
  (expression_statement (character))
  (expression_statement (character)))

============================================
Polyvars
============================================

#foo
#Bar(7)
#"baz"
#\"qux"
#77

---

(source_file
  (expression_statement
    (polyvar (polyvar_identifier)))
  (expression_statement
    (polyvar (polyvar_identifier) (arguments (number))))
  (expression_statement
    (polyvar (polyvar_identifier (polyvar_string (string_fragment)))))
  (expression_statement
    (polyvar (polyvar_identifier (polyvar_string (string_fragment)))))
  (expression_statement
    (polyvar (polyvar_identifier))))
