@@ -37,7 +37,7 @@ class OperatorNode extends TempNode {
37
37
const bNode = this . bNode ;
38
38
39
39
const typeA = aNode . getNodeType ( builder ) ;
40
- const typeB = bNode . getNodeType ( builder ) ;
40
+ const typeB = typeof bNode !== 'undefined' ? bNode . getNodeType ( builder ) : null ;
41
41
42
42
if ( typeA === 'void' || typeB === 'void' ) {
43
43
@@ -47,11 +47,11 @@ class OperatorNode extends TempNode {
47
47
48
48
return typeA ;
49
49
50
- } else if ( op === '&' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {
50
+ } else if ( op === '~' || op === ' &' || op === '|' || op === '^' || op === '>>' || op === '<<' ) {
51
51
52
52
return builder . getIntegerType ( typeA ) ;
53
53
54
- } else if ( op === '==' || op === '&&' || op === '||' || op === '^^' ) {
54
+ } else if ( op === '!' || op === ' ==' || op === '&&' || op === '||' || op === '^^' ) {
55
55
56
56
return 'bool' ;
57
57
@@ -108,7 +108,7 @@ class OperatorNode extends TempNode {
108
108
if ( type !== 'void' ) {
109
109
110
110
typeA = aNode . getNodeType ( builder ) ;
111
- typeB = bNode . getNodeType ( builder ) ;
111
+ typeB = typeof bNode !== 'undefined' ? bNode . getNodeType ( builder ) : null ;
112
112
113
113
if ( op === '<' || op === '>' || op === '<=' || op === '>=' || op === '==' ) {
114
114
@@ -154,7 +154,7 @@ class OperatorNode extends TempNode {
154
154
}
155
155
156
156
const a = aNode . build ( builder , typeA ) ;
157
- const b = bNode . build ( builder , typeB ) ;
157
+ const b = typeof bNode !== 'undefined' ? bNode . build ( builder , typeB ) : null ;
158
158
159
159
const outputLength = builder . getTypeLength ( output ) ;
160
160
const fnOpSnippet = builder . getFunctionOperator ( op ) ;
@@ -177,6 +177,10 @@ class OperatorNode extends TempNode {
177
177
178
178
return builder . format ( `${ builder . getMethod ( 'greaterThanEqual' ) } ( ${ a } , ${ b } )` , type , output ) ;
179
179
180
+ } else if ( op === '!' || op === '~' ) {
181
+
182
+ return builder . format ( `(${ op } ${ a } )` , typeA , output ) ;
183
+
180
184
} else if ( fnOpSnippet ) {
181
185
182
186
return builder . format ( `${ fnOpSnippet } ( ${ a } , ${ b } )` , type , output ) ;
@@ -236,8 +240,10 @@ export const lessThanEqual = nodeProxy( OperatorNode, '<=' );
236
240
export const greaterThanEqual = nodeProxy ( OperatorNode , '>=' ) ;
237
241
export const and = nodeProxy ( OperatorNode , '&&' ) ;
238
242
export const or = nodeProxy ( OperatorNode , '||' ) ;
243
+ export const not = nodeProxy ( OperatorNode , '!' ) ;
239
244
export const xor = nodeProxy ( OperatorNode , '^^' ) ;
240
245
export const bitAnd = nodeProxy ( OperatorNode , '&' ) ;
246
+ export const bitNot = nodeProxy ( OperatorNode , '~' ) ;
241
247
export const bitOr = nodeProxy ( OperatorNode , '|' ) ;
242
248
export const bitXor = nodeProxy ( OperatorNode , '^' ) ;
243
249
export const shiftLeft = nodeProxy ( OperatorNode , '<<' ) ;
@@ -256,8 +262,10 @@ addNodeElement( 'lessThanEqual', lessThanEqual );
256
262
addNodeElement ( 'greaterThanEqual' , greaterThanEqual ) ;
257
263
addNodeElement ( 'and' , and ) ;
258
264
addNodeElement ( 'or' , or ) ;
265
+ addNodeElement ( 'not' , not ) ;
259
266
addNodeElement ( 'xor' , xor ) ;
260
267
addNodeElement ( 'bitAnd' , bitAnd ) ;
268
+ addNodeElement ( 'bitNot' , bitNot ) ;
261
269
addNodeElement ( 'bitOr' , bitOr ) ;
262
270
addNodeElement ( 'bitXor' , bitXor ) ;
263
271
addNodeElement ( 'shiftLeft' , shiftLeft ) ;
0 commit comments