summaryrefslogtreecommitdiffstats
path: root/web/server/h2o/libh2o/misc/oktavia/testdata/jsx_operator.txt
blob: 7b79f9324216dbc7848c6e3bd00881eebe3d0c7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Operators

The operators of JSX are the same to those in JavaScript (ECMA-262 3rd edition) except for the following changes.

types of the operands accepted by the operators are more restrictive
logical operators (&& ||) return boolean
binary ?: operator has been introduced (to cover the use of || in JavaScript to return non-boolean values)
introduction of the as operator
delete is a statement instead of an operator
The table below lists the operators supported by JSX.

Table 1. List of Operators by Precedence
Operator	Returned Type	Operand Type(s)
(x)[1]	typeof x	
func(...)	return type of the function	
obj.prop	typeof obj.prop	obj: any object type
array[index]	Nullable.<T>	array: Array.<T>
index: number
map[key]	Nullable.<T>	map: Map.<T>
key: string
x++
x--	typeof x	number or int
obj instanceof type	boolean	obj: any object type
type: a Class, Interface, or Mixin
x as type[2]
x as __noconvert__ type[3]	type	
++x
--x	typeof x	number or int
+x
-x	typeof x	number or int
~x	int	number or int
! x	boolean	any
typeof x	string	variant
x * y
x % y	number or int[4]	number or int
x / y	number	number or int
x + y
x - y	number or int[4]	number or int
x + y	string	string
x << y
x >> y
x >>> y	int	number or int
x < y
x<= y
x > y
x >= y	boolean	number, int, string[5]
x in y	boolean	x: string
y: Map.<T>
x == y
x != y	boolean	any except variant[5]
x & y	int	number or int
x ^ y	int	number or int
x | y	int	number or int
x && y	boolean	any
x || y	boolean	any
x ? y : z	typeof y	any[6]
x ?: y	typeof x	any[5]
x = y	typeof x	any[7]
x op[8]= y	typeof x	same as op
x, y	typeof y	any
grouping operator
cast operator
cast operator (without run-time type check)
int is returned if both operands are int
types of x and y should be equal, or either should be convertible to the other
types of y and z should be equal, or either should be convertible to the other
type of y should be convertible to type of x
any of: * / % + - << >> >>> & ^ |