                 obj
 
         visitArrayExpression: (n) ->
-                obj = @createCall @ejs_runtime.array_new, [consts.int32 n.elements.length], "arrtmp"
+                array_new = @ejs_runtime.array_new
+                obj = @createCall array_new, [consts.int32 n.elements.length], "arrtmp", !array_new.doesNotThrow
                 i = 0;
                 for el in n.elements
                         val = @visit el

                                        return @loadBoolEjsValue left_visited.literal.value < right_visited.literal.value
                                        
                # call the actual runtime binaryop method
                call = @createCall callee, [(@createLoad left_alloca, "binop_left_load"), (@createLoad right_alloca, "binop_right_load")], "result_#{builtin}"
                call

        visitLogicalExpression: (n) ->
                debug.log -> "operator = '#{n.operator}'"

                                        @doInsideBlock @currentFunction.entry_bb, =>
                                                num_alloca = ir.createAlloca types.EjsValue, "num-alloca-#{n.value}"
                                                c = llvm.ConstantFP.getDouble n.value
                                                number_new = @ejs_runtime.number_new
                                                call = @createCall number_new, [c], "numconst-#{n.value}", !number_new.doesNotThrow
                                                ir.createStore call, num_alloca
                                                @currentFunction.literalAllocas[literal_key] = num_alloca
                                        
